$ od -c -N 50000 [Erinyes]<LispManual>PAfns.im!9 0000000 \r { B e g i n S u b S e c P 0000020 r o g r a m m e r ' s A s s i 0000040 s t a n t F u n c t i o n s } 0000060 \r { T i t l e P r o g r a m m 0000100 e r ' s A s s i s t a n t F 0000120 u n c t i o n s } \r { T e x t \r 0000140 \r { n o t e s o m e s e r i 0000160 o u s t h o u g h t s h o u 0000200 l d b e g i v e n t o f 0000220 l u s h i n g t h e d o c u 0000240 m e n t a t i o n o f s o m 0000260 e o f t h e s e f u n c t 0000300 i o n s . T h i s s e c 0000320 t i o n g i v e s t h e u 0000340 s e r m o r e i n f o a b 0000360 o u t t h e l o w - l e v e 0000400 l m u d o f t h e p . a 0000420 . t h a n h e / s h e r e 0000440 a l l y n e e d s . I f 0000460 t h e u s e r i s g o i n 0000500 g t o m u c k a r o u n d 0000520 w i t h t h i s s t u f f 0000540 , t h e i n t e r f a c e 0000560 s h o u l d b e r e v a m p 0000600 e d e x t e n s i v e l y ! ! 0000620 } \r \r \r { F n D e f { N a m e 0000640 L I S P X } { A r g s L I 0000660 S P X X L I S P X I D L I S 0000700 P X X M A C R O S L I S P X X 0000720 U S E R F N L I S P X F L G } 0000740 \r { T e x t \r { f n L I S P X 0000760 } i s t h e p r i m a r y 0001000 f u n c t i o n o f t h e 0001020 p r o g r a m m e r ' s a s 0001040 s i s t a n t . { f n L I 0001060 S P X } t a k e s o n e u 0001100 s e r i n p u t , s a v e s 0001120 i t o n t h e h i s t o 0001140 r y l i s t , e v a l u a t 0001160 e s i t , s a v e s i t s 0001200 v a l u e , a n d p r i n 0001220 t s a n d r e t u r n s i 0001240 t . { f n L I S P X } a 0001260 l s o i n t e r p r e t e s 0001300 p . a . c o m m a n d s , { 0001320 v a r L I S P X M A C R O S } 0001340 , { v a r L I S P X H I S T 0001360 O R Y M A C R O S } , a n d 0001400 { v a r L I S P X U S E R F N 0001420 } . \r \r \r I f { a r g L I S 0001440 P X X } i s a l i s t , 0001460 i t i s i n t e r p r e t e 0001500 d a s t h e i n p u t e 0001520 x p r e s s i o n . O t h e 0001540 r w i s e , { f n L I S P X 0001560 } c a l l s { i n d e x R 0001600 E A D L I N E F N } { f n R 0001620 E A D L I N E } , a n d u s 0001640 e s { a r g L I S P X X } 0001660 p l u s t h e v a l u e o 0001700 f { f n R E A D L I N E } 0001720 a s t h e i n p u t f o r 0001740 t h e e v e n t . I f 0001760 { a r g L I S P X X } i s 0002000 a l i s t { f n C A R } 0002020 o f w h i c h i s { l i s 0002040 p L A M B D A } o r { l i 0002060 s p N L A M B D A } , { i n 0002100 d e x L I S P X F N } { f n 0002120 L I S P X } c a l l s { i 0002140 n d e x L I S P X R E A D F 0002160 N } { f n L I S P X R E A D } 0002200 t o o b t a i n t h e a 0002220 r g u m e n t s . \r \r { a r g 0002240 L I S P X I D } i s t h e 0002260 p r o m p t c h a r a c t e r 0002300 t o p r i n t b e f o r e 0002320 a c c e p t i n g u s e r 0002340 i n p u t . T h e u s e r 0002360 s h o u l d b e c a r e f 0002400 u l a b o u t u s i n g t 0002420 h e p r o m p t c h a r a c 0002440 t e r s " { l i s p _ } , " 0002460 " { l i s p * } , " o r 0002500 " { l i s p : } , " b e c a 0002520 u s e i n c e r t a i n c 0002540 a s e s { f n L I S P X } 0002560 u s e s t h e v a l u e o 0002600 f { a r g L I S P X I D } 0002620 t o t e l l w h e t h e r 0002640 o r n o t i t w a s c a 0002660 l l e d f r o m t h e b r 0002700 e a k p a c k a g e o r e 0002720 d i t o r . { n o t e w h a t 0002740 a c r o c k ! } \r \r I f { 0002760 a r g L I S P X X M A C R O S 0003000 } i s n o t { l i s p N 0003020 I L } , i t i s u s e d 0003040 a s t h e l i s t o f { 0003060 f n L I S P X } m a c r o s 0003100 , o t h e r w i s e t h e 0003120 t o p l e v e l v a l u e 0003140 o f t h e v a r i a b l e 0003160 { i n d e x L I S P X M A C R 0003200 O S V a r } { v a r L I S P 0003220 X M A C R O S } i s u s e d 0003240 . \r \r { n o t e h o w a b o 0003260 u t L I S P X H I S T O R Y M 0003300 A C R O S ? ? } \r \r \r I f { 0003320 a r g L I S P X X U S E R F N 0003340 } i s n o t { l i s p N 0003360 I L } , i t i s u s e d 0003400 a s t h e { i n d e x L I 0003420 S P X U S E R F N V a r } { v 0003440 a r L I S P X U S E R F N } . 0003460 I n t h i s c a s e , 0003500 i t i s n o t n e c e s s 0003520 a r y t o b o t h s e t 0003540 a n d d e f i n e { v a r 0003560 L I S P X U S E R F N } a s 0003600 d e s c r i b e d o n { P a 0003620 g e R e f V a r L I S P X U 0003640 S E R F N } . \r \r { a r g L I 0003660 S P X F L G } i s u s e d 0003700 b y t h e { e d i t c o m 0003720 E } c o m m a n d i n t h 0003740 e e d i t o r ( s e e { P 0003760 a g e R e f T a g E d i t o 0004000 r A n d P A } ) . \r \r \r N o t e 0004020 t h a t t h e h i s t o r 0004040 y i s { i t n o t } o n 0004060 e o f t h e a r g u m e n 0004100 t s t o { i n d e x L I S 0004120 P X F N } { f n L I S P X } 0004140 , i . e . , t h e e d i t 0004160 o r m u s t b i n d ( r e 0004200 s e t ) { i n d e x L I S P 0004220 X H I S T O R Y V a r } { v a 0004240 r L I S P X H I S T O R Y } 0004260 t o { i n d e x E D I T H I 0004300 S T O R Y V a r } { v a r E 0004320 D I T H I S T O R Y } b e f o 0004340 r e c a l l i n g { f n L 0004360 I S P X } t o c a r r y o 0004400 u t a h i s t o r y c o m 0004420 m a n d . { f n L I S P X 0004440 } w i l l c o n t i n u e 0004460 t o o p e r a t e a s a n 0004500 { f n E V A L } / { f n A 0004520 P P L Y } f u n c t i o n i 0004540 f { v a r L I S P X H I S T 0004560 O R Y } i s { l i s p N I 0004600 L } . \r O n l y t h o s e f 0004620 u n c t i o n s a n d c o m 0004640 m a n d s t h a t i n v o l 0004660 v e t h e h i s t o r y l 0004700 i s t w i l l b e a f f e 0004720 c t e d . \r \r { f n L I S P X 0004740 } p e r f o r m s s p e l l 0004760 i n g c o r r e c t i o n s 0005000 u s i n g { i n d e x L I S 0005020 P X C O M S V a r } { v a r 0005040 L I S P X C O M S } , a l i 0005060 s t o f i t s c o m m a n 0005100 d s , a s a s p e l l i n 0005120 g l i s t { i n d e x s p e 0005140 l l i n g l i s t s } { i n d 0005160 e x s p e l l i n g c o r r 0005200 e c t i o n } w h e n e v e r 0005220 i t i s g i v e n a n 0005240 u n b o u n d a t o m o r 0005260 u n d e f i n e d f u n c t i 0005300 o n , b e f o r e a t t e m 0005320 p t i n g t o e v a l u a t 0005340 e t h e i n p u t . \r \r { f 0005360 n L I S P X } i s r e s p 0005400 o n s i b l e f o r r e b i 0005420 n d i n g { i n d e x H E L 0005440 P C L O C K V a r } { v a r 0005460 H E L P C L O C K } , u s e d 0005500 b y { f n B R E A K C H E 0005520 C K } ( { P a g e R e f F n 0005540 B R E A K C H E C K } ) f o 0005560 r c o m p u t i n g t h e 0005600 a m o u n t o f t i m e s 0005620 p e n t i n a c o m p u t 0005640 a t i o n , i n o r d e r 0005660 t o d e t e r m i n e w h e 0005700 t h e r t o g o i n t o 0005720 a b r e a k i f a n d w 0005740 h e n a n e r r o r o c c 0005760 u r s . \r } } \r \r \r { n o t e 0006000 I n I n t e r l i s p - 1 0 , 0006020 t h e o v e r h e a d f o 0006040 r a c a l l t o { i n d 0006060 e x L I S P X F N } { f n 0006100 L I S P X } i s a p p r o x 0006120 i m a t e l y 1 7 m i l l i 0006140 s e c o n d s , o f w h i c 0006160 h 1 2 m i l l i s e c o n d 0006200 s a r e s p e n t i n m 0006220 a i n t a i n i n g t h e s 0006240 p e l l i n g l i s t s . 0006260 I n o t h e r w o r d s , 0006300 i n I n t e r l i s p , t h 0006320 e u s e r p a y s 1 7 m 0006340 o r e m i l l i s e c o n d s 0006360 f o r e a c h { f n E V 0006400 A L } o r { f n A P P L Y 0006420 } i n p u t o v e r a c 0006440 o n v e n t i o n a l L I S P 0006460 e x e c u t i v e , i n o 0006500 r d e r t o e n a b l e t 0006520 h e f e a t u r e s d e s c 0006540 r i b e d i n t h i s c h 0006560 a p t e r . } \r \r \r \r { F n D e 0006600 f { F n N a m e U S E R E X 0006620 E C } { F n A r g s L I S P 0006640 X I D L I S P X X M A C R O S 0006660 L I S P X X U S E R F N } \r { 0006700 T e x t \r R e p e a t e d l y 0006720 c a l l s { i n d e x L I S 0006740 P X F N } { f n L I S P X } 0006760 u n d e r e r r o r s e t 0007000 p r o t e c t i o n s p e c i 0007020 f y i n g { a r g L I S P X 0007040 X M A C R O S } a n d { a r 0007060 g L I S P X X U S E R F N } , 0007100 a n d u s i n g { a r g 0007120 L I S P X I D } ( o r { l i 0007140 s p _ } i f { a r g L I 0007160 S P X I D } = { l i s p N I L 0007200 } ) a s a p r o m p t c 0007220 h a r a c t e r . { f n U 0007240 S E R E X E C } i s e x i t 0007260 e d v i a t h e c o m m a 0007300 n d { p a c o m O K } , { i 0007320 n d e x O K P A c o m } o 0007340 r e l s e w i t h a { f 0007360 n R E T F R O M } . \r } } \r \r 0007400 \r { F n D e f { F n N a m e 0007420 L I S P X E V A L } { F n A r 0007440 g s L I S P X F O R M L I S 0007460 P X I D } \r { T e x t \r E v a l 0007500 u a t e s { a r g L I S P X 0007520 F O R M } ( u s i n g { f n 0007540 E V A L } ) t h e s a m e 0007560 a s t h o u g h i t w e 0007600 r e t y p e d i n t o { 0007620 i n d e x L I S P X F N } { 0007640 f n L I S P X } , i . e . , 0007660 t h e e v e n t i s r e 0007700 c o r d e d , a n d t h e 0007720 e v a l u a t i o n i s m a 0007740 d e u n d o a b l e b y s 0007760 u b s t i t u t i n g t h e 0010000 s l a s h f u n c t i o n s 0010020 f o r t h e c o r r e s p o 0010040 n d i n g d e s t r u c t i v 0010060 e f u n c t i o n s ( s e e 0010100 { P a g e R e f T a g S l 0010120 a s h i f y i n g T y p e d I n 0010140 F n s } ) . { i n d e x L 0010160 I S P X E V A L F N } { f n 0010200 L I S P X E V A L } r e t u r 0010220 n s t h e v a l u e o f 0010240 t h e f o r m , b u t d o 0010260 e s n o t p r i n t i t . 0010300 \r } } \r \r \r \r \r W h e n { f n 0010320 L I S P X } r e c i e v e s 0010340 a n " i n p u t , " i t 0010360 m a y c o m e f r o m t h 0010400 e u s e r t y p i n g i t 0010420 i n , o r i t m a y b 0010440 e a n i n p u t t h a t 0010460 h a s b e e n " u n r e a d 0010500 . " { f n L I S P X } h 0010520 a n d l e s t h e s e t w o 0010540 c a s e s b y g e t t i n 0010560 g i n p u t s w i t h { f 0010600 n L I S P X R E A D } a n d 0010620 { f n R E A D L I N E } , 0010640 d e s c r i b e d b e l o w . 0010660 T h e s e f u n c t i o n 0010700 s u s e t h e f o l l o w 0010720 i n g v a r i a b l e t o 0010740 s t o r e t h e e x p r e s 0010760 s i o n s t h a t h a v e 0011000 b e e n u n r e a d : \r \r { V 0011020 a r D e f { N a m e R E A D 0011040 B U F } \r { T e x t \r T h i s 0011060 v a r i a b l e i s u s e d 0011100 b y { f n L I S P X R E A 0011120 D } a n d { f n R E A D L 0011140 I N E } t o s t o r e t h 0011160 e e x p r e s s i o n s t h 0011200 a t h a v e b e e n u n r 0011220 e a d . W h e n { v a r 0011240 R E A D B U F } i s n o t 0011260 { l i s p N I L } , { f n 0011300 R E A D L I N E } a n d { f 0011320 n L I S P X R E A D } " r e 0011340 a d " e x p r e s s i o n s 0011360 f r o m { v a r R E A D B U 0011400 F } u n t i l { v a r R E 0011420 A D B U F } i s { l i s p 0011440 N I L } , o r u n t i l t 0011460 h e y r e a d a p s e u d 0011500 o - c a r r i a g e r e t u r 0011520 n ( s e e { P a g e R e f 0011540 T e r m P s e u d o - C a r r 0011560 i a g e R e t u r n } ) . 0011600 B o t h f u n c t i o n s r 0011620 e t u r n a l i s t o f 0011640 t h e e x p r e s s i o n s 0011660 t h a t h a v e b e e n " 0011700 r e a d . " ( T h e p s e 0011720 u d o - c a r r i a g e r e t 0011740 u r n i s n o t i n c l u 0011760 d e d i n t h e l i s t . 0012000 ) \r \r W h e n { v a r R E A 0012020 D B U F } i s { l i s p N 0012040 I L } , b o t h { f n L I 0012060 S P X R E A D } a n d { f n 0012100 R E A D L I N E } a c t u a 0012120 l l y o b t a i n t h e i r 0012140 i n p u t b y p e r f o r 0012160 m i n g { l i s p ( A P P L 0012200 Y * L I S P X R E A D F N { 0012220 a r g F I L E } ) } , w h e 0012240 r e { i n d e x * P R I M A 0012260 R Y * L I S P X R E A D F N 0012300 V a r } { v a r L I S P X R E 0012320 A D F N } i s i n i t i a l 0012340 l y s e t t o { l i s p 0012360 T T Y I N R E A D } ( { P a g 0012400 e R e f F n T T Y I N R E A 0012420 D } ) . T h e u s e r c 0012440 a n m a k e { f n L I S P 0012460 X } , t h e e d i t o r , 0012500 b r e a k , e t c . d o 0012520 t h e i r r e a d i n g v i 0012540 a a d i f f e r e n t i n 0012560 p u t f u n c t i o n b y 0012600 s i m p l y s e t t i n g { 0012620 v a r L I S P X R E A D F N } 0012640 t o t h e n a m e o f 0012660 t h a t f u n c t i o n ( o 0012700 r a n a p p r o p r i a t e 0012720 { l i s p L A M B D A } e 0012740 x p r e s s i o n ) . \r \r N o t 0012760 e : T h e u s e r s h o 0013000 u l d o n l y a d d e x p 0013020 r e s s i o n s t o { v a r 0013040 R E A D B U F } u s i n g 0013060 t h e f u n c t i o n { f n 0013100 L I S P X U N R E A D } ( { 0013120 P a g e R e f F n L I S P X 0013140 U N R E A D } ) , w h i c h 0013160 k n o w s a b o u t t h e 0013200 f o r m a t o f { v a r R 0013220 E A D B U F } . \r } } \r \r \r \r { 0013240 F n D e f { F n N a m e R E 0013260 A D L I N E } { F n A r g s 0013300 R D T B L { a n o n a r g } 0013320 { a n o n a r g } } \r { T e x t 0013340 \r R e a d s a l i n e f r 0013360 o m t h e t e r m i n a l , 0013400 r e t u r n i n g i t a s 0013420 a l i s t . I f { l i 0013440 s p ( R E A D P T ) } i s 0013460 { l i s p N I L } , { f n 0013500 R E A D L I N E } r e t u r 0013520 n s { l i s p N I L } . 0013540 O t h e r w i s e i t r e a 0013560 d s e x p r e s s i o n s u 0013600 n t i l i t e n c o u n t e 0013620 r s e i t h e r : \r \r { B e g 0013640 i n U n L a b e l e d L i s t 0013660 u n t i l i t e n c o u n 0013700 t e r s } \r \r { I t e m \r a n 0013720 { l i s p E O L } ( t y p e 0013740 d b y t h e u s e r ) t 0013760 h a t i s n o t p r e c e 0014000 d e d b y a n y s p a c e 0014020 s , e . g . , \r \r { l i s p 0014040 A B C { C R s y m b o l } } 0014060 \r \r a n d { f n R E A D L I 0014100 N E } r e t u r n s { l i s 0014120 p ( A B C ) } \r } \r \r { I 0014140 t e m \r a l i s t t e r m i 0014160 n a t i n g i n a " { l i 0014200 s p ] } " , { i n d e x ] 0014220 ( u s e i n i n p u t ) } 0014240 i n w h i c h c a s e t h 0014260 e l i s t i s i n c l u d 0014300 e d i n t h e v a l u e 0014320 o f { f n R E A D L I N E } 0014340 , e . g . , \r \r { l i s p A 0014360 B ( C D ] } \r \r a n d { 0014400 f n R E A D L I N E } r e t 0014420 u r n s { l i s p ( A B 0014440 ( C D ) ) } . \r } \r \r { I t e 0014460 m \r a n u n m a t c h e d r 0014500 i g h t p a r e n t h e s e s 0014520 o r r i g h t s q u a r e 0014540 b r a c k e t , \r w h i c h 0014560 i s n o t i n c l u d e d 0014600 i n t h e v a l u e o f 0014620 { i n d e x R E A D L I N E 0014640 F N } { f n R E A D L I N E } 0014660 , e . g . , \r \r { l i s p A 0014700 B C ] } \r \r a n d { f n 0014720 R E A D L I N E } r e t u r n 0014740 s { l i s p ( A B C ) } 0014760 . \r } \r \r { E n d U n L a b e 0015000 l e d L i s t u n t i l i t 0015020 e n c o u n t e r s } \r \r { n 0015040 o t e t h e v a r i o u s 0015060 m e n t i o n s t o [ , ] 0015100 e t c s h o u l d b e r 0015120 e p l a c e d b y r e f e r 0015140 e n c e s t o t h e s y n 0015160 t a x c l a s s e s t h a t 0015200 t h e y b e l o n g t o 0015220 i n t h e t e r m i n a l 0015240 r e a d t a b l e . r m k 0015260 } \r \r \r I n t h e c a s e 0015300 t h a t o n e o r m o r e 0015320 s p a c e s p r e c e d e 0015340 a c a r r i a g e - r e t u r 0015360 n , { i n d e x c a r r i a g 0015400 e - r e t u r n } o r a l 0015420 i s t i s t e r m i n a t e 0015440 d w i t h a " { l i s p 0015460 ) } " , { f n R E A D L I N 0015500 E } w i l l t y p e " { l 0015520 i s p . . . } " a n d c o 0015540 n t i n u e r e a d i n g o 0015560 n t h e n e x t l i n e , 0015600 e . g . , { i n d e x * P R 0015620 I M A R Y * . . . ( p r i n 0015640 t e d d u r i n g i n p u t 0015660 ) } \r \r { l i s p c o d e \r A 0015700 B C { C R s y m b o l } \r . . 0015720 . ( D E F ) \r . . . ( X Y 0015740 Z ] } \r \r a n d { i n d e x 0015760 R E A D L I N E F N } { f n 0016000 R E A D L I N E } r e t u r 0016020 n s { l i s p ( A B C 0016040 ( D E F ) ( X Y Z ) ) 0016060 } . \r \r I f t h e u s e r 0016100 t y p e s a n o t h e r c a 0016120 r r i a g e - r e t u r n a f 0016140 t e r t h e " { l i s p . 0016160 . . } " , t h e l i n e w 0016200 i l l t e r m i n a t e , e 0016220 . g . , \r \r { l i s p c o d e \r 0016240 A B C { C R s y m b o l } \r 0016260 . . . { C R s y m b o l } } \r \r 0016300 a n d { f n R E A D L I N E 0016320 } r e t u r n s { l i s p 0016340 ( A B C ) } . \r \r \r N o t e 0016360 t h a t c a r r i a g e - r 0016400 e t u r n , i . e . , t h e 0016420 { l i s p E O L } c h a r 0016440 a c t e r , c a n b e r e 0016460 d e f i n e d w i t h { f n 0016500 S E T S Y N T A X } ( { P a 0016520 g e R e f F n S E T S Y N T 0016540 A X } ) . { f n R E A D L 0016560 I N E } a c t u a l l y c h 0016600 e c k s f o r t h e { l i 0016620 s p E O L } c h a r a c t e 0016640 r , w h a t e v e r t h a t 0016660 m a y b e . T h e s a 0016700 m e i s t r u e f o r r 0016720 i g h t p a r e n t h e s i s 0016740 a n d r i g h t b r a c k 0016760 e t . \r \r \r W h e n { f n R 0017000 E A D L I N E } i s c a l l 0017020 e d f r o m { f n L I S P 0017040 X } , i t o p e r a t e s 0017060 d i f f e r e n t l y i n t 0017100 w o r e s p e c t s : \r \r \r ( 0017120 1 ) I f t h e l i n e 0017140 c o n s i s t s o f a s i 0017160 n g l e { l i s p ) } o r 0017200 { l i s p ] } , { f n R 0017220 E A D L I N E } r e t u r n s 0017240 { l i s p ( N I L ) } i n 0017260 s t e a d o f { l i s p N 0017300 I L } , i . e . , t h e { 0017320 l i s p ) } o r { l i s p 0017340 ] } { i t i s } i n c l 0017360 u d e d i n t h e l i n e 0017400 . T h i s p e r m i t s 0017420 t h e u s e r t o t y p e 0017440 { l i s p F O O ) } o r 0017460 { l i s p F O O ] } , m e a 0017500 n i n g c a l l t h e f u 0017520 n c t i o n { l i s p F O O 0017540 } w i t h n o a r g u m e 0017560 n t s , a s o p p o s e d 0017600 t o { l i s p F O O { C R s 0017620 y m b o l } } ( { l i s p F 0017640 O O } < c a r r i a g e - r e t 0017660 u r n > ) , m e a n i n g e 0017700 v a l u a t e t h e v a r i 0017720 a b l e { l i s p F O O } . 0017740 \r \r ( 2 ) I f t h e f i 0017760 r s t e x p r e s s i o n o 0020000 n t h e l i n e i s a 0020020 l i s t t h a t i s n o t 0020040 p r e c e d e d b y a n y 0020060 s p a c e s , t h e l i s 0020100 t t e r m i n a t e s t h e 0020120 l i n e r e g a r d l e s s 0020140 o f w h e t h e r o r n 0020160 o t i t i s t e r m i n a 0020200 t e d b y { l i s p ] } . 0020220 \r T h i s p e r m i t s t h 0020240 e u s e r t o t y p e { 0020260 l i s p E D I T F ( F O O ) } 0020300 a s a s i n g l e i n p 0020320 u t . \r \r N o t e t h a t i 0020340 f a n y s p a c e s a r e 0020360 i n s e r t e d b e t w e e 0020400 n t h e a t o m a n d t 0020420 h e l e f t p a r e n t h e 0020440 s e s o r b r a c k e t , 0020460 { i n d e x R E A D L I N E 0020500 F N } { f n R E A D L I N E } 0020520 w i l l a s s u m e t h a 0020540 t t h e l i s t d o e s 0020560 n o t t e r m i n a t e t h 0020600 e l i n e . T h i s i s 0020620 t o e n a b l e t h e u 0020640 s e r t o t y p e a l i 0020660 n e c o m m a n d s u c h 0020700 a s { l i s p U S E ( F O 0020720 O ) F O R F O O } . T h 0020740 e r e f o r e , i f t h e 0020760 u s e r a c c i d e n t i a l 0021000 l y p u t s a n e x t r a 0021020 s p a c e b e t w e e n a 0021040 f u n c t i o n a n d i t 0021060 s a r g u m e n t s , h e 0021100 w i l l h a v e t o c o m 0021120 p l e t e t h e i n p u t 0021140 w i t h a n o t h e r c a r 0021160 r i a g e r e t u r n , e . 0021200 g . , \r \r { l i s p c o d e \r _ 0021220 E D I T F ( F O O ) \r . . . { 0021240 C R s y m b o l } \r E D I T \r * 0021260 } \r \r { n o t e R E A D L I N 0021300 E d o c n e e d s a L O 0021320 T o f w o r k ! ! } \r \r \r N 0021340 o t e : { f n R E A D L I 0021360 N E } r e a d s e x p r e s 0021400 s i o n s b y p e r f o r m 0021420 i n g { l i s p ( A P P L Y 0021440 * L I S P X R E A D F N T ) 0021460 } . { v a r L I S P X R E 0021500 A D F N } { i n d e x L I S P 0021520 X R E A D F N V a r } ( { P 0021540 a g e R e f V a r L I S P X 0021560 R E A D F N } ) i s i n i t 0021600 i a l l y s e t t o { f n 0021620 T T Y I N R E A D } ( { P a 0021640 g e R e f F n T T Y I N R E 0021660 A D } ) . \r } } \r \r \r \r \r \r { F 0021700 n D e f { F n N a m e L I S 0021720 P X R E A D } { F n A r g s 0021740 F I L E R D T B L } \r { T e x 0021760 t \r A g e n e r a l i z e d 0022000 { f n R E A D } . I f { 0022020 i n d e x R E A D B U F V a 0022040 r } { v a r R E A D B U F } = 0022060 { l i s p N I L } , { f n 0022100 L I S P X R E A D } p e r f o 0022120 r m s { i n d e x L I S P X 0022140 R E A D F N V a r } { l i s p 0022160 ( A P P L Y * L I S P X R E 0022200 A D F N { a r g F I L E } ) 0022220 } , w h i c h i t r e t u 0022240 r n s a s i t s v a l u e 0022260 . I f { v a r R E A D B 0022300 U F } i s n o t { l i s p 0022320 N I L } , { f n L I S P X 0022340 R E A D } " r e a d s " a n 0022360 d r e t u r n s t h e n e 0022400 x t e x p r e s s i o n o n 0022420 { v a r R E A D B U F } . \r 0022440 \r { f n L I S P X R E A D } 0022460 a l s o s e t s { i n d e x 0022500 R E R E A D F L G V a r } { 0022520 v a r R E R E A D F L G } ( 0022540 { P a g e R e f V a r R E R 0022560 E A D F L G } ) t o { l i s 0022600 p N I L } w h e n i t r 0022620 e a d s v i a { v a r L I 0022640 S P X R E A D F N } , a n d 0022660 s e t s { v a r R E R E A D 0022700 F L G } t o t h e v a l u 0022720 e o f { i n d e x R E A D 0022740 B U F V a r } { v a r R E A 0022760 D B U F } w h e n r e r e a 0023000 d i n g . \r \r { n o t e s h o 0023020 u l d t h i s m e n t i o n 0023040 R E R E A D F L G ? ? } \r } 0023060 } \r \r \r \r { F n D e f { F n N 0023100 a m e L I S P X R E A D P } 0023120 { F n A r g s F L G } \r { T e 0023140 x t \r A g e n e r a l i z e d 0023160 { f n R E A D P } . I f 0023200 { a r g F L G } = { l i s p 0023220 T } , { f n L I S P X R E 0023240 A D P } r e t u r n s { l i 0023260 s p T } i f t h e r e i 0023300 s a n y i n p u t w a i t 0023320 i n g t o b e " r e a d " 0023340 , i n t h e m a n n e r 0023360 o f { f n L I S P X R E A D 0023400 } . I f { a r g F L G } 0023420 = { l i s p N I L } , { f n 0023440 L I S P X R E A D P } r e t 0023460 u r n s { l i s p T } o n 0023500 l y i f t h e r e i s a 0023520 n y i n p u t w a i t i n g 0023540 t o b e " r e a d " { i 0023560 t o n t h i s l i n e . } 0023600 { n o t e ? ? ? } I n b 0023620 o t h c a s e s , l e a d i 0023640 n g s p a c e s a r e i g 0023660 n o r e d , i . e . , s k i 0023700 p p e d o v e r w i t h { 0023720 f n R E A D C } , s o t h 0023740 a t i f o n l y s p a c e 0023760 s h a v e b e e n t y p e 0024000 d , { f n L I S P X R E A D 0024020 P } w i l l r e t u r n { 0024040 l i s p N I L } . \r } } \r \r \r 0024060 \r { F n D e f { F n N a m e 0024100 L I S P X U N R E A D } { F n 0024120 A r g s L S T { a n o n a r 0024140 g } } \r { T e x t \r U n r e a d 0024160 s { a r g L S T } , a l 0024200 i s t o f e x p r e s s i o 0024220 n s . { i n d e x * P R I M A 0024240 R Y * U n r e a d i n g } \r } 0024260 } \r \r \r \r { i n d e x * P R I 0024300 M A R Y * P r o m p t c h a 0024320 r a c t e r } \r \r { F n D e f 0024340 { F n N a m e P R O M P T C H 0024360 A R } { F n A r g s I D F 0024400 L G H I S T O R Y } \r { T e x 0024420 t \r C a l l e d b y { f n 0024440 L I S P X } t o p r i n t 0024460 t h e p r o m p t c h a r a 0024500 c t e r { a r g I D } b e 0024520 f o r e e a c h i n p u t . 0024540 { f n P R O M P T C H A R 0024560 } w i l l n o t p r i n t 0024600 a n y t h i n g w h e n t 0024620 h e n e x t i n p u t w i 0024640 l l b e " r e r e a d " , 0024660 i . e . , w h e n { i n d e 0024700 x R E A D B U F V a r } { v 0024720 a r R E A D B U F } i s n 0024740 o t { l i s p N I L } . \r \r 0024760 { f n P R O M P T C H A R } 0025000 w i l l n o t p r i n t w 0025020 h e n { l i s p ( R E A D P 0025040 ) } = { l i s p T } , u n l 0025060 e s s { a r g F L G } i s 0025100 { l i s p T } . T h e 0025120 e d i t o r c a l l s { f n 0025140 P R O M P T C H A R } w i t 0025160 h { a r g F L G } = { l i s 0025200 p N I L } s o t h a t e 0025220 x t r a { l i s p * } ' s 0025240 a r e n o t p r i n t e d 0025260 w h e n t h e u s e r t y 0025300 p e s s e v e r a l c o m m 0025320 a n d s o n o n e l i n e 0025340 . H o w e v e r , { f n 0025360 E V A L Q T } c a l l s { f 0025400 n P R O M P T C H A R } w i 0025420 t h { a r g F L G } = { l i 0025440 s p T } , s i n c e i t 0025460 a l w a y s w a n t s t h e 0025500 { l i s p _ } p r i n t e 0025520 d ( e x c e p t w h e n " 0025540 r e r e a d i n g " ) . \r \r I f 0025560 { i n d e x P R O M P T # F 0025600 L G V a r } { v a r P R O M 0025620 P T # F L G } ( { P a g e R e 0025640 f V a r P R O M P T # F L G 0025660 } ) i s { l i s p T } a 0025700 n d { a r g H I S T O R Y } 0025720 i s n o t { l i s p N I 0025740 L } , { f n P R O M P T C H 0025760 A R } p r i n t s t h e c 0026000 u r r e n t e v e n t n u m 0026020 b e r ( o f { a r g H I S 0026040 T O R Y } ) b e f o r e p r 0026060 i n t i n g { a r g I D } . 0026100 \r \r \r T h e v a l u e o f 0026120 { i n d e x P R O M P T C H A 0026140 R F O R M S V a r } { v a r 0026160 P R O M P T C H A R F O R M S } 0026200 ( { P a g e R e f V a r P 0026220 R O M P T C H A R F O R M S } ) 0026240 i s a l i s t o f e x 0026260 p r e s s i o n s t h a t a 0026300 r e e v a l u a t e d b y 0026320 { f n P R O M P T C H A R } 0026340 b e f o r e , a n d i f , 0026360 i t d o e s a n y p r i n 0026400 t i n g . \r } } \r \r \r \r \r { F n 0026420 D e f { F n N a m e H I S T 0026440 O R Y S A V E } { F n A r g s 0026460 H I S T O R Y I D I N P U 0026500 T 1 I N P U T 2 I N P U T 3 0026520 P R O P S } \r { T e x t \r R e 0026540 c o r d s o n e e v e n t 0026560 o n { a r g H I S T O R Y } 0026600 . \r \r I f { a r g I N P U T 0026620 1 } i s n o t { l i s p 0026640 N I L } , t h e i n p u t 0026660 i s o f t h e f o r m { 0026700 l i s p ( { a r g I N P U T 0026720 { s u b 1 } } { a r g I N 0026740 P U T { s u b 2 } } . { a 0026760 r g I N P U T { s u b 3 } } 0027000 ) } . I f { a r g I N P 0027020 U T { s u b 1 } } i s { l 0027040 i s p N I L } , a n d { a 0027060 r g I N P U T { s u b 2 } } 0027100 i s n o t { l i s p N I 0027120 L } , t h e i n p u t i s 0027140 o f t h e f o r m { l i 0027160 s p ( { a r g I N P U T { s 0027200 u b 2 } } . { a r g I N 0027220 P U T { s u b 3 } } ) } . 0027240 O t h e r w i s e , t h e i 0027260 n p u t i s j u s t { a r 0027300 g I N P U T { s u b 3 } } . 0027320 \r \r { f n H I S T O R Y S A V 0027340 E } c r e a t e s a n e w 0027360 e v e n t w i t h t h e 0027400 c o r r e s p o n d i n g i n 0027420 p u t , { a r g I D } , v 0027440 a l u e f i e l d i n i t i 0027460 a l i z e d t o { i n d e x 0027500 b e l l ( i n h i s t o 0027520 r y e v e n t ) } b e l l , 0027540 a n d { a r g P R O P S } . 0027560 I f t h e { a r g H I 0027600 S T O R Y } h a s r e a c h 0027620 e d i t s f u l l s i z e 0027640 , t h e l a s t e v e n t 0027660 i s r e m o v e d a n d 0027700 c a n n i b a l i z e d . \r \r T 0027720 h e v a l u e o f { f n 0027740 H I S T O R Y S A V E } i s 0027760 t h e n e w e v e n t . 0030000 H o w e v e r , i f { i n d 0030020 e x * P R I M A R Y * R E R 0030040 E A D F L G V a r } { v a r 0030060 R E R E A D F L G } i s n o 0030100 t { l i s p N I L } , a n 0030120 d t h e m o s t r e c e n 0030140 t e v e n t o n t h e h 0030160 i s t o r y l i s t c o n t 0030200 a i n s t h e h i s t o r y 0030220 c o m m a n d t h a t p r 0030240 o d u c e d t h i s i n p u 0030260 t , { f n H I S T O R Y S A 0030300 V E } d o e s n o t c r e 0030320 a t e a n e w e v e n t , 0030340 b u t s i m p l y a d d s 0030360 a n { l i s p ( { a r g 0030400 I N P U T } { a r g I D } 0030420 b e l l . { a r g P R O P 0030440 S } ) } e n t r y t o t h 0030460 e { l i s p * G R O U P * } 0030500 p r o p e r t y f o r t h 0030520 a t e v e n t a n d r e t 0030540 u r n s t h a t e n t r y . 0030560 S e e d i s c u s s i o n 0030600 o n { P a g e R e f T a g 0030620 E v e n t G r o u p } . \r \r \r 0030640 { v a r H I S T O R Y S A V E 0030660 F O R M S } ( { P a g e R e f 0030700 V a r H I S T O R Y S A V E 0030720 F O R M S } ) i s a l i s 0030740 t o f e x p r e s s i o n s 0030760 t h a t a r e e v a l u a 0031000 t e d u n d e r e r r o r s 0031020 e t p r o t e c t i o n e a 0031040 c h t i m e { f n H I S T 0031060 O R Y S A V E } c r e a t e s 0031100 a n e w e v e n t . \r } } 0031120 \r \r \r \r \r { F n D e f { F n N 0031140 a m e L I S P X S T O R E V A 0031160 L U E } { F n A r g s E V E 0031200 N T V A L U E } \r { T e x t \r 0031220 U s e d b y { f n L I S P 0031240 X } f o r s t o r i n g t 0031260 h e v a l u e o f a n e 0031300 v e n t . C a n b e a d v 0031320 i s e d b y u s e r t o 0031340 w a t c h f o r p a r t i c 0031360 u l a r v a l u e s o r p 0031400 e r f o r m o t h e r m o n 0031420 i t o r i n g f u n c t i o n 0031440 s . \r } } \r \r \r \r { F n D e f 0031460 { F n N a m e L I S P X F I N 0031500 D } { F n A r g s H I S T O 0031520 R Y L I N E T Y P E B A C 0031540 K U P { a n o n a r g } } \r { 0031560 T e x t \r { a r g L I N E } 0031600 i s a n e v e n t s p e c 0031620 i f i c a t i o n , { a r g 0031640 T Y P E } s p e c i f i e s 0031660 t h e f o r m a t o f t h 0031700 e v a l u e t o b e r e 0031720 t u r n e d b y { f n L I 0031740 S P X F I N D } , a n d c a 0031760 n b e e i t h e r { l i s 0032000 p E N T R Y } , { l i s p 0032020 E N T R I E S } , { l i s p 0032040 C O P Y } , { l i s p C O P 0032060 I E S } , { l i s p I N P U 0032100 T } , o r { l i s p R E D 0032120 O } . { n o t e w h a t i s 0032140 t h e m e a n i n g o f 0032160 t h e s e t y p e s ? ? } 0032200 { f n L I S P X F I N D } p 0032220 a r s e s { a r g L I N E } 0032240 , a n d u s e s { i n d e 0032260 x H I S T O R Y F I N D F N 0032300 } { f n H I S T O R Y F I N D 0032320 } ( { P a g e R e f F n H 0032340 I S T O R Y F I N D } ) t o 0032360 f i n d t h e c o r r e s p 0032400 o n d i n g e v e n t s . 0032420 { f n L I S P X F I N D } t 0032440 h e n a s s e m b l e s a n 0032460 d r e t u r n s t h e a p 0032500 p r o p r i a t e s t r u c t 0032520 u r e . \r \r { f n L I S P X F 0032540 I N D } i n c o r p o r a t e 0032560 s t h e f o l l o w i n g 0032600 s p e c i a l f e a t u r e s 0032620 : \r \r \r { B e g i n N u m b e 0032640 r e d L i s t L I S P X F I N 0032660 D i n c o r p o r a t e s t 0032700 h e f o l l o w i n g s p e 0032720 c i a l f e a t u r e s } \r \r 0032740 { I t e m \r i f { a r g B A 0032760 C K U P } = { l i s p T } , 0033000 { f n L I S P X F I N D } i 0033020 n t e r p r e t s { a r g L 0033040 I N E } i n t h e c o n t 0033060 e x t o f t h e h i s t o 0033100 r y l i s t { i t b e f o 0033120 r e } t h e c u r r e n t 0033140 e v e n t w a s a d d e d . 0033160 T h i s f e a t u r e i 0033200 s u s e d , f o r e x a m 0033220 p l e , b y { f n V A L U 0033240 E O F } , s o t h a t { l 0033260 i s p ( V A L U E O F - 1 ) 0033300 } w i l l n o t r e f e r 0033320 t o t h e { f n V A L U 0033340 E O F } e v e n t i t s e l 0033360 f . \r } \r \r { I t e m \r i f { 0033400 a r g L I N E } = { l i s p 0033420 N I L } a n d t h e l a s 0033440 t e v e n t i s a n { p 0033460 a c o m U N D O } , t h e 0033500 n e x t t o t h e l a s t 0033520 e v e n t i s t a k e n . 0033540 T h i s p e r m i t s t 0033560 h e u s e r t o t y p e 0033600 { p a c o m U N D O } f o l 0033620 l o w e d b y { p a c o m 0033640 R E D O } o r { p a c o m 0033660 U S E } . \r } \r \r { I t e m \r { 0033700 f n L I S P X F I N D } r e 0033720 c o g n i z e s { i n d e x 0033740 @ @ ( i n e v e n t s p 0033760 e c i f i c a t i o n ) } { l i 0034000 s p @ @ } , a n d s e a r 0034020 c h e s t h e a r c h i v e 0034040 d h i s t o r y l i s t i 0034060 n s t e a d o f { a r g H 0034100 I S T O R Y } ( s e e t h e 0034120 { l i s p A R C H I V E } 0034140 c o m m a n d , { P a g e R e 0034160 f P A C o m A R C H I V E } 0034200 ) . \r } \r \r { I t e m \r { i n d 0034220 e x L I S P X F I N D F N } 0034240 { f n L I S P X F I N D } r 0034260 e c o g n i z e s { i n d e x 0034300 @ ( i n e v e n t s p 0034320 e c i f i c a t i o n ) } { l i 0034340 s p @ } , a n d r e t r i 0034360 e v e s t h e c o r r e s p 0034400 o n d i n g e v e n t ( s ) 0034420 f r o m t h e p r o p e r t 0034440 y l i s t o f t h e a t 0034460 o m f o l l o w i n g { l i 0034500 s p @ } ( s e e { P a g e 0034520 R e f P A C o m N A M E } ) 0034540 . \r } \r \r { E n d N u m b e r 0034560 e d L i s t L I S P X F I N D 0034600 i n c o r p o r a t e s t h 0034620 e f o l l o w i n g s p e c 0034640 i a l f e a t u r e s } \r \r } 0034660 } \r \r \r \r { F n D e f { F n N 0034700 a m e H I S T O R Y F I N D } 0034720 { F n A r g s L S T I N D 0034740 E X M O D E V E N T A D D R 0034760 E S S { a n o n a r g } } \r { 0035000 T e x t \r S e a r c h e s { a 0035020 r g L S T } a n d r e t u 0035040 r n s t h e t a i l s o f 0035060 { a r g L S T } b e g i n 0035100 n i n g w i t h t h e e v 0035120 e n t c o r r e s p o n d i n 0035140 g t o { a r g E V E N T A 0035160 D D R E S S } . { a r g L 0035200 S T } , { a r g I N D E X } 0035220 , a n d { a r g M O D } 0035240 a r e t h e f i r s t t h 0035260 r e e e l e m e n t s o f 0035300 a " h i s t o r y l i s t " 0035320 s t r u c t u r e ( s e e 0035340 { P a g e R e f T a g H i s 0035360 t o r y L i s t F o r m a t } ) 0035400 . { a r g E V E N T A D D 0035420 R E S S } i s a n e v e n 0035440 t a d d r e s s ( s e e { 0035460 P a g e R e f T a g E v e n 0035500 t A d d r e s s } ) e . g . , 0035520 { l i s p ( 4 3 ) } , { l 0035540 i s p ( - 1 ) } , { l i s p 0035560 ( F O O F I E ) } , { l i 0035600 s p ( L O A D _ F O O ) } 0035620 , e t c . I f { f n H 0035640 I S T O R Y F I N D } c a n n 0035660 o t f i n d { a r g E V E 0035700 N T A D D R E S S } , i t g 0035720 e n e r a t e s a n e r r o 0035740 r . \r } } \r \r \r \r { F n D e f 0035760 { F n N a m e H I S T O R Y M 0036000 A T C H } { F n A r g s I N 0036020 P U T P A T E V E N T } \r { 0036040 T e x t \r U s e d b y { f n 0036060 H I S T O R Y F I N D } f o 0036100 r " m a t c h i n g " w h e 0036120 n { a r g E V E N T A D D R 0036140 E S S } s p e c i f i e s a 0036160 p a t t e r n . M a t c h 0036200 e s { a r g P A T } a g a 0036220 i n s t { a r g I N P U T } 0036240 , t h e i n p u t p o r t 0036260 i o n o f t h e h i s t o 0036300 r y e v e n t { a r g E V 0036320 E N T } , a s m a t c h i n 0036340 g i s d e f i n e d o n 0036360 { P a g e R e f T a g E d i 0036400 t P a t t e r n } . I n i t 0036420 i a l l y d e f i n e d a s 0036440 { l i s p ( E D I T F I N D 0036460 P { a r g I N P U T } { a 0036500 r g P A T } T ) } , b u t 0036520 c a n b e a d v i s e d 0036540 o r r e d e f i n e d b y 0036560 t h e u s e r . \r } } \r \r \r \r 0036600 { F n D e f { F n N a m e E 0036620 N T R Y # } { F n A r g s H 0036640 I S T X } \r { T e x t \r { a r 0036660 g H I S T } i s a h i s 0036700 t o r y l i s t ( s e e { 0036720 P a g e R e f T a g H i s t 0036740 o r y L i s t F o r m a t } ) . 0036760 { a r g X } i s { f n 0037000 E Q } t o o n e o f t 0037020 h e e v e n t s o n { a r 0037040 g H I S T } . { f n E N 0037060 T R Y # } r e t u r n s t h 0037100 e { i n d e x e v e n t n 0037120 u m b e r s } e v e n t n u m 0037140 b e r f o r { a r g X } . 0037160 \r } } \r \r \r \r { F n D e f { F 0037200 n N a m e U N D O S A V E } 0037220 { F n A r g s U N D O F O R M 0037240 H I S T E N T R Y } \r { T e x 0037260 t \r { f n U N D O S A V E } 0037300 a d d s t h e " u n d o i 0037320 n f o r m a t i o n " { a r g 0037340 U N D O F O R M } t o t h 0037360 e { l i s p S I D E } p r 0037400 o p e r t y o f t h e h i 0037420 s t o r y e v e n t { a r g 0037440 H I S T E N T R Y } . I f 0037460 t h e r e i s n o { l i 0037500 s p S I D E } p r o p e r t 0037520 y , o n e i s c r e a t e 0037540 d . I f t h e v a l u e 0037560 o f t h e { l i s p S I 0037600 D E } p r o p e r t y i s 0037620 { l i s p N O S A V E } , { i 0037640 n d e x N O S A V E L i t a 0037660 t o m } t h e i n f o r m a 0037700 t i o n i s n o t s a v e 0037720 d . \r \r { a r g H I S T E N T 0037740 R Y } s p e c i f i e s a n 0037760 e v e n t . I f { a r g 0040000 H I S T E N T R Y } = { l i s 0040020 p N I L } , t h e v a l u 0040040 e o f { v a r L I S P X H 0040060 I S T } i s u s e d . I 0040100 f b o t h { a r g H I S T 0040120 E N T R Y } a n d { v a r 0040140 L I S P X H I S T } a r e { 0040160 l i s p N I L } , { f n U 0040200 N D O S A V E } i s a n o 0040220 - o p . N o t e t h a t 0040240 { a r g H I S T E N T R Y } 0040260 ( o r { v a r L I S P X H I 0040300 S T } ) c a n e i t h e r 0040320 b e a " r e a l " e v e n 0040340 t , o r a n e v e n t w 0040360 i t h i n t h e { l i s p 0040400 * G R O U P * } p r o p e r t 0040420 y o f a n o t h e r e v e 0040440 n t ( s e e { P a g e R e f 0040460 T a g E v e n t G r o u p } 0040500 ) . \r \r T h e f o r m o f 0040520 { a r g U N D O F O R M } i 0040540 s { l i s p ( { a r g F N 0040560 } . { a r g A R G S } ) } 0040600 . U n d o i n g i s d o 0040620 n e b y p e r f o r m i n g 0040640 { l i s p ( A P P L Y ( C 0040660 A R { a r g U N D O F O R M 0040700 } ) ( C D R { a r g U N D 0040720 O F O R M } ) ) } . F o r 0040740 e x a m p l e , i f t h e 0040760 d e f i n i t i o n o f { l 0041000 i s p F O O } i s { a r g 0041020 D E F } , { l i s p ( / P 0041040 U T D F O O { a r g N E W 0041060 D E F } ) } w i l l c a u s 0041100 e a c a l l t o { f n 0041120 U N D O S A V E } w i t h { 0041140 a r g U N D O F O R M } = { l 0041160 i s p ( / P U T D F O O { 0041200 a r g D E F } ) } . \r \r { i n 0041220 d e x x { N a m e R P L N O 0041240 D E } { T y p e F u n c t i 0041260 o n } { T e x t { l i s p 0041300 / R P L N O D E } } } \r { i n 0041320 d e x x { N a m e R P L N O 0041340 D E 2 } { T y p e F u n c t 0041360 i o n } { T e x t { l i s p 0041400 / R P L N O D E 2 } } } \r { 0041420 i n d e x / R P L N O D E F 0041440 N } \r { i n d e x / R P L N O 0041460 D E 2 F N } \r \r N o t e : 0041500 I n t h e s p e c i a l c 0041520 a s e o f { f n / R P L N 0041540 O D E } a n d { f n / R P 0041560 L N O D E 2 } , t h e f o r 0041600 m a t o f { a r g U N D O 0041620 F O R M } i s { l i s p ( 0041640 { a r g X } { a r g O L D 0041660 C A R } . { a r g O L D C 0041700 D R } ) } . W h e n { a r 0041720 g U N D O F O R M } i s u 0041740 n d o n e , t h i s f o r m 0041760 i s r e c o g n i z e d a 0042000 n d h a n d l e d s p e c i 0042020 a l l y . T h i s i m p l 0042040 e m e n t a t i o n s a v e s 0042060 s p a c e . { n o t e t h i 0042100 s i s a t o t a l k l u 0042120 d g e ! ! } \r \r { f n C A R } 0042140 o f t h e { i n d e x S 0042160 I D E ( H i s t o r y L i s 0042200 t P r o p e r t y ) } { l i s 0042220 p S I D E } p r o p e r t y 0042240 o f a n e v e n t i s 0042260 a c o u n t o f t h e n 0042300 u m b e r o f { a r g U N 0042320 D O F O R M } s s a v e d f 0042340 o r t h i s e v e n t . 0042360 E a c h c a l l t o { f n 0042400 U N D O S A V E } i n c r e 0042420 m e n t s t h i s c o u n t 0042440 . I f t h i s c o u n t 0042460 i s s e t t o - 1 , t 0042500 h e n i t i s n e v e r 0042520 i n c r e m e n t e d , a n d 0042540 a n y n u m b e r o f { 0042560 a r g U N D O F O R M } s c 0042600 a n b e s a v e d . I f 0042620 t h i s c o u n t i s a 0042640 p o s i t i v e n u m b e r 0042660 , { f n U N D O S A V E } 0042700 r e s t r i c t s t h e n u 0042720 m b e r o f { a r g U N D 0042740 O F O R M } s s a v e d t o 0042760 t h e v a l u e o f { v 0043000 a r # U N D O S A V E S } , 0043020 d e s c r i b e d b e l o w . 0043040 { f n L O A D } { i n d e 0043060 x L O A D F N } i n i t i 0043100 a l i z e s t h e c o u n t 0043120 t o - 1 , s o t h a t 0043140 r e g a r d l e s s o f t h 0043160 e v a l u e o f { i n d e 0043200 x # U N D O S A V E S V a r 0043220 } { v a r # U N D O S A V E S 0043240 } , n o m e s s a g e w i 0043260 l l b e p r i n t e d , a 0043300 n d t h e { f n L O A D } 0043320 w i l l b e u n d o a b l 0043340 e . \r } } \r \r \r { i n d e x X 0043360 { N a m e U N D O S A V E S } 0043400 { T y p e V a r i a b l e } 0043420 \r { T e x t { l i s p # U N 0043440 D O S A V E S } } } \r \r { V a 0043460 r D e f { N a m e # U N D O 0043500 S A V E S } \r { T e x t \r { i n 0043520 d e x # U N D O S A V E S V 0043540 a r } T h e v a l u e o f 0043560 { v a r # U N D O S A V E S } 0043600 i s t h e m a x i m u m 0043620 n u m b e r o f { a r g U 0043640 N D O F O R M } s t o b e 0043660 s a v e d f o r a s i n g 0043700 l e e v e n t . W h e n 0043720 t h e c o u n t o f { a r 0043740 g U N D O F O R M } s r e a 0043760 c h e s t h i s n u m b e r 0044000 , { i n d e x U N D O S A V 0044020 E F N } { f n U N D O S A V 0044040 E } p r i n t s t h e m e 0044060 s s a g e { l i s p C O N T 0044100 I N U E S A V I N G ? } , { i 0044120 n d e x * P R I M A R Y * C 0044140 O N T I N U E S A V I N G ? 0044160 ( P r i n t e d b y S y s t 0044200 e m ) } a s k i n g t h e 0044220 u s e r i f h e w a n t s 0044240 t o c o n t i n u e s a v 0044260 i n g . I f t h e u s e 0044300 r a n s w e r s { l i s p 0044320 N O } o r d e f a u l t s , 0044340 { f n U N D O S A V E } d 0044360 i s c a r d s t h e p r e v 0044400 i o u s l y s a v e d i n f 0044420 o r m a t i o n f o r t h i 0044440 s e v e n t , a n d m a k 0044460 e s { i n d e x N O S A V E 0044500 F N } { l i s p N O S A V E 0044520 } b e t h e v a l u e o 0044540 f t h e p r o p e r t y { 0044560 i n d e x S I D E ( H i s t 0044600 o r y L i s t P r o p e r t 0044620 y ) } { l i s p S I D E } , 0044640 w h i c h d i s a b l e s a 0044660 n y f u r t h e r s a v i n 0044700 g f o r t h i s e v e n t 0044720 . I f t h e u s e r a 0044740 n s w e r s { l i s p Y E S 0044760 } , { f n U N D O S A V E } 0045000 c h a n g e s t h e c o u 0045020 n t t o - 1 , w h i c h 0045040 i s t h e n n e v e r i n 0045060 c r e m e n t e d , a n d c 0045100 o n t i n u e s s a v i n g . 0045120 T h e p u r p o s e o f 0045140 t h i s f e a t u r e i s 0045160 t o a v o i d t y i n g 0045200 u p l a r g e q u a n t i t 0045220 i e s o f s t o r a g e f 0045240 o r o p e r a t i o n s t h 0045260 a t w i l l n e v e r n e 0045300 e d t o b e u n d o n e . 0045320 \r \r I f { v a r # U N D O S 0045340 A V E S } i s n e g a t i v 0045360 e , t h e n w h e n t h e 0045400 c o u n t r e a c h e s - 0045420 { l i s p # U N D O S A V E S 0045440 } , { f n U N D O S A V E } 0045460 s i m p l y s t o p s s a 0045500 v i n g w i t h o u t p r i 0045520 n t i n g a n y m e s s a g 0045540 e s o r i n t e r a c t i n 0045560 g w i t h t h e u s e r . 0045600 { v a r # U N D O S A V E 0045620 S } = { l i s p N I L } i s 0045640 e q u i v a l e n t t o { 0045660 v a r # U N D O S A V E S } = 0045700 i n f i n i t y . { v a r 0045720 # U N D O S A V E S } i s i 0045740 n i t i a l l y { l i s p N 0045760 I L } . \r } } \r \r \r { F n D e f 0046000 { F n N a m e N E W / F N } 0046020 { F n A r g s F N } \r { T e 0046040 x t \r { f n N E W / F N } p 0046060 e r f o r m s t h e n e c e 0046100 s s a r y h o u s e k e e p i 0046120 n g o p e r a t i o n s t o 0046140 m a k e { a r g F N } b 0046160 e t r a n s l a t e d t o 0046200 t h e u n d o a b l e v e r 0046220 s i o n { l i s p / { a r g 0046240 F N } } w h e n t y p e d 0046260 - i n . { i n d e x / f u n 0046300 c t i o n s } F o r e x a 0046320 m p l e , { f n R A D I X } 0046340 c a n b e m a d e u n d 0046360 o a b l e w h e n t y p e d 0046400 - i n b y p e r f o r m i n 0046420 g : \r \r { l i s p c o d e \r _ 0046440 ( D E F I N E Q ( / R A D I X 0046460 ( X ) \r ( 0046500 U N D O S A V E ( L I S T ' 0046520 / R A D I X ( R A D I X X ) 0046540 ) \r ( / R A D I X ) \r _ ( N E 0046560 W / F N ' R A D I X ) } \r } } 0046600 \r \r \r \r { F n D e f { F n N a 0046620 m e L I S P X / } { F n A r 0046640 g s X F N V A R S } \r { T 0046660 e x t \r { f n L I S P X / } 0046700 p e r f o r m s t h e s u b 0046720 s t i t u t i o n o f { l i 0046740 s p / } f u n c t i o n s { 0046760 i n d e x / f u n c t i o n 0047000 s } f o r d e s t r u c t i 0047020 v e f u n c t i o n s t h a 0047040 t a r e t y p e d - i n . 0047060 I f { a r g F N } i s 0047100 n o t { l i s p N I L } , 0047120 i t i s t h e n a m e o 0047140 f a f u n c t i o n , a n 0047160 d { a r g X } i s i t s 0047200 a r g u m e n t l i s t . 0047220 I f { a r g F N } i s 0047240 { l i s p N I L } , { a r g 0047260 X } i s a f o r m . 0047300 I n b o t h c a s e s , { 0047320 f n L I S P X / } r e t u r 0047340 n s { a r g X } w i t h 0047360 t h e a p p r o p r i a t e 0047400 s u b s t i t u t i o n s . 0047420 { a r g V A R S } i s a 0047440 l i s t o f b o u n d v a 0047460 r i a b l e s ( o p t i o n a 0047500 l ) . \r \r { i n d e x L I S P 0047520 X / F N } { f n L I S P X / 0047540 } i n c o r p o r a t e s i 0047560 n f o r m a t i o n a b o u t 0047600 t h e s y n t a x a n d 0047620 s e m a n t i c s o f I n t 0047640 e r l i s p e x p r e s s i o 0047660 n s . F o r e x a m p l e 0047700 , i t d o e s n o t b o 0047720 t h e r t o m a k e u n d 0047740 o a b l e o p e r a t i o n s 0047760 i n v o l v i n g v a r i a 0050000 b l e s b o u n d i n { a 0050020 r g X } . I t d o e s 0050040 n o t p e r f o r m s u b s 0050060 t i t u t i o n i n s i d e 0050100 o f e x p r e s s i o n s { 0050120 f n C A R } o f w h i c h 0050140 i s a n n l a m b d a f 0050160 u n c t i o n ( u n l e s s 0050200 { f n C A R } o f t h e 0050220 f o r m h a s t h e p r o 0050240 p e r t y { p r o p I N F O 0050260 } { i n d e x I N F O P r o 0050300 p } v a l u e { l i s p E 0050320 V A L } , \r s e e { P a g e R 0050340 e f P r o p I N F O } ) . 0050360 F o r e x a m p l e , { l 0050400 i s p ( B R E A K P U T D ) 0050420 } t y p e d t o { f n L 0050440 I S P X } , w i l l b r e a 0050460 k o n { f n P U T D } , 0050500 n o t { f n / P U T D } . 0050520 S i m i l a r l y , s u b s 0050540 t i t u t i o n { i t s h o 0050560 u l d } b e p e r f o r m e 0050600 d i n t h e a r g u m e n 0050620 t s f o r f u n c t i o n s 0050640 l i k e { f n M A P C } , 0050660 { f n R P T Q } , e t c . 0050700 , s i n c e t h e s e c o 0050720 n t a i n e x p r e s s i o n 0050740 s t h a t w i l l b e e 0050760 v a l u a t e d o r a p p l 0051000 i e d . F o r e x a m p l 0051020 e , i f t h e u s e r t 0051040 y p e s { l i s p ( M A P 0051060 C ' ( F O O 1 F O O 2 F O 0051100 O 3 ) ' P U T D ) } t h e 0051120 { f n P U T D } m u s t b 0051140 e r e p l a c e d b y { f 0051160 n / P U T D } . \r } } \r \r \r \r 0051200 { F n D e f { F n N a m e U 0051220 N D O L I S P X } { F n A r g 0051240 s L I N E } \r { T e x t \r { a 0051260 r g L I N E } i s a n e 0051300 v e n t s p e c i f i c a t i 0051320 o n . { f n U N D O L I S 0051340 P X } i s t h e f u n c t 0051360 i o n t h a t e x e c u t e 0051400 s { i n d e x U N D O P A 0051420 C o m } { p a c o m U N D O } 0051440 c o m m a n d s b y c a l 0051460 l i n g { f n U N D O L I S 0051500 P X 1 } o n t h e a p p r 0051520 o p r i a t e e n t r y ( s ) 0051540 . \r } } \r \r \r \r { F n D e f { 0051560 F n N a m e U N D O L I S P X 0051600 1 } { F n A r g s E V E N T 0051620 F L G { a n o n a r g } } \r 0051640 { T e x t \r U n d o e s o n e 0051660 e v e n t . { f n U N 0051700 D O L I S P X 1 } r e t u r n 0051720 s { l i s p N I L } i f 0051740 t h e r e i s n o t h i n g 0051760 t o b e u n d o n e . 0052000 I f t h e e v e n t i s 0052020 a l r e a d y u n d o n e , 0052040 { f n U N D O L I S P X 1 } 0052060 p r i n t s { l i s p a l r 0052100 e a d y u n d o n e } { i n d 0052120 e x a l r e a d y u n d o n 0052140 e ( P r i n t e d b y S y 0052160 s t e m ) } a n d r e t u r 0052200 n s { l i s p T } . O t 0052220 h e r w i s e , { f n U N D 0052240 O L I S P X 1 } u n d o e s 0052260 t h e e v e n t , p r i n t 0052300 s a m e s s a g e , e . g 0052320 . , { l i s p S E T Q u n 0052340 d o n e } , { i n d e x u n d 0052360 o n e ( P r i n t e d b y 0052400 S y s t e m ) } a n d r e t 0052420 u r n s { l i s p T } . \r \r 0052440 I f { a r g F L G } = { l i 0052460 s p T } a n d t h e e v 0052500 e n t i s a l r e a d y u 0052520 n d o n e , o r i s a n 0052540 u n d o c o m m a n d , { f 0052560 n U N D O L I S P X 1 } t a 0052600 k e s n o a c t i o n a n 0052620 d r e t u r n s { l i s p 0052640 N I L } . { f n U N D O L 0052660 I S P X } u s e s t h i s 0052700 o p t i o n t o s e a r c h 0052720 f o r t h e l a s t e v 0052740 e n t t o u n d o . T h 0052760 u s w h e n { a r g L I N 0053000 E } = { l i s p N I L } , { 0053020 f n U N D O L I S P X } s i 0053040 m p l y s e a r c h e s h i 0053060 s t o r y u n t i l i t f 0053100 i n d s a n e v e n t f o 0053120 r w h i c h { f n U N D O 0053140 L I S P X 1 } r e t u r n s 0053160 { l i s p T } . \r \r U n d o i 0053200 n g a n e v e n t c o n s 0053220 i s t s o f m a p p i n g 0053240 d o w n ( { f n C D R } o 0053260 f ) t h e p r o p e r t y 0053300 v a l u e f o r { i n d e x 0053320 S I D E ( H i s t o r y L 0053340 i s t P r o p e r t y ) } { l 0053360 i s p S I D E } , a n d f 0053400 o r e a c h e l e m e n t , 0053420 a p p l y i n g { f n C A 0053440 R } t o { f n C D R } , 0053460 a n d t h e n m a r k i n g 0053500 t h e e v e n t u n d o n 0053520 e b y a t t a c h i n g ( 0053540 w i t h { f n / A T T A C H 0053560 } ) a { l i s p N I L } 0053600 t o t h e f r o n t o f 0053620 i t s { p r o p S I D E } 0053640 p r o p e r t y . N o t e 0053660 t h a t t h e u n d o i n g 0053700 o f e a c h e l e m e n t 0053720 o n t h e { l i s p S I 0053740 D E } p r o p e r t y w i l 0053760 l u s u a l l y c a u s e 0054000 u n d o s a v e s t o b e 0054020 a d d e d t o t h e { i t 0054040 c u r r e n t } { i n d e x 0054060 L I S P X H I S T V a r } { 0054100 v a r L I S P X H I S T } , 0054120 t h e r e b y e n a b l i n g 0054140 t h e e f f e c t s o f 0054160 { f n U N D O L I S P X 1 } 0054200 t o b e u n d o n e . \r } } 0054220 \r \r \r \r { F n D e f { F n N a 0054240 m e P R I N T H I S T O R Y } 0054260 { F n A r g s H I S T O R Y 0054300 L I N E S K I P F N N O V 0054320 A L U E S F I L E } \r { T e x 0054340 t \r { a r g L I N E } i s 0054360 a n e v e n t s p e c i f i 0054400 c a t i o n . { f n P R I 0054420 N T H I S T O R Y } p r i n t 0054440 s t h e e v e n t s o n 0054460 { a r g H I S T O R Y } s p 0054500 e c i f i e d b y { a r g 0054520 L I N E } , e . g . , { l i 0054540 s p ( - 1 T H R U - 1 0 ) 0054560 } . \r P r i n t i n g i s p 0054600 e r f o r m e d v i a t h e 0054620 f u n c t i o n { f n S H 0054640 O W P R I N 2 } { i n d e x S 0054660 H O W P R I N 2 F N } , s o 0054700 t h a t i f t h e v a l 0054720 u e o f { v a r S Y S P R 0054740 E T T Y F L G } = { l i s p T 0054760 } , { i n d e x S Y S P R E T 0055000 T Y F L G V a r } e v e n t 0055020 s w i l l b e p r e t t y 0055040 p r i n t e d . \r \r { a r g S 0055060 K I P F N } i s a n ( o p 0055100 t i o n a l ) f u n c t i o n 0055120 a l a r g u m e n t t h a t 0055140 i s a p p l i e d t o e 0055160 a c h e v e n t b e f o r e 0055200 p r i n t i n g . I f i 0055220 t r e t u r n s n o n - { l 0055240 i s p N I L } , t h e e v 0055260 e n t i s s k i p p e d , 0055300 i . e . , n o t p r i n t e 0055320 d . \r \r I f { a r g N O V A 0055340 L U E S } = { l i s p T } , 0055360 o r { a r g N O V A L U E S 0055400 } a p p l i e d t o t h e 0055420 c o r r e s p o n d i n g e 0055440 v e n t i s t r u e , t h 0055460 e v a l u e i s n o t p 0055500 r i n t e d . F o r e x a 0055520 m p l e , { a r g N O V A L 0055540 U E S } i s { l i s p T } 0055560 w h e n p r i n t i n g e 0055600 v e n t s o n { i n d e x 0055620 E D I T H I S T O R Y V a r } 0055640 { v a r E D I T H I S T O R Y 0055660 } . \r \r \r F o r e x a m p l e 0055700 , t h e f o l l o w i n g 0055720 { l i s p L I S P X M A C R O 0055740 } w i l l d e f i n e { l 0055760 i s p ? ? ' } a s a c o 0056000 m m a n d f o r p r i n t i 0056020 n g t h e h i s t o r y l 0056040 i s t w h i l e s k i p p i 0056060 n g a l l " l a r g e e v 0056100 e n t s " a n d n o t p r 0056120 i n t i n g a n y v a l u e 0056140 s . \r \r { l i s p c o d e \r ( ? 0056160 ? ' ( P R I N T H I S T O R Y 0056200 \r L I S P X H 0056220 I S T O R Y \r 0056240 L I S P X L I N E \r 0056260 ( F U N C T I O N ( L A 0056300 M B D A ( X ) \r 0056320 ( I G R E A T E R P 0056340 ( C O U N T ( C A R X ) ) 0056360 5 ) ) ) \r T \r 0056400 T ) ) } \r \r } 0056420 } \r \r \r } { E n d S u b S e c 0056440 P r o g r a m m e r ' s A s 0056460 s i s t a n t F u n c t i o n 0056500 s } \r \r \r \r { n o t e l e t s 0056520 l e a v e t h i s o u t 0056540 a n d s e e i f a n y o n 0056560 e n o t i c e s - - i t 0056600 i s s u c h a c r o c k } 0056620 \r \r { B e g i n S u b S e c 0056640 T h e E d i t o r a n d t 0056660 h e P r o g r a m m e r ' s 0056700 A s s i s t a n t } \r { T i t l 0056720 e T h e E d i t o r a n d 0056740 t h e P r o g r a m m e r ' 0056760 s A s s i s t a n t } \r { T e 0057000 x t \r \r { T a g E d i t o r A 0057020 n d P A } \r \r { i n d e x P r 0057040 o g r a m m e r ' s a s s i s 0057060 t a n t a n d t h e e d i 0057100 t o r } \r \r A s m e n t i o n 0057120 e d e a r l i e r , a l l 0057140 o f t h e r e m a r k s c 0057160 o n c e r n i n g " t h e p 0057200 r o g r a m m e r ' s a s s i 0057220 s t a n t " a p p l y e q u 0057240 a l l y w e l l t o u s e 0057260 r i n t e r a c t i o n s w 0057300 i t h { f n E V A L Q T } , 0057320 { f n B R E A K } o r t 0057340 h e e d i t o r . T h e 0057360 d i f f e r e n c e s b e t w 0057400 e e n t h e e d i t o r ' s 0057420 i m p l e m e n t a t i o n 0057440 o f t h e s e f e a t u r e 0057460 s a n d t h a t o f { f 0057500 n L I S P X } a r e m o s 0057520 t l y o b v i o u s o r i 0057540 n c o n s e q u e n t i a l . 0057560 H o w e v e r , f o r c o 0057600 m p l e t e n e s s , t h i s 0057620 s e c t i o n d i s c u s s 0057640 e s t h e e d i t o r ' s 0057660 i m p l e m e n t a t i o n o 0057700 f t h e p r o g r a m m e r 0057720 ' s a s s i s t a n t . \r \r \r 0057740 T h e e d i t o r u s e s 0057760 { i n d e x P R O M P T C H A 0060000 R F N } { f n P R O M P T C 0060020 H A R } t o p r i n t i t 0060040 s p r o m p t c h a r a c t 0060060 e r , a n d { i n d e x L 0060100 I S P X R E A D F N } { f n 0060120 L I S P X R E A D } , { i n d 0060140 e x L I S P X R E A D P F N 0060160 } { f n L I S P X R E A D P } 0060200 , a n d { i n d e x R E A 0060220 D L I N E F N } { f n R E A 0060240 D L I N E } f o r o b t a i 0060260 n i n g i n p u t s . \r W h e 0060300 n t h e e d i t o r i s 0060320 g i v e n a n i n p u t , 0060340 i t c a l l s { i n d e x 0060360 H I S T O R Y S A V E F N } { 0060400 f n H I S T O R Y S A V E } 0060420 t o r e c o r d t h e i n 0060440 p u t i n a n e w e v e 0060460 n t o n i t s h i s t o r 0060500 y l i s t , { i n d e x * 0060520 P R I M A R Y * E D I T H I S 0060540 T O R Y V a r } { v a r E D 0060560 I T H I S T O R Y } , e x c e 0060600 p t t h a t t h e a t o m 0060620 i c c o m m a n d s { e d i 0060640 t c o m O K } , { e d i t c 0060660 o m S T O P } , { e d i t c 0060700 o m S A V E } , { e d i t c 0060720 o m P } , { e d i t c o m 0060740 ? } , { e d i t c o m P P } 0060760 a n d { e d i t c o m E } 0061000 a r e n o t r e c o r d e 0061020 d . I n a d d i t i o n , 0061040 n u m b e r c o m m a n d s 0061060 a r e g r o u p e d t o g 0061100 e t h e r i n a s i n g l 0061120 e e v e n t . F o r e x 0061140 a m p l e , { l i s p 3 3 0061160 - 1 } i s c o n s i d e r 0061200 e d a s o n e c o m m a n 0061220 d f o r c h a n g i n g p 0061240 o s i t i o n . { v a r E 0061260 D I T H I S T O R Y } f o l l 0061300 o w s t h e s a m e c o n 0061320 v e n t i o n s a n d f o r 0061340 m a t a s { v a r L I S P 0061360 X H I S T O R Y } ( { P a g e 0061400 R e f V a r L I S P X H I S 0061420 T O R Y } ) . H o w e v e r 0061440 , s i n c e e d i t c o m 0061460 m a n d s h a v e n o v a 0061500 l u e , t h e e d i t o r 0061520 u s e s t h e v a l u e f 0061540 i e l d f o r s a v i n g 0061560 s i d e e f f e c t s , r a 0061600 t h e r t h a n s t o r i n 0061620 g t h e m u n d e r t h e 0061640 p r o p e r t y { i n d e x 0061660 S I D E ( H i s t o r y L 0061700 i s t P r o p e r t y ) } { l 0061720 i s p S I D E } . \r \r \r T h e 0061740 e d i t o r r e c o g n i z 0061760 e s a n d p r o c e s s e s 0062000 t h e f o u r c o m m a n 0062020 d s { i n d e x D O E d i 0062040 t C o m } { e d i t c o m D O 0062060 } , { i n d e x ! E E d i 0062100 t C o m } { e d i t c o m ! E 0062120 } , { i n d e x ! F E d i 0062140 t C o m } { e d i t c o m ! F 0062160 } , a n d { i n d e x ! N 0062200 E d i t C o m } { e d i t c o 0062220 m ! N } w h i c h r e f e 0062240 r t o p r e v i o u s e v 0062260 e n t s o n { v a r E D I 0062300 T H I S T O R Y } . T h e 0062320 e d i t o r a l s o p r o c 0062340 e s s e s { p a c o m U N D 0062360 O } { i n d e x U N D O E d 0062400 i t C o m } { i n d e x U N D 0062420 O P A C o m } i t s e l f , 0062440 a s d e s c r i b e d b e 0062460 l o w . A l l o t h e r 0062500 h i s t o r y c o m m a n d s 0062520 a r e s i m p l y g i v e 0062540 n t o { i n d e x L I S P 0062560 X F N } { f n L I S P X } 0062600 f o r e x e c u t i o n , a 0062620 f t e r f i r s t b i n d i 0062640 n g ( r e s e t t i n g ) { 0062660 i n d e x L I S P X H I S T O 0062700 R Y V a r } { v a r L I S P 0062720 X H I S T O R Y } t o { i n 0062740 d e x E D I T H I S T O R Y 0062760 V a r } { v a r E D I T H I S 0063000 T O R Y } . T h e e d i t 0063020 o r a l s o c a l l s { f 0063040 n L I S P X } w h e n g i 0063060 v e n a n { i n d e x E 0063100 E d i t C o m } { e d i t c o m 0063120 E } c o m m a n d ( { P a 0063140 g e R e f E d i t C o m E } 0063160 ) . I n t h i s c a s e 0063200 , t h e e d i t o r u s e 0063220 s t h e f i f t h a r g u 0063240 m e n t t o { i n d e x L 0063260 I S P X F N } { f n L I S P 0063300 X } , { a r g L I S P X F L 0063320 G } , t o s p e c i f y t 0063340 h a t a n y h i s t o r y 0063360 c o m m a n d s a r e t o 0063400 b e e x e c u t e d b y a 0063420 r e c u r s i v e c a l l 0063440 t o { f n L I S P X } , r 0063460 a t h e r t h a n b y u n 0063500 r e a d i n g . F o r e x 0063520 a m p l e , i f t h e u s 0063540 e r t y p e s { l i s p E 0063560 R E D O } i n t h e e d 0063600 i t o r , h e w a n t s t 0063620 h e l a s t e v e n t o n 0063640 { i n d e x L I S P X H I S 0063660 T O R Y V a r } { v a r L I 0063700 S P X H I S T O R Y } p r o c 0063720 e s s e d a s { f n L I S 0063740 P X } i n p u t , a n d n 0063760 o t t o b e u n r e a d 0064000 a n d p r o c e s s e d b y 0064020 t h e e d i t o r . \r \r N o 0064040 t e : T h e e d i t o r 0064060 d e t e r m i n e s w h i c h 0064100 h i s t o r y c o m m a n d 0064120 s t o p a s s t o { f n 0064140 L I S P X } b y l o o k i 0064160 n g a t { i n d e x * P R 0064200 I M A R Y * H I S T O R Y C O 0064220 M S V a r } { v a r H I S T 0064240 O R Y C O M S } , a l i s t 0064260 o f t h e h i s t o r y 0064300 c o m m a n d s . { i n d e 0064320 x E D I T D E F A U L T F N 0064340 } { f n E D I T D E F A U L T 0064360 } ( { P a g e R e f F n E 0064400 D I T D E F A U L T } ) i n t 0064420 e r r o g a t e s { v a r H 0064440 I S T O R Y C O M S } b e f o 0064460 r e a t t e m p t i n g s p 0064500 e l l i n g c o r r e c t i o 0064520 n . ( A l l o f t h e 0064540 c o m m a n d s o n { v a r 0064560 H I S T O R Y C O M S } a r 0064600 e a l s o o n { v a r E 0064620 D I T C O M S A } a n d { v 0064640 a r E D I T C O M S L } s o 0064660 t h a t t h e y c a n b 0064700 e c o r r e c t e d i f m 0064720 i s s p e l l e d i n t h e 0064740 e d i t o r . ) T h u s 0064760 i f t h e u s e r d e f i 0065000 n e s a { l i s p L I S P 0065020 X M A C R O } a n d w i s h 0065040 e s i t t o o p e r a t e 0065060 i n t h e e d i t o r a 0065100 s w e l l , h e n e e d 0065120 s i m p l y a d d i t t o 0065140 { v a r H I S T O R Y C O M 0065160 S } . F o r e x a m p l e 0065200 , { p a c o m R E T R I E V 0065220 E } i s i m p l e m e n t e 0065240 d a s a { l i s p L I S 0065260 P X M A C R O } a n d w o r 0065300 k s e q u a l l y w e l l 0065320 i n { f n L I S P X } a n 0065340 d t h e e d i t o r . \r \r T 0065360 h e m a j o r i m p l e m e 0065400 n t a t i o n d i f f e r e n 0065420 c e b e t w e e n t h e e 0065440 d i t o r a n d { f n L I 0065460 S P X } o c c u r s i n u 0065500 n d o i n g . { i n d e x U n 0065520 d o i n g } { i n d e x U n d 0065540 o i n g i n t h e e d i t 0065560 o r } { v a r E D I T H I 0065600 S T O R Y } i s a l i s t 0065620 o f o n l y t h e l a s 0065640 t { a r g N } c o m m a n 0065660 d s , w h e r e { a r g N 0065700 } i s t h e v a l u e o 0065720 f t h e t i m e - s l i c e 0065740 . H o w e v e r t h e e 0065760 d i t o r p r o v i d e s f 0066000 o r u n d o i n g { i t a 0066020 l l } c h a n g e s m a d e 0066040 i n a s i n g l e e d i 0066060 t i n g s e s s i o n , e v 0066100 e n i f t h a t s e s s i 0066120 o n c o n s i s t e d o f 0066140 m o r e t h a n { a r g N 0066160 } e d i t c o m m a n d s . 0066200 T h e r e f o r e , t h e 0066220 e d i t o r s a v e s u n 0066240 d o i n f o r m a t i o n i 0066260 n d e p e n d e n t l y o f 0066300 t h e { v a r E D I T H I S 0066320 T O R Y } o n a l i s t 0066340 c a l l e d { i n d e x U N 0066360 D O L S T V a r } { v a r U 0066400 N D O L S T } , ( a l t h o u 0066420 g h i t a l s o s t o r e 0066440 s e a c h e n t r y o n 0066460 { v a r U N D O L S T } i n 0066500 t h e f i e l d o f t h 0066520 e c o r r e s p o n d i n g 0066540 e v e n t o n { v a r E D 0066560 I T H I S T O R Y } . ) T h 0066600 u s , t h e c o m m a n d s 0066620 { e d i t c o m U N D O } , 0066640 { e d i t c o m ! U N D O } 0066660 , a n d { e d i t c o m U 0066700 N B L O C K } , a r e n o t 0066720 d e p e n d e n t o n { v 0066740 a r E D I T H I S T O R Y } , 0066760 a n d i n f a c t w i l 0067000 l w o r k i f { v a r E 0067020 D I T H I S T O R Y } = { l i s 0067040 p N I L } , o r e v e n 0067060 i n a s y s t e m w h i c 0067100 h d o e s n o t c o n t a 0067120 i n { f n L I S P X } a t 0067140 a l l . F o r e x a m p 0067160 l e , { e d i t c o m U N D 0067200 O } s p e c i f i e s u n d 0067220 o i n g t h e l a s t c o 0067240 m m a n d o n { v a r U N 0067260 D O L S T } , e v e n i f 0067300 t h a t e v e n t n o l o 0067320 n g e r a p p e a r s o n 0067340 { v a r E D I T H I S T O R Y 0067360 } . T h e o n l y i n t 0067400 e r a c t i o n b e t w e e n 0067420 { e d i t c o m U N D O } 0067440 a n d t h e h i s t o r y 0067460 l i s t o c c u r s w h e n 0067500 t h e u s e r t y p e s 0067520 { e d i t c o m U N D O } f 0067540 o l l o w e d b y a n e v 0067560 e n t s p e c i f i c a t i o 0067600 n . I n t h i s c a s e 0067620 , t h e e d i t o r c a l 0067640 l s { i n d e x L I S P X F 0067660 I N D F N } { f n L I S P X 0067700 F I N D } t o f i n d t h 0067720 e e v e n t , a n d t h e 0067740 n u n d o e s t h e c o r 0067760 r e s p o n d i n g e n t r y 0070000 o n { i n d e x U N D O L 0070020 S T V a r } { v a r U N D O 0070040 L S T } . T h u s t h e 0070060 u s e r c a n o n l y u n 0070100 d o a { i t s p e c i f i 0070120 e d } c o m m a n d w i t h 0070140 i n t h e s c o p e o f 0070160 t h e { i n d e x E D I T H 0070200 I S T O R Y V a r } { v a r 0070220 E D I T H I S T O R Y } . ( 0070240 N o t e t h a t t h i s i 0070260 s a l s o t h e o n l y 0070300 w a y { e d i t c o m U N D 0070320 O } c o m m a n d s t h e m 0070340 s e l v e s c a n b e u n 0070360 d o n e , t h a t i s , b 0070400 y u s i n g t h e h i s t 0070420 o r y f e a t u r e , t o 0070440 s p e c i f y t h e c o r r 0070460 e s p o n d i n g e v e n t , 0070500 e . g . , { l i s p U N D 0070520 O U N D O } . ) \r \r \r T h e 0070540 i m p l e m e n t a t i o n o 0070560 f t h e a c t u a l u n d 0070600 o i n g i s s i m i l a r 0070620 t o t h e w a y i t i s 0070640 d o n e i n { f n L I S 0070660 P X } : e a c h c o m m a 0070700 n d t h a t m a k e s a 0070720 c h a n g e i n t h e s t 0070740 r u c t u r e b e i n g e d 0070760 i t e d d o e s s o v i a 0071000 a f u n c t i o n t h a t 0071020 r e c o r d s t h e c h a 0071040 n g e o n a v a r i a b l 0071060 e . A f t e r t h e c o 0071100 m m a n d h a s c o m p l e 0071120 t e d , t h i s v a r i a b 0071140 l e c o n t a i n s a l i 0071160 s t o f a l l t h e p o 0071200 i n t e r s t h a t h a v e 0071220 b e e n c h a n g e d a n 0071240 d t h e i r o r i g i n a l 0071260 c o n t e n t s . U n d o 0071300 i n g t h a t c o m m a n d 0071320 s i m p l y i n v o l v e s 0071340 m a p p i n g d o w n t h 0071360 a t l i s t a n d r e s t 0071400 o r i n g t h e p o i n t e 0071420 r s . \r \r \r { B e g i n N o t 0071440 e } \r D a t e : 2 J U L 0071460 1 9 7 8 2 2 2 8 - P D T \r F r 0071500 o m : T E I T E L M A N \r \r d 0071520 o n t s a v e h i s t o r y c o 0071540 m s i s a l i s t o f 0071560 c o m a n d s n o t s a v e 0071600 d b y e d i t h i s t o r 0071620 y . i n i t i a l l y S A V 0071640 E P ? P P P P * a n d 0071660 E . c o m p a c t h i s t 0071700 o r y c o m s i s a l i t 0071720 o f c o m m a n d s t o 0071740 b e c o m p a c t e d a n d 0071760 i s i n i t i a l l y N I 0072000 L . n u m b e r s a e a u 0072020 t o m a t i c a l l y o n c 0072040 o m p a c t h i s t o r y c o m 0072060 s . \r \r i n I n t e r l i s p 0072100 - D , \r d o n t s a v e h i s t 0072120 o r y c o m s i n i t i a l l 0072140 y ( S A V E P ? P P P 0072160 P * E ; E F E V E P ) 0072200 \r c o m p a c t h i s t o r y c 0072220 o m s i n i t i a l l y ( 2 0072240 P N X P B K P - 1 P ) \r { 0072260 E n d N o t e } \r \r \r } { E n 0072300 d S u b S e c T h e E d i 0072320 t o r a n d t h e P r o g 0072340 r a m m e r ' s A s s i s t a 0072360 n t } \r \r \r \r \0 \0 \0 \0 \0 004 \0 003 \0 0072400 ? \0 1 ( D E F A U L T F O N T 0072420 1 ( G A C H A 1 0 ) ( G A 0072440 C H A 8 ) ( T E R M I N A L 0072460 8 ) ) \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 ? 0072500 \0 1 ( D E F A U L T F O N T 1 0072520 ( G A C H A 1 0 ) ( G A C 0072540 H A 8 ) ( T E R M I N A L 0072560 8 ) ) \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 ? \0 0072600 1 ( D E F A U L T F O N T 1 0072620 ( G A C H A 1 0 ) ( G A C H 0072640 A 8 ) ( T E R M I N A L 8 0072660 ) ) \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 t 367 0072700 \0 \0 \0 \0 003 \0 \0 t 367 \0 001 z 272 0072715