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