$ od -c -N 50000 [_CD6_]<sil>ANALYZESOURCES.DM!1 0000000 377 \0 \0 a n a . d e f s \0 376 001 \0 351 0000020 026 / / a n a . d e f s d e 0000040 f i n i t i o n s f o r a n 0000060 a l y z e \r \r / / l a s t m 0000100 o d i f i e d b y E . M c 0000120 C r e i g h t , N o v e m b e 0000140 r 1 5 , 1 9 7 7 4 : 0 1 0000160 P M \r \r m a n i f e s t \r [ \r 0000200 B l a c k = 0 ; R e d = 1 ; 0000220 Y e l l o w = 2 ; G r e e n = 0000240 3 ; C y a n = 4 ; V i o l e 0000260 t = 5 ; M a g e n t a = 6 ; 0000300 W h i t e = 7 \r B r o w n = # 1 0000320 0 ; O r a n g e = # 1 1 ; L 0000340 i m e = # 1 2 ; T u r q u o i 0000360 s e = # 1 3 ; A q u a = # 1 4 0000400 ; U l t r a V i o l e t = # 1 0000420 5 376 001 \0 2 5 ; P i n k = # 1 6 0000440 ; S m o k e = # 1 7 \r h t s i 0000460 z e = 6 4 \r N M f o n t s 0000500 = 6 / / n u m b e r o f 0000520 m a c r o f o n t s ( 4 - 9 0000540 ) \r M t s i z e = N M f o n 0000560 t s * 1 2 8 / / m a c r o t 0000600 a b l e s i z e \r D i r P r e 0000620 a m b l e S i z e = 6 \r k s T y 0000640 p e R e a d O n l y = 1 \r k s T 0000660 y p e W r i t e O n l y = 2 \r k 0000700 s T y p e R e a d W r i t e = 3 0000720 \r v e r L a t e s t C r e a t e 0000740 = # 4 0 0 0 0 + 2 \r \r / / c o n 0000760 n e c t i o n p o i n t c h 0001000 a r a c t e r s ( f o n t 3 0001020 ) \r c h T c 376 001 \0 017 205 o n = 0001040 $ Q \r c h B c o n = $ S \r c 0001060 h L c o n = $ R \r c h R c o 0001100 n = $ T \r \r / / s p e c i a 0001120 l c h a r a c t e r s f o r 0001140 s i n g l e - c h a r a c t e 0001160 r s y m b o l s ( f o n t 0001200 3 ) \r c h E p i n = $ P \r c 0001220 h C p i n = $ p \r c h G n d 0001240 = $ n \r c h P s e u d = 0001260 $ x \r c h B l o b = $ . \r \r 0001300 / / s y m b o l t y p e s \r s 0001320 t C o m p = 1 / / u s e 0001340 d f o r c o m p o n e n t 0001360 n a m e i n p i c t u r e \r 0001400 s t P i n = 2 \r s t S i g 0001420 = 3 \r s t R c o m p 376 001 \0 274 K 0001440 = 4 / / u s e d f o r r 0001460 e a l c o m p o n e n t n a 0001500 m e \r s t B r d l o c = 5 \r 0001520 \r ] \r \r e x t e r n a l / / s 0001540 t a t i c s \r [ \r \r / / l i s t 0001560 h e a d e r s \r @ C o m p s \r 0001600 @ V l i n e s \r @ H l i n e s \r 0001620 @ S t r i n g s \r @ N u m b e r 0001640 s \r @ L o c g r o u p s \r @ S c 0001660 h a r s \r @ B a d I t e m s \r \r 0001700 / / S p e c i a l s y m b o l 0001720 t a b l e p o i n t e r s \r 0001740 @ I n s t p \r @ O u t s t p \r @ 0001760 G n d s t p \r @ P s e u d s t p 0002000 \r \r @ p s f i l e \r @ p a g e \r 0002020 @ p r e s c a n \r @ d e b u g s 0002040 376 001 \0 317 * w i t c h \r @ h a s h 0002060 t a b \r @ E r F i l e \r @ O u t 0002100 F i l e \r @ F i l e N a m e \r \r 0002120 @ G e n N a m e S t r i n g \r @ 0002140 G e n N a m e C o u n t \r \r @ L 0002160 p r v e c / / v e c t o r 0002200 o f l i b r a r y f i l e 0002220 p o i n t e r s \r @ D p r v e c 0002240 / / v e c t o r o f d i 0002260 c t i o n a r y f i l e p o 0002300 i n t e r s \r @ f p D i c t 0002320 / / f i l e p o i n t e r 0002340 o f c u r r e n t ( s u p p 0002360 o s e d l y o p e n ) d i c 0002400 t i o n a r y f i l e \r @ d i 0002420 c t \t / / d i c t i o n a r y 0002440 s t r e 376 001 \0 * i a m \r @ S i 0002460 l Z o n e \r @ M a c t \r @ N e w 0002500 I t e m \r @ S p a c e \t / / s i 0002520 z e o f o b j e c t s p a 0002540 c e \r @ S p a c e B a s e / / 0002560 b a s e o f s p a c e \r @ S 0002600 p a c e T o p \r @ M e s s a g e 0002620 \r \r @ w o r s t E r r o r L e v 0002640 e l \r ] \r \r m a n i f e s t / 0002660 / e r r o r l e v e l s \r [ 0002700 \r n o E r r o r = 0 \r w a r 0002720 n i n g = 1 \r s e r i o u s 0002740 = 2 \r d i s a s t e r = 0002760 3 \r ] \r \r e x t e r n a l / / 0003000 a n a p r o c e d u r e s \r [ 0003020 \r O u t S y m b o l s \r P r e S 0003040 c a n O u t \r P i n 376 001 \0 320 P C 0003060 h e c k \r F l u s h L i n e \r D 0003100 e f a u l t T y p e N a m e s \r 0003120 D o O u t p u t \r C o n n e c t 0003140 V l i n e s \r C o n n e c t H l 0003160 i n e s \r F i x O v e r l a p \r 0003200 D o S c h a r s \r D o C o m p o 0003220 n e n t s \r D o S i g n a m e s 0003240 \r A d d C o m p s \r G e t C o m 0003260 p N a m e s \r P r i n t S t r u 0003300 c t s \r C h e c k F i t \r E r r 0003320 2 \r E r r x y \r E r r \r G e t F 0003340 i l e \r M a k e F i l e N a m e 0003360 \r D e f i n e S y m b o l \r L o 0003400 o k u p \r A p p e n d B \r S t E 0003420 q \r \r D o c o m p o n e n t \r D 0003440 o u s e r m a c r o \r D o r e 376 0003460 001 \0 265 312 c t a n g l e \r D o f o 0003500 n t 3 s t r i n g \r D o f o n t 0003520 1 s t r i n g \r A d d B a d I t 0003540 e m \r F i n d D i c t L i b r a 0003560 r i e s \r L i b U p d a t e \r P 0003600 a r s e T i t l e \r \r / / N S i 0003620 l U t i l \r A d d T o L i s t 0003640 \r L e n g t h \r A p p e n d S \r 0003660 A p p e n d N \r A p p e n d C \r 0003700 ] \r \r \r \r e x t e r n a l \t \t / 0003720 / O . S . p r o c e d u r e s 0003740 a n d s t a t i c s \r [ \r R 0003760 e s e t s \r O p e n F i l e F r 0004000 o m F p \r G e t C o m p l e t e 0004020 F a \r J u m p T o F a \r f p U s 0004040 e r C m \r f p S y s D i r \r f p 0004060 C o m C 376 001 \0 337 + m \r f p R e m 0004100 C m \r U s c \r I n i t i a l i z 0004120 e Z o n e \r O p e n F i l e \r D 0004140 e l e t e F i l e \r F i l e P o 0004160 s \r P u t s \r W s s \r C l o s e 0004200 s \r M o v e B l o c k \r G e t s 0004220 \r Z e r o \r S e t B l o c k \r C 0004240 a l l S w a t \r E n d o f s \r k 0004260 e y s \r A l l o c a t e \r F r e 0004300 e \r J u n t a \r C o u n t e r J 0004320 u n t a \r R e a d U s e r C m I 0004340 t e m / / P . D e u t s c h 0004360 p a c k a g e f r o m < a 0004400 l t o > \r L o o k U p E n t r i 0004420 e s / / f r o m M D I \r T r 0004440 u n c a t e D i s k S t r e a m 0004460 \r ] \r \r \r s t r u 376 001 \0 265 223 c t 0004500 u r e s t r : \r [ 032 ( 6 3 5 ) 0004520 \r l e n g t h b y t e \r c h a 0004540 r ^ 1 , 2 5 5 b y t e 032 l 4 2 0004560 6 8 \r ] \r \r s t r u c t u r e 0004600 b y t e s : \r [ 032 \r b i t e ^ 0 0004620 , 2 5 6 \t b y t e 032 l 4 2 6 8 \r 0004640 ] \r \r s t r u c t u r e s t r 0004660 e c : \r [ 032 \r l i n k w o r d 0004700 \r t y p e b y t e ; p i n s 0004720 d n b i t ; u c n t b i t 0004740 7 \r r n a m e w o r d / / 0004760 r e a l n a m e f o r c o 0005000 m p o n e n t \r s t @ s t r 032 0005020 l 4 2 6 8 \r ] \r \r s t r u c t u 0005040 r e i t e m : \r [ 032 \r l i n k 0005060 w o r d \r s t a t e b i 376 001 0005100 \0 345 207 t 3 ; x m i n b i t 0005120 1 3 \r y m i n w o r d \r c o 0005140 l o r b i t 4 ; x m a x 0005160 b i t 1 2 \r [ f o n t b 0005200 i t 4 ; b l a n k b i t 0005220 1 ; y m a x b i t 1 1 ] 0005240 \r \t = [ \r \t f u l l f o n t b 0005260 i t 5 \r \t = [ t x t f o n t 0005300 b i t 3 ; b o l d b i t 0005320 ; i t a l i c b i t ] \r \t 0005340 b l a n k b i t 1 1 \r \t ] \r 0005360 s t r i n g : @ s t r 032 l 4 2 0005400 6 8 \r ] \r \r \r s t r u c t u r e 0005420 c o m p : / / c o m p o n e 0005440 n t s \r [ 032 \r l i n k w o r d 0005460 \r t y p e b i t 3 ; x m i 0005500 n b 376 001 \0 275 315 i t 1 3 \r y m 0005520 i n w o r d \r c o l o r b i 0005540 t 4 ; x m a x b i t 1 0005560 2 \r y m a x w o r d \r p i n s 0005600 d o n e b i t 4 ; b l o 0005620 u t b i t ; m i n d e x b 0005640 i t 1 1 / / = ( f o n t - 0005660 8 ) * 1 2 8 + c h a r \r \r c 0005700 o n p o i n t s w o r d / / 0005720 p o i n t e r t o c o n n e 0005740 c t i o n p o i n t b l o c 0005760 k 032 l 4 2 6 8 \r ] \r \r s t r u c 0006000 t u r e c o n p o i n t : \r [ 0006020 032 \r p i n b i t 6 / / p i 0006040 n n u m b e r f o r t h i 0006060 s p i n \r x b i t 1 0 \r \r 0006100 m a r k e d b 376 001 \0 K [ i t 0006120 1 / / e n c o u n t e r e d 0006140 i n t r a c e \r d e f d b i 0006160 t 1 / / p i n n u m b e r 0006200 i s d e f i n e d i n d 0006220 r a w i n g \r c p t b i t 3 0006240 \r b l o b b i t 1 / / i n 0006260 d i c a t e s t h i s c o n 0006300 p o i n t h a s a b l o b 0006320 \r / / ( d o n ' t w o r r y 0006340 t h a t i t ' s n o t c o 0006360 n n e c t e d t o a n y t h 0006400 i n g \r \r y b i t 1 0 \r \r p 0006420 i n n a m e w o r d / / s t 0006440 p f o r n a m e \r c o n n 0006460 w o r d / / p o i n t e r t 0006500 o c o n n e c t e d o 376 001 \0 0006520 226 320 b j e c t 032 l 4 2 6 8 \r ] \r 0006540 m a n i f e s t / / c o n n e 0006560 c t i o n p o i n t t y p e 0006600 s \r [ \r c p t T o p = 1 \r c 0006620 p t B o t = 2 \r c p t L e f 0006640 t = 3 \r c p t R i g h t = 0006660 4 \r ] \r \r s t r u c t u r e 0006700 c o m p b l o c k : \r [ 032 \r c o 0006720 m p t y p e w o r d / / s y 0006740 m b o l t a b l e p o i n t 0006760 e r , N O T p o i n t e r 0007000 t o n o d e \r \r b o a r d l o 0007020 c w o r d / / s y m b o l 0007040 t a b l e p o i n t e r \r n 0007060 u m c p o i n t s b i t 6 \r 0007100 g r o u p b i t 1 0 \r \r @ c 0007120 o n 376 001 \0 344 6 p o i n t ^ 1 , 6 0007140 4 032 l 4 2 6 8 \r ] \r \r \r s t r u 0007160 c t u r e l e n d : / / l i 0007200 n e e n d p o i n t s \r [ 032 \r 0007220 l i n k w o r d \r \r t y p e 0007240 b i t 3 \r h a s s i g b i t 0007260 1 / / t h i s l i n e h 0007300 a s a s i g n a l n a m e 0007320 a s s o c i a t e d \r x b i 0007340 t 1 2 \r \r m a r k e d b i t 0007360 \r y b i t 1 5 \r \r c p ^ 0 , 0007400 2 w o r d / / p o i n t e r 0007420 s t o t h i n g s c o n n 0007440 e c t e d t o t h i s e n 0007460 d p o i n t \r 032 l 4 2 6 8 \r ] \r 0007500 \r s t r u c t u r e n o d e : 0007520 / / u s e d 376 001 \0 347 227 f o r 0007540 s t r i n g s , n u m b e r 0007560 s , l o c g r o u p s , a n d 0007600 s c h a r s \r [ 032 \r l i n k 0007620 w o r d \r t y p e b i t 3 0007640 \r x b i t 1 3 / / c o o r 0007660 d i n a t e s o f t h e c 0007700 e n t e r o f t h e o b j 0007720 e c t \r a s s o c w o r d / 0007740 / p o i n t e r t o a s s o 0007760 c i a t e d o b j e c t \r u s 0010000 e d b i t \r y b i t 1 5 \r 0010020 v a l w o r d / / w h e n 0010040 u s e d f o r s t r i n g 0010060 s ( v a l i s a n s t p ) 0010100 , n u m b e r s , a n d s c 0010120 h a r s \r = b l o c 376 001 \0 264 0010140 266 w o r d / / p o i n t s 0010160 t o s y m b o l t a b l e 032 0010200 l 4 2 6 8 \r v a l 2 w o r d 0010220 = g r o u p w o r d 032 l 4 2 0010240 6 8 \r ] \r \r \r m a n i f e s t \r 0010260 [ 032 \r / / b l o c k t y p e s 0010300 \r b t C o m p = 1 \r b t L e 0010320 n d = 2 \r b t S t r i n g 0010340 = 3 \r b t N u m = 4 \r b t 0010360 L o c g r o u p s = 5 \r b t 0010400 S c h a r = 6 \r \r / / b l 0010420 o c k l e n g t h s \r b l C o m 0010440 p = ( s i z e c o m p ) / 0010460 1 6 \r b l L e n d = ( s i z 0010500 e l e n d ) / 1 6 \r b l B a s 0010520 i c N o d e = ( o f f s e t 0010540 376 \0 213 254 356 n o d e . v a l 2 ) 0010560 / 1 6 \r b l F u l l N o d e = 0010600 ( s i z e n o d e ) / 1 6 \r 0010620 b l S t r i n g = b l B a s 0010640 i c N o d e \r b l N u m = b 0010660 l B a s i c N o d e \r b l S c h 0010700 a r = b l B a s i c N o d e 0010720 \r b l L o c g r o u p s = b 0010740 l F u l l N o d e \r ] \r 032 \r 032 0010760 \r 377 \0 \0 a n a . b c p l \0 376 001 \0 0011000 024 E / / a n a . b c p l \r / / n 0011020 e w a n a l y z e r f o r 0011040 s i l f i l e s \r \r / / l a 0011060 s t m o d i f i e d b y E 0011100 . M c C r e i g h t , N o v 0011120 e m b e r 2 3 , 1 9 7 7 0011140 9 : 3 6 A M \r \r g e t " s y 0011160 s d e f s . d " \r g e t " a n 0011200 a . d e f s " \r \r s t a t i c \r 0011220 [ \r \r C o l o r C o u n t \r / / 0011240 l i s t h e a d e r s \r C o m 0011260 p s = 0 ; V l i n e s = 0011300 0 ; H l i n e s = 0 ; 0011320 S t r i n g s = 0 ; N u m 0011340 b e r s = 0 ; L o c g r o 0011360 u p s = 0 ; S c h a r s 0011400 = 376 001 \0 350 251 0 \r B a d I t e m 0011420 s = 0 \r \r / / S p e c i a l 0011440 s y m b o l t a b l e p o 0011460 i n t e r s \r I n s t p ; O u 0011500 t s t p ; G n d s t p ; P s 0011520 e u d s t p \r \r p a g e = 0 0011540 ; l a s t T i t l e P a g e = 0011560 - 1 \r O u t F i l e = 0 ; E r 0011600 F i l e = 0 ; F i l e N a 0011620 m e ; w o r s t E r r o r L e 0011640 v e l = n o E r r o r ; p 0011660 r e s c a n = f a l s e ; 0011700 p s f i l e \r \r G e n N a m e S 0011720 t r i n g ; G e n N a m e C o 0011740 u n t \r \r L p r v e c ; D p r 0011760 v e c ; f p D i c t = 0 ; d 0012000 i c t = 0 376 001 \0 327 374 \r S i l 0012020 Z o n e ; M a c t ; h a s h 0012040 t a b ; N e w I t e m \r S p a 0012060 c e \t / / s i z e o f o b j 0012100 e c t s p a c e \r S p a c e B 0012120 a s e / / b a s e o f s p 0012140 a c e \r S p a c e T o p ; M e 0012160 s s a g e = 0 \r d e b u g s 0012200 w i t c h = f a l s e \r ] \r 0012220 \r e x t e r n a l \r [ \r L o a d 0012240 R a m ; I n i t B c p l R u n 0012260 t i m e ; R a m I m a g e \r W 0012300 s ; W n s ; d s p \r I n i t 0012320 C u r s o r ; W r i t e C u r 0012340 s o r 032 ( 6 3 5 ) \r ] \r \r l e t 0012360 M a i n ( ) b e \r [ 032 \r @ # 0012400 4 2 0 = 0 / / t u 376 001 \0 } 0012420 253 r n o f f d i s p l a y 0012440 f o r s p e e d \r i f L o a 0012460 d R a m ( R a m I m a g e ) e 0012500 q 0 t h e n I n i t B c p 0012520 l R u n t i m e ( ) \r I n i t A 0012540 n a ( ) / / J u n t a ( l e 0012560 v K e y b o a r d , I n i t A n 0012600 a ) 032 l 4 2 6 8 \r ] \r \r \r a n d 0012620 I n i t A n a ( a r g ) b e 0012640 \r [ \r \r 032 \r l e t v = v e 0012660 c 5 0 \r I n i t C u r s o r ( 0012700 v , 5 0 , 0 , 0 ) \r W r i t e C 0012720 u r s o r ( W s s , " p g " ) \r 0012740 \r / / i n i t i a l i z e a 0012760 z o n e f o r t h e f i l 0013000 e s y s t e m \r l e t v = 0013020 376 001 \0 275 310 v e c 2 5 0 0 \r S 0013040 i l Z o n e = I n i t i a l 0013060 i z e Z o n e ( v , 2 5 0 0 ) \r 0013100 \r / / i n i t i a l i z e t h 0013120 e M a c r o D e f i n i t i 0013140 o n T a b l e \r l e t v = 0013160 v e c M t s i z e \r M a c t 0013200 = v \r \r / / s y m b o l t 0013220 a b l e \r l e t v = v e c 0013240 h t s i z e \r h a s h t a b 0013260 = v \r \r l e t v = v e c 2 0013300 0 \r G e n N a m e S t r i n g = 0013320 v \r \r / / u s e r e m a i n i 0013340 n g s p a c e f o r t h e 0013360 o b j e c t s \r @ # 3 3 5 = 0013400 L o a d R a m / / r e c l 0013420 a i m o n 376 001 \0 x 232 c e - o n 0013440 l y c o d e \r S p a c e = 0013460 ( ( l v a r g ) - @ # 3 3 0013500 5 ) - 2 0 0 0 / / l e a v e 0013520 1 0 0 0 w o r d s f o r 0013540 t h e s t a c k \r i f U s c 0013560 ( S p a c e , 2 0 0 0 ) l s 0013600 0 t h e n C a l l S w a t 0013620 ( " I n s u f f i c i e n t O 0013640 b j e c t S t o r a g e " ) \r 0013660 S p a c e B a s e = @ # 3 3 0013700 5 / / E n d C o d e \r @ # 3 3 0013720 5 = ( @ # 3 3 5 ) + S p a c 0013740 e / / s e t E n d C o d e \r 0013760 S p a c e T o p = ( @ # 3 3 0014000 5 ) - 1 2 8 / / l e a v e m 0014020 a r g i n f o r e 376 001 \0 8 272 0014040 r r o r \r A n a M a i n ( ) \t / 0014060 / n e v e r r e t u r n s 032 l 0014100 4 2 6 8 \r ] \r \r \f \r \r a n d A 0014120 n a M a i n ( ) b e \r [ 032 \r l 0014140 e t D i c t N a m e = v e c 0014160 2 0 \r F i n d D i c t L i b r a 0014200 r i e s ( D i c t N a m e ) \r \r 0014220 l e t c o m c m = O p e n 0014240 F i l e ( " C O M . C M " , k s 0014260 T y p e R e a d O n l y , 1 , 0 0014300 , f p C o m C m , 0 , S i l Z o 0014320 n e ) / / b y t e s \r i f c 0014340 o m c m e q 0 t h e n C 0014360 a l l S w a t ( " C a n ' t o 0014400 p e n C O M . C M " ) \r l e t 0014420 f n = v e c 1 2 8 \r F i 0014440 376 001 \0 347 Q l e N a m e = f n 0014460 \r R e a d N e x t ( c o m c m , 0014500 f n ) / / t h r o w a w a y 0014520 n a m e " A N A L Y Z E . R 0014540 U N " \r l e t N e w O n l y 0014560 = f a l s e \r \r l e t f n l 0014600 = f n > > s t r . l e n g t 0014620 h / / b u t l o o k f o r 0014640 s w i t c h / d \r l e t l 0014660 c = f n > > s t r . c h a r 0014700 ^ f n l \r i f ( ( l c e q 0014720 $ d ) % ( l c e q $ D ) ) & 0014740 ( f n > > s t r . c h a r ^ ( f 0014760 n l - 1 ) e q $ / ) t h e 0015000 n d e b u g s w i t c h = 0015020 t r u e \r i f ( ( l c e q 0015040 $ n ) % ( 376 001 \0 367 337 l c e q 0015060 $ N ) ) & ( f n > > s t r . c h 0015100 a r ^ ( f n l - 1 ) e q $ / 0015120 ) t h e n N e w O n l y = 0015140 t r u e \r i f ( ( l c e q 0015160 $ p ) % ( l c e q $ P ) ) 0015200 & ( f n > > s t r . c h a r ^ ( 0015220 f n l - 1 ) e q $ / ) t h 0015240 e n \r [ 032 l 4 2 6 8 \r p r e s 0015260 c a n = t r u e \r p s f i l 0015300 e = O p e n F i l e ( " S w 0015320 a t e e " , k s T y p e R e a d 0015340 W r i t e , 0 , v e r L a t e s 0015360 t C r e a t e , 0 , 0 , S i l Z 0015400 o n e ) \r P u t s ( p s f i l e 0015420 , - 1 ) 032 l 5 5 3 8 \r ] \r \r / / 0015440 f p D i c t = D 376 001 \0 M a p 0015460 r v e c + 1 \r / / d i c t = 0015500 O p e n F i l e ( 0 , k s T y p 0015520 e R e a d O n l y , 1 , 0 , f p 0015540 D i c t , 0 , S i l Z o n e ) \r 0015560 / / i f d i c t e q 0 t 0015600 h e n C a l l S w a t ( " C a 0015620 n ' t o p e n f i r s t D 0015640 i c t i o n a r y f i l e " ) 0015660 \r l e t e f n = v e c 1 0015700 2 8 ; e f n ! 0 = 0 \r \r \r 0015720 [ 032 l 4 2 6 8 \r i f n o t R 0015740 e a d N e x t ( c o m c m , f n 0015760 ) t h e n b r e a k / / n 0016000 o m o r e f i l e s \r W r i 0016020 t e C u r s o r ( W s s , " p g 0016040 " ) \r W r i t e C u r s o r ( 376 0016060 001 \0 246 037 $ i ) \r I n i t S t o r 0016100 a g e ( ) \r f n l = f n > > 0016120 s t r . l e n g t h \r l c = 0016140 f n > > s t r . c h a r ^ f n l 0016160 \r i f ( f n l g r 2 ) & ( 0016200 ( l c e q $ e ) % ( l c e 0016220 q $ E ) ) & ( f n > > s t r . 0016240 c h a r ^ ( f n l - 1 ) e q 0016260 $ / ) t h e n \r [ / / e r 0016300 r o r f i l e s p e c i f i 0016320 e d 032 l 5 5 3 8 \r f n > > s t r 0016340 . l e n g t h = f n l - 2 \r 0016360 O p e n E r F i l e ( f n ) \r M 0016400 o v e B l o c k ( e f n , f n 0016420 , 1 2 8 ) \r l o o p 032 l 6 8 0 0016440 8 \r ] \r i f E r F i l e e q 0016460 0 t 376 001 \0 x 035 h e n \r [ 032 l 0016500 5 5 3 8 \r M a k e F i l e N a m 0016520 e ( e f n , f n , p r e s c 0016540 a n ? " . p e " , " . e r " ) 0016560 \r O p e n E r F i l e ( e f n ) 0016600 032 l 6 8 0 8 \r ] \r t e s t p r 0016620 e s c a n \r i f s o 032 l 5 5 3 8 0016640 \r [ 032 l 5 5 3 8 \r l e t R e f 0016660 F i l e = F i l e I n ( f n 0016700 ) \r i f R e f F i l e t h e 0016720 n l o o p / / m a r k e d 0016740 a s f i l e f o r r e f 0016760 e r e n c e o n l y \r W r i 0017000 t e C u r s o r ( W n s , p a g 0017020 e ) \r G e t C o m p N a m e s ( 0017040 0 , D i c t N a m e ) \r O u t S 0017060 y m b o l s ( ) 032 376 001 \0 m f l 6 0017100 8 0 8 \r ] \r i f n o t \r [ 032 l 5 0017120 5 3 8 \r \r / / O u t F i l e = 0017140 G e t F i l e ( f n , " . n l 0017160 " , 1 ) / / / n o d e l i s 0017200 t \r l e t S k i p F i l e = 0017220 F i l e I n ( f n , N e w O n 0017240 l y ) / / r e a d t h e i 0017260 n p u t f i l e \r W r i t e C 0017300 u r s o r ( W n s , p a g e ) \r 0017320 i f S k i p F i l e t h e n 0017340 l o o p / / B U I L T & " 0017360 / N " o r m a r k e d a s 0017400 f i l e a s " R e f e r e 0017420 n c e " \r l e t n u m D i c t 0017440 s = G e t C o m p N a m e s 0017460 ( 0 , D i c t N a m e ) / 376 001 0017500 \0 ) m / r e a d d i c t i o n 0017520 a r y h e a d e r s \r A d d C 0017540 o m p s ( ) / / b u i l d c 0017560 o m p o n e n t t e m p l a t 0017600 e s a n d a d d t o c o 0017620 m p s \r F i x O v e r l a p ( ) 0017640 / / c o a l e s c e o v e r 0017660 l a p p i n g l i n e s \r D o 0017700 S c h a r s ( ) \r D o S i g n a 0017720 m e s ( ) \r D o C o m p o n e n 0017740 t s ( ) \r C o n n e c t V l i n 0017760 e s ( ) \r C o n n e c t H l i n 0020000 e s ( ) \r D e f a u l t T y p e 0020020 N a m e s ( ) / / d e f a u l t 0020040 m i s s i n g c o m p o n e 0020060 n t n a m e s w h e r e p 0020100 o s s 376 001 \0 356 354 i b l e \r f o r 0020120 i = 0 t o n u m D i c 0020140 t s d o \r [ \r \t i f P i n C 0020160 h e c k ( i ) t h e n b r e 0020200 a k / / a l l c o m p o n 0020220 e n t s h a v e b e e n f 0020240 o u n d \r \t i f i e q n u 0020260 m D i c t s & w o r s t E r 0020300 r o r L e v e l g e s e r i 0020320 o u s t h e n \r \t \t E r r 2 ( 0020340 " * n N o t a l l c o m p o 0020360 n e n t s w e r e f o u n d 0020400 i n y o u r D i c t i o n 0020420 a r y ( s ) " ) \r ] \r W r i t 0020440 e C u r s o r ( $ o ) \r D o O u 0020460 t p u t ( ) \r i f d e b u g s 0020500 w i t c h t h 376 001 \0 221 = e n 0020520 P r i n t S t r u c t s ( ) \r i 0020540 f w o r s t E r r o r L e v e 0020560 l g e 2 t h e n i f C 0020600 o l o r C o u n t g r 0 d 0020620 o \r [ \r \t l e t m s g = v 0020640 e c 4 0 ; m s g ! 0 = 0 0020660 \r \t A p p e n d S ( " * n R e m 0020700 i n d r : " , m s g ) ; A p 0020720 p e n d N ( C o l o r C o u n t 0020740 , m s g ) \r \t E r r 2 ( m s g , 0020760 " i t e m s w i t h M a 0021000 g e n t a c o l o r w e r e 0021020 s k i p p e d " ) \r ] \r C l o 0021040 s e s ( O u t F i l e ) \r i f 0021060 d e b u g s w i t c h t h e n 0021100 C a l l S w a t ( " d o 376 001 \0 0021120 \f F n e w i t h " , f n ) 032 0021140 l 6 8 0 8 \r ] \r \r 032 l 5 5 3 8 \r 0021160 ] r e p e a t \r i f p r e s 0021200 c a n t h e n \r [ 032 l 4 2 6 8 0021220 \r W r i t e C u r s o r ( $ o ) 0021240 \r N e w I t e m = S p a c e 0021260 B a s e \r Z e r o ( h a s h t a 0021300 b , h t s i z e ) \r P u t s ( p 0021320 s f i l e , - 1 ) / / f l a 0021340 g s s t r e a m a s d o n 0021360 e \r R e s e t s ( p s f i l e ) 0021400 \r M a k e F i l e N a m e ( e f 0021420 n , e f n , " . p s " ) \r P 0021440 r e S c a n O u t ( e f n ) 032 l 0021460 5 5 3 8 \r ] \r W r i t e C u r s 0021500 o r ( W s s , " d n " ) \r \r W s 0021520 ( " 376 001 \0 e > * n * n * n * n * 0021540 n A N A L Y Z E o f J u l y 0021560 1 0 , 1 9 7 9 - - [ 0021600 " ) \r W n s ( d s p , w o r s t 0021620 E r r o r L e v e l ) \r W s ( " 0021640 ] = w o r s t e r r o r 0021660 s e v e r i t y " ) \r C l o s e 0021700 E r F i l e ( ) \r f i n i s h 0021720 032 l 4 2 6 9 \r / / S p e a k V e 0021740 r s i o n ( ) / / C o u n t 0021760 e r J u n t a ( S p e a k V e r 0022000 s i o n ) 032 l 4 2 6 8 \r \r ] 032 0022020 \r \r / / a n d S p e a k V e r 0022040 s i o n ( ) b e \r / / [ 032 \r / 0022060 / W s ( " * n * n * n * n * n A 0022100 N A L Y Z E J u n e 2 1 , 0022120 1 9 7 9 " ) \r 376 001 \0 # ) / / f i 0022140 n i s h 032 l 4 2 6 9 \r / / ] \r \r 0022160 a n d I n i t S t o r a g e ( 0022200 ) b e \r [ 032 \r C o m p s = 0022220 0 \r V l i n e s = 0 \r H l i 0022240 n e s = 0 \r S t r i n g s 0022260 = 0 \r N u m b e r s = 0 \r 0022300 L o c g r o u p s = 0 \r S c 0022320 h a r s = 0 \r B a d I t e m 0022340 s = 0 \r C o l o r C o u n t 0022360 = 0 \r N e w I t e m = S p 0022400 a c e B a s e \r Z e r o ( M a c 0022420 t , M t s i z e ) \r Z e r o ( h 0022440 a s h t a b , h t s i z e ) \r I 0022460 n s t p = D e f i n e S y m 0022500 b o l ( " I N " , s t P i n ) \r 0022520 O u t s t p = D e f 376 001 \0 O 0022540 357 i n e S y m b o l ( " O U T " 0022560 , s t P i n ) \r G n d s t p = 0022600 D e f i n e S y m b o l ( " G 0022620 n d " , s t S i g ) \r P s e u d 0022640 s t p = D e f i n e S y m b 0022660 o l ( " + " , s t S i g ) \r \r 032 0022700 l 4 2 6 8 \r ] \r \r a n d R e a 0022720 d N e x t ( s t r e a m , s t r 0022740 i n g ) = v a l o f \r [ 032 \r 0022760 l e t c h = $ * s \r i f 0023000 E n d o f s ( s t r e a m ) t 0023020 h e n r e s u l t i s f a l 0023040 s e \r u n t i l ( E n d o f s 0023060 ( s t r e a m ) % ( c h g r 0023100 $ * s ) ) d o c h = G e t 0023120 s ( s t r e a m ) \r i f c h 0023140 l 376 001 \0 \t 315 e $ * s t h e n 0023160 r e s u l t i s f a l s e \r 0023200 \r s t r i n g > > s t r . l e n 0023220 g t h = 1 \r s t r i n g > > 0023240 s t r . c h a r ^ 1 = c h \r 0023260 \r [ 032 l 4 2 6 8 \r i f E n d o 0023300 f s ( s t r e a m ) t h e n 0023320 b r e a k \r c h = G e t s ( 0023340 s t r e a m ) \r i f c h l e 0023360 $ * s t h e n b r e a k \r 0023400 l e t s l = s t r i n g > 0023420 > s t r . l e n g t h + 1 \r s t 0023440 r i n g > > s t r . c h a r ^ s 0023460 l = c h \r s t r i n g > > s 0023500 t r . l e n g t h = s l 032 l 0023520 5 5 3 8 \r ] r e p e a t \r r e 0023540 s u l t i s 376 001 \0 \t 354 t r u e 0023560 032 l 4 2 6 8 \r ] \r \r a n d O p 0023600 e n E r F i l e ( n a m e ) b 0023620 e \r [ 032 \r i f E r F i l e n 0023640 e 0 t h e n C l o s e E r 0023660 F i l e ( ) \r E r F i l e = 0023700 O p e n F i l e ( n a m e , k s 0023720 T y p e R e a d W r i t e , 1 , 0023740 0 , 0 , 0 , S i l Z o n e ) \r W 0023760 s s ( E r F i l e , " [ 0 ] 0024000 = w o r s t e r r o r s e 0024020 v e r i t y * n " ) 032 l 4 2 6 9 0024040 \r ] \r \r a n d C l o s e E r F 0024060 i l e ( ) b e \r [ 032 \r i f E 0024100 r F i l e e q 0 t h e n 0024120 r e t u r n \r T r u n c a t e D 0024140 i s k S t r e a m ( E 376 001 \0 250 221 0024160 r F i l e ) \r R e s e t s ( E r 0024200 F i l e ) \r G e t s ( E r F i l 0024220 e ) / / o v e r t h e i 0024240 n i t i a l " [ " \r P u t s ( 0024260 E r F i l e , $ 0 + w o r s t 0024300 E r r o r L e v e l ) \r C l o s 0024320 e s ( E r F i l e ) \r w o r s t 0024340 E r r o r L e v e l = n o E 0024360 r r o r \r E r F i l e = 0 032 0024400 l 4 2 6 9 \r ] \r \r a n d E r r 0024420 o r A t S e v e r i t y ( s ) 0024440 b e \r [ 032 \r i f s g r w o 0024460 r s t E r r o r L e v e l t h 0024500 e n w o r s t E r r o r L e v 0024520 e l = s 032 l 4 2 6 9 \r ] \r \f 0024540 \r a n d F i l e I n ( f n , N 0024560 376 001 \0 230 _ e w O n l y ; n u m 0024600 a r g s a r g u m e n t s ) 0024620 = v a l o f \r [ 032 \r i f a r g 0024640 u m e n t s l s 2 t h e n 0024660 N e w O n l y = f a l s e 0024700 \r l e t s = O p e n F i l 0024720 e ( f n , k s T y p e R e a d O 0024740 n l y , 0 , 0 , 0 , 0 , S i l Z 0024760 o n e ) \r i f s e q 0 t 0025000 h e n \r [ 032 l 4 2 6 8 \r C a l l 0025020 S w a t ( " C a n ' t O p e n 0025040 I n p u t F i l e : " , f 0025060 n ) \r f i n i s h 032 l 5 5 3 8 \r 0025100 ] \r \r l e t p w = G e t s 0025120 ( s ) \r i f p w n e # 3 4 0025140 5 6 2 & p w n e # 3 4 5 0025160 6 3 t h 376 001 \0 | M e n C a l 0025200 l S w a t ( f n , " i s n o 0025220 t a v a l i d S I L f i 0025240 l e " ) \r i f p w e q # 3 0025260 4 5 6 3 & N e w O n l y e 0025300 q t r u e t h e n [ C l 0025320 o s e s ( s ) ; r e s u l t i 0025340 s t r u e ] / / m a r k 0025360 e d B U I L T \r i f a r g u 0025400 m e n t s e q 2 t h e n 0025420 O u t F i l e = G e t F i l 0025440 e ( f n , " . n l " , 1 ) / / 0025460 / n o d e l i s t f o r n 0025500 o r m a l m o d e \r l e t t 0025520 i t l e v = v e c 2 0 0 \r P a 0025540 r s e T i t l e ( 0 , t i t l 0025560 e v , 2 0 0 ) \t \t 376 001 \0 220 323 / 0025600 / I n i t i a l i z e f o r 0025620 t i t l e p a r s i n g \r l e 0025640 t t e m p v = v e c 1 3 0025660 5 / / t e m p o r a r y v e 0025700 c t o r f o r o b j e c t \r 0025720 E r r 2 ( " * n R e a d i n g 0025740 " , f n , n o E r r o r ) \r u n 0025760 t i l E n d o f s ( s ) d o 0026000 / / r e a d f i l e \r [ 032 0026020 l 4 2 6 8 \r l e t m n a m e 0026040 = G e t s ( s ) \r f o r i 0026060 = 1 t o 4 d o t e m p 0026100 v ! i = G e t s ( s ) \r l e 0026120 t f o n t = t e m p v > > 0026140 i t e m . f o n t \r i f f o n 0026160 t l s 1 4 t h e n / / 376 0026200 001 \0 274 221 r e a d i n t h e 0026220 s t r i n g \r [ 032 l 5 5 3 8 \r t 0026240 e m p v ! 5 = G e t s ( s ) 0026260 \r i f t e m p v > > i t e m . 0026300 s t r i n g . l e n g t h g r 0026320 1 t h e n \r f o r j = 0026340 1 t o ( t e m p v > > i t e 0026360 m . s t r i n g . l e n g t h ) 0026400 / 2 d o \r t e m p v ! ( 5 + j 0026420 ) = G e t s ( s ) 032 l 6 8 0026440 0 8 \r ] \r \r l e t F o n t 4 c 0026460 o m p o n e n t = f a l s e 0026500 \r l e t c = t e m p v > > 0026520 i t e m . s t r i n g . c h a r 0026540 ^ 1 \r i f ( f o n t e q 8 0026560 ) & ( c g e $ 0 ) & ( c l 0026600 e $ 9 ) 376 001 \0 314 _ t h e n F 0026620 o n t 4 c o m p o n e n t = 0026640 t r u e \r t e s t m n a m e 0026660 e q - 1 \r i f s o / / t h 0026700 i s i s a p i c t u r e 0026720 e l e m e n t . \r [ 032 l 5 5 3 0026740 8 \r \r i f t e m p v > > i t e 0026760 m . c o l o r e q M a g e n 0027000 t a t h e n [ C o l o r C 0027020 o u n t = C o l o r C o u n t + 0027040 1 ; l o o p ] \r i f f o n 0027060 t l s 8 t h e n f o n t 0027100 = f o n t / 2 \r s w i t c h 0027120 o n f o n t i n t o 032 l 6 8 0027140 0 8 \r [ 032 l 6 8 0 8 \r \t c a s e 0027160 1 : i f t e m p v > > i t 0027200 e m . i t a l i c 376 001 \0 2 256 e 0027220 q 0 t h e n [ D o f o n 0027240 t 1 s t r i n g ( t e m p v , 0 0027260 , 0 ) ; l o o p ] \r \t / / P a 0027300 r s e T i t l e g e t s c a 0027320 l l e d i f f o n t 1 i t 0027340 a l i c \r \t c a s e 0 : c a 0027360 s e 2 : P a r s e T i t l e 0027400 ( 1 , t i t l e v , t e m p 0027420 v ) ; l o o p \r \t c a s e 3 0027440 : i f t e m p v > > i t e m 0027460 . i t a l i c e q 0 t h e 0027500 n D o f o n t 3 s t r i n g ( 0027520 t e m p v , 0 , 0 ) ; l o o p \r 0027540 \t c a s e 1 4 : D o r e c t 0027560 a n g l e ( t e m p v , 0 , 0 ) 0027600 ; l o o p \r \t c a s e 8 : 376 001 0027620 \0 w s u n l e s s F o n t 4 0027640 c o m p o n e n t d o [ D 0027660 o u s e r m a c r o ( t e m p v 0027700 , 0 , 0 ) ; l o o p ] \r \t c a 0027720 s e 9 : \r \t c a s e 1 0 : \r 0027740 \t c a s e 1 1 : \r \t c a s e 0027760 1 2 : \r \t c a s e 1 3 : D o 0030000 c o m p o n e n t ( t e m p v , 0030020 0 , 0 ) ; l o o p \r \t d e f a u 0030040 l t : l o o p 032 l 6 8 0 8 \r ] 0030060 \r 032 l 6 8 0 8 \r ] \r \r / / t h i 0030100 s b l o c k i s p a r t 0030120 o f a m a c r o d e f i n 0030140 i t i o n i n t h e u s e 0030160 r ' s p r i v a t e m a c r 0030200 o s \r / / p u t i t i n t o 0030220 M a 376 001 \0 303 327 c t f o r l 0030240 a t e r e x p a n s i o n \r i 0030260 f n o t u n l e s s ( m n a 0030300 m e g e $ 0 ) & ( m n a m e 0030320 l e $ 9 ) d o \r [ 032 l 5 0030340 5 3 8 \r i f ( m n a m e & 0030360 # 1 7 7 6 0 0 ) n e 0 t h 0030400 e n \r \t C a l l S w a t ( " S c 0030420 r e w e d u p p a r s i n g 0030440 F o n t 4 m a c r o d e 0030460 f i n i t i o n s ! ! ! " ) \r l 0030500 e t l = L e n g t h ( t e 0030520 m p v ) \r C h e c k F i t ( l ) 0030540 \r \r M o v e B l o c k ( N e w I 0030560 t e m , t e m p v , l ) / / c 0030600 o p y t e m p v i n t o t 0030620 h e l i s t \r 376 001 \0 304 331 N e w 0030640 I t e m > > i t e m . l i n k 0030660 = M a c t ! m n a m e \r M a c 0030700 t ! m n a m e = N e w I t e 0030720 m \r N e w I t e m = N e w I t e 0030740 m + l 032 l 6 8 0 8 \r ] 032 l 5 5 3 0030760 8 \r 032 l 5 5 3 8 \r \r \r \r ] \r R 0031000 e s e t s ( s ) ; L i b U p d 0031020 a t e ( 8 , s ) / / s t r e 0031040 a m i s c l o s e d b y 0031060 L i b U p d a t e \r / / i f n o 0031100 t C l o s e s ( s ) \r / / u p 0031120 d a t e a n y l i b r a r i 0031140 e s r e q u i r e d \r f o r 0031160 i = 9 t o 1 3 d o L 0031200 i b U p d a t e ( i , 0 ) \r t e 0031220 m p v ! 0 = 0 \t \t / / F o 376 001 \0 0031240 237 354 r a s t r i n g \r \r / / 0031260 f i r s t l o o k f o r a 0031300 p a g e n u m b e r a n d 0031320 u s e i t i f f o u n d 0031340 \r P a r s e T i t l e ( 2 , t 0031360 i t l e v , 4 , t e m p v ) 0031400 \t / / M a k e c o m m e n t 0031420 s t r i n g \r l e t T i t l e 0031440 P a g e = G e t N u m ( t e 0031460 m p v ) / / r e t u r n s 0031500 - 1 i f n o n u m b e r 0031520 i s f o u n d \r i f ( T i t 0031540 l e P a g e e q l a s t T i 0031560 t l e P a g e ) & ( T i t l 0031600 e P a g e g r 0 ) t h e n 0031620 T i t l e P a g e = - 2 \r 0031640 p a 376 001 \0 236 x g e = T i t 0031660 l e P a g e g r 0 ? T i t 0031700 l e P a g e , p a g e + 1 \r l 0031720 a s t T i t l e P a g e = 0031740 T i t l e P a g e \r \r / / n o 0031760 w l o o k f o r a l l e 0032000 n t r i e s i n t h e t i 0032020 t l e b l o c k \r l e t f n 0032040 t i t l e = P a r s e T i t l e 0032060 ( 2 , t i t l e v , 1 ) \r t 0032100 e m p v ! 0 = 0 \t \t / / F o r 0032120 a s t r i n g \r A p p e n d S 0032140 ( " * n ; " , t e m p v ) \r P 0032160 a r s e T i t l e ( 2 , t i t 0032200 l e v , 5 , t e m p v ) \t / 0032220 / M a k e c o m m e n t s t 0032240 r i n g \r l e 376 001 \0 346 214 t R e 0032260 f O n l y = P a r s e T i 0032300 t l e ( 4 , t i t l e v ) / 0032320 / s e e i f t h i s i s 0032340 j u s t a r e f e r e n c e 0032360 d o c u m e n t \r i f p w 0032400 e q # 3 4 5 6 3 t h e n A 0032420 p p e n d S ( " M A R K E D 0032440 B U I L T " , t e m p v ) \r 0032460 i f t e m p v > > s t r . l e 0032500 n g t h g r 2 t h e n 0032520 / / d o n ' t m a k e c o m 0032540 p l a i n t s i f t h e r e 0032560 i s n ' t a t i t l e b 0032600 l o c k \r [ 032 l 4 2 6 8 \r P a r 0032620 s e T i t l e ( 3 , t i t l e 0032640 v , E r F i l e ) \t / 376 001 \0 222 0032660 203 / C o m p l a i n i f n o 0032700 t p a r s e d c o r r e c t 0032720 l y \r E r r ( t e m p v , n o E 0032740 r r o r ) ; \r i f O u t F i l 0032760 e t h e n \r [ \r \t W s s ( O u 0033000 t F i l e , t e m p v ) \t / / 0033020 P u t i n o u t p u t a s 0033040 c o m m e n t \r \t i f R e f 0033060 O n l y t h e n W s s ( O u 0033100 t F i l e , " * n @ * n " ) \t 0033120 / / m a k e t h e . n l f 0033140 i l e c o s h e r \r ] \r u n l 0033160 e s s S t E q ( f n , f n t 0033200 i t l e , n i l ) t h e n 0033220 E r r ( " * n F i l e n a m e 0033240 c i t e d i n S I L t i 0033260 t 376 001 \0 022 002 l e r e g i o n 0033300 d o e s n o t m a t c h t 0033320 r u e f i l e n a m e . " , 0033340 \t w a r n i n g ) \r i f T i t 0033360 l e P a g e e q - 1 t h e 0033400 n E r r ( " * n C a n ' t f 0033420 i n d v a l i d p a g e n 0033440 u m b e r i n S I L t i t 0033460 l e r e g i o n . " , w a r n 0033500 i n g ) 032 l 5 5 3 8 \r i f T i 0033520 t l e P a g e e q - 2 t h 0033540 e n E r r ( " * n P a g e n 0033560 u m b e r c i t e d i n S 0033600 I L t i t l e r e g i o n 0033620 i s n o t i n c r e m e n t 0033640 e d f r o m f o r m e r f 0033660 i l e s . " 376 001 \0 310 f , w a r n 0033700 i n g ) 032 l 5 5 3 8 \r ] \r \r M o 0033720 v e B l o c k ( G e n N a m e S 0033740 t r i n g , f n t i t l e , 2 0 0033760 ) \r G e n N a m e C o u n t = f 0034000 n t i t l e ? 1 , 0 \r i f R 0034020 e f O n l y t h e n / / r 0034040 e t u r n i f f i l e i s 0034060 m a r k e d a s r e f e r 0034100 e n c e \r [ \r \t i f a r g u m 0034120 e n t s e q 2 t h e n C 0034140 l o s e s ( O u t F i l e ) 0034160 / / c l o s e o u t p u t o 0034200 f n o t P r e s c a n \r \t r 0034220 e s u l t i s t r u e \r ] \r l 0034240 e t L = B a d I t e m s 0034260 / / n o w r e p o 376 001 \0 5 316 0034300 r t a n y a r r o r s f o 0034320 u n d w h i l e r e a d i n 0034340 g f i l e i n \r [ \r \t i f 0034360 L e q 0 t h e n b r e a 0034400 k \r \t s w i t c h o n L > > n 0034420 o d e . t y p e i n t o \r \t [ 0034440 \r \t \t c a s e 3 : E r r x y 0034460 ( L > > n o d e . x , L > > n o 0034500 d e . y , " M a l f o r m e d 0034520 f o n t 3 s t r i n g " ) \r 0034540 \t \t e n d c a s e \r \r \t \t c a s 0034560 e 4 : E r r x y ( L > > n o 0034600 d e . x , L > > n o d e . y , " 0034620 F o n t 4 s t r i n g m o 0034640 r e t h a n o n e c h a r 0034660 a c t e r l o n g " ) \r \t \t e 0034700 376 001 \0 U 231 n d c a s e \r \r \t \t c 0034720 a s e 5 : E r r x y ( L > > 0034740 n o d e . x , L > > n o d e . y 0034760 , " C o m p o n e n t m o r e 0035000 t h a n o n e c h a r a c 0035020 t e r l o n g " ) \r \t \t e n d 0035040 c a s e 032 l 4 2 6 8 \r \t ] \r \t L 0035060 = L > > i t e m . l i n k 032 0035100 l 4 2 6 8 \r ] r e p e a t \r r 0035120 e s u l t i s 0 \r 032 l 4 2 6 8 0035140 \r \r ] \r \f \r a n d D o u s e r 0035160 m a c r o ( o b j , x 0 , y 0 ) 0035200 b e / / e x p a n d a u 0035220 s e r m a c r o \r [ 032 \r / / t 0035240 h e d e f i n i t i o n c o 0035260 n t a i n s r e l a t i v i z 0035300 e d c o 376 001 \0 # 342 o r d i n a 0035320 t e s . E x p a n d \r / / a 0035340 t t h e p o i n t x , y : 0035360 \r l e t x = x 0 + o b 0035400 j > > i t e m . x m i n \r l e t 0035420 y = y 0 + o b j > > i 0035440 t e m . y m i n \r \r / / t h e 0035460 s t r i n g m u s t b e e 0035500 x a c t l y o n e c h a r a 0035520 c t e r l o n g \r i f o b j 0035540 > > i t e m . s t r i n g . l e 0035560 n g t h n e 1 t h e n \r [ 0035600 032 l 4 2 6 8 \r A d d B a d I t e 0035620 m ( x , y , 4 ) \r r e t u r n 032 0035640 l 5 5 3 8 \r ] \r \r l e t c h 0035660 = o b j > > i t e m . s t r i 0035700 n g . c h a r ^ 1 \r 376 001 \0 = 307 l 0035720 e t l i n k = M a c t ! c 0035740 h \r \r / / t h e m a c r o m 0035760 u s t b e d e f i n e d \r i 0036000 f l i n k e q 0 t h e n 0036020 \r [ 032 l 4 2 6 8 \r E r r x y ( x 0036040 , y , " F o n t 4 m a c r o 0036060 h a s n o d e f i n i t i 0036100 o n " ) \r r e t u r n 032 l 5 5 3 0036120 8 \r ] \r \r \r u n t i l l i n k 0036140 e q 0 d o / / g r i n d 0036160 d o w n t h e d e f i n i 0036200 t i o n \r [ 032 l 4 2 6 8 \r l e t 0036220 t l = l i n k ; l i n k 0036240 = l i n k > > i t e m . l i 0036260 n k \r l e t f o n t = t l 0036300 > > i t e m . f o n t \r i f 376 0036320 001 \0 T 365 f o n t l s 8 t h 0036340 e n [ f o n t = f o n t 0036360 / 2 ; i f t l > > i t e m . 0036400 i t a l i c t h e n f o n t 0036420 = 2 ] \r s w i t c h o n 0036440 f o n t i n t o \r [ 032 l 5 5 3 0036460 8 \r c a s e 1 : D o f o n t 0036500 1 s t r i n g ( t l , x , y ) ; 0036520 l o o p \r c a s e 3 : D o f 0036540 o n t 3 s t r i n g ( t l , x , 0036560 y ) ; l o o p \r c a s e 1 4 : 0036600 D o r e c t a n g l e ( t l , 0036620 x , y ) ; l o o p \r c a s e 8 0036640 : D o u s e r m a c r o ( t l 0036660 , x , y ) ; l o o p \r c a s e 0036700 9 : \r c a s e 1 0 : \r c a s e 0036720 1 1 : 376 001 \0 b } \r c a s e 1 0036740 2 : \r c a s e 1 3 : D o c o 0036760 m p o n e n t ( t l , x , y ) ; 0037000 l o o p \r d e f a u l t : l o 0037020 o p \r 032 l 6 8 0 8 \r ] 032 l 5 5 3 0037040 8 \r ] \r \r 032 l 4 2 6 8 \r ] \r \r a 0037060 n d E r r x y ( x , y , s t r 0037100 , s t r 2 , s e v e r i t y ; 0037120 n u m a r g s n a ) b e \r [ 0037140 032 \r i f n a l s 5 t h e 0037160 n s e v e r i t y = s e r 0037200 i o u s \r l e t v = v e c 0037220 1 2 8 ; v ! 0 = 0 \r A p 0037240 p e n d S ( " * n ( " , v ) \r A 0037260 p p e n d N ( x , v ) \r A p p e 0037300 n d C ( $ , , v ) \r A p p e n d 0037320 N ( y , v ) \r A p 376 001 \0 # 332 p e 0037340 n d S ( " ) " , v ) \r A p p 0037360 e n d S ( s t r , v ) \r i f n 0037400 a g r 3 t h e n A p p e 0037420 n d S ( s t r 2 , v ) \r E r r ( 0037440 v , s e v e r i t y ) \r ] \r \r 0037460 a n d E r r 2 ( s 1 , s 2 , s 0037500 e v e r i t y ; n u m a r g s 0037520 n a ) b e \r [ 032 \r i f n a 0037540 l s 3 t h e n s e v e r 0037560 i t y = s e r i o u s \r E r 0037600 r ( s 1 , s e v e r i t y ) \r 0037620 E r r ( s 2 , s e v e r i t y 0037640 ) 032 l 4 2 6 8 \r ] \r \r a n d E 0037660 r r ( s 1 , s e v e r i t y ; 0037700 n u m a r g s n a ) b e \r 0037720 [ 032 \r i f n a l s 2 376 001 0037740 \0 A ? t h e n s e v e r i t y 0037760 = s e r i o u s \r W s s ( E 0040000 r F i l e , s 1 ) \r E r r o r 0040020 A t S e v e r i t y ( s e v e r 0040040 i t y ) 032 l 4 2 6 9 \r ] \r 032 \r a 0040060 n d M a k e F i l e N a m e ( 0040100 v , f n a m e , e x t ) b 0040120 e \r [ 032 \r M o v e B l o c k ( v 0040140 , f n a m e , 1 0 0 ) \r l e 0040160 t j = 0 \r f o r i = 1 0040200 t o f n a m e > > s t r . l e 0040220 n g t h d o [ i f f n a 0040240 m e > > s t r . c h a r ^ i e 0040260 q $ . t h e n b r e a k ; 0040300 j = i ] \r v > > s t r . l e 0040320 n g t h = j \r A p p e n d S 0040340 ( e x 376 001 \0 ^ U t , v ) / / a 0040360 d d t h e e x t e n s i o n 0040400 032 l 4 2 6 9 \r ] \r \r a n d G e 0040420 t F i l e ( f n a m e , e x t , 0040440 b y t e w o r d ) = v a l o 0040460 f / / 1 f o r b y t e s , 0040500 0 f o r w o r d s \r [ 032 \r l 0040520 e t v = v e c 1 2 8 \r M 0040540 a k e F i l e N a m e ( v , f 0040560 n a m e , e x t ) \r l e t s 0040600 t r e a m = O p e n F i l e 0040620 ( v , k s T y p e W r i t e O n 0040640 l y , b y t e w o r d , 0 , 0 , 0040660 0 , S i l Z o n e ) \r i f s t 0040700 r e a m e q 0 t h e n C 0040720 a l l S w a t ( " C a n ' t O 0040740 p e n " , v ) 376 001 \0 323 T \r r e 0040760 s u l t i s s t r e a m 032 l 4 0041000 2 6 8 \r ] \r \r a n d G e t N u 0041020 m ( s t r ) = v a l o f \r [ 032 0041040 \r i f s t r > > s t r . l e n 0041060 g t h e q 0 t h e n r e 0041100 s u l t i s t r u e \r l e t 0041120 v a l , c n t = 0 , 0 \r f o r 0041140 p t r = 1 t o s t r > > 0041160 s t r . l e n g t h d o \r [ 032 0041200 l 4 2 6 9 \r l e t c h a r = 0041220 s t r > > s t r . c h a r ^ p t 0041240 r \r i f c h a r g e $ 0 0041260 & c h a r l e $ 9 t h 0041300 e n [ v a l = v a l * 1 0041320 0 + c h a r - $ 0 ; c 0041340 n t = c n t + 1 ] 032 l 5 376 \0 b 0041360 B H 5 3 9 \r ] \r i f c n t e 0041400 q 0 t h e n r e s u l t i 0041420 s t r u e \r r e s u l t i s 0041440 v a l & # 7 7 7 7 7 / / 0041460 m a k e s u r e m y i s 0041500 p o s i t i v e 032 l 4 2 6 9 \r ] 0041520 \r \r 032 \r 377 \0 \0 a n b . b c p l \0 0041540 376 001 \0 221 3 / / a n b . b c p l \r 0041560 / / n e w a n a l y z e r f 0041600 o r s i l f i l e s \r \r / / 0041620 l a s t m o d i f i e d b 0041640 y E . M c C r e i g h t N 0041660 o v e m b e r 2 3 , 1 9 7 7 0041700 9 : 3 3 A M \r \r g e t " 0041720 S y s D e f s . d " \r g e t " 0041740 A l t o F i l e S y s . d " \r g 0041760 e t " A n a . d e f s " \r \r / 0042000 / S Y M B O L 0042020 T A B L E S T U 0042040 F F \r \r l e t D e f i n 0042060 e S y m b o l ( s t r , t y p e 0042100 ) = v a l o f / / r e t u 0042120 r n s p o i n t e r t o s 0042140 t r e c \r 376 001 \0 376 ] [ 032 ( 6 3 5 0042160 ) \r l e t s t p = L o o k 0042200 u p ( s t r ) \r i f s t p n 0042220 e 0 d o \r [ 032 l 4 2 6 8 \r i 0042240 f s t p > > s t r e c . t y p 0042260 e n e t y p e t h e n \r E 0042300 r r 2 ( " * n M u l t i p l e 0042320 d e f i n i t i o n f o r s 0042340 y m b o l : " , s t r ) \r s t 0042360 p > > s t r e c . u c n t = 0042400 s t p > > s t r e c . u c n t 0042420 + 1 \r r e s u l t i s s t p 0042440 032 l 5 5 3 8 \r ] \r \r l e t h 0042460 = H a s h ( s t r ) / / p l 0042500 a c e i n s y m b o l t a 0042520 b l e f o r t h i s s t r 0042540 i n g \r \r l e t l 376 001 \0 261 345 0042560 = s t r > > s t r . l e n g t 0042600 h \r l e t s z = ( o f f s 0042620 e t s t r e c . s t ) / 1 6 0042640 + l / 2 + 1 \r C h e c k F i 0042660 t ( s z ) / / s e e i f t 0042700 h e r e i s e n o u g h r 0042720 o o m \r \r N e w I t e m > > s t 0042740 r e c . l i n k = @ h \r @ h 0042760 = N e w I t e m \r \r N e w I 0043000 t e m > > s t r e c . t y p e 0043020 = t y p e \r N e w I t e m > > 0043040 s t r e c . r n a m e = 0 \r 0043060 N e w I t e m > > s t r e c . u 0043100 c n t = 1 \r N e w I t e m > 0043120 > s t r e c . p i n s d n = 0043140 0 \r N e w I t e m > > s t r e 376 0043160 001 \0 325 0 c . s t . l e n g t h 0043200 = l \r f o r i = 1 t o 0043220 l d o N e w I t e m > > s 0043240 t r e c . s t . c h a r ^ i = 0043260 s t r > > s t r . c h a r ^ i 0043300 \r N e w I t e m = N e w I t e 0043320 m + s z \r r e s u l t i s @ h 0043340 032 l 4 2 6 8 \r ] \r \r a n d L o 0043360 o k u p ( s t r ) = v a l o 0043400 f / / r e t u r n s s t p 0043420 i f d e f i n e d , e l s e 0043440 0 \r [ 032 \r l e t l i n k = 0043460 H a s h ( s t r ) \r u n t i l 0043500 l i n k e q 0 d o \r [ 032 0043520 l 4 2 6 8 \r i f S t E q ( s t 0043540 r , l v ( l i n k > > s t r e c 0043560 . s t ) 376 001 \0 033 A ) t h e n 0043600 r e s u l t i s l i n k \r l i 0043620 n k = l i n k > > s t r e c 0043640 . l i n k 032 l 5 5 3 8 \r ] \r r e 0043660 s u l t i s 0 032 l 4 2 6 8 \r ] 0043700 \r \r a n d H a s h ( s t r ) 0043720 = v a l o f \r [ 032 \r l e t r 0043740 = 0 \r f o r i = 1 t 0043760 o s t r > > s t r . l e n g t 0044000 h d o r = r + ( s t r > 0044020 > s t r . c h a r ^ i ) \r r e s 0044040 u l t i s h a s h t a b + 0044060 ( r r e m h t s i z e ) \r 032 0044100 l 4 2 6 8 \r ] \r \r a n d S t E 0044120 q ( s 1 , s 2 , u l E q u a l ; 0044140 n u m a r g s n a ) = v 0044160 a l o f / / s t 376 001 \0 222 Q r i 0044200 n g c o m p a r e \r [ 032 \r i f 0044220 s 1 > > s t r . l e n g t h 0044240 n e s 2 > > s t r . l e n g t 0044260 h t h e n r e s u l t i s 0044300 f a l s e \r u l E q u a l = ( n 0044320 a n e 2 ) ? 1 7 7 7 3 7 b 0044340 , - 1 \r f o r i = 1 t o 0044360 s 1 > > s t r . l e n g t h 0044400 d o \r i f ( ( s 1 > > s t r . 0044420 c h a r ^ i x o r s 2 > > s 0044440 t r . c h a r ^ i ) & u l E q u 0044460 a l ) n e 0 t h e n r e 0044500 s u l t i s f a l s e \r r e s 0044520 u l t i s t r u e 032 l 4 2 6 8 0044540 \r ] \r 032 \r a n d A p p e n d B 0044560 ( n u m , s t r ) b e \t 376 001 0044600 \0 223 344 / / o c t a l n u m b e 0044620 r , n o z e r o s u p p r 0044640 e s s i o n \r [ 032 \r f o r i 0044660 = 1 5 t o 0 b y - 3 0044700 d o \r A p p e n d C ( ( ( n u m 0044720 r s h i f t i ) & 7 ) + $ 0 0044740 , s t r ) 032 l 4 2 6 9 \r ] \r \r \r 0044760 / / P R O C E S S 0045000 V A R I O U S 0045020 I N P U T B L 0045040 O C K S \r \r a n d D o 0045060 r e c t a n g l e ( o b j , x , 0045100 y ) b e \r [ 032 \r l e t d e l 0045120 x = o b j > > i t e m . x m 0045140 a x - o b j > > i t e m . x m i 0045160 n \r l e t d e l y = o b j 0045200 > > i 376 001 \0 G 1 t e m . y m a x 0045220 - o b j > > i t e m . y m i n \r 0045240 l e t l i s t = 0 \r i f 0045260 d e l x e q 1 t h e n l 0045300 i s t = l v V l i n e s \r 0045320 i f d e l y e q 1 t h e 0045340 n l i s t = l v H l i n 0045360 e s \r i f l i s t e q 0 0045400 t h e n r e t u r n / / r e 0045420 j e c t l i n e w i d t h s 0045440 # 1 \r A d d L E ( l i s t , x 0045460 + o b j > > i t e m . x m i n , 0045500 y + o b j > > i t e m . y m i n 0045520 , N e w I t e m + b l L e n d , 0045540 0 , 0 ) \r A d d L E ( l i s t , 0045560 x + o b j > > i t e m . x m a x 0045600 , y + o b j > > 376 001 \0 m @ i t e 0045620 m . y m a x , N e w I t e m - b 0045640 l L e n d , 0 , 0 ) \r 032 l 4 2 6 0045660 8 \r ] \r \r a n d A d d L E ( l 0045700 i s t , x , y , c p 0 , c p 1 , 0045720 c p 2 ) b e / / a d d b l 0045740 o c k f o r l i n e e n d 0045760 p o i n t \r [ 032 \r C h e c k F i 0046000 t ( b l L e n d ) / / p u n t 0046020 i f n o t e n o u g h s 0046040 p a c e \r \r N e w I t e m > > l 0046060 e n d . l i n k = @ l i s t 0046100 \r @ l i s t = N e w I t e m 0046120 \r \r N e w I t e m > > l e n d . 0046140 t y p e = b t L e n d \r N e 0046160 w I t e m > > l e n d . x = 0046200 x \r N e w I t e m > > l e 376 001 \0 0046220 346 033 n d . y = y \r N e w I t 0046240 e m > > l e n d . m a r k e d 0046260 = 0 \r N e w I t e m > > l e n 0046300 d . h a s s i g = 0 \r N e w 0046320 I t e m > > l e n d . c p ^ 0 0046340 = c p 0 \r N e w I t e m > > l 0046360 e n d . c p ^ 1 = c p 1 \r N 0046400 e w I t e m > > l e n d . c p ^ 0046420 2 = c p 2 \r \r N e w I t e m 0046440 = N e w I t e m + b l L e n 0046460 d 032 l 4 2 6 8 \r ] \r \r a n d D 0046500 o f o n t 1 s t r i n g ( o b j 0046520 , x , y ) b e \r [ 032 \r l e t 0046540 s l = o b j > > i t e m . s 0046560 t r i n g . l e n g t h \r l e t 0046600 s p = l v ( o b j > > i t 0046620 e m 376 001 \0 c 216 . s t r i n g ) \r 0046640 l e t b o a r d l o c = 0 0046660 \r l e t g o t n u m = t r 0046700 u e \r \r / / t r y t o i n t 0046720 e r p r e t t h e s t r i n 0046740 g a s a n u m b e r \r f o 0046760 r i = 1 t o s l d o 0047000 \r [ 032 l 4 2 6 8 \r l e t c h 0047020 = s p > > s t r . c h a r ^ i 0047040 \r i f ( c h l s $ 0 ) % ( 0047060 c h g r $ 9 ) t h e n \r [ 0047100 032 l 5 5 3 8 \r g o t n u m = 0047120 f a l s e \r b r e a k 032 l 6 8 0 0047140 8 \r ] \r b o a r d l o c = b 0047160 o a r d l o c * 1 0 + ( c h - $ 0047200 0 ) \r 032 l 5 5 3 8 \r ] \r \r i f 0047220 g o t n u m 376 001 \0 326 376 t h e n 0047240 [ A d d N o d e ( l v N u 0047260 m b e r s , o b j , x , y , b t 0047300 N u m , b o a r d l o c ) ; r 0047320 e t u r n ] \r \r b o a r d l 0047340 o c = 0 \r / / t r y t o 0047360 i n t e r p r e t t h e s t 0047400 r i n g a s a b o a r d l 0047420 o c / g r o u p o f t h e 0047440 f o r m l n l ( s m a l l 0047460 l e t t e r s \r / / a n d n u 0047500 m b e r s ) . I f t h e 0047520 f i n a l l e t t e r ( t h 0047540 e g r o u p l e t t e r ) 0047560 i s a b s e n t , i t i s 0047600 d e f a u l t e d \r / / t o 0047620 ' a ' , w h i c h i 376 001 \0 026 0047640 \v s u s e d w h e n a n 0047660 i c c o n s i s t s o f o 0047700 n l y o n e g r o u p . A 0047720 n y s t r i n g \r / / b e g i 0047740 n n i n g w i t h " # " i 0047760 s a l s o d e f i n e d a 0050000 s a b o a r d l o c , i n 0050020 w h i c h c a s e t h e 0050040 f i n a l \r / / c h a r a c t e 0050060 r , i f a l p h a b e t i c 0050100 , i s t a k e n a s t h 0050120 e g r o u p . \r \r i f ( s l 0050140 g r 1 ) t h e n w h i l 0050160 e t r u e d o \r [ 032 l 4 2 6 0050200 8 \r l e t b o a r d l o c s t 0050220 r = v e c 1 3 0 \r f o r 0050240 i 376 001 \0 } 215 = 1 t o s l d 0050260 o b o a r d l o c s t r > > s 0050300 t r . c h a r ^ i = s p > > 0050320 s t r . c h a r ^ i \r l e t l 0050340 e n = s l \r l e t g r o u 0050360 p = 1 / / d e f a u l t 0050400 = g r o u p " a " \r i f 0050420 l e n g r 1 t h e n \r [ 032 0050440 l 5 5 3 8 \r l e t f i n a l c 0050460 h a r = b o a r d l o c s t 0050500 r > > s t r . c h a r ^ l e n \r 0050520 i f L e t V a l ( f i n a l c 0050540 h a r ) g e 0 t h e n \r [ 0050560 032 l 6 8 0 8 \r g r o u p = L 0050600 e t V a l ( f i n a l c h a r ) 0050620 \r l e n = l e n - 1 032 l 8 0 0050640 7 8 \r ] 032 l 376 001 \0 r 345 6 8 0 8 \r 0050660 ] \r \r i f s p > > s t r . c h 0050700 a r ^ 1 n e $ # t h e n \r 0050720 [ 032 l 5 5 3 8 \r i f L e t V a 0050740 l ( s p > > s t r . c h a r ^ 1 0050760 ) l s 0 t h e n b r e a 0051000 k \r l e t i = 2 \r w h i l e 0051020 ( N u m V a l ( s p > > s t r . 0051040 c h a r ^ i ) g e 0 ) & ( i 0051060 l e l e n ) d o i = i + 0051100 1 \r i f ( i e q 2 ) % ( i 0051120 l e l e n ) t h e n b r 0051140 e a k \r \r w h i l e l e n l 0051160 s 3 d o \r [ / / f o r c 0051200 e a t l e a s t t w o d 0051220 i g i t s b y a d d i n g 0051240 l e a d i n g z e r 376 001 \0 L 304 0051260 o s 032 l 6 8 0 8 \r f o r i = l 0051300 e n t o 2 d o \r b o a r 0051320 d l o c s t r > > s t r . c h a 0051340 r ^ ( i + 1 ) = b o a r d l 0051360 o c s t r > > s t r . c h a r ^ 0051400 i \r b o a r d l o c s t r > > s 0051420 t r . c h a r ^ 2 = $ 0 \r l 0051440 e n = l e n + 1 032 l 8 0 7 8 0051460 \r ] \r i f l e n g r 3 t 0051500 h e n b r e a k / / n o t 0051520 l e g a l b o a r d p o s 0051540 i t i o n 032 l 6 8 0 8 \r ] \r \r b 0051560 o a r d l o c s t r > > s t r . 0051600 l e n g t h = l e n \r A d d 0051620 N o d e ( l v L o c g r o u p 0051640 s , o b j , x , y , b t L o c g 0051660 376 001 \0 t 353 r o u p s , D e f i n 0051700 e S y m b o l ( b o a r d l o c 0051720 s t r , \r s t B r d l o c ) , 0051740 g r o u p ) \r r e t u r n 032 l 5 0051760 5 3 8 \r ] \r \r / / w e h a v e 0052000 a t e x t s t r i n g . 0052020 p u t i t i n t h e s 0052040 y m b o l t a b l e w i t h 0052060 t y p e \r / / s i g n a l n 0052100 a m e , a l t h o u g h i t 0052120 m a y l a t e r b e c h 0052140 a n g e d t o a n i c t 0052160 y p e n a m e \r \r A d d N o d 0052200 e ( l v S t r i n g s , o b j 0052220 , x , y , b t S t r i n g , D e 0052240 f i n e S y m b o l ( s p , s t 0052260 S i g ) ) 376 001 \0 324 K / / a d d 0052300 a n o d e f o r i t 032 l 0052320 4 2 6 8 \r ] \r \r a n d L e t V 0052340 a l ( a r g ) = v a l o f \r [ 0052360 032 \r i f ( a r g l s $ a ) 0052400 % ( a r g g r $ z ) t h e 0052420 n r e s u l t i s - 1 \r r e 0052440 s u l t i s ( a r g - $ a + 1 0052460 ) 032 l 4 2 6 8 \r ] \r \r a n d N 0052500 u m V a l ( a r g ) = v a l o 0052520 f \r [ 032 \r i f ( a r g l s 0052540 $ 0 ) % ( a r g g r $ 9 ) 0052560 t h e n r e s u l t i s - 1 0052600 \r r e s u l t i s ( a r g - $ 0052620 0 ) 032 l 4 2 6 8 \r ] \r \r a n d 0052640 D o f o n t 3 s t r i n g ( o b 0052660 j , x , y ) b e \r 376 001 \0 ( 333 [ 0052700 032 \r / / c h e c k f o r s i 0052720 n g l e s p e c i a l c h a 0052740 r a c t e r \r i f o b j > > i 0052760 t e m . s t r i n g . l e n g t 0053000 h e q 1 t h e n \r [ 032 l 4 0053020 2 6 8 \r l e t c h = o b j 0053040 > > i t e m . s t r i n g . c h 0053060 a r ^ 1 \r i f s e l e c t o n 0053100 c h i n t o \r [ 032 l 5 5 3 8 0053120 \r c a s e c h B l o b : \r c a 0053140 s e c h E p i n : \r c a s e 0053160 c h C p i n : \r c a s e c h G 0053200 n d : \r c a s e c h P s e u d 0053220 : t r u e \r d e f a u l t : 0053240 f a l s e 032 l 6 8 0 8 \r ] \r t h 0053260 e n 032 l 5 5 3 8 \r [ 032 l 5 5 3 376 0053300 001 \0 262 7 8 \r i f c h e q c 0053320 h B l o b t h e n x = x + 1 0053340 / / f u g e s o c e n t 0053360 e r o f b l o b i s c o 0053400 r r e c t \r A d d N o d e ( l v 0053420 S c h a r s , o b j , x , y , 0053440 b t S c h a r , c h ) \r r e t u 0053460 r n 032 l 6 8 0 8 \r ] \r 032 l 5 5 3 0053500 8 \r ] \r \r / / t r y t o m a 0053520 k e t h e s t r i n g i n 0053540 t o a n u m b e r \r l e t 0053560 v 0 = 0 \r f o r i = 1 0053600 t o o b j > > i t e m . s t 0053620 r i n g . l e n g t h d o \r [ 0053640 032 l 4 2 6 8 \r l e t n = o 0053660 b j > > i t e m . s t r i n g . 0053700 c h a r 376 001 \0 : j ^ i - $ 0 0053720 \r i f ( n l s 0 ) % ( 0053740 n g r 9 ) d o \r [ 032 l 5 5 0053760 3 8 \r A d d B a d I t e m ( x + 0054000 ( o b j > > i t e m . x m i n ) 0054020 , y + ( o b j > > i t e m . y m 0054040 i n ) , 3 ) \r r e t u r n 032 l 6 0054060 8 0 8 \r ] \r v 0 = ( v 0 * 1 0054100 0 ) + n 032 l 5 5 3 8 \r ] \r A d d 0054120 N o d e ( l v N u m b e r s , 0054140 o b j , x , y , b t N u m , v 0 0054160 ) 032 l 4 2 6 8 \r ] \r \r 032 \r \r \r a 0054200 n d A d d N o d e ( l i s t , 0054220 o b j , x , y , b t y p e , v a 0054240 l , v a l 2 ; n u m a r g s 0054260 n a ) b e \r [ 032 \r l e t n o 0054300 d e L e n = ( 376 001 \0 \v W n a 0054320 g r 6 ) ? b l F u l l N o d 0054340 e , b l B a s i c N o d e \r \r C 0054360 h e c k F i t ( n o d e L e n ) 0054400 \r \r N e w I t e m > > n o d e . 0054420 l i n k = @ l i s t \r @ l i 0054440 s t = N e w I t e m \r \r N e 0054460 w I t e m > > n o d e . t y p e 0054500 = b t y p e \r N e w I t e m 0054520 > > n o d e . u s e d = 0 \r 0054540 N e w I t e m > > n o d e . a s 0054560 s o c = 0 / / n o t u s 0054600 e d o r c o n n e c t e d 0054620 t o a n y t h i n g y e t \r 0054640 N e w I t e m > > n o d e . v a 0054660 l = v a l \r i f n a g r 0054700 6 t h e n N e w I t e 376 001 0054720 \0 Y n m > > n o d e . v a l 2 0054740 = v a l 2 \r \r l e t h = 0054760 ( o b j > > i t e m . y m a x 0055000 - o b j > > i t e m . y m i n 0055020 ) / 2 \r l e t w = ( o b j 0055040 > > i t e m . x m a x - o b 0055060 j > > i t e m . x m i n ) / 2 \r 0055100 \r N e w I t e m > > n o d e . x 0055120 = o b j > > i t e m . x m i 0055140 n + x + w \r N e w I t e m > > n 0055160 o d e . y = o b j > > i t e 0055200 m . y m i n + y + h \r \r N e w I 0055220 t e m = N e w I t e m + n o d e 0055240 L e n 032 l 4 2 6 8 \r ] \r \r a n d 0055260 A d d B a d I t e m ( x , y , 0055300 t y p e ) b e \r [ 032 \r C h e c 0055320 k F i 376 001 \0 340 k t ( b l B a s i 0055340 c N o d e ) \r \r N e w I t e m > 0055360 > n o d e . l i n k = B a d 0055400 I t e m s \r B a d I t e m s = 0055420 N e w I t e m \r \r N e w I t e 0055440 m > > n o d e . t y p e = t 0055460 y p e \r N e w I t e m > > n o d 0055500 e . x = x \r N e w I t e m > 0055520 > n o d e . y = y \r N e w I 0055540 t e m = N e w I t e m + b l B a 0055560 s i c N o d e 032 l 4 2 6 8 \r ] \r 0055600 \r a n d C h e c k F i t ( w r 0055620 d s ) b e \r [ 032 \r l e t l 0055640 = N e w I t e m + w r d s \r i 0055660 f U s c ( l , S p a c e T o p 0055700 ) g r 0 t h e n \r [ 032 l 4 0055720 2 6 8 \r C a l l 376 001 \0 201 260 S w a 0055740 t ( " S p a c e E x h a u s t 0055760 e d " ) \r f i n i s h 032 l 5 5 3 0056000 8 \r ] 032 l 4 2 6 8 \r ] \r \r \r a n 0056020 d D o c o m p o n e n t ( o b 0056040 j , x , y ) b e / / w e h 0056060 a v e a l i b r a r y m a 0056100 c r o c a l l \r [ 032 \r / / i t 0056120 m u s t b e e x a c t l y 0056140 o n e c h a r a c t e r l 0056160 o n g \r i f o b j > > i t e m 0056200 . s t r i n g . l e n g t h n 0056220 e 1 t h e n \r [ 032 l 4 2 6 8 0056240 \r A d d B a d I t e m ( x + ( o 0056260 b j > > i t e m . x m i n ) , y 0056300 + ( o b j > > i t e m . y m i n 0056320 ) , 5 ) \r r e t u r n 032 l 376 001 \0 0056340 021 356 5 5 3 8 \r ] \r \r l e t m i 0056360 n d e x = ( ( o b j > > i t 0056400 e m . f o n t ) - 8 ) * 1 2 8 0056420 + o b j > > i t e m . s t r i 0056440 n g . c h a r ^ 1 \r \r M a c t ! 0056460 m i n d e x = - 1 / / i n 0056500 d i c a t e a n e e d f o 0056520 r t h e d e f i n i t i o n 0056540 \r \r / / a d d t h e f i r s 0056560 t h a l f o f t h e c o 0056600 m p o n e n t d e s c r i p t 0056620 o r t o t h e l i s t \r \r 0056640 C h e c k F i t ( b l C o m p ) 0056660 \r \r N e w I t e m > > c o m p . 0056700 l i n k = C o m p s \r C o m 0056720 p s = N e w I t e m \r \r N e 0056740 w I 376 001 \0 025 * t e m > > c o m p 0056760 . t y p e = b t C o m p \r N 0057000 e w I t e m > > c o m p . x m i 0057020 n = x + o b j > > i t e m . 0057040 x m i n \r N e w I t e m > > c o 0057060 m p . y m i n = y + o b j > 0057100 > i t e m . y m i n \r N e w I t 0057120 e m > > c o m p . x m a x = 0057140 x + o b j > > i t e m . x m a x 0057160 \r N e w I t e m > > c o m p . y 0057200 m a x = y + o b j > > i t e 0057220 m . y m a x \r N e w I t e m > > 0057240 c o m p . c o l o r = o b j 0057260 > > i t e m . c o l o r \r N e w 0057300 I t e m > > c o m p . m i n d e 0057320 x = m i n d e x \r N e w I t 0057340 e m > > c o m 376 001 \0 207 A p . p i 0057360 n s d o n e = 0 / / u s e 0057400 d t o k n o w w h e n t 0057420 o s t o p r e a d i n g d 0057440 i c t i o n a r y \r N e w I t e 0057460 m > > c o m p . b l o u t = 0057500 0 / / u s e d t o a v o i 0057520 d s e n d i n g t y p e n 0057540 a m e f o r e a c h g r o 0057560 u p d u r i n g o u t p u t 0057600 \r N e w I t e m > > c o m p . c 0057620 o n p o i n t s = 0 / / n 0057640 o c o n n e c t i o n p o i 0057660 n t s y e t \r \r N e w I t e m 0057700 = N e w I t e m + b l C o m 0057720 p \r 032 l 4 2 6 8 \r ] \r \r \r \r \r a 0057740 n d L i b U p d a t e 376 001 \0 235 0057760 206 ( f o n t , s ) = v a l o 0060000 f / / r e a d f r o m l i 0060020 b r a r i e s r e f e r e n c 0060040 e d i n i n f i l e \r [ 032 \r 0060060 l e t m b a s e = ( ( f o 0060100 n t - 8 ) * 1 2 8 ) + M a c 0060120 t / / s t a r t i n g l o c 0060140 i n M a c t f o r t h i 0060160 s f o n t \r l e t n e e d 0060200 = f a l s e \r f o r i = 0060220 0 t o 1 2 7 d o i f ( 0060240 m b a s e ! i ) e q - 1 t 0060260 h e n n e e d = t r u e 0060300 \r u n l e s s n e e d t h e 0060320 n / / t h i s f o n t d i 0060340 d ' n t h a v e a n y u n 0060360 d 376 001 \0 301 N e f i n e d m a c 0060400 r o s \r \t [ i f s n e 0 0060420 t h e n C l o s e s ( s ) ; 0060440 r e s u l t i s f a l s e 0060460 ] \r \r i f s e q 0 t h e 0060500 n \r [ \r \t s = O p e n F i l 0060520 e ( 0 , k s T y p e R e a d O n 0060540 l y , 0 , 0 , L p r v e c + D i 0060560 r P r e a m b l e S i z e * ( f 0060600 o n t - 9 ) + 1 , 0 , S i l Z o 0060620 n e ) \r \t i f s e q 0 t 0060640 h e n \r \t [ 032 l 4 2 6 8 \r l e t 0060660 m s g = " C a n ' t O p 0060700 e n L i b r a r y n u m b e 0060720 r N ? " \r m s g > > s t r . c 0060740 h a r ^ ( m s g > > s t r . l e 0060760 n g t h ) 376 001 \0 006 223 = f o n 0061000 t - 4 + $ 0 \r C a l l S w a t ( 0061020 m s g ) 032 l 5 5 3 8 \r \t ] \r ] \r 0061040 \r l e t p w = G e t s ( s 0061060 ) ; i f ( p w n e # 3 4 0061100 5 6 2 ) & ( p w n e # 3 0061120 4 5 6 3 ) t h e n \r [ \r \t l e 0061140 t m s g = " B a d P a s 0061160 s w o r d i n f i l e S i 0061200 l . l b ? " ; m s g > > s t r 0061220 . c h a r ^ ( m s g > > s t r . 0061240 l e n g t h ) = f o n t - 4 0061260 + $ 0 \r \t C a l l S w a t ( m s 0061300 g ) \r ] \r \r l e t t v e c = 0061320 v e c 1 2 8 \r u n t i l E 0061340 n d o f s ( s ) d o \r [ 032 l 0061360 4 2 6 8 \r l e t m n 376 001 \0 ` # 0061400 a m e = G e t s ( s ) \r i f 0061420 m n a m e e q - 1 t h e 0061440 n b r e a k / / p a s t t 0061460 h e m a c r o d e f i n i t 0061500 i o n s = d o n e \r f o r 0061520 i = 1 t o 4 d o t v 0061540 e c ! i = G e t s ( s ) \r l 0061560 e t f n t = t v e c > > i 0061600 t e m . f o n t \r i f f n t 0061620 n e 1 4 t h e n / / r e 0061640 a d t h e s t r i n g \r [ 032 0061660 l 5 5 3 8 \r t v e c ! 5 = G 0061700 e t s ( s ) \r l e t s l = 0061720 ( t v e c ! 5 ) r s h i f t 0061740 8 \r i f s l g r 1 t h e 0061760 n f o r i = 1 t o s l / 0062000 376 001 \0 Z e 2 d o t v e c ! ( 0062020 5 + i ) = G e t s ( s ) 032 l 0062040 6 8 0 8 \r ] \r / / w e w i l l 0062060 u s e t h i s m a c r o 0062100 o n l y i f ( a ) m b a s 0062120 e ! m n a m e i s n o n z e 0062140 r o \r / / i . e . w e w a n 0062160 t t h i s d e f i n i t i o 0062200 n , a n d ( b ) \r / / t h e 0062220 o b j e c t i s a f o n 0062240 t 1 s t r i n g o r a 0062260 s i n g l e c h a r a c t e r 0062300 \r / / f o n t 3 s t r i n g 0062320 w h i c h i s a c o n n 0062340 e c t i o n p o i n t . \r / / 0062360 i f w e w a n t t h e d 0062400 e f i n i 376 001 \0 @ 215 t i o n , 0062420 w e a d d a n o d e t o 0062440 m b a s e ! m n a m e \r \r i f 0062460 m b a s e ! m n a m e e q 0062500 0 t h e n l o o p / / d o 0062520 n ' t w a n t t h i s d e 0062540 f \r \r i f ( f n t e q 2 ) 0062560 & ( t v e c > > i t e m . i t a 0062600 l i c e q 0 ) t h e n / 0062620 / a d d f o n t 1 s t r i 0062640 n g s t o l i s t \r [ 032 l 5 0062660 5 3 8 \r l e t s t p = L o 0062700 o k u p ( l v t v e c > > i t 0062720 e m . s t r i n g ) \r t e s t 0062740 s t p e q 0 \r \r i f s o 0062760 s t p = D e f i n e S y m b 0063000 o l ( l v t v e c 376 001 \0 333 317 > 0063020 > i t e m . s t r i n g , s t P 0063040 i n ) \r \r i f n o t s t p > > 0063060 s t r e c . t y p e = s t P 0063100 i n / / c h a n g e s y m b 0063120 o l t y p e t o p i n \r \r 0063140 / / a d d t o l i s t \r A 0063160 d d N o d e ( l v ( m b a s e 0063200 ! m n a m e ) , t v e c , 0 , 0 0063220 , b t S t r i n g , s t p ) \r l 0063240 o o p 032 l 6 8 0 8 \r ] \r \r i f 0063260 ( f n t e q 6 ) & ( t v e c 0063300 > > i t e m . i t a l i c e q 0063320 0 ) t h e n / / a d d a 0063340 n s c h a r i f t h e s 0063360 t r i n g f o n t 3 \r [ 032 l 0063400 5 5 3 8 \r i f t v e c > > i 376 0063420 001 \0 366 337 t e m . s t r i n g . l 0063440 e n g t h n e 1 t h e n 0063460 l o o p \r l e t c h = t v 0063500 e c > > i t e m . s t r i n g . 0063520 c h a r ^ 1 \r i f s e l e c t 0063540 o n c h i n t o \r [ 032 l 6 8 0063560 0 8 \r c a s e c h T c o n : \r 0063600 c a s e c h B c o n : \r c a s 0063620 e c h L c o n : \r c a s e c 0063640 h R c o n : t r u e \r d e f a 0063660 u l t : f a l s e 032 l 8 0 7 8 0063700 \r ] t h e n A d d N o d e 0063720 ( l v ( m b a s e ! m n a m e 0063740 ) , t v e c , 0 , 0 , b t S c h 0063760 a r , c h ) 032 l 6 8 0 8 \r ] \r \r 0064000 032 l 5 5 3 8 \r ] \r C l o s e s ( 0064020 s ) \r 032 376 001 \0 254 200 l 4 2 6 8 \r \r 0064040 ] \r \r a n d F i n d D i c t L 0064060 i b r a r i e s ( D i c t N a m 0064100 e ) b e / / g e t f p ' s 0064120 f o r S I L . L B 5 t o 0064140 S I L . L B 9 \r [ 032 \r l e t 0064160 L = 5 * D i r P r e a m b l 0064200 e S i z e + 1 0 * ( l C F A 0064220 + 1 ) \r L p r v e c = A l l 0064240 o c a t e ( S i l Z o n e , L 0064260 ) ; Z e r o ( L p r v e c , L 0064300 ) \r D p r v e c = L p r v e 0064320 c + 5 * D i r P r e a m b l 0064340 e S i z e \r \r / / f i r s t g 0064360 e t t h e l i b r a r y f 0064400 i l e p o i n t e r s f r o 0064420 m S i l . f p s 376 001 \0 332 | \r l 0064440 e t S = O p e n F i l e ( 0064460 " S i l . f p s " , k s T y p e 0064500 R e a d O n l y ) \r i f S e 0064520 q 0 d o C a l l S w a t ( 0064540 " C a n ' t g e t L i b r a 0064560 r y f i l e p o i n t e r s 0064600 ! ! ! - p l e a s e r u n 0064620 S i l / I . " ) \r \r f o r i 0064640 = 0 t o 4 * D i r P r e 0064660 a m b l e S i z e - 1 d o G 0064700 e t s ( S ) / / r e a d p a s 0064720 t t h e f o n t f p ' s \r 0064740 f o r i = 0 t o 5 * D 0064760 i r P r e a m b l e S i z e - 1 0065000 d o L p r v e c ! i = G 0065020 e t s ( S ) / / r e a d 376 001 0065040 \0 - 345 t h e L i b r a r y f 0065060 p ' s \r C l o s e s ( S ) 032 l 4 0065100 2 6 8 \r / / e n t r i e s n o 0065120 t f o u n d w i l l g e n 0065140 e r a t e a p p r o p r i a t 0065160 e e r r o r s l a t e r i 0065200 f t h e l i b r a r i e s 0065220 w e r e n e e d e d \r \r / / n 0065240 o w g e t t h e f i r s t 0065260 d i c t i o n a r y n a m e 0065300 b y l o o k i n g i n u 0065320 s e r . c m \r S = O p e n F 0065340 i l e ( " U s e r . c m " , k s 0065360 T y p e R e a d O n l y , 1 , 0 0065400 , f p U s e r C m , 0 , S i l Z 0065420 o n e ) / / o p e n f o r 0065440 b y t 376 001 \0 276 305 e s \r i f S 0065460 e q 0 t h e n C a l l S w 0065500 a t ( " C a n ' t o p e n U 0065520 s e r . c m " ) \r \r l e t s t 0065540 r = v e c 1 2 8 \r l e t 0065560 g o t s i l , g o t A = f a 0065600 l s e , f a l s e \r [ 032 l 4 2 6 0065620 8 \r s w i t c h o n R e a d U 0065640 s e r C m I t e m ( S , s t r ) 0065660 i n t o \r [ 032 l 5 5 3 8 \r c a 0065700 s e $ N : g o t s i l = 0065720 S t E q ( s t r , " S I L " , 0065740 n i l ) \r e n d c a s e \r \r c a 0065760 s e $ L : \r u n l e s s 0066000 g o t s i l t h e n e n d c 0066020 a s e \r i f s t r > > s t r . 0066040 l e n g t h g 376 001 \0 337 336 r 1 0066060 t h e n e n d c a s e \r i f 0066100 s t r > > s t r . c h a r ^ 1 0066120 e q $ A t h e n g o t A 0066140 = t r u e / / f o u n d 0066160 A n a l y s e e n t r y \r i 0066200 f s t r > > s t r . c h a r ^ 0066220 1 e q $ a t h e n g o t 0066240 A = t r u e / / f o u n 0066260 d A n a l y s e e n t r y \r 0066300 e n d c a s e \r \r c a s e $ P 0066320 : i f g o t A e q 0 t 0066340 h e n e n d c a s e \r c a 0066360 s e $ E : C l o s e s ( S 0066400 ) ; b r e a k / / e n d o f 0066420 s t r e a m o r d o n e \r 0066440 \r ] 032 l 5 5 3 8 \r ] r e 376 \0 355 0066460 252 m p e a t \r \r \r D i c t N a m 0066500 e ! 0 = 0 \r i f ( g o t A 0066520 e q f a l s e ) % ( s t 0066540 r > > s t r . l e n g t h l e 0066560 2 ) d o \r \t [ A p p e n d 0066600 S ( " D i c t . A n a l y z e " 0066620 , D i c t N a m e ) ; r e t u 0066640 r n ] \r f o r i = 1 t 0066660 o s t r > > s t r . l e n g t 0066700 h d o \r \t [ \r \t l e t c = 0066720 s t r > > s t r . c h a r ^ i 0066740 \r \t i f c l e $ * s t h 0066760 e n b r e a k \r \t A p p e n d 0067000 C ( c , D i c t N a m e ) \r \t ] 0067020 \r 032 l 4 2 6 8 \r ] \r 032 \r \r 032 \r 377 0067040 \0 \0 a n c . b c p l \0 376 001 \0 303 C 0067060 / / a n c . b c p l \r / / n e w 0067100 a n a l y z e r f o r s i 0067120 l f i l e s \r \r / / l a s t 0067140 m o d i f i e d b y M c C 0067160 r e i g h t , N o v e m b e r 0067200 1 5 , 1 9 7 7 1 0 : 5 0 0067220 A M \r g e t " s y s d e f s 0067240 . d " \r g e t " a n a . d e f 0067260 s " \r \r / / P R I N T 0067300 I N T E R N A 0067320 L D A T A S T 0067340 R U C T U R E S \r 0067360 \r \r s t a t i c \r [ \r p r i n t 0067400 s y m s = f a l s e / / t 0067420 h e s e t h i n g s a r e 0067440 n o r m a l l y u s e d a n 0067460 376 001 \0 327 g d g e n e r a t e 0067500 m u c h \r / / p r i n t i n g . 0067520 t h e y m a y b e t u 0067540 r n e d o n u s i n g S w 0067560 a t \r p r i n t l i b s = f 0067600 a l s e \r ] \r \r l e t P r i n 0067620 t S t r u c t s ( ) b e \r [ 032 0067640 ( 6 3 5 ) \r / / f i r s t , p 0067660 r i n t a l l t h e m a c 0067700 r o n a m e s w h i c h a 0067720 r e u s e d \r W s s ( E r F i 0067740 l e , " * n * n M A C R O S U 0067760 S E D : " ) \r f o r i = 8 0070000 t o 1 3 d o P r i n t M 0070020 a c s ( i ) \r \r / / p r i n t 0070040 t h e d e f i n i t i o n s 0070060 i n t h 376 001 \0 \r 222 e l i b r 0070100 a r y f o n t s \r i f p r i 0070120 n t l i b s t h e n \r [ 032 l 4 0070140 2 6 8 \r W s s ( E r F i l e , " 0070160 * n * n L I B R A R Y M A C R 0070200 O D E F I N I T I O N S : " ) 0070220 \r f o r i = 8 t o 1 3 0070240 d o P r i n t L i b D e f s ( 0070260 i ) 032 l 5 5 3 8 \r ] \r \r / / p r 0070300 i n t t h e c o n t e n t s 0070320 o f t h e s y m b o l t 0070340 a b l e \r i f p r i n t s y m 0070360 s t h e n \r [ 032 l 4 2 6 8 \r W 0070400 s s ( E r F i l e , " * n * n S 0070420 Y M B O L T A B L E : " ) \r f 0070440 o r i = 0 t o h t s i 0070460 z e - 1 d o \r [ 032 376 001 \0 ~ 370 l 0070500 5 5 3 8 \r l e t l i n k = 0070520 h a s h t a b ! i \r u n t i l 0070540 l i n k e q 0 d o \r [ 032 l 0070560 6 8 0 8 \r P r i n t S t r e c ( 0070600 l i n k ) \r l i n k = @ l i 0070620 n k 032 l 6 8 0 8 \r ] 032 l 6 8 0 8 0070640 \r ] \r 032 l 5 5 3 8 \r ] \r \r / / c 0070660 o m p o n e n t s \r P r i n t T 0070700 h i n g s ( " C O M P O N E N T 0070720 S : " , P r i n t C o m p , C o 0070740 m p s ) \r \r / / v e r t i c a l 0070760 l i n e s \r P r i n t T h i n 0071000 g s ( " V E R T I C A L L I N 0071020 E S : " , P r i n t L i n e , V 0071040 l i n e s ) \r \r / / h o r i z o 0071060 n t a l l i n e s \r P r i n 376 0071100 001 \0 366 206 t T h i n g s ( " H O R 0071120 I Z O N T A L L I N E S : " , 0071140 P r i n t L i n e , H l i n e s 0071160 ) \r \r / / s t r i n g s \r P r i 0071200 n t T h i n g s ( " S T R I N G 0071220 S : " , P r i n t N o d e , S t 0071240 r i n g s ) \r \r / / n u m b e r 0071260 s \r P r i n t T h i n g s ( " N 0071300 U M B E R S : " , P r i n t N o 0071320 d e , N u m b e r s ) \r \r / / b 0071340 o a r d l o c a t i o n s a 0071360 n d g r o u p s \r P r i n t T 0071400 h i n g s ( " B O A R D L O C 0071420 A T I O N S A N D P A C K A 0071440 G E G R O U P S : " , P r i n 0071460 t N o d e , L o c g r o u p s ) 0071500 \r \r / / 376 001 \0 , 207 s p e c i a l 0071520 f o n t 3 c h a r a c t e r 0071540 s \r P r i n t T h i n g s ( " S 0071560 P E C I A L C H A R A C T E R 0071600 S : " , P r i n t N o d e , S c 0071620 h a r s ) \r 032 l 4 2 6 8 \r ] \r \r 0071640 a n d P r i n t M a c s ( f o 0071660 n t ) b e \r [ 032 \r l e t v 0071700 = v e c 1 2 8 ; v ! 0 = 0071720 0 \r A p p e n d C ( $ * n , v 0071740 ) \r A p p e n d N ( f o n t - 4 0071760 , v ) / / u s e r f o n t 0072000 n u m b e r \r A p p e n d S ( " 0072020 : " , v ) \r l e t m b a s e 0072040 = M a c t + 1 2 8 * ( f o 0072060 n t - 8 ) \r f o r i = 0 0072100 t o 1 2 7 d o 376 001 \0 t * i 0072120 f m b a s e ! i n e 0 t 0072140 h e n \r [ 032 l 4 2 6 8 \r i f i 0072160 l s # 4 0 t h e n / / s 0072200 h o u l d n ' t b e a n y 0072220 c o n t r o l c h a r . m a 0072240 c r o s \r [ 032 l 5 5 3 8 \r A p p 0072260 e n d C ( $ ^ , v ) \r A p p e n 0072300 d C ( $ A + i , v ) \r l o o p 032 0072320 l 6 8 0 8 \r ] \r A p p e n d C ( 0072340 i , v ) 032 l 5 5 3 8 \r ] \r W s s 0072360 ( E r F i l e , v ) 032 l 4 2 6 8 0072400 \r ] \r \r a n d P r i n t L i b 0072420 D e f s ( f o n t ) b e \r [ 032 0072440 \r l e t m b a s e = M a c 0072460 t + 1 2 8 * ( f o n t - 8 ) / 0072500 / i n t e r n a l f o n t 376 001 0072520 \0 017 300 n u m b e r \r f o r i 0072540 = 0 t o 1 2 7 d o \r [ 0072560 032 l 4 2 6 8 \r i f m b a s e ! 0072600 i e q 0 t h e n l o o p 0072620 \r l e t v = v e c 1 2 8 0072640 ; v ! 0 = 0 \r A p p e n d S ( " 0072660 * n * n F o n t : " , v ) \r A 0072700 p p e n d N ( f o n t - 4 , v ) 0072720 \r A p p e n d S ( " C h a r : 0072740 " , v ) \r i f i l s # 4 0072760 0 t h e n A p p e n d C ( $ 0073000 ^ , v ) \r A p p e n d C ( i l 0073020 s # 4 0 ? i + $ A , i , v ) \r 0073040 A p p e n d S ( " L i n k = " 0073060 , v ) \r l e t l i n k = m 0073100 b a s e ! i \r A p p e n d B ( l 0073120 i n k 376 001 \0 006 M , v ) \r W s s ( 0073140 E r F i l e , v ) \r \r u n t i l 0073160 ( l i n k e q 0 ) % ( l i 0073200 n k e q - 1 ) d o / / p 0073220 o s s i b l e t h a t d e f 0073240 i n i t i o n i s n o t t 0073260 h e r e \r [ 032 l 5 5 3 8 \r l e t 0073300 b t y p e = l i n k > > n 0073320 o d e . t y p e \r i f ( b t y 0073340 p e e q b t S t r i n g ) % 0073360 ( b t y p e e q b t S c h a 0073400 r ) t h e n P r i n t N o d 0073420 e ( l i n k ) \r \r l i n k = 0073440 @ l i n k 032 l 6 8 0 8 \r ] \r 032 l 0073460 5 5 3 8 \r ] 032 l 4 2 6 8 \r ] \r \r 0073500 \r \r a n d P r i n t S t r e c 0073520 ( s t p ) b e 376 001 \0 302 303 \r [ 032 0073540 \r l e t v = v e c 1 2 8 0073560 ; v ! 0 = 0 \r A p p e n d 0073600 C ( $ * n , v ) \r A p p e n d B 0073620 ( s t p , v ) \r l e t s = 0073640 s e l e c t o n s t p > > s t 0073660 r e c . t y p e i n t o \r [ 032 0073700 l 4 2 6 8 \r c a s e s t C o m 0073720 p : " : C o m p o n e n t 0073740 p r i n t n a m e : ' " \r c 0073760 a s e s t P i n : " : P i 0074000 n N a m e : ' " \r c a s e 0074020 s t S i g : " : S i g n a l 0074040 N a m e : ' " \r c a s e s 0074060 t R c o m p : " : C o m p o 0074100 n e n t r e a l n a m e : 0074120 ' " \r c a s e s t B r d 376 001 \0 0074140 253 O l o c : " : B o a r d 0074160 l o c a t i o n : ' " \r d e f 0074200 a u l t : " : E R R O R : 0074220 ' " 032 l 5 5 3 8 \r ] \r \r A p p e 0074240 n d S ( s , v ) \r A p p e n d S 0074260 ( l v ( s t p > > s t r e c . s 0074300 t ) , v ) \r A p p e n d C ( $ ' 0074320 , v ) \r W s s ( E r F i l e , v 0074340 ) 032 l 4 2 6 8 \r ] \r \r a n d P 0074360 r i n t T h i n g s ( h d r s , 0074400 p r i n t f n , l i s t ) b e \r 0074420 [ 032 \r W s s ( E r F i l e , " * 0074440 n * n " ) \r W s s ( E r F i l e 0074460 , h d r s ) \r l e t l i n k 0074500 = l i s t \r u n t i l l i n 0074520 k e q 0 d o \r [ 032 l 4 2 6 0074540 8 \r 376 001 \0 241 \ p r i n t f n ( l 0074560 i n k ) \r l i n k = @ l i n 0074600 k 032 l 5 5 3 8 \r ] 032 l 4 2 6 8 \r 0074620 ] \r \r a n d P r i n t L i n e 0074640 ( p t r ) b e \r [ 032 \r l e t 0074660 v = v e c 1 2 8 ; v ! 0 = 0074700 0 \r A p p e n d C ( $ * n , v ) 0074720 \r A p p e n d B ( p t r , v ) \r 0074740 A p p e n d S ( " : ( " , v ) 0074760 \r A p p e n d N ( p t r > > l e 0075000 n d . x , v ) \r A p p e n d C ( 0075020 $ , , v ) \r A p p e n d N ( p t 0075040 r > > l e n d . y , v ) \r A p p 0075060 e n d S ( p t r > > l e n d . m 0075100 a r k e d e q 0 ? " ) n o 0075120 m a r k , " , " ) m a r k e 0075140 d , " , v ) 376 001 \0 / 305 \r A p p 0075160 e n d S ( p t r > > l e n d . h 0075200 a s s i g e q 0 ? " n o " , 0075220 " h a s " , v ) \r A p p e n d S 0075240 ( " s i g , c p 0 - 2 : " , 0075260 v ) \r f o r i = 0 t o 0075300 2 d o \r [ 032 l 4 2 6 8 \r A p p 0075320 e n d C ( $ * s , v ) \r A p p e 0075340 n d B ( p t r > > l e n d . c p 0075360 ^ i , v ) 032 l 5 5 3 8 \r ] \r W s 0075400 s ( E r F i l e , v ) \r 032 l 4 2 0075420 6 8 \r ] \r \r a n d P r i n t N 0075440 o d e ( p t r ) b e \r [ 032 \r l 0075460 e t v = v e c 1 2 8 ; v 0075500 ! 0 = 0 ; A p p e n d C ( $ * n 0075520 , v ) \r A p p e n d B ( p t r , 0075540 v ) \r A p p e n d S ( p 376 001 \0 S 0075560 346 t r > > n o d e . u s e d e 0075600 q 0 ? " : f r e e " , " 0075620 : u s e d " , v ) \r A p 0075640 p e n d B ( p t r > > n o d e . 0075660 a s s o c , v ) \r A p p e n d S 0075700 ( " ( " , v ) \r A p p e n d N 0075720 ( p t r > > n o d e . x , v ) \r 0075740 A p p e n d C ( $ , , v ) \r A p 0075760 p e n d N ( p t r > > n o d e . 0076000 y , v ) \r \r / / t h e w a y 0076020 t h e v a l u e i s p r i 0076040 n t e d d e p e n d s o n 0076060 t h e t y p e o f t h e 0076100 n o d e \r s w i t c h o n p t 0076120 r > > n o d e . t y p e i n t 0076140 o \r [ 032 l 4 2 6 8 \r c a s e b 0076160 t 376 001 \0 355 Q S t r i n g : \r [ 032 0076200 l 5 5 3 8 \r A p p e n d S ( " ) 0076220 S t r : ( " , v ) \r l e t 0076240 v a l = p t r > > n o d e . 0076260 v a l \r A p p e n d B ( v a l , 0076300 v ) \r A p p e n d S ( " ) T y 0076320 p e = " , v ) \r l e t s t y p 0076340 e = s e l e c t o n v a l 0076360 > > s t r e c . t y p e i n t 0076400 o \r [ 032 l 6 8 0 8 \r \r c a s e 0076420 s t C o m p : " C o m p n a m 0076440 e : ' " \r c a s e s t P i n 0076460 : " P i n N a m e : ' " \r c 0076500 a s e s t S i g : " S i g N 0076520 a m e : ' " \r c a s e s t R 0076540 c o m p : " C o m p R n a m e 0076560 : ' " \r d 376 001 \0 = W e f a u l 0076600 t : " E R R O R : ' " \r 032 l 0076620 8 0 7 8 \r ] \r A p p e n d S ( s 0076640 t y p e , v ) \r A p p e n d S ( 0076660 l v v a l > > s t r e c . s t 0076700 , v ) \r A p p e n d C ( $ ' , v 0076720 ) \r 032 l 6 8 0 8 \r ] \r e n d c a 0076740 s e \r \r c a s e b t N u m : \r 0076760 [ 032 l 5 5 3 8 \r A p p e n d S ( 0077000 " ) N u m b e r : " , v ) \r 0077020 A p p e n d N ( p t r > > n o d 0077040 e . v a l , v ) 032 l 6 8 0 8 \r ] 0077060 \r e n d c a s e \r \r c a s e b 0077100 t L o c g r o u p s : \r [ 032 l 5 0077120 5 3 8 \r A p p e n d S ( " ) B 0077140 l o c / G r p : " , v ) \r A p 0077160 p e n d S ( l v ( p 376 001 \0 245 ~ 0077200 t r > > n o d e . b l o c ) > > 0077220 s t r e c . s t , v ) \r A p p 0077240 e n d C ( p t r > > n o d e . g 0077260 r o u p + $ a - 1 , v ) 032 l 6 8 0077300 0 8 \r ] \r e n d c a s e \r \r c a 0077320 s e b t S c h a r : \r [ 032 l 5 0077340 5 3 8 \r A p p e n d S ( " ) S 0077360 c h a r ( f o n t 3 ) : " , 0077400 v ) \r A p p e n d C ( p t r > > 0077420 n o d e . v a l , v ) 032 l 6 8 0 0077440 8 \r ] \r e n d c a s e \r \r d e f 0077460 a u l t : 032 l 5 5 3 8 \r [ 032 l 5 0077500 5 3 8 \r A p p e n d S ( " ) E 0077520 R R O R : v a l i s # " , 0077540 v ) \r A p p e n d B ( p t r > > 0077560 n o d e . v a l , v ) 032 l 6 8 0 0077600 376 001 \0 017 S 8 \r ] 032 l 5 5 3 8 \r ] 0077620 \r \r W s s ( E r F i l e , v ) 032 0077640 l 4 2 6 8 \r ] \r \r a n d P r i 0077660 n t C o m p ( p t r ) b e \r [ 0077700 032 \r l e t v = v e c 1 2 0077720 8 ; v ! 0 = 0 \r l e t c p 0077740 s = p t r > > c o m p . c o 0077760 n p o i n t s \r A p p e n d S ( 0100000 " * n * n " , v ) \r A p p e n d 0100020 B ( p t r , v ) \r A p p e n d S 0100040 ( " : ( " , v ) \r A p p e n d 0100060 N ( p t r > > c o m p . x m i n 0100100 , v ) \r A p p e n d C ( $ * s , 0100120 v ) \r A p p e n d N ( p t r > > 0100140 c o m p . y m i n , v ) \r A p p 0100160 e n d C ( $ * s , v ) \r A p p e 0100200 n d N ( p 376 001 \0 317 V t r > > c o 0100220 m p . x m a x , v ) \r A p p e n 0100240 d C ( $ * s , v ) \r A p p e n d 0100260 N ( p t r > > c o m p . y m a x 0100300 , v ) \r A p p e n d S ( " ) 0100320 F o n t : " , v ) \r A p p e n 0100340 d N ( ( ( p t r > > c o m p . m 0100360 i n d e x ) / 1 2 8 ) + 4 , v ) 0100400 \r A p p e n d S ( " C h a r : 0100420 " , v ) \r A p p e n d C ( ( p 0100440 t r > > c o m p . m i n d e x ) 0100460 r e m 1 2 8 , v ) \r A p p e n 0100500 d S ( " " , v ) \r A p p e 0100520 n d B ( c p s , v ) \r W s s ( E 0100540 r F i l e , v ) \r i f c p s 0100560 n e 0 t h e n / / p r i n 0100600 t t h e c o n n 376 001 \0 \v 260 e 0100620 c t i o n p o i n t b l o c 0100640 k \r [ 032 l 4 2 6 8 \r v ! 0 = 0100660 0 \r A p p e n d S ( " * n * t " 0100700 , v ) \r t e s t c p s > > c o 0100720 m p b l o c k . c o m p t y p e 0100740 e q 0 \r i f s o A p p e n 0100760 d S ( " N o t y p e " , v ) \r i 0101000 f n o t \r [ 032 l 5 5 3 8 \r A p p 0101020 e n d S ( l v ( ( c p s > > c 0101040 o m p b l o c k . c o m p t y p 0101060 e ) > > s t r e c . s t ) , v ) 0101100 \r A p p e n d S ( " ( " , v ) 0101120 \r A p p e n d S ( l v ( ( ( c p 0101140 s > > c o m p b l o c k . c o m 0101160 p t y p e ) > > s t r e c . r n 0101200 a m e ) > > s t r e c . s t ) 376 0101220 001 \0 : 256 , v ) \r A p p e n d S ( 0101240 " ) " , v ) 032 l 6 8 0 8 \r ] \r A 0101260 p p e n d C ( $ * s , v ) \r A p 0101300 p e n d S ( l v ( c p s > > c 0101320 o m p b l o c k . b o a r d l o 0101340 c ) > > s t r e c . s t , v ) 0101360 \r A p p e n d C ( ( c p s > > c 0101400 o m p b l o c k . g r o u p ) + 0101420 $ a - 1 , v ) \r W s s ( E r F i 0101440 l e , v ) \r f o r i = 1 0101460 t o c p s > > c o m p b l o c 0101500 k . n u m c p o i n t s d o \r 0101520 [ 032 l 5 5 3 8 \r v ! 0 = 0 \r A p 0101540 p e n d S ( " * n * t " , v ) \r 0101560 A p p e n d N ( c p s > > c o m 0101600 p b l o c k . p i n ^ i , v ) \r 0101620 A p p e 376 001 \0 024 - n d S ( " : 0101640 ( " , v ) \r A p p e n d N ( c p 0101660 s > > c o m p b l o c k . x ^ i 0101700 , v ) \r A p p e n d C ( $ , , v 0101720 ) \r A p p e n d N ( c p s > > c 0101740 o m p b l o c k . y ^ i , v ) \r 0101760 A p p e n d S ( " ) ' " , v ) 0102000 \r l e t p n = c p s > > c 0102020 o m p b l o c k . p i n n a m e 0102040 ^ i \r t e s t p n e q 0 \r 0102060 i f s o A p p e n d S ( " n o 0102100 p i n n a m e " , v ) \r i f n o 0102120 t A p p e n d S ( l v ( p n > 0102140 > s t r e c . s t ) , v ) \r A p 0102160 p e n d S ( " ' " , v ) \r A p 0102200 p e n d S ( s e l e c t o n c 0102220 p s > > c o m p b 376 \0 341 206 314 l o 0102240 c k . c p t ^ i i n t o \r [ 032 0102260 l 6 8 0 8 \r c a s e c p t T o 0102300 p : " t o p " \r c a s e c 0102320 p t B o t : " b o t t o m " \r 0102340 c a s e c p t L e f t : " l 0102360 e f t " \r c a s e c p t R i 0102400 g h t : " r i g h t " \r d e 0102420 f a u l t : " b a d c p t 0102440 y p e " 032 l 8 0 7 8 \r ] \r , v 0102460 ) \r A p p e n d B ( c p s > > c 0102500 o m p b l o c k . c o n n ^ i , 0102520 v ) \r W s s ( E r F i l e , v ) 0102540 032 l 6 8 0 8 \r ] 032 l 5 5 3 8 \r ] 0102560 \r \r 032 l 4 2 6 8 \r ] \r \r \r 032 \r 377 0102600 \0 \0 a n d . b c p l \0 376 001 \0 363 z 0102620 / / a n d . b c p l \r / / n e w 0102640 a n a l y z e r f o r s i 0102660 l f i l e s \r \r g e t " s y 0102700 s d e f s . d " \r g e t " a l 0102720 t o f i l e s y s . d " \r g e t 0102740 " a n a . d e f s " \r \r \r \r / 0102760 / R E A D C O M 0103000 P O N E N T D I 0103020 C T I O N A R Y 0103040 \r \r l e t G e t C o m p N a m 0103060 e s ( d i c t c n t , f n a m e 0103100 ) = v a l o f \r [ 032 ( 6 3 5 ) 0103120 \r l e t n e w f p D i c t = 0103140 D p r v e c + d i c t c n 0103160 t * ( l C F A + 1 ) + 1 \r i f 0103200 n e w f p D i c t ! - 1 e q 0103220 376 001 \0 B 213 - 1 t h e n r e s 0103240 u l t i s d i c t c n t / 0103260 / f i l e n o t p r e s e n 0103300 t \r t e s t n e w f p D i c t 0103320 e q f p D i c t 032 l 4 2 6 8 0103340 \r i f s o R e s e t s ( d i c 0103360 t ) \r i f n o t \r [ 032 l 5 5 3 8 0103400 \r i f d i c t n e 0 t h 0103420 e n C l o s e s ( d i c t ) \r 0103440 f p D i c t = n e w f p D i 0103460 c t \r d i c t = O p e n F i 0103500 l e ( f n a m e , k s T y p e R 0103520 e a d O n l y , 1 , 0 , f p D i 0103540 c t , 0 , S i l Z o n e ) \r i f 0103560 d i c t e q 0 t h e n 0103600 t e s t d i c t c n t e q 0103620 0 \r \t i f 376 001 \0 362 317 s o [ C 0103640 a l l S w a t ( " C a n ' t o 0103660 p e n f i r s t D i c t i o 0103700 n a r y : " , f n a m e ) ; r 0103720 e s u l t i s 0 ] \r \t i f n 0103740 o t \r \t \t [ \r \t \t E r r 2 ( " * 0103760 n C o u l d n ' t o p e n D 0104000 i c t i o n a r y f i l e " 0104020 , f n a m e , n o E r r o r ) \r 0104040 \t \t f p D i c t ! - 1 = - 1 0104060 / / m a r k s o w e w o n 0104100 ' t t r y a g a i n \r \t \t r 0104120 e s u l t i s d i c t c n t \r 0104140 \t \t ] 032 l 6 8 0 8 \r ] 032 l 5 5 3 0104160 8 \r \r l e t p n a m e = v 0104200 e c 3 2 ; l e t r n a m e 0104220 = v e c 3 2 / 376 001 \0 G 330 / 0104240 p r i n t n a m e s a n d 0104260 r e a l n a m e s \r l e t c 0104300 o m p c n t = 0 \r w h i l e 0104320 R e a d H d r ( p n a m e , r 0104340 n a m e , d i c t ) d o / / 0104360 u n u s u a l t e r m i n a t 0104400 i o n o n @ o r e o f \r 0104420 [ 032 l 4 2 6 8 \r i f S t E q ( 0104440 " g e t " , p n a m e ) t h e 0104460 n / / g e t a n e w 0104500 d i c t i o n a r y \r [ 032 l 5 5 0104520 3 8 \r i f d i c t c n t e q 0104540 8 t h e n \r \t [ E r r 2 ( 0104560 " * n T o m a n y D i c t i 0104600 o n a r y f i l e s , s k i 0104620 p p e d " , r n a m e , n o 376 0104640 001 \0 ^ 346 E r r o r ) ; l o o p 0104660 ] \r G e t C o m p l e t e F a 0104700 ( d i c t , f p D i c t ) / 0104720 / s a v e c u r r e n t f i 0104740 l e p o s i t i o n \r d i c t 0104760 c n t = G e t C o m p N a m 0105000 e s ( d i c t c n t + 1 , r n a 0105020 m e ) \r i f d i c t n e 0 0105040 t h e n C l o s e s ( d i c 0105060 t ) / / d i c t e q 0 0105100 i f n e w d i c t i s n 0105120 o t p r e s e n t \r f p D i c 0105140 t = n e w f p D i c t / 0105160 / n o w r e s t o r e f i l 0105200 e p o s i t i o n a n d p 0105220 r o c e e d \r d i c t = O p 0105240 e n F i 376 001 \0 257 $ l e ( 0 , k s 0105260 T y p e R e a d O n l y , 1 , 0 0105300 , f p D i c t , 0 , S i l Z o n 0105320 e ) \r J u m p T o F a ( d i c t 0105340 , l v f p D i c t > > C F A . 0105360 f a ) \r l o o p 032 l 6 8 0 8 \r ] 0105400 \r l e t p s t p = L o o k u p 0105420 ( p n a m e ) \r i f p s t p 0105440 e q 0 t h e n l o o p / 0105460 / t h i s c o m p o n e n t 0105500 n o t u s e d \r / / c h a n g 0105520 e t h e t y p e f i e l d 0105540 i n t h e s y m b o l t 0105560 a b l e t o t y p e s t C 0105600 o m p \r c o m p c n t = c o 0105620 m p c n t + 1 \r p s t p > > s t 0105640 r e c . t y p e 376 001 \0 315 004 = 0105660 s t C o m p \r l e t r s t p 0105700 = L o o k u p ( r n a m e ) 0105720 / / c o m p o n e n t ' s r e 0105740 a l n a m e \r t e s t r s t 0105760 p e q 0 \r i f n o t \r [ 032 l 0106000 5 5 3 8 \r l e t t y p e = 0106020 r s t p > > s t r e c . t y p e 0106040 \r i f ( t y p e n e s t C 0106060 o m p ) & ( t y p e n e 0106100 s t R c o m p ) t h e n \r E r 0106120 r 2 ( " * n C o m p o n e n t 0106140 r e a l n a m e c o n f l i 0106160 c t s w i t h o t h e r s 0106200 y m b o l t y p e : " , r n 0106220 a m e ) / / t h i s i s n 0106240 o t f a t a l \r 032 l 6 8 0 376 001 0106260 \0 2 322 8 \r ] \r \r i f s o r s t 0106300 p = D e f i n e S y m b o l 0106320 ( r n a m e , s t R c o m p ) \r 0106340 p s t p > > s t r e c . r n a m 0106360 e = r s t p 032 l 5 5 3 8 \r ] 0106400 \r G e t C o m p l e t e F a ( d 0106420 i c t , f p D i c t ) / / t 0106440 h i s s a v e s a f i l e 0106460 p o i n t e r t o t h e 0106500 f i r s t " @ " i n t h e 0106520 f i l e \r f p D i c t ! - 1 0106540 = c o m p c n t / / i f 0106560 0 t h e n t h i s d i c t 0106600 i s n o t u s e d \r r e s 0106620 u l t i s d i c t c n t 032 l 4 0106640 2 6 8 \r ] \r \r \r a n d R e a d 0106660 H d r 376 001 \0 312 221 ( s 1 , s 2 , s 0106700 t r e a m ) = v a l o f \r [ 0106720 032 \r i f E n d o f s ( s t r e 0106740 a m ) t h e n r e s u l t i 0106760 s f a l s e \r s 1 ! 0 = 0 0107000 ; s 2 ! 0 = 0 \r l e t t 0107020 c 1 = R e a d N a m e ( s 1 0107040 , s t r e a m ) \r i f ( t c 1 0107060 n e $ = ) & ( t c 1 n 0107100 e $ _ ) t h e n \r [ 032 l 4 2 0107120 6 8 \r i f t c 1 e q $ @ 0107140 t h e n r e s u l t i s f a 0107160 l s e \r i f ( t c 1 e q $ 0107200 ; ) % ( t c 1 e q $ | ) 0107220 d o [ F l u s h L i n e ( 0107240 s t r e a m ) ; l o o p ] 0107260 / / c o m m e n 376 001 \0 1 < t l 0107300 i n e \r \r i f t c 1 e q $ 0107320 * n t h e n l o o p / / b 0107340 l a n k l i n e \r \r / / s o m 0107360 e t y p e o f e r r o r \r 0107400 A p p e n d C ( t c 1 , s 1 ) \r 0107420 u n t i l E n d o f s ( s t r 0107440 e a m ) % ( t c 1 e q $ * n 0107460 ) d o \r [ 032 l 5 5 3 8 \r t c 1 0107500 = G e t s ( s t r e a m ) \r 0107520 A p p e n d C ( t c 1 , s 1 ) 032 0107540 l 6 8 0 8 \r ] \r \r E r r 2 ( " * 0107560 N S t r a n g e e n t r y i 0107600 n d i c t i o n a r y h e a 0107620 d e r : " , s 1 ) \r l o o p 0107640 / / t h r o w a w a y t h i 0107660 s l i n e a n d g o 376 001 \0 0107700 246 210 o n t o t h e n e x 0107720 t 032 l 5 5 3 8 \r ] \r \r / / g o t 0107740 p r i n t n a m e , g e t 0107760 r e a l n a m e n o w \r l 0110000 e t t c 2 = R e a d N a m 0110020 e ( s 2 , s t r e a m ) \r s w i 0110040 t c h o n t c 2 i n t o \r [ 0110060 032 l 4 2 6 8 \r c a s e $ ; : 0110100 / / l i n e e n d s i n a 0110120 c o m m e n t \r \t F l u s h L 0110140 i n e ( s t r e a m ) \r \t r e s 0110160 u l t i s t r u e \r \r c a s e 0110200 $ > : \t \t / / p s e u d o 0110220 c a r r a g e r e t u r n \r 0110240 c a s e $ * n : r e s u l 0110260 t i s t r u e \r \r d e f a u l 0110300 t : 376 001 \0 233 1 / / s o m e 0110320 f u n n y \r [ 032 l 5 5 3 8 \r A p 0110340 p e n d C ( t c 1 , s 1 ) \r A p 0110360 p e n d S ( s 2 , s 1 ) \r A p p 0110400 e n d C ( t c 2 , s 1 ) \r u n t 0110420 i l E n d o f s ( s t r e a m 0110440 ) % ( t c 2 e q $ * n ) d 0110460 o \r [ 032 l 6 8 0 8 \r t c 2 = 0110500 G e t s ( s t r e a m ) \r A p p 0110520 e n d C ( t c 2 , s 1 ) 032 l 8 0 0110540 7 8 \r ] \r \r E r r 2 ( " * n S t 0110560 r a n g e e n t r y i n d 0110600 i c t i o n a r y h e a d e r 0110620 : " , s 1 ) \r l o o p / / d 0110640 i s c a r d f u n n y l i n 0110660 e 032 l 6 8 0 8 \r ] 032 l 5 5 3 8 \r 0110700 ] 032 l 4 2 6 8 376 001 \0 267 334 \r ] r 0110720 e p e a t \r \r \r \r a n d R e a 0110740 d N a m e ( s t r i n g , s t r 0110760 e a m ) = v a l o f \r [ 032 \r 0111000 l e t c = G e t s ( s t r 0111020 e a m ) \r i f c e q # 3 2 0111040 t h e n c = $ ; / / 0111060 ^ Z : c o n v e r t B r a v 0111100 o f o r m a t i n t o a 0111120 c o m m e n t \r i f ( c e q 0111140 $ * n ) % ( c e q $ = ) % 0111160 ( c e q $ @ ) % ( c e q 0111200 $ ; ) % ( c e q $ | ) % ( c 0111220 e q $ > ) t h e n r e s 0111240 u l t i s c \r i f c l e 0111260 $ * s t h e n l o o p / / 0111300 c o n t r o l c h a r 376 \0 x 7 0111320 307 a c t e r \r A p p e n d C ( c 0111340 , s t r i n g ) 032 l 4 2 6 8 \r i 0111360 f s t r i n g > > s t r . l e 0111400 n g t h g r 6 0 d o C a 0111420 l l S w a t ( " N a m e i n 0111440 D i c t t o l o n g : " , s 0111460 t r i n g ) 032 l 4 2 6 8 \r ] r 0111500 e p e a t \r \r 032 \r 377 \0 \0 a n e . 0111520 b c p l \0 376 001 \0 251 2 / / a n e . 0111540 b c p l \r / / n e w a n a l y 0111560 z e r f o r s i l f i l e 0111600 s \r \r g e t " s y s d e f s . 0111620 d " \r g e t " a n a . d e f s 0111640 " \r \r \r / / B U I L D 0111660 C O M P O N E N 0111700 T B L O C K S 0111720 F R O M M A C 0111740 T \r \r l e t A d d C o m p s ( 0111760 ) b e \r [ 032 ( 6 3 5 ) \r f o 0112000 r c h a r = $ 0 t o $ 0112020 9 d o B u i l d T e m p l a 0112040 t e ( 8 , c h a r ) \r f o r f 0112060 o n t = 9 t o 1 3 d o 0112100 \r [ 032 l 4 2 6 8 \r f o r c h a 0112120 r = 0 t o 1 376 001 \0 C 200 2 0112140 7 d o B u i l d T e m p l a 0112160 t e ( f o n t , c h a r ) 032 l 5 0112200 5 3 8 \r ] 032 l 4 2 6 8 \r ] \r \r a 0112220 n d B u i l d T e m p l a t e 0112240 ( f o n t , c h a r ) b e 032 \r 0112260 [ 032 \r / / m a k e a t e m 0112300 p l a t e f o r t h e m a 0112320 c r o d e f i n e d a t f 0112340 o n t , c h a r \r l e t p t r 0112360 = @ ( M a c t + ( f o n t - 0112400 8 ) * 1 2 8 + c h a r ) \r i f 0112420 p t r e q 0 t h e n r e 0112440 t u r n \r \r l e t m f a t a l 0112460 = f a l s e \r l e t n u m 0112500 t n a m e s = 0 \r l e t n 0112520 u m c p o i n t s = 0 \r l 376 0112540 001 \0 2 Q e t n u m p n a m e s 0112560 = 0 \r \r / / f i r s t , c 0112600 o u n t t h e n u m b e r 0112620 o f t y p e n a m e s t r 0112640 i n g s i n t h e d e f i 0112660 n i t i o n \r / / a n d t h e 0112700 n u m b e r o f c o n n e 0112720 c t i o n p o i n t s a n d 0112740 p i n n a m e s . \r / / a l 0112760 s o c h e c k f o r o v e 0113000 r l a p p i n g c o n n e c t 0113020 i o n p o i n t s \r \r l e t 0113040 l i n k = p t r ; u n t i 0113060 l ( l i n k e q 0 ) % ( l 0113100 i n k e q - 1 ) d o \r [ 032 0113120 l 4 2 6 8 \r l e t b t y p e 0113140 = l i 376 001 \0 005 214 n k > > n o d 0113160 e . t y p e \r i f b t y p e 0113200 e q b t S t r i n g t h e n 0113220 \r [ 032 l 5 5 3 8 \r l e t s t p 0113240 = l i n k > > n o d e . v a 0113260 l / / s y m b o l t a b l e 0113300 p t r \r l e t s t t y p e 0113320 = s t p > > s t r e c . t y p 0113340 e / / s y m b o l t y p e \r 0113360 s w i t c h o n s t t y p e 0113400 i n t o \r [ 032 l 6 8 0 8 \r c a s 0113420 e s t R c o m p : \r c a s e 0113440 s t C o m p : \r l i n k > > n 0113460 o d e . u s e d = 1 ; n u m 0113500 t n a m e s = n u m t n a m 0113520 e s + 1 ; e n d c a s e / / m 0113540 a r k t h e n 376 001 \0 K { o d 0113560 e u s e d s o t h a t \r / 0113600 / i t w o n ' t b e c o n 0113620 s i d e r e d a s a p i n 0113640 n a m e b y F i n d B e s 0113660 t N a m e \r \r c a s e s t P i 0113700 n : n u m p n a m e s = n 0113720 u m p n a m e s + 1 ; e n d c 0113740 a s e \r \r d e f a u l t : \r E r 0113760 r M ( " * n N a m e i n c o 0114000 m p d e f h a s w r o n g 0114020 s y m b o l t y p e : " , f o 0114040 n t , c h a r , l v ( s t p > 0114060 > s t r e c . s t ) , l i n k ) 0114100 032 l 8 0 7 8 \r ] 032 l 6 8 0 8 \r ] 0114120 \r \r i f ( b t y p e e q b 0114140 t S c h a r ) & ( l i n k > 376 001 0114160 \0 274 & > n o d e . u s e d e q 0114200 0 ) t h e n / / n o n - d 0114220 u p l i c a t e c o n n e c t 0114240 i o n p o i n t \r [ 032 l 5 5 3 0114260 8 \r n u m c p o i n t s = n 0114300 u m c p o i n t s + 1 \r / / l o 0114320 o k f o r w a r d t h r o u 0114340 g h t h e l i s t a n d 0114360 s e a r c h f o r d u p l i 0114400 c a t e \r / / c p o i n t s . 0114420 M a r k t h e m u s e d 0114440 a n d c o m p l a i n \r l e t 0114460 x = l i n k > > n o d e . 0114500 x \r l e t y = l i n k > > 0114520 n o d e . y \r l e t l 2 = 0114540 @ l i n k ; u n t i l ( l 2 0114560 e q 376 001 \0 234 355 0 ) % ( l 2 0114600 e q - 1 ) d o \r [ 032 l 6 8 0 0114620 8 \r l e t t l = l 2 ; l 2 0114640 = @ l 2 \r i f t l > > n o 0114660 d e . t y p e e q b t S t r 0114700 i n g t h e n l o o p \r i f 0114720 t l > > n o d e . u s e d t 0114740 h e n l o o p / / a l r e a 0114760 d y a d u p l i c a t e \r i 0115000 f ( t l > > n o d e . x e q 0115020 x ) & ( t l > > n o d e . y 0115040 e q y ) t h e n \r [ 032 l 8 0 0115060 7 8 \r E r r M ( " * n C o m p d 0115100 e f c o n t a i n s o v e r 0115120 l a p p i n g c o n n e c t i 0115140 o n p o i n t s : " , f o n t 0115160 , c h a r , 0 ) 376 001 \0 001 331 \r t l 0115200 > > n o d e . u s e d = 1 032 0115220 l 9 3 4 8 \r ] 032 l 8 0 7 8 \r ] 032 0115240 l 6 8 0 8 \r ] \r l i n k = @ 0115260 l i n k 032 l 5 5 3 8 \r ] \r \r / / 0115300 d o s o m e c h e c k s o 0115320 n t h e r e a s o n a b l e 0115340 n e s s o f t h e d e f i 0115360 n i t i o n \r i f n u m t n a 0115400 m e s g r 1 t h e n \r [ 032 0115420 l 4 2 6 8 \r E r r M ( " * n C o 0115440 m p d e f h a s m o r e t 0115460 h a n o n e t y p e n a m 0115500 e " , f o n t , c h a r , 0 ) \r 0115520 m f a t a l = t r u e 032 l 5 0115540 5 3 8 \r ] \r \r i f n u m p n a 0115560 m e s g r n u m c p o 376 001 \0 0115600 373 027 i n t s t h e n \r [ 032 l 0115620 4 2 6 8 \r E r r M ( " * n C o m 0115640 p d e f h a s m o r e p i 0115660 n n a m e s t h a n c o n 0115700 n e c t i o n p o i n t s : " 0115720 , f o n t , c h a r , 0 ) \r m f 0115740 a t a l = t r u e 032 l 5 5 3 0115760 8 \r ] \r \r i f n u m c p o i n 0116000 t s e q 0 t h e n 032 l 4 2 0116020 6 8 \r [ 032 l 4 2 6 8 \r E r r M ( 0116040 " * n C o m p d e f h a s n 0116060 o c o n n e c t i o n p o i 0116100 n t s : " , f o n t , c h a r , 0116120 0 ) \r m f a t a l = t r u e 0116140 032 l 5 5 3 8 \r ] \r \r i f m f a 0116160 t a l t h e n r e t u r n 0116200 / 376 001 \0 276 377 / d o n ' t t r 0116220 y t o b u i l d t e m p l 0116240 a t e \r \r / / t h e d e f i n 0116260 i t i o n s e e m s r e a s 0116300 o n a b l e - b u i l d t h 0116320 e c o m p o n e n t d e f i 0116340 n i t i o n t e m p l a t e . 0116360 \r / / t h e n u m b e r o f 0116400 e n t r i e s i n t h e 0116420 d e f i n i t i o n b l o c k 0116440 i s t h e n u m b e r o 0116460 f c o n n e c t i o n p o i 0116500 n t s \r \r l e t t e m p l = 0116520 v e c 2 5 6 / / s p a c e 0116540 f o r t e m p l a t e \r Z e 0116560 r o ( t e m p l , 2 5 6 ) \r l e 0116600 t c o n p o 376 001 \0 375 256 i n t i 0116620 n d e x = 1 \r l e t l i n 0116640 k = p t r ; u n t i l ( 0116660 l i n k e q 0 ) % ( l i n k 0116700 e q - 1 ) d o \r [ 032 l 4 2 0116720 6 8 \r l e t t l = l i n k 0116740 ; l i n k = @ l i n k \r l 0116760 e t b t y p e = t l > > n 0117000 o d e . t y p e \r i f b t y p 0117020 e e q b t S t r i n g t h 0117040 e n / / p i n n a m e o r 0117060 c o m p o n e n t n a m e \r 0117100 [ 032 l 5 5 3 8 \r l e t s t t y 0117120 p e = ( t l > > n o d e . v 0117140 a l ) > > s t r e c . t y p e \r 0117160 i f ( s t t y p e e q s t 0117200 C o m p ) % ( s t t y p 376 001 \0 J 0117220 250 e e q s t R c o m p ) t 0117240 h e n \r [ 032 l 6 8 0 8 \r t e m p 0117260 l > > c o m p b l o c k . c o m 0117300 p t y p e = t l > > n o d e 0117320 . v a l \r 032 l 8 0 7 8 \r ] \r l o 0117340 o p / / g o o n t o n e 0117360 x t b l o c k 032 l 6 8 0 8 \r ] 0117400 \r / / t h e n o d e i s a 0117420 c o n n e c t i o n p o i n 0117440 t \r l e t p i n n a m e = 0117460 F i n d B e s t N a m e ( t l , 0117500 p t r ) \r t e s t p i n n a m 0117520 e e q 0 \r \r i f n o t p i 0117540 n n a m e = p i n n a m e > 0117560 > n o d e . v a l / / h e r e 0117600 w e w a n t t h e s t p 0117620 , 376 001 \0 7 350 n o t t h e b 0117640 l o c k p o i n t e r \r \r i f 0117660 s o i f n u m c p o i n t s 0117700 g r n u m p n a m e s t h 0117720 e n p i n n a m e = D e f 0117740 a u l t P i n ( t l ) \r / / d o 0117760 n ' t d e f a u l t p i n 0120000 i f t h e r e a r e e n o 0120020 u g h n a m e s \r i f p i n 0120040 n a m e e q 0 t h e n \r [ 0120060 032 l 5 5 3 8 \r E r r M ( " * n C 0120100 a n ' t f i n d n a m e f 0120120 o r c o n p o i n t i n c 0120140 o m p d e f : " , f o n t , c h 0120160 a r , 0 ) \r m f a t a l = t 0120200 r u e 032 l 6 8 0 8 \r ] \r M a k e 0120220 C p o i n t 376 001 \0 031 % ( c o n p 0120240 o i n t i n d e x , t e m p l , 0120260 t l , p i n n a m e ) / / c o 0120300 p y i n t o t e m p l \r \r c 0120320 o n p o i n t i n d e x = c 0120340 o n p o i n t i n d e x + 1 032 l 0120360 5 5 3 8 \r ] \r \r \r / / c h e c k 0120400 t h a t a l l s t r i n g 0120420 s i n t h e d e f i n i t 0120440 i o n h a v e b e e n u s 0120460 e d \r l e t l i n k = p t 0120500 r ; u n t i l ( l i n k e 0120520 q 0 ) % ( l i n k e q - 1 0120540 ) d o \r [ 032 l 4 2 6 8 \r i f 0120560 ( l i n k > > n o d e . t y p e 0120600 e q b t S t r i n g ) & 0120620 ( l i n k > > n o d e 376 001 \0 352 \a 0120640 . u s e d n e 1 ) t h e n 0120660 \r [ 032 l 5 5 3 8 \r E r r M ( " * 0120700 n C a n ' t a s s i g n s t 0120720 r i n g i n c o m p d e f : 0120740 " , f o n t , c h a r , l v ( ( 0120760 l i n k > > n o d e . v a l ) > 0121000 > s t r e c . s t ) ) \r m f a t 0121020 a l = t r u e 032 l 6 8 0 8 \r 0121040 ] \r l i n k = @ l i n k 032 l 0121060 5 5 3 8 \r ] \r \r i f m f a t a 0121100 l t h e n r e t u r n / / 0121120 d o n ' t t r y t o u s e 0121140 t h e t e m p l a t e \r \r / 0121160 / f i n i s h t h e t e m p 0121200 l a t e \r t e m p l > > c o m p 0121220 b l o c k . b o a r d l o c = 0121240 376 001 \0 ? \n 0 \r t e m p l > > c 0121260 o m p b l o c k . g r o u p = 0121300 0 \r t e m p l > > c o m p b l 0121320 o c k . n u m c p o i n t s = 0121340 n u m c p o i n t s \r \r / / t 0121360 h e t e m p l a t e i s n 0121400 o w c o m p l e t e . W e 0121420 g o t h r o u g h a l l 0121440 t h e \r / / c o m p o n e n t 0121460 s , a n d a d d a n i n 0121500 s t a n c e o f t h e t e 0121520 m p l a t e e v e r y \r / / p 0121540 l a c e t h e c o m p o n e 0121560 n t a p p e a r s \r \r l e t 0121600 t e m l e n g t h = n u m c 0121620 p o i n t s * ( s i z e c o n 0121640 p o i n t 376 001 \0 ` , ) / 1 6 + 0121660 ( o f f s e t c o m p b l o 0121700 c k . g r o u p ) / 1 6 + 1 0121720 / / l e n g t h o f t e m p 0121740 l a t e \r \r l e t m i n d e x 0121760 = ( f o n t - 8 ) * 1 2 8 0122000 + c h a r \r l e t n l i n k 0122020 = C o m p s ; u n t i l 0122040 n l i n k e q 0 d o \r [ 032 0122060 l 4 2 6 8 \r i f n l i n k > > 0122100 c o m p . m i n d e x e q m 0122120 i n d e x t h e n A d d C o 0122140 m p ( n l i n k , t e m p l , t 0122160 e m l e n g t h ) \r n l i n k 0122200 = @ n l i n k 032 l 5 5 3 8 \r ] 0122220 \r 032 l 4 2 6 8 \r ] \r \r \r a n d 0122240 E r r M ( s t 1 , f 376 001 \0 270 i o 0122260 n t , c h a r , s t 2 , j u n k 0122300 ) b e \r [ 032 \r l e t v = 0122320 v e c 1 2 8 ; v ! 0 = 0 0122340 \r A p p e n d S ( s t 1 , v ) \r 0122360 A p p e n d S ( " F o n t : 0122400 " , v ) \r A p p e n d N ( f o n 0122420 t - 4 , v ) \r A p p e n d S ( " 0122440 C h a r : " , v ) \r A p p e 0122460 n d C ( c h a r , v ) \r A p p e 0122500 n d C ( $ * s , v ) \r i f s t 0122520 2 n e 0 t h e n A p p e 0122540 n d S ( s t 2 , v ) \r E r r ( v 0122560 ) 032 l 4 2 6 8 \r ] \r \r a n d F 0122600 i n d B e s t N a m e ( p n o d 0122620 e , s e a r c h l i s t ) = v 0122640 a l o f \r [ 032 \r / / p n o d e 376 0122660 001 \0 322 362 p o i n t s t o a 0122700 p i n n o d e ( i n s e 0122720 a r c h l i s t ) \r / / f i n d 0122740 t h e c l o s e s t u n u 0122760 s e d s t r i n g i n s e 0123000 a r c h l i s t \r / / i f t h 0123020 e r e i s n o n e , o r 0123040 i f t h e r e i s a p i 0123060 n c l o s e r \r / / t o t h 0123100 e c a n d i d a t e t h a n 0123120 p n o d e , r e t u r n 0 0123140 , o t h e r w i s e \r / / m a 0123160 r k t h e n a m e u s e d 0123200 a n d r e t u r n i t \r \r 0123220 l e t p x = p n o d e > > 0123240 n o d e . x \r l e t p y = 0123260 p n o d 376 001 \0 { [ e > > n o d e 0123300 . y \r l e t c a n d = 0 0123320 / / p o i n t e r t o c a n 0123340 d i d a t e n o d e \r l e t 0123360 d c a n d = 1 0 0 0 0 / 0123400 / d i s t a n c e t o c a n 0123420 d i d a t e n o d e \r l e t 0123440 p t r = s e a r c h l i s t 0123460 ; u n t i l ( p t r e q 0123500 0 ) % ( p t r e q - 1 ) 0123520 d o \r [ 032 l 4 2 6 8 \r l e t t 0123540 l = p t r ; p t r = p 0123560 t r > > n o d e . l i n k \r i f 0123600 t l > > n o d e . u s e d e 0123620 q 1 t h e n l o o p \r i f 0123640 t l > > n o d e . t y p e n 0123660 e b t S t r i n 376 001 \0 E 307 g 0123700 t h e n l o o p \r l e t d i 0123720 s t = N d i s t ( p x , p y 0123740 , t l ) \r i f d i s t l s 0123760 d c a n d t h e n \r [ 032 l 5 5 0124000 3 8 \r c a n d = t l \r d c a 0124020 n d = d i s t 032 l 6 8 0 8 \r 0124040 ] 032 l 5 5 3 8 \r ] \r \r i f c a 0124060 n d e q 0 t h e n r e s 0124100 u l t i s 0 \r \r / / c h e c k 0124120 t h a t t h e r e i s n 0124140 o p i n c l o s e r t o 0124160 t h e c a n d i d a t e s t 0124200 r i n g t h a n \r / / d c a n 0124220 d \r \r p x = c a n d > > n o 0124240 d e . x \r p y = c a n d > > 0124260 n o d e . y \r p t r = s e a 376 001 0124300 \0 266 260 r c h l i s t ; u n t i 0124320 l ( p t r e q 0 ) % ( p t 0124340 r e q - 1 ) d o \r [ 032 l 4 0124360 2 6 8 \r l e t t l = p t r 0124400 ; p t r = p t r > > n o d 0124420 e . l i n k \r i f t l > > n o 0124440 d e . t y p e n e b t S c h 0124460 a r t h e n l o o p / / n 0124500 o t a c o n n e c t i o n 0124520 p o i n t \r i f N d i s t ( p 0124540 x , p y , t l ) l s d c a n 0124560 d t h e n r e s u l t i s 0124600 0 / / t h e r e i s a c 0124620 l o s e r c o n n e c t i o n 0124640 p o i n t 032 l 5 5 3 8 \r ] \r c 0124660 a n d > > n o d e . u s e d = 0124700 1 376 001 \0 v j / / m a r k t 0124720 h e c a n d i d a t e s t r 0124740 i n g u s e d \r r e s u l t i 0124760 s c a n d / / a n d r e t 0125000 u r n i t \r 032 l 4 2 6 8 \r ] \r 0125020 \r a n d N d i s t ( x , y , n 0125040 o d e ) = v a l o f / / m 0125060 a n h a t t a n d i s t a n c 0125100 e \r [ 032 \r l e t n x = n o 0125120 d e > > n o d e . x \r l e t n 0125140 y = n o d e > > n o d e . y 0125160 \r r e s u l t i s ( n x g r 0125200 x ? n x - x , x - n x ) + ( n 0125220 y g r y ? n y - y , y - n y 0125240 ) 032 l 4 2 6 8 \r ] \r \r a n d D 0125260 e f a u l t P i n ( n o d e p t 0125300 r ) = v a l 376 001 \0 207 245 o f 032 0125320 \r [ 032 \r r e s u l t i s s e l 0125340 e c t o n n o d e p t r > > n 0125360 o d e . v a l i n t o \r [ 032 l 0125400 4 2 6 8 \r c a s e c h L c o n 0125420 : I n s t p \r c a s e c h 0125440 R c o n : O u t s t p \r d e f 0125460 a u l t : 0 032 l 5 5 3 8 \r ] \r 0125500 032 l 4 2 6 8 \r ] \r \r a n d M a 0125520 k e C p o i n t ( c p i , t e m 0125540 p l , t l , p n a m e ) b e \r 0125560 [ 032 \r t e m p l > > c o m p b l 0125600 o c k . x ^ c p i = t l > > 0125620 n o d e . x \r t e m p l > > c o 0125640 m p b l o c k . c p t ^ c p i 0125660 = s e l e c t o n t l > > n 0125700 o d e . v a l i n t o \r 376 001 \0 0125720 6 003 [ 032 l 4 2 6 8 \r c a s e c 0125740 h T c o n : c p t T o p \r c a 0125760 s e c h B c o n : c p t B o 0126000 t \r c a s e c h L c o n : c 0126020 p t L e f t \r c a s e c h R c 0126040 o n : c p t R i g h t 032 l 5 5 0126060 3 8 \r ] \r t e m p l > > c o m p 0126100 b l o c k . y ^ c p i = t l 0126120 > > n o d e . y \r t e m p l > > 0126140 c o m p b l o c k . p i n n a m 0126160 e ^ c p i = p n a m e \r / / 0126200 a l l o t h e r f i e l d s 0126220 w i l l b e z e r o , s 0126240 i n c e t e m p l w a s c 0126260 l e a r e d i n i t i a l l y 0126300 032 l 4 2 6 8 \r ] \r 032 \r \r \r 032 l 4 0126320 2 6 376 001 \0 246 312 8 \r a n d A d d 0126340 C o m p ( p l a c e , t e m p l 0126360 , t e m l e n g t h ) b e \r [ 0126400 032 \r / / a d d a n i n s t a 0126420 n c e o f t h e t e m p l 0126440 t o t h e c o m p o n e n 0126460 t a t p l a c e \r C h e c k 0126500 F i t ( t e m l e n g t h ) / 0126520 / m a k e s u r e t h e t 0126540 e m p l a t e w i l l f i t 0126560 \r \r M o v e B l o c k ( N e w I 0126600 t e m , t e m p l , t e m l e n 0126620 g t h ) / / a d d t h e t 0126640 e m p l a t e \r l e t p = 0126660 N e w I t e m ; N e w I t e m 0126700 = N e w I t e m + t e m l e n g 0126720 t h \r \r p l a 376 001 \0 370 ; c e > > 0126740 c o m p . c o n p o i n t s = 0126760 p / / p o i n t t o t h 0127000 e c o m p b l o c k \r \r / / m 0127020 u s t f i x u p t h e c 0127040 o n n e c t i o n p o i n t 0127060 c o r d i n a t e s \r l e t x 0127100 = p l a c e > > c o m p . x 0127120 m i n \r l e t y = p l a c 0127140 e > > c o m p . y m i n \r \r f o 0127160 r i = 1 t o p > > c o 0127200 m p b l o c k . n u m c p o i n 0127220 t s d o \r [ 032 l 4 2 6 8 \r p > 0127240 > c o m p b l o c k . x ^ i = 0127260 ( p > > c o m p b l o c k . x 0127300 ^ i ) + x \r p > > c o m p b 0127320 l o c k . y ^ i = ( 376 \0 ' c 0127340 g p > > c o m p b l o c k . y ^ 0127360 i ) + y 032 l 5 5 3 8 \r ] \r 032 l 4 0127400 2 6 8 \r ] \r 032 \r 377 \0 \0 a n f . b 0127420 c p l \0 376 001 \0 372 < / / a n f . b 0127440 c p l \r / / n e w a n a l y z 0127460 e r f o r s i l f i l e s 0127500 \r \r g e t " s y s d e f s . d 0127520 " \r g e t " a n a . d e f s " 0127540 \r \r / / G R I N D 0127560 U P T H E I N 0127600 T E R N A L S T 0127620 R U C T U R E S 0127640 \r l e t D o S c h a r s ( ) 0127660 b e \r [ 032 ( 6 3 5 ) \r / / g o 0127700 t h r o u g h c p i n s , e 0127720 p i n s , g r o u n d s a n 0127740 d p s e u d o n e t c h a r 0127760 s \r / / a n d t r y t o a 0130000 s s i g n t h e m t o l i 0130020 n e e n d s . 376 001 \0 205 " A 0130040 l s o a s s i g n n u m b e 0130060 r s \r / / t o c p i n s a n 0130100 d e p i n s \r \r l e t r p t 0130120 r = S c h a r s ; u n t i 0130140 l r p t r e q 0 d o \r [ 0130160 032 l 4 2 6 8 \r l e t p t r = 0130200 r p t r ; r p t r = @ r p 0130220 t r \r l e t x = p t r > > 0130240 n o d e . x \r l e t y = p 0130260 t r > > n o d e . y \r s w i t c 0130300 h o n p t r > > n o d e . v a 0130320 l i n t o \r [ 032 l 5 5 3 8 \r c 0130340 a s e c h C p i n : \r c a s e 0130360 c h E p i n : \r [ 032 l 6 8 0 8 0130400 \r l e t l i n e = F i n d 0130420 L E ( H l i n e s , 1 2 , 3 376 001 0130440 \0 332 360 , x , y ) / / f i n d 0130460 l i n e e n d \r / / f o r 0130500 t h i s p i n . c p ^ 1 0130520 m u s t b e 0 \r \r l e t p 0130540 n u m = F i n d N o d e ( N 0130560 u m b e r s , 4 , 4 , x , y ) 0130600 / / f i n d a \r / / p i n n 0130620 u m b e r f o r t h e p i 0130640 n \r \r i f l i n e e q 0 0130660 d o \r [ 032 l 8 0 7 8 \r E r r x y 0130700 ( x , y , " C a n ' t f i n d 0130720 l i n e f o r p i n " ) \r 0130740 i f p n u m n e 0 t h e 0130760 n p n u m > > n o d e . u s e 0131000 d = 1 \r / / r e m o v e t 0131020 h e n u m b e r f r o m f 0131040 u r t 376 001 \0 323 036 h e r c o n s 0131060 i d e r a t i o n \r l o o p 032 l 0131100 9 3 4 8 \r ] \r \r i f p n u m 0131120 e q 0 d o \r [ 032 l 8 0 7 8 \r 0131140 E r r x y ( x , y , " C a n ' t 0131160 f i n d n u m b e r f o r 0131200 p i n " ) \r l o o p 032 l 9 3 4 0131220 8 \r ] \r \r / / m a r k t h e 0131240 p i n n u m b e r u s e d , 0131260 a n d a s s i g n i t t 0131300 o t h e l i n e \r l i n e > 0131320 > l e n d . c p ^ 1 = p t r 0131340 / / p o i n t s t o t h e 0131360 s c h a r ( s o w e k n 0131400 o w c p i n s f r o m e p 0131420 i n s ) \r l i n e > > l e n d . 0131440 c p ^ 2 = - 376 001 \0 a 317 1 / 0131460 / r e m o v e f r o m f u r 0131500 t h e r c o n n e c t i o n 0131520 c o n s i d e r a t i o n \r p t 0131540 r > > n o d e . u s e d = 1 0131560 \r p t r > > n o d e . a s s o c 0131600 = p n u m / / p o i n t s 0131620 t o t h e n u m b e r \r p 0131640 n u m > > n o d e . u s e d = 0131660 1 \r p n u m > > n o d e . a s 0131700 s o c = l i n e / / p o i 0131720 n t s t o t h e l i n e \r 0131740 \r l o o p \r 032 l 8 0 7 8 \r ] \r \r 0131760 c a s e c h G n d : / / g r 0132000 o u n d s c o n n e c t t o 0132020 v e r t i c a l l i n e s 0132040 o n l y \r [ 032 l 6 8 0 8 \r 376 001 \0 0132060 254 036 l e t l i n e = F i n 0132100 d L E ( V l i n e s , 2 , 6 , x 0132120 , y ) \r i f l i n e e q 0 0132140 t h e n \r [ 032 l 8 0 7 8 \r E r 0132160 r x y ( x , y , " C a n ' t f 0132200 i n d l i n e f o r g r o 0132220 u n d " ) \r l o o p 032 l 9 3 4 8 0132240 \r ] \r \r / / g r o u n d s s h 0132260 o u l d b e c o n n e c t e 0132300 d o n l y t o t h e y m 0132320 a x e n d \r / / o f v e r t 0132340 i c a l l i n e s \r l e t t 0132360 y = l i n e > > l e n d . y 0132400 \r l e t u y = ( l i n e > 0132420 > l e n d . c p ^ 0 ) > > l e n 0132440 d . y \r i f t y l s u y 0132460 t h 376 001 \0 005 K e n \r [ 032 l 8 0 7 0132500 8 \r E r r x y ( x , y , " G r o 0132520 u n d a p p e a r s c o n n 0132540 e c t e d t o t o p o f 0132560 l i n e ? " ) \r l o o p 032 l 9 3 0132600 4 8 \r ] \r \r p t r > > n o d e . 0132620 a s s o c = l i n e \r p t r 0132640 > > n o d e . u s e d = 1 \r 0132660 l i n e > > l e n d . c p ^ 1 0132700 = p t r \r l i n e > > l e n d 0132720 . c p ^ 2 = - 1 / / n o t 0132740 h i n g e l s e m a y b e 0132760 l e g a l l y c o n n e c t 0133000 e d \r l i n e > > l e n d . h a 0133020 s s i g = 1 / / R e a l l 0133040 y t h e s i g n a l n a m 0133060 e G N D \r l 376 001 \0 341 212 o o p 032 0133100 l 8 0 7 8 \r ] \r \r c a s e c h 0133120 P s e u d : / / t h e s e 0133140 m a y c o n n e c t t o e 0133160 i t h e r e n d o f \r / / v 0133200 l i n e s o r h l i n e s \r 0133220 [ 032 l 6 8 0 8 \r l e t l i n e 0133240 = F i n d L E ( H l i n e s 0133260 , 4 , 4 , x , y ) / / t r y h 0133300 l i n e s \r i f l i n e e q 0133320 0 t h e n l i n e = F 0133340 i n d L E ( V l i n e s , 4 , 4 0133360 , x , y ) \r i f l i n e e q 0133400 0 t h e n \r [ 032 l 8 0 7 8 \r 0133420 E r r x y ( x , y , " C a n ' t 0133440 f i n d l i n e f o r p 0133460 s e u d o n e t p o i 376 001 \0 D 0133500 204 n t " ) \r l o o p 032 l 9 3 4 8 0133520 \r ] \r p t r > > n o d e . a s s 0133540 o c = l i n e \r p t r > > n 0133560 o d e . u s e d = 1 \r l i n 0133600 e > > l e n d . c p ^ 1 = p 0133620 t r \r l i n e > > l e n d . c p 0133640 ^ 2 = - 1 \r l o o p 032 l 8 0 0133660 7 8 \r ] 032 l 6 8 0 8 \r ] 032 l 5 5 0133700 3 8 \r ] 032 l 4 2 6 8 \r ] \r \r \r a 0133720 n d F i n d L E ( l i s t , x 0133740 d i s t , y d i s t , x , y ) 0133760 = v a l o f \r [ 032 \r l e t d 0134000 i s t = 1 0 0 0 0 \r l e t 0134020 c a n d = 0 \r u n t i l l 0134040 i s t e q 0 d o \r [ 032 l 4 0134060 2 6 8 \r l e t p t r = l i 0134100 s 376 001 \0 350 021 t \r l i s t = @ 0134120 l i s t \r i f p t r > > l e n 0134140 d . c p ^ 1 n e 0 t h e n 0134160 l o o p / / l i n e e n d 0134200 a l r e a d y u s e d \r l e 0134220 t x l = p t r > > l e n d 0134240 . x \r l e t d e l x = ( x 0134260 l g r x ? x l - x , x - x l 0134300 ) \r i f d e l x g r x d i 0134320 s t t h e n l o o p \r l e t 0134340 y l = p t r > > l e n d . 0134360 y \r l e t d e l y = ( y l 0134400 g r y ? y l - y , y - y l ) 0134420 \r i f d e l y g r y d i s 0134440 t t h e n l o o p \r i f ( 0134460 d e l x + d e l y ) l s d i 0134500 s t t h e 376 001 \0 h 354 n \r [ 032 l 0134520 5 5 3 8 \r c a n d = p t r \r 0134540 d i s t = d e l x + d e l y 0134560 \r 032 l 6 8 0 8 \r ] 032 l 5 5 3 8 \r 0134600 ] \r r e s u l t i s c a n d 032 0134620 l 4 2 6 8 \r ] \r \r \r a n d F i 0134640 n d N o d e ( l i s t , x d i s 0134660 t , y d i s t , x , y ) = v 0134700 a l o f \r [ 032 \r l e t d i s t 0134720 = 1 0 0 0 0 \r l e t c a n 0134740 d = 0 \r u n t i l l i s t 0134760 e q 0 d o \r [ 032 l 4 2 6 8 0135000 \r l e t p t r = l i s t \r 0135020 l i s t = @ l i s t \r i f 0135040 p t r > > n o d e . u s e d n 0135060 e 0 t h e n l o o p / / 0135100 n o d e a l r e a d 376 001 \0 7 + 0135120 y u s e d \r l e t x l = 0135140 p t r > > n o d e . x \r l e t 0135160 d e l x = ( x l g r x ? 0135200 x l - x , x - x l ) \r i f d e 0135220 l x g r x d i s t t h e n 0135240 l o o p \r l e t y l = p 0135260 t r > > n o d e . y \r l e t d 0135300 e l y = ( y l g r y ? y 0135320 l - y , y - y l ) \r i f d e l 0135340 y g r y d i s t t h e n 0135360 l o o p \r i f ( d e l x + d e 0135400 l y ) l s d i s t t h e n 0135420 \r [ 032 l 5 5 3 8 \r c a n d = 0135440 p t r \r d i s t = d e l x + 0135460 d e l y \r 032 l 6 8 0 8 \r ] 032 l 5 0135500 5 3 8 \r ] \r r e s u l t i s c 0135520 376 001 \0 331 > a n d 032 l 4 2 6 8 \r ] 0135540 \r \r a n d D o S i g n a m e s 0135560 ( ) b e \r [ 032 \r / / f o r e 0135600 a c h s i g n a l n a m e , 0135620 f i n d t h e c l o s e s 0135640 t l i n e w h i c h i s 0135660 b e l o w \r / / t h e n a m e 0135700 , a n d w h i c h h a s 0135720 x m i n < x n a m e < x m a x . 0135740 \r / / i f t h e r e i s a 0135760 n o t h e r n a m e c l o s 0136000 e r t o t h e l i n e t 0136020 h a n t h e c a n d i d a t 0136040 e , \r / / c o m p l a i n . 0136060 I f n o t , a s s o c i a t 0136100 e t h e s i g n a l n a m 0136120 e w i t 376 001 \0 T 337 h t h e 0136140 l i n e , a n d \r / / m a r k 0136160 i t u s e d . \r \r l e t p 0136200 t r = S t r i n g s \r u n t 0136220 i l p t r e q 0 d o \r [ 0136240 032 l 4 2 6 8 \r l e t r p t r 0136260 = p t r \r p t r = @ p t r 0136300 \r i f ( ( r p t r > > n o d e 0136320 . v a l ) > > s t r e c . t y p 0136340 e ) n e s t S i g t h e n 0136360 l o o p / / n o t a s i g 0136400 n a m e \r \r l e t x = r p 0136420 t r > > n o d e . x \r l e t y 0136440 = r p t r > > n o d e . y \r 0136460 \r l e t l i n e = F i n d 0136500 L i n e F o r S i g ( x , y ) \r 0136520 i f l i n e e q 376 001 \0 005 327 0136540 0 t h e n \r [ 032 l 5 5 3 8 \r E 0136560 r r x y ( x , y , " C a n ' t 0136600 f i n d l i n e f o r s i 0136620 g n a l n a m e " ) \r l o o p 0136640 032 l 6 8 0 8 \r ] \r \r l e t l y 0136660 = l i n e > > l e n d . y \r 0136700 l e t l x 2 = l i n e > > 0136720 l e n d . x / / t h i s i s 0136740 x m a x , b e c a u s e o 0136760 f t h e w a y l i n e \r / 0137000 / e n d s w e r e p u t i 0137020 n t o t h e l i s t b y 0137040 A d d L E \r \r l e t l x 1 = 0137060 ( @ l i n e ) > > l e n d . x 0137100 / / x o f o t h e r e n 0137120 d = x m i n \r \r i f N o 376 0137140 001 \0 347 261 S i g F o r L i n e ( r 0137160 p t r , l y , l x 1 , l x 2 ) 0137200 t h e n / / r e t u r n s t 0137220 r u e \r / / i f t h e c l o 0137240 s e s t s i g n a l n a m e 0137260 t o t h e l i n e i s 0137300 N O T r p t r \r \r [ 032 l 5 5 3 0137320 8 \r E r r x y ( x , y , " C a n 0137340 ' t f i n d l i n e f o r 0137360 s i g n a l n a m e " ) \r l 0137400 o o p 032 l 6 8 0 8 \r ] \r \r l i n 0137420 e > > l e n d . h a s s i g = 0137440 1 \r r p t r > > n o d e . u s 0137460 e d = 1 \r r p t r > > n o d 0137500 e . a s s o c = l i n e 032 l 0137520 5 5 3 8 \r ] 032 l 4 2 6 8 \r ] \r 0137540 \r a n d 376 001 \0 245 O F i n d L i 0137560 n e F o r S i g ( x , y ) = 0137600 v a l o f \r [ 032 \r l e t d i s 0137620 t = 3 0 / / d o n ' t a 0137640 s s o c i a t e a l i n e 0137660 w i t h a s i g n a m e i 0137700 f m o r e t h a n 3 0 \r / 0137720 / s c r e e n u n i t s a w 0137740 a y \r l e t c a n d = 0 \r 0137760 l e t l i s t = H l i n e 0140000 s \r u n t i l l i s t e q 0140020 0 d o \r [ 032 l 4 2 6 8 \r l e t 0140040 p t r = l i s t ; l i s 0140060 t = @ ( @ l i s t ) / / l 0140100 i n e e n d p o i n t s a r 0140120 e p a i r e d ( 2 e n d s 0140140 ) \r \r l e t y l 376 001 \0 \n 331 = 0140160 p t r > > l e n d . y \r i f 0140200 y l l e y t h e n l o o 0140220 p / / l i n e i s a b o v 0140240 e s i g n a l n a m e \r l e 0140260 t x m a x = p t r > > l e 0140300 n d . x \r l e t x m i n = 0140320 ( @ p t r ) > > l e n d . x \r i 0140340 f ( x g e x m a x ) % ( x 0140360 l e x m i n ) t h e n l 0140400 o o p \r l e t d e l y = y 0140420 l - y \r i f d e l y g r d 0140440 i s t t h e n l o o p \r c a 0140460 n d = p t r / / w e h a 0140500 v e a n e w c a n d i d a 0140520 t e \r d i s t = d e l y 032 l 0140540 5 5 3 8 \r ] \r r e s u l t i 376 001 0140560 \0 273 377 s c a n d 032 l 4 2 6 8 \r 0140600 ] \r \r a n d N o S i g F o r L 0140620 i n e ( r p t r , y , x m i n , 0140640 x m a x ) = v a l o f \r [ 032 0140660 \r l e t c a n d = 0 \r l e 0140700 t d i s t = 1 0 0 0 0 \r l 0140720 e t l i s t = S t r i n g 0140740 s \r u n t i l l i s t e q 0140760 0 d o \r [ 032 l 4 2 6 8 \r l e t 0141000 p t r = l i s t \r l i s t 0141020 = @ l i s t \r i f p t r > 0141040 > n o d e . u s e d n e 0 0141060 t h e n l o o p / / n o d e 0141100 u s e d a l r e a d y \r i f 0141120 ( ( p t r > > n o d e . v a l 0141140 ) > > s t r e c . t y p e ) n 0141160 e s 376 001 \0 253 Q t S i g t h e 0141200 n l o o p / / n o t a s 0141220 i g n a m e \r \r l e t x s = 0141240 p t r > > n o d e . x \r i f 0141260 ( x s g e x m a x ) % ( x s 0141300 l e x m i n ) t h e n l 0141320 o o p / / s t r i n g o u t 0141340 i n x \r \r l e t y s = 0141360 p t r > > n o d e . y \r i f y 0141400 s g r y t h e n l o o p 0141420 / / s t r i n g i s b e l 0141440 o w l i n e \r l e t d e l y 0141460 = y - y s \r i f d e l y 0141500 g r d i s t t h e n l o o 0141520