$ od -c -N 50000 [eris]<Lisp>Carol>LIBRARY>GRAPHER.TED!1 0000000 G r a p h e r d o c u m e n t 0000020 a t i o n \r \r R i c h a r d R 0000040 . B u r t o n a n d K u r 0000060 t V a n L e h n \r L a s t r 0000100 e v i s e d : D e c e m b e r 0000120 2 7 , 1 9 8 3 \r C o p y r i 0000140 g h t ( c ) 1 9 8 2 , 1 9 0000160 8 3 X e r o x C o r p o r a 0000200 t i o n \r \r < L I S P > L I B R 0000220 A R Y > G R A P H E R c o n t 0000240 a i n s a c o l l e c t i o 0000260 n o f f u n c t i o n s a 0000300 n d a n i n t e r f a c e 0000320 f o r l a y i n g o u t , 0000340 d i s p l a y i n g , a n d 0000360 e d i t t i n g g r a p h s 0000400 ( i . e . , n e t w o r k s 0000420 o f n o d e s a n d l i n 0000440 k s ) . G r a p h s h a v 0000460 e n o d e l a b e l s b u 0000500 t n o t l i n k l a b e l 0000520 s . L i n k s a r e d r 0000540 a w n a s s t r a i g h t 0000560 l i n e s , w i t h o u t a 0000600 r r o w h e a d s . N o d e 0000620 l a b e l s c a n b e a 0000640 s i n g l e l i n e o f 0000660 t e x t o r a b i t m a p 0000700 o f a r b i t r a r y s i 0000720 z e . T h e r e a r e f 0000740 a c i l i t i e s f o r h a 0000760 v i n g a c t i o n s t r i 0001000 g g e r e d b y s e l e c t 0001020 i o n o f n o d e s i n 0001040 g r a p h s . \r \r A t y p i 0001060 c a l w a y t o u s e t 0001100 h e g r a p h e r p a c k a 0001120 g e i s t o i m p l e m e 0001140 n t a f u n c t i o n t h 0001160 a t c r e a t e s a p a r 0001200 t i a l l y s p e c i f i e d 0001220 g r a p h t h a t r e p r 0001240 e s e n t s s o m e u s e r 0001260 d a t a ( o r c o n t r o 0001300 l ) s t r u c t u r e . F 0001320 o r i n s t a n c e , t h e 0001340 b r o w s e r p a c k a g e 0001360 ( < L I S P U S E R S > B R O 0001400 W S E R ) u s e s g r a p h 0001420 s t o r e p r e s e n t f 0001440 u n c t i o n c a l l i n g 0001460 s t r u c t u r e s ( f r o m 0001500 M a s t e r s c o p e ) . 0001520 S u c h a p a r t i a l l y 0001540 s p e c i f i e d g r a p h 0001560 n e e d o n l y h a v e 0001600 t h e g r a p h l a b e l s 0001620 a n d t h e l i n k s s 0001640 p e c i f i e d . I t i s 0001660 g i v e n t o L A Y O U T 0001700 G R A P H , a l o n g w i t 0001720 h s o m e f o r m a t t i n 0001740 g i n f o r m a t i o n . 0001760 L A Y O U T G R A P H a s s i 0002000 g n s a p o s i t i o n t 0002020 o e a c h o f t h e n o 0002040 d e s . T h e r e a r e 0002060 f o r m a t s f o r l a y i 0002100 n g o u t t r e e s , l a 0002120 t t i c e s a n d c y c l i 0002140 c g r a p h s . L A Y O U 0002160 T G R A P H r e t u r n s a 0002200 G R A P H r e c o r d , w 0002220 h i c h i s u s u a l l y 0002240 g i v e n t o S H O W G R A 0002260 P H . S H O W G R A P H d 0002300 i s p l a y s a g r a p h 0002320 i n a w i n d o w . D i 0002340 s p l a y e d g r a p h s a 0002360 r e o f t e n u s e d a s 0002400 m e n u s : s e l e c t i n 0002420 g a n o d e w i t h t h 0002440 e l e f t o r m i d d l e 0002460 b u t t o n c a n c a u s 0002500 e u s e r - p r o v i d e d 0002520 f u n c t i o n s t o b e 0002540 c a l l e d o n t h a t n 0002560 o d e . D i s p l a y e d 0002600 g r a p h s c a n b e e d 0002620 i t e d u s i n g t h e r 0002640 i g h t b u t t o n . N o 0002660 d e s c a n b e a d d e d 0002700 , d e l e t e d , m o v e d 0002720 , e n l a r g e d o r s h 0002740 r u n k . L i n k s c a n 0002760 b e a d d e d o r d e l 0003000 e t e d . \r \r T h i s d o c u 0003020 m e n t w i l l f i r s t 0003040 d e s c r i b e t h e d a t 0003060 a s t r u c t u r e s r , t 0003100 h e G R A P H a n d G R A 0003120 P H N O D E r e c o r d s , 0003140 t h e n t h e l a y o u t 0003160 f u n c t i o n s , t h e d 0003200 i s p l a y f u n c t i o n s 0003220 , a n d t h e e d i t i n 0003240 g f u n c t i o n s . \r \r T h 0003260 e G r a p h \r \r A g r a p h 0003300 i s r e p r e s e n t e d 0003320 b y a G R A P H r e c o r 0003340 d , w h i c h h a s t h e 0003360 f o l l o w i n g f i e l d 0003400 s : G R A P H N O D E S , D 0003420 I R E C T E D F L G , S I D E 0003440 S F L G , G R A P H . M O V E 0003460 N O D E F N , G R A P H . A D 0003500 D N O D E F N , G R A P H . D 0003520 E L E T E N O D E F N , G R A 0003540 P H . A D D L I N K F N , G R 0003560 A P H . D E L E T E L I N K F N 0003600 a n d G R A P H . F O N T C 0003620 H A N G E F N . \r \r G R A P H N 0003640 O D E S i s a l i s t o 0003660 f g r a p h n o d e s , w 0003700 h i c h a r e d e s c r i b 0003720 e d b e l o w . \r \r D I R E C 0003740 T E D F L G a n d S I D E S 0003760 F L G a r e f l a g s w h 0004000 i c h c o n t r o l h o w 0004020 l i n k s a r e d r a w n 0004040 b e t w e e n t h e n o d e 0004060 s . I f D I R E C T E D F 0004100 L G i s N I L , t h e G 0004120 r a p h e r w i l l d r a w 0004140 e a c h l i n k i n s u 0004160 c h a w a y t h a t i t 0004200 d o e s n o t c r o s s 0004220 t h e n o d e l a b e l s 0004240 o f t h e n o d e s i t 0004260 r u n s b e t w e e n . O 0004300 f t e n , t h i s l e a v e 0004320 s s o m e a m b i g u i t y 0004340 , w h i c h i s s e t t l 0004360 e d b y S I D E S F L G : 0004400 I f S I D E S F L G i s 0004420 N I L , t h e G r a p h e r 0004440 p r e f e r s t o d r a w 0004460 l i n k s t h a t g o b 0004500 e t w e e n t h e t o p a 0004520 n d b o t t o m e d g e s 0004540 o f n o d e s . I f S I 0004560 D E S F L G i s n o n - N I 0004600 L , i t p r e f e r s t o 0004620 d r a w l i n k s b e t w 0004640 e e n t h e s i d e s o f 0004660 t h e n o d e s . \r \r I f 0004700 D I R E C T E D F L G i s n 0004720 o n - N I L , t h e e d g e 0004740 s a r e f i x e d ( e . g 0004760 . , a l w a y s t o t h e 0005000 l e f t e d g e o f t h 0005020 e t o n o d e ) . T h i 0005040 s c a n c a u s e l i n k 0005060 s t o c r o s s t h e l 0005100 a b e l s o f t h e n o d 0005120 e s t h e y r u n b e t w 0005140 e e n . I n t h i s c a 0005160 s e , i f S I D E S F L G 0005200 i s N I L , t h e " f r o 0005220 m " e n d o f t h e l i 0005240 n k i s a t t a c h e d t 0005260 o t h e b o t t o m e d g 0005300 e o f t h e " f r o m " 0005320 n o d e ; t h e " t o " e 0005340 n d o f t h e l i n k i 0005360 s a t t a c h e d t o t h 0005400 e t o p e d g e o f t h 0005420 e " t o " n o d e . I f 0005440 D I R E C T E D F L G i s 0005460 n o n - N I L a n d S I D E 0005500 S F L G i s n o n - N I L , 0005520 t h e " f r o m " e n d 0005540 o f t h e l i n k i s a 0005560 t t a c h e d t o t h e r 0005600 i g h t e d g e o f t h e 0005620 " f r o m " n o d e ; t h 0005640 e " t o " e n d o f t h 0005660 e l i n k i s a t t a c h 0005700 e d t o t h e l e f t e 0005720 d g e o f t h e " t o " 0005740 n o d e . \r \r T h e r e m a i 0005760 n i n g f i e l d s g i v e 0006000 t h e u s e r h o o k s 0006020 i n t o t h e g r a p h e 0006040 d i t o r , w h i c h i s 0006060 d e s c r i b e d b e l o w . 0006100 \r \r \r T h e G r a p h n o d 0006120 e s \r \r T h e G R A P H N O D 0006140 E r e c o r d h a s t h e 0006160 f o l l o w i n g f i e l d 0006200 s o f i n t e r e s t t o 0006220 t h e u s e r : \r \r \t N O D 0006240 E L A B E L - t h e t 0006260 h i n g t h a t g e t s p 0006300 r i n t e d ( u s i n g P R 0006320 I N 3 ) a s t h e n o d e 0006340 . \r \t I f t h i s i s a 0006360 b i t m a p , b i t b l t i 0006400 s u s e d i n s t e a d o 0006420 f P R I N 3 . T h i s a l 0006440 l o w s i c o n s o f \r \t 0006460 a r b i t r a r y s i z e s 0006500 t o b e u s e d a s g r 0006520 a p h l a b e l s . \r \r \t N O 0006540 D E I D - a u n i q u e 0006560 i d e n t i f i e r . N O D 0006600 E I D ' s a r e u s e d i 0006620 n t h e l i n k \r \t f i e l 0006640 d s i n s t e a d o f u s 0006660 i n g p o i n t e r s t o 0006700 t h e n o d e s t h e m s e 0006720 l v e s s o \r \t t h a t c i 0006740 r c u l a r L i s p s t r u 0006760 c t u r e s c a n b e a v 0007000 o i d e d . N O D E I D ' s 0007020 a r e o f t e n \r \t u s e 0007040 d a s p o i n t e r s t o 0007060 t h e s t r u c t u r e r 0007100 e p r e s e n t e d b y t h 0007120 e g r a p h . \r \r \t T O N O D 0007140 E S - a l i s t o f 0007160 N O D E I D S : a l i n k 0007200 r u n s f r o m t h i s 0007220 n o d e t o \r \t e a c h n o 0007240 d e i n T O N O D E S . \r \r 0007260 \t F R O M N O D E S - a 0007300 l i s t o f N O D E I D S 0007320 : a l i n k r u n s t o 0007340 t h i s n o d e f r o m \r 0007360 \t e a c h n o d e i n F R 0007400 O M N O D E S . \r \r \t N O D E P 0007420 O S I T I O N - t h e l o 0007440 c a t i o n o f t h e c e 0007460 n t e r o f t h e n o d e 0007500 ( a P O S I T I O N ) . \r \r 0007520 \t N O D E F O N T - S p e 0007540 c i f i e s t h e f o n t 0007560 i n w h i c h t h i s n o 0007600 d e ' s l a b e l w i l l \r 0007620 \t b e d i s p l a y e d . 0007640 I t c a n b e a n y f o 0007660 n t s p e c i f i c a t i o n 0007700 a c c e p t a b l e t o \r \t 0007720 F O N T C R E A T E , i n c l 0007740 u d i n g a F O N T D E S C 0007760 R I P T O R . N O D E F O N 0010000 T i s c h a n g e d b y 0010020 \r \t g r a p h e d i t o p e 0010040 r a t i o n s L A R G E R a 0010060 n d S M A L L E R . W h e 0010100 n t h i s h a p p e n s , 0010120 \r \t t h e f o n t f a m i l 0010140 y m a y b e c h a n g e d 0010160 a s w e l l a s t h e 0010200 s i z e . \r \r \t B O X N O D E F 0010220 L G - I f t h i s f i e 0010240 l d i s n o n - N I L , t 0010260 h e n o d e l a b e l w i 0010300 l l \r \t h a v e a b o x 0010320 d r a w n a r o u n d i t 0010340 . \r \r \t N O D E W I D T H a n 0010360 d N O D E H E I G H T - N 0010400 o r m a l l y , t h e s e a 0010420 r e s e t b y g r a p h e 0010440 r t o \r \t b e t h e w i d 0010460 t h a n d h e i g h t o f 0010500 t h e n o d e ' s N O D E 0010520 L A B E L . H o w e v e r 0010540 , \r \t i f t h e u s e r p 0010560 r o v i d e s f i x n u m s 0010600 f o r t h e s e f i e l d s 0010620 , t h e i r v a l u e s w 0010640 i l l b e \r \t u s e d i n s 0010660 t e a d . T h i s f e a t 0010700 u r e c a n b e u s e d 0010720 t o g i v e a n o d e a 0010740 l a r g e r - \r \t t h a n - n 0010760 o r m a l " m a r g i n " a 0011000 r o u n d i t s l a b e l . 0011020 \r \r G r a p h n o d e s c a n 0011040 b e c r e a t e d b y t 0011060 h e c r e a t e o p e r a t 0011100 o r f r o m t h e r e c o 0011120 r d p a c k a g e o r w i 0011140 t h t h e f o l l o w i n g 0011160 f u n c t i o n : \r \r N 0011200 O D E C R E A T E ( I D L A B 0011220 E L P O S I T I O N T O N O 0011240 D E I D S F R O M N O D E I D 0011260 S F O N T B O X E D ? ) \r \r 0011300 T h i s f u n c t i o n r e 0011320 t u r n s a G R A P H N O D 0011340 E w i t h N O D E L A B E L 0011360 = I D , N O D E L A B E L 0011400 = L A B E L , N O D E P 0011420 O S I T I O N = P O S I T I 0011440 O N , N O D E F O N T = F 0011460 O N T a n d B O X N O D E F 0011500 L G = B O X E D ? . \r \r A 0011520 w o r d o n s a v i n g g 0011540 r a p h s o n f i l e s : 0011560 T h e g r a p h e r f u n 0011600 c t i o n s u s e F A S S O 0011620 C ( i . e . , E Q n o t 0011640 E Q U A L ) t o f e t c h 0011660 a g r a p h n o d e g i v e 0011700 n i t s i d . H e n c e 0011720 , s i m p l y d u m p i n g 0011740 a g r a p h o n t o a 0011760 f i l e a n d r e a d i n g 0012000 i t b a c k i n w i l l 0012020 o n l y w o r k c o r r e 0012040 c t l y i f t h e i d ' s 0012060 a r e a t o m i c . B e 0012100 f o r e d u m p i n g a g 0012120 r a p h , i t i s w i s e 0012140 t o s e t t o N I L t 0012160 h e f i e l d s t h a t a 0012200 r e n o r m a l l y c a l c 0012220 u l a t e d a n d f i l l e 0012240 d i n b y t h e g r a p 0012260 h e r f u n c t i o n s . 0012300 I n p a r t i c u l a r , u 0012320 n l e s s s p e c i a l p r 0012340 o v i s i o n s a r e m a d 0012360 e , t h e N O D E L A B E L 0012400 a n d t h e N O D E F O N 0012420 T f i e l d s w i l l r e 0012440 a d b a c k i n a s l i 0012460 t a t o m s w i t h n a m e 0012500 s l i k e { B I T M A P } # 0012520 1 , 2 3 4 5 6 o r { F O N T 0012540 D E S C R I P T O R } # 7 , 2 3 0012560 4 5 i n s t e a d o f r e 0012600 a l b i t m a p s a n d f 0012620 o n t d e s c r i p t o r s . 0012640 \r \r \r L a y i n g 0012660 o u t a G r a p h \r \r L A Y 0012700 O U T G R A P H ( N O D E L S T 0012720 R O O T I D S F O R M A T 0012740 F O N T M O T H E R D P E R 0012760 S O N A L D F A M I L Y D ) \r 0013000 \r L A Y O U T G R A P H " l a 0013020 y s o u t " a p a r t i a 0013040 l l y s p e c i f i e d g r 0013060 a p h b y a s s i g n i n g 0013100 p o s i t i o n s t o i t 0013120 s g r a p h n o d e s . I t 0013140 r e t u r n s a G R A P H 0013160 r e c o r d s u i t a b l e 0013200 f o r d i s p l a y i n g 0013220 w i t h S H O W G R A P H . 0013240 T h e i n p u t N O D E L 0013260 S T i s a l i s t o f 0013300 G R A P H N O D E S t h a t 0013320 p a r t i a l l y s p e c i f 0013340 i e s a g r a p h : o n l 0013360 y t h e i r N O D E I D , 0013400 N O D E L A B E L , a n d T 0013420 O N O D E S f i e l d s n e 0013440 e d t o b e f i l l e d 0013460 i n . O p t i o n a l f i 0013500 e l d s a r e : N O D E F O 0013520 N T , N O D E W I D T H a 0013540 n d N O D E H E I G H T . 0013560 T h e s e o p t i o n a l f 0013600 i e l d s w i l l b e f i 0013620 l l e d i n a p p r o p r i 0013640 a t e l y i f t h e y a r 0013660 e N I L . A l l o t h e 0013700 r f i e l d s w i l l b e 0013720 i g n o r e d a n d / o r 0013740 o v e r w r i t t e n . R O 0013760 O T I D S i s a l i s t 0014000 o f t h e n o d e i d e n 0014020 t i f i e r s o f t h e n 0014040 o d e s t h a t w i l l b 0014060 e c o m e t h e r o o t s . 0014100 T h e o t h e r a r g u 0014120 m e n t s a r e o p t i o n 0014140 a l a n d c o n t r o l t 0014160 h e f o r m a t o f t h e 0014200 l a y o u t . \r \r F O R M 0014220 A T c o n t r o l s t h e 0014240 g e o m e t r y o f t h e 0014260 l a y o u t . I t i s a 0014300 n u n o r d e r e d l i s t 0014320 o f a t o m s . T h e r 0014340 e a r e t h r e e b a s i 0014360 c f o r m a t s : \r \r \t C O M 0014400 P A C T [ t h e d e f a u 0014420 l t ] - T h e g r a p h 0014440 i s l a y e d o u t a s 0014460 a f o r e s t \r \t ( a s e t 0014500 o f t r e e s ) i n s u 0014520 c h a w a y t h a t t h 0014540 e m i n i m a l a m o u n t 0014560 o f \r \t s c r e e n s p a c 0014600 e i s u s e d . \r \r \t F A S 0014620 T - T h e g r a p h i s 0014640 l a y e d o u t a s a 0014660 f o r e s t , s a c r i f i c 0014700 i n g \r \t s c r e e n s p a 0014720 c e f o r s p e e d . \r \r \t 0014740 L A T T I C E - T h e g r 0014760 a p h i s l a y e d o u t 0015000 a s a n a c y c l i c d 0015020 i r e c t e d \r \t g r a p h ( 0015040 a l a t t i c e ) . \r \r T h e 0015060 s e b a s i c f o r m a t s 0015100 c o m e i n t h e o b v 0015120 i o u s t w o f l a v o r s 0015140 : \r \r \t H O R I Z O N T A L [ 0015160 t h e d e f a u l t ] - r 0015200 o o t s a t l e f t , l i 0015220 n k s r u n l e f t - t o - 0015240 r i g h t . \r \t V E R T I C A L 0015260 - r o o t s a t t h e 0015300 t o p , l i n k s r u n 0015320 t o p - t o - b o t t o m . \r 0015340 \r T h e d i r e c t i o n s 0015360 c a n b e r e v e r s e d 0015400 b y i n c l u d i n g t h e 0015420 a t o m R E V E R S E i n 0015440 F O R M A T . T h u s , 0015460 f o r e x a m p l e , F O 0015500 R M A T = ( L A T T I C E H O 0015520 R I Z O N T A L R E V E R S E 0015540 ) l a y s o u t h o r i z 0015560 o n t a l l a t t i c e s t 0015600 h a t h a v e t h e r o o 0015620 t s o n t h e r i g h t , 0015640 w i t h t h e l i n k s 0015660 r u n n i n g r i g h t - t o 0015700 - l e f t . F O R M A T = ( 0015720 V E R T I C A L R E V E R S E 0015740 ) l a y s o u t v e r t i 0015760 c a l t r e e s t h a t h 0016000 a v e t h e r o o t s a t 0016020 t h e b o t t o m , w i t 0016040 h l i n k s r u n n i n g 0016060 b o t t o m - t o - t o p . 0016100 F O R M A T = N I L l a y s 0016120 o u t h o r i z o n t a l t 0016140 r e e s t h a t h a v e t 0016160 h e r o o t s o n t h e 0016200 l e f t . \r \r L A Y O 0016220 U T G R A P H c r e a t e s 0016240 " v i r t u a l " g r a p h 0016260 n o d e s t o a v o i d d 0016300 r a w i n g a t a n g l e 0016320 o f m e s s y l i n e s i 0016340 n c a s e s w h e r e t h 0016360 e g r a p h i s n o t a 0016400 f o r e s t o r a l a t 0016420 t i c e t o b e g i n w i 0016440 t h . I t m o d i f i e s 0016460 t h e n o d e s o f N O 0016500 D E L S T , w h i c h m a 0016520 y i n v o l v e c h a n g i 0016540 n g s o m e o f t h e T 0016560 O N O D E S f i e l d s t o 0016600 p o i n t t o n e w n o 0016620 d e s . T h e m o d i f i 0016640 e d N O D E L S T i s s e 0016660 t i n t o t h e G R A P H 0016700 N O D E S f i e l d o f a 0016720 n e w l y c r e a t e d G 0016740 R A P H r e c o r d , w h i 0016760 c h i s r e t u r n e d a 0017000 s t h e v a l u e o f L 0017020 A Y O U T G R A P H . T h e 0017040 c r e a t i o n o f v i r 0017060 t u a l n o d e s d e p e n 0017100 d s o n w h e t h e r o r 0017120 n o t L A T T I C E i s 0017140 a m e m b e r o f F O R M 0017160 A T . T h e f o r e s t 0017200 ( i . e . , n o n - L A T T I 0017220 C E ) c a s e w i l l b e 0017240 d e s c r i b e d f i r s t 0017260 . \r \r N o d e s a r e 0017300 l a y e d o u t b y t r 0017320 a v e r s i n g t h e f o r 0017340 e s t t o p - d o w n , d e 0017360 p t h - f i r s t . W h e n 0017400 e v e r a n a l r e a d y 0017420 l a y e d o u t n o d e i 0017440 s f o u n d , i n s t e a d 0017460 o f d r a w i n g a l i 0017500 n k t o i t t h a t m i 0017520 g h t c u t a c r o s s a 0017540 r b i t r a r y p a r t s o 0017560 f t h e g r a p h , L A Y 0017600 O U T G R A P H c r e a t e s 0017620 a c o p y o f t h e n 0017640 o d e ( s a m e N O D E L A 0017660 B E L , d i f f e r e n t N 0017700 O D E I D , n o T O N O D E 0017720 S ) , l a y s i t d o w n 0017740 a n d " d r a w s " b o x 0017760 e s a r o u n d b o t h i 0020000 t a n d t h e o r i g i n 0020020 a l n o d e ( b y s e t t 0020040 i n g t h e i r B O X N O D 0020060 E F L G f i e l d s ) . H 0020100 e n c e , a b o x a r o u 0020120 n d a n o d e m e a n s 0020140 t h a t i t o c c u r s a 0020160 t l e a s t t w i c e i n 0020200 t h e f o r e s t . F O 0020220 R M A T a d d s f e w t w 0020240 i s t s t o t h i s b a s 0020260 i c s t r a t e g y o f u 0020300 s i n g b o x e s . I t 0020320 c a n i n c l u d e o n e 0020340 o r b o t h o f t h e s e 0020360 a t o m s : \r \r 0020400 C O P I E S / O N L Y - o n 0020420 l y t h e n e w " v i r t 0020440 u a l " n o d e s a r e b 0020460 o x e d . \r T h e 0020500 o r i g i n a l i s l e f 0020520 t u n b o x e d . \r \r 0020540 N O T / L E A V E S - 0020560 B o x i n g i s s u p p r e 0020600 s s e d w h e n t h e n o 0020620 d e h a s n o \r 0020640 d a u g h t e r s . \r \r F o r 0020660 e x a m p l e s , F O R M A 0020700 T = ( C O P I E S / O N L Y 0020720 N O T / L E A V E S ) w i l 0020740 l b o x n o d e s t h a t 0020760 a r e c o p i e s o f n 0021000 o d e s t h a t h a v e d 0021020 a u g h t e r s ( i . e . , 0021040 i f y o u s e e a b o x 0021060 , t h e n o d e s h a s 0021100 d a u g h t e r s t h a t a 0021120 r e n ' t d r a w n ) . F 0021140 O R M A T = ( N O T / L E A 0021160 V E S ) w i l l b o x b o 0021200 t h c o p i e s a n d o r 0021220 i g i n a l s , b u t o n l 0021240 y w h e n t h e y h a v e 0021260 n o d a u g h t e r s . 0021300 F O R M A T = N I L b o x 0021320 e s o r i g i n a l s a n d 0021340 c o p i e s r e g a r d l e 0021360 s s o f p r o g e n y . \r \r 0021400 I f F O R M A T i n c l u d 0021420 e s L A T T I C E , t h e n 0021440 a n o d e t h a t i s 0021460 t h e d a u g h t e r o f 0021500 m o r e t h a n o n e n o 0021520 d e i s n o t b o x e d . 0021540 I n s t e a d , l i n k s 0021560 f r o m a l l i t s p a 0021600 r e n t s a r e d r a w n 0021620 t o i t . N o a t t e m 0021640 p t i s m a d e t o a v 0021660 o i d d r a w i n g l i n e 0021700 s t h r o u g h n o d e s 0021720 o r t o m i n i m i z e l 0021740 i n e c r o s s i n g s . 0021760 H o w e v e r , i n H O R I 0022000 Z O N T A L f o r m a t , n 0022020 o d e s a r e p o s i t i o 0022040 n e d s o t h a t " f r o 0022060 m " i s a l w a y s l e f 0022100 t o f " t o . " S i m i 0022120 l a r c o n v e n t i o n s 0022140 h o l d f o r t h e o t h 0022160 e r f o r m a t s . I n 0022200 V E R T I C A L f o r m a t , 0022220 f o r i n s t a n c e , t 0022240 h e T O N O D E S o f a 0022260 n o d e a r e p o s i t i o 0022300 n e d b e n e a t h i t , 0022320 a n d t h e F R O M N O D E 0022340 S a r e p o s i t i o n e d 0022360 a b o v e i t . C y c l 0022400 i c g r a p h s c a n n o 0022420 t b e d r a w n u s i n g 0022440 t h i s c o n v e n t i o n 0022460 , o f c o u r s e ( h o w 0022500 c a n a n o d e b e l 0022520 e f t o f i t s e l f ? ) . 0022540 W h e n L A Y O U T G R A 0022560 P H d e t e c t s a n o d 0022600 e t h a t p o i n t s t o 0022620 i t s e l f , d i r e c t l 0022640 y o r i n d i r e c t l y , 0022660 i t c r e a t e s a " v 0022700 i r t u a l " n o d e a s 0022720 d e s c r i b e d a b o v e , 0022740 a n d b o x e s b o t h 0022760 t h e o r i g i n a l a n d 0023000 t h e c o p y . I f F 0023020 O R M A T i n c l u d e s C 0023040 O P I E S / O N L Y , t h e n 0023060 o n l y t h e n e w l y 0023100 c r e a t e d n o d e i s 0023120 b o x e d . \r \r \r T h i s e n 0023140 d s t h e d i s c u s s i o 0023160 n o f t h e F O R M A T 0023200 a r g u m e n t t o L A Y O 0023220 U T G R A P H . T h e o t 0023240 h e r a r g u m e n t s a r 0023260 e n o t s o c o m p l i c 0023300 a t e d . F O N T i s a 0023320 f o n t s p e c i f i c a t 0023340 i o n f o r u s e a s t 0023360 h e d e f a u l t N O D E F 0023400 O N T ; i f N I L , t h e 0023420 f o n t i s t a k e n f 0023440 r o m t h e D E F A U L T F 0023460 O N T o f t h e c u r r e 0023500 n t F O N T P R O F I L E . \r 0023520 \r T h e r e m a i n i n g t 0023540 h r e e a r g u m e n t s c 0023560 o n t r o l t h e d i s t a 0023600 n c e s b e t w e e n n o d 0023620 e s . N I L s c a u s e 0023640 " p r e t t y " d e f a u l t 0023660 s b a s e d o n t h e s 0023700 i z e o f F O N T t o b 0023720 e u s e d . P E R S O N A L 0023740 D c o n t r o l s t h e m 0023760 i n i m u m d i s t a n c e 0024000 b e t w e e n a n y t w o 0024020 n o d e s . M O T H E R D 0024040 i s t h e m i n i m u m d 0024060 i s t a n c e b e t w e e n 0024100 a m o t h e r a n d h e r 0024120 d a u g h t e r s . F A M 0024140 I L Y D c o n t r o l s t h 0024160 e m i n i m u m d i s t a n 0024200 c e b e t w e e n n o d e s 0024220 f r o m d i f f e r e n t 0024240 n u c l e a r f a m i l i e s 0024260 . T h e c l o s e s t t w 0024300 o s i s t e r n o d e s c 0024320 a n b e i s P E R S O N A 0024340 L D . T h e c l o s e s t 0024360 t h a t t w o n o d e s 0024400 t h a t a r e n o t s i s 0024420 t e r s c a n b e i s P 0024440 E R S O N A L D + F A M I L Y D 0024460 . \r \r \r \r D i s p l a y i n g 0024500 a n d E d i t i n g a G r 0024520 a p h \r \r S H O W G R A P H ( G 0024540 R A P H W L E F T B U T T O 0024560 N F N M I D D L E B U T T O N 0024600 F N T O P J U S T I F Y F L G 0024620 A L L O W E D I T F L G ) \r \r 0024640 S H O W G R A P H d i s p l a 0024660 y s t h e n o d e s i n 0024700 t h e G R A P H . I f W 0024720 i s a w i n d o w , t h e 0024740 g r a p h w i l l b e d 0024760 i s p l a y e d i n i t . 0025000 I f t h e g r a p h i s 0025020 l a r g e r t h a n t h e 0025040 w i n d o w , t h e w i n 0025060 d o w i s m a d e a s c 0025100 r o l l i n g w i n d o w . 0025120 I f W i s N I L , t h 0025140 e g r a p h w i l l b e 0025160 d i s p l a y e d i n a w 0025200 i n d o w l a r g e e n o u 0025220 g h t o h o l d i t . 0025240 I f W i s a s t r i n 0025260 g , t h e g r a p h w i l 0025300 l b e d i s p l a y e d i 0025320 n a w i n d o w l a r g e 0025340 e n o u g h t o h o l d 0025360 i t a n d t h e w i n d o 0025400 w w i l l u s e t h e s 0025420 t r i n g f o r t h e w i 0025440 n d o w t i t l e . S H O 0025460 W G R A P H c a c h e s s o 0025500 m e i n f o r m a t i o n i 0025520 n t h e g r a p h n o d e 0025540 f i e l d s i n o r d e r 0025560 t o m a k e s c r o l l i n 0025600 g f a s t e r . T h e g r 0025620 a p h i s s t o r e d o n 0025640 t h e G R A P H p r o p e 0025660 r t y o f t h e w i n d o 0025700 w . S H O W G R A P H r e 0025720 t u r n s t h e w i n d o w 0025740 . \r \r I f e i t h e r L E F 0025760 T B U T T O N F N o r M I D 0026000 D L E B U T T O N F N a r e 0026020 n o n - N I L , t h e w i n 0026040 d o w i s g i v e n a B 0026060 U T T O N E V E N T F N t h a 0026100 t , i n e f f e c t , t u 0026120 r n s t h e g r a p h i n 0026140 t o a m e n u . W h e n 0026160 e v e r t h e l e f t o r 0026200 m i d d l e b u t t o n i 0026220 s d e p r e s s e d a n d 0026240 t h e c u r s o r i s o v 0026260 e r a n o d e , t h a t 0026300 n o d e w i l l b e d i s 0026320 p l a y e d i n v e r t e d , 0026340 i n d i c a t i n g t h a t 0026360 i t i s s e l e c t e d . 0026400 L e t t i n g u p o n 0026420 t h e b u t t o n w i l l 0026440 c a l l e i t h e r t h e 0026460 L E F T B U T T O N F N o r 0026500 M I D D L E B U T T O N F N w 0026520 i t h t w o a r g u m e n t 0026540 s : t h e s e l e c t e d 0026560 G R A P H N O D E ( t h i s 0026600 w i l l b e N I L i f t 0026620 h e c u r s o r w a s n o 0026640 t o v e r a n o d e w h 0026660 e n t h e b u t t o n w a 0026700 s r e l e a s e d ) a n d 0026720 t h e w i n d o w ( f r o m 0026740 t h e w i n d o w , t h e 0026760 f u n c t i o n s c a n a 0027000 c c e s s t h e g r a p h 0027020 v i a W I N D O W P R O P ) . 0027040 \r \r T h e g r a p h ' s i n 0027060 i t i a l p o s i t i o n i 0027100 s d e t e r m i n e d b y 0027120 T O P J U S T I F Y F L G . 0027140 I f T , t h e g r a p h ' 0027160 s t o p e d g e i s p o 0027200 s i t i o n e d a t t h e 0027220 t o p e d g e o f t h e 0027240 w i n d o w ; i f N I L , 0027260 t h e g r a p h ' s b o t t 0027300 o m e d g e i s p o s i t 0027320 i o n e d a t t h e b o t 0027340 t o m e d g e o f t h e 0027360 w i n d o w . \r \r I f A L L O 0027400 W E D I T F L G i s n o n - 0027420 N I L , t h e r i g h t b 0027440 u t t o n c a n b e u s e 0027460 d t o e d i t t h e g r 0027500 a p h . ( T h e n o r m a 0027520 l w i n d o w c o m m a n d 0027540 s a r e a v a i l a b l e 0027560 b y r i g h t b u t t o n i 0027600 n g i n t h e b o r d e r 0027620 o r t i t l e r e g i o n 0027640 s . ) R i g h t b u t t o 0027660 n i n g w h i l e a s h i 0027700 f t k e y i s d o w n a 0027720 l l o w s p o s i t i o n i n 0027740 g o f n o d e s b y t r 0027760 a c k i n g t h e c u r s o 0030000 r . R i g h t b u t t o n 0030020 i n g w i t h t h e s h i 0030040 f t k e y u p b r i n g s 0030060 u p a m e n u o f e d 0030100 i t o p e r a t i o n s . 0030120 T h e e d i t o p e r a t 0030140 i o n s a l l o w m o v i n 0030160 g , a d d i n g a n d d e 0030200 l e t i n g o f n o d e s 0030220 a n d l i n k s . A d d i 0030240 n g a n o d e p r o m p t 0030260 s f o r a N O D E L A B E 0030300 L , c r e a t e s a n e w 0030320 n o d e w i t h t h a t 0030340 l a b e l , a d d s i t t 0030360 o t h e g r a p h a n d 0030400 a l l o w s t h e u s e r 0030420 t o p o s i t i o n i t . 0030440 D e l e t i n g a n o d e 0030460 r e m o v e s i t ( u s i n 0030500 g D R E M O V E ) f r o m 0030520 G R A P H a f t e r d e l e 0030540 t i n g a l l o f t h e 0030560 l i n k s t o a n d f r o 0030600 m i t . W h e n t h e 0030620 S T O P m e n u c o m m a n 0030640 d i s s e l e c t e d , t 0030660 h e g r a p h w i n d o w 0030700 i s c l o s e d . \r \r C e 0030720 r t a i n f i e l d s o f 0030740 t h e G R A P H r e c o r d 0030760 a r e f u n c t i o n s t 0031000 h a t g e t c a l l e d b 0031020 y t h e g r a p h e d i t 0031040 o r w h e n e v e r a n a 0031060 c t i o n i s p e r f o r m 0031100 e d o n a n e l e m e n t 0031120 i n t h e d i s p l a y e 0031140 d g r a p h . T h e y a 0031160 l l o w t h e g r a p h t 0031200 o s e r v e a s a n s i 0031220 m p l e e d i t i n t e r f 0031240 a c e t o t h e s t r u c 0031260 t u r e b e i n g g r a p h 0031300 e d . B e l o w a r e t 0031320 h e f i e l d s o f G R A 0031340 P H a n d t h e a r g u m 0031360 e n t s t h a t t h e c o 0031400 r r e s p o n d i n g f u n c 0031420 t i o n w i l l b e c a l 0031440 l e d . I n a l l c a s 0031460 e s G R A P H i s t h e 0031500 g r a p h b e i n g d i s p 0031520 l a y e d a n d W I N D O W 0031540 i s t h e w i n d o w i 0031560 n w h i c h i t i s d i 0031600 s p l a y e d . \r \r \t G R A P 0031620 H . M O V E N O D E F N ( N O D 0031640 E N E W P O S G R A P H W 0031660 I N D O W ) c a l l e d \r \t 0031700 a f t e r t h e u s e r h 0031720 a s s t o p p e d m o v i n 0031740 g a n o d e i n t e r a c 0031760 t i v e l y \r \t ( i . e . i s 0032000 n o t c a l l e d a s t 0032020 h e n o d e i s b e i n g 0032040 m o v e d . ) \r \r \t G R A P 0032060 H . A D D N O D E F N ( G R A 0032100 P H W I N D O W ) c a l l e 0032120 d w h e n t h e u s e r 0032140 \r \t s e l e c t s " A d d a 0032160 n o d e " a n d s h o u l 0032200 d r e t u r n a N O D E 0032220 o r N I L \r \t i f n o n 0032240 e w n o d e i s t o b e 0032260 a d d e d . N o d e m o 0032300 v i n g o p e r a t i o n \r 0032320 \t w i l l b e c a l l e d 0032340 o n t h e n e w n o d e 0032360 a f t e r i t i s c r e a 0032400 t e t o \r \t d e t e r m i n 0032420 e i t s p o s i t i o n . \r 0032440 \r \t G R A P H . D E L E T E N O 0032460 D E F N ( N O D E G R A P H 0032500 W I N D O W ) c a l l e d 0032520 w h e n a \r \t n o d e i s 0032540 d e l e t e d . B e f o r 0032560 e t h i s f u n c t i o n 0032600 i s c a l l e d , a l l \r 0032620 \t o f t h e l i n k s t o 0032640 o r f r o m t h e n o d 0032660 e a r e d e l e t e d . \r \r 0032700 \t G R A P H . A D D L I N K F N 0032720 ( F R O M T O G R A P H 0032740 W I N D O W ) c a l l e d w 0032760 h e n \r \t a l i n k i s 0033000 a d d e d . \r \r \t G R A P H . 0033020 D E L E T E L I N K F N ( F R 0033040 O M T O G R A P H W I N D 0033060 O W ) c a l l e d w h e n 0033100 \r \t a l i n k i s d e l e 0033120 t e d w h i c h c a n b e 0033140 e i t h e r d i r e c t l y 0033160 o r f r o m \r \t d e l e t 0033200 i n g a n o d e . \r \r \t G R 0033220 A P H . F O N T C H A N G E F N 0033240 ( H O W N O D E G R A P H 0033260 W I N D O W ) c a l l e d 0033300 w h e n \r \t t h e u s e r 0033320 a s k e d f o r t h e l a 0033340 b e l o n a n o d e t o 0033360 b e m a d e l a r g e r 0033400 \r \t o r s m a l l e r . H 0033420 O W i s o n e o f L A R 0033440 G E R o r S M A L L E R . \r 0033460 \r \r M i s c e l l a n e o u s 0033500 f u n c t i o n s \r \r G R A P H 0033520 R E G I O N ( G R A P H ) \r \r R 0033540 e t u r n s t h e s m a l l 0033560 e s t r e g i o n c o n t a 0033600 i n i n g a l l o f t h e 0033620 n o d e s i n G R A P H . 0033640 \r \r \r L A Y O U T S E X P R ( S 0033660 E X P R F O R M A T F O N T 0033700 M O T H E R D P E R S O N A 0033720 L D F A M I L Y D ) \r \r J u s 0033740 t l i k e L A Y O U T G R A 0033760 P H e x c e p t i t g e t 0034000 s i t s g r a p h a s a 0034020 s - e x p r e s s i o n r a 0034040 t h e r t h a n a l i s t 0034060 o f G R A P H N O D E s . 0034100 A f o r m a l r e c u r s 0034120 i v e d e f i n i t i o n o 0034140 f i t s f i r s t a r g u 0034160 m e n t i s : I f t h e 0034200 s - e x p r i s a n a t o 0034220 m , i t s N O D E L A B E L 0034240 w i l l b e i t s e l f 0034260 a n d i t w i l l h a v e 0034300 n o T O N O D E s ; e l s 0034320 e i t i s a l i s t a 0034340 n d i t s c a r w i l l 0034360 b e t a k e n a s i t s 0034400 N O D E L A B E L a n d i t 0034420 s c d r , w h i c h m u s 0034440 t b e a l i s t o f s 0034460 - e x p r s , w i l l b e 0034500 t a k e n a s i t s T O N 0034520 O D E s . N o t e t h a t 0034540 c i r c u l a r s - e x p r 0034560 e s s i o n s a r e a l l o 0034600 w e d . F o r e x a m p l 0034620 e , t h e f o l l o w i n g 0034640 d i s p l a y s a p a r s 0034660 e t r e e f o r t h e s 0034700 e n t e n c e " T h e p r o 0034720 g r a m d i s p l a y s a 0034740 t r e e . " \r \r ( S H O W 0034760 G R A P H ( L A Y O U T S E X 0035000 P R ' ( S ( N P ( D E T 0035020 t h e ) ( N O U N p r o g r a 0035040 m ) ) \r 0035060 0035100 ( V P ( V E R B d i s 0035120 p l a y s ) \r 0035140 0035160 ( N P ( D 0035200 E T a ) ( N O U N t r e e ) 0035220 ) ) ) \r 0035240 ' 0035260 ( V E R T I C A L ) N I L ' 0035300 ( H E L V E T I C A 1 2 ] 0035320 \r \r \0 \0 \0 026 \0 \0 \0 \t H E L V E 0035340 T I C A \0 \f \0 \0 \0 \0 \0 \0 002 \0 \0 \0 0035360 \0 p \0 \0 \0 005 G A C H A \0 \n \0 \0 \0 0035400 \0 \0 \0 \0 \0 \0 \0 006 ' \0 \0 \0 \t H E L 0035420 V E T I C A \0 \n \0 \0 \0 \0 \0 \0 \0 \0 0035440 \0 \0 \0 001 \0 \0 \0 005 G A C H A \0 \n \0 0035460 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \t \0 \0 \0 \t H 0035500 E L V E T I C A \0 \f \0 \0 \0 \0 \0 \0 0035520 002 \0 \0 \0 \0 002 \0 \0 \0 005 G A C H A \0 0035540 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 005 210 \0 \0 \0 0035560 \t H E L V E T I C A \0 \n \0 \0 \0 \0 0035600 \0 \0 \0 \0 \0 \0 \0 002 \0 \0 \0 005 G A C H 0035620 A \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 017 \0 0035640 \0 \0 \t H E L V E T I C A \0 \f \0 \0 0035660 \0 \0 \0 \0 002 \0 \0 \0 \0 002 \0 \0 \0 005 G A 0035700 C H A \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 006 0035720 ' \0 \0 \0 \t H E L V E T I C A \0 \n 0035740 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 E \0 \0 \0 005 0035760 G A C H A \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 0036000 \0 002 347 \0 \0 \0 \t H E L V E T I C A 0036020 \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 002 \0 \0 0036040 \0 005 G A C H A \0 \n \0 \0 \0 \0 \0 \0 \0 0036060 \0 \0 \0 \0 022 \0 \0 \0 \t H E L V E T I 0036100 C A \0 \f \0 \0 \0 \0 \0 \0 002 \0 \0 \0 \0 F 0036120 \0 \0 \0 005 G A C H A \0 \n \0 \0 \0 \0 \0 0036140 \0 \0 \0 \0 \0 002 372 \0 \0 \0 \t H E L V E 0036160 T I C A \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0036200 \0 001 \0 \0 \0 005 G A C H A \0 \n \0 \0 \0 0036220 \0 \0 \0 \0 \0 \0 \0 001 344 \0 \0 \0 \t H E L 0036240 V E T I C A \0 \n \0 \0 \0 \0 \0 \0 \0 \0 0036260 \0 \0 \0 001 \0 \0 \0 005 G A C H A \0 \n \0 0036300 \0 \0 \0 \0 \0 \0 \0 \0 \0 006 027 \0 \0 \0 \t H 0036320 E L V E T I C A \0 \n \0 \0 \0 \0 \0 \0 0036340 \0 \0 \0 \0 \0 001 \0 \0 \0 005 G A C H A \0 0036360 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 263 \0 \0 \0 0036400 \t H E L V E T I C A \0 \n \0 \0 \0 \0 0036420 \0 \0 \0 \0 \0 \0 \0 001 \0 \0 \0 005 G A C H 0036440 A \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \a 205 \0 0036460 \0 \0 \t H E L V E T I C A \0 \n \0 \0 0036500 \0 \0 \0 \0 \0 \0 \0 \0 \0 002 \0 \0 \0 005 G A 0036520 C H A \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0036540 \0 \0 \0 \t H E L V E T I C A \0 \f 0036560 \0 \0 \0 \0 \0 \0 002 \0 \0 \0 \0 L \0 \0 \0 005 0036600 G A C H A \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 0036620 \0 \t 351 \0 \0 \0 \t H E L V E T I C A 0036640 \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 002 \0 \0 0036660 \0 005 G A C H A \0 \n \0 \0 \0 \0 \0 \0 \0 0036700 \0 \0 \0 003 245 \0 \0 \0 \t H E L V E T I 0036720 C A \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 002 0036740 \0 \0 \0 005 G A C H A \0 \n \0 \0 \0 \0 \0 0036760 \0 \0 \0 \0 \0 \0 027 \0 \0 \0 \t H E L V E 0037000 T I C A \0 \f \0 \0 \0 \0 \0 \0 002 \0 \0 \0 0037020 \0 026 \0 \0 \0 005 G A C H A \0 \n \0 \0 \0 0037040 \0 \0 \0 \0 \0 \0 \0 \0 B \0 \0 \0 \t H E L 0037060 V E T I C A \0 \n \0 \0 \0 \0 \0 \0 \0 \0 0037100 \0 \0 \0 < \0 \0 \0 005 G A C H A \0 \n \0 0037120 \0 \0 \0 \0 \0 \0 \0 \0 \0 002 \n \0 \0 \0 \t H 0037140 E L V E T I C A \0 \n \0 \0 \0 \0 \0 \0 0037160 \0 \0 \0 \0 \0 354 \0 \0 \0 005 G A C H A \0 0037200 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 : 323 \0 & z 0037220 267 0037221