$ od -c -N 50000 [eris]<Lisp>KOTO>LISPUSERS>HASHBUFFER.TEDIT!1 0000000 X E R O X \t H A S H B U F F E R 0000020 \r 2 \r \r 4 \r \r 1 \r \r H A S H B U 0000040 F F E R \r 1 \r \r 4 \r \r B y : 0000060 C h r i s t o p h e r L a n e 0000100 ( L A N E @ S U M E X - A I M 0000120 . A R P A ) \r R e q u i r e s : 0000140 H A S H \r H A S H B U F F E R 0000160 f a c i l i t a t e s c o 0000200 m b i n i n g t o g e t h e r 0000220 a H a s h F i l e a n d 0000240 a H a s h A r r a y i n 0000260 o r d e r t o i m p r o v 0000300 e H a s h F i l e p e r f 0000320 o r m a n c e w h e n t h e 0000340 s a m e k e y s a r e a 0000360 c c e s s e d m u l t i p l e 0000400 t i m e s . T h i s p a 0000420 c k a g e a l s o d e f i n 0000440 e s t w o f u n c t i o n s 0000460 f o r m o v i n g l a r g 0000500 e a m o u n t s o f h a s 0000520 h e d d a t a b e t w e e n 0000540 H a s h f i l e s a n d 0000560 H a s h a r r a y s . \r T h e 0000600 p a c k a g e d e f i n e s 0000620 a s m a l l s e t o f 0000640 f u n c t i o n s t o u s e 0000660 i n p l a c e o f t h e 0000700 H a s h F i l e f u n c t 0000720 i o n s . W h e n a H a 0000740 s h F i l e i s o p e n e 0000760 d , a H a s h A r r a y 0001000 i s c r e a t e d , o f a 0001020 c o m p l i m e n t a r y s 0001040 i z e . W h e n r e q u e 0001060 s t s f o r k e y s a r e 0001100 m a d e , t h e H a s h 0001120 A r r a y i s s e a r c h e 0001140 d f i r s t , a n d i f 0001160 t h e v a l u e i s f o u 0001200 n d , i t i s r e t u r n 0001220 e d . I f t h e v a l u 0001240 e i s n o t f o u n d , 0001260 t h e H a s h F i l e i s 0001300 s e a r c h e d . I f a 0001320 v a l u e i s f o u n d 0001340 t h e r e , i t i s s t o 0001360 r e d i n t h e H a s h 0001400 A r r a y a n d r e t u r n 0001420 e d . I f a v a l u e 0001440 i s n o t f o u n d , a n 0001460 e m p t y m a r k e r i s 0001500 p u t i n t o t h e H a 0001520 s h A r r a y s o t h a t 0001540 t h e H a s h F i l e i 0001560 s n o t s e a r c h e d a 0001600 g a i n . \r ( O P E N H A S H B 0001620 U F F E R F I L E A C C E S 0001640 S # E N T R I E S ) \t [ F u n 0001660 c t i o n ] \r O p e n s a n 0001700 e x i s t i n g H a s h F i 0001720 l e a s a H a s h B u f 0001740 f e r a n d r e t u r n s 0001760 a H a s h B u f f e r d a 0002000 t u m w h i c h m u s t b 0002020 e g i v e n t o o t h e r 0002040 H a s h B u f f e r f u n 0002060 c t i o n s . T h e # E N 0002100 T R I E S a r g u m e n t i 0002120 s u s e d f o r t h e s 0002140 i z e o f t h e H a s h 0002160 A r r a y , i f n o t s u 0002200 p p l i e d t h e s i z e 0002220 o f t h e H a s h F i l e 0002240 i s u s e d . S e t t i 0002260 n g # E N T R I E S s m a l 0002300 l e r t h a n t h e s i z 0002320 e o f t h e H a s h F i 0002340 l e a l l o w s a f a s t 0002360 , s m a l l H a s h A r r 0002400 a y w i n d o w o n t o a 0002420 l a r g e r , s l o w e r 0002440 H a s h F i l e . \r ( C R E A 0002460 T E H A S H B U F F E R F I L 0002500 E V A L U E T Y P E I T E M 0002520 L E N G T H # E N T R I E S ) 0002540 \r S i m i l a r t o O P E N 0002560 H A S H B U F F E R e x c e p 0002600 t t h a t i t c r e a t e 0002620 s a n e w H a s h F i l 0002640 e u s i n g C R E A T E H A 0002660 S H F I L E . T h e a r g 0002700 u m e n t s a r e t h e s 0002720 a m e a s C R E A T E H A S 0002740 H F I L E . # E N T R I E S 0002760 i s u s e d f o r b o t 0003000 h t h e H a s h F I l e 0003020 a n d H a s h A r r a y . \r 0003040 ( C L O S E H A S H B U F F E R 0003060 H A S H B U F F E R F I L E 0003100 O N L Y ? ) \t [ F u n c t i o n 0003120 ] \r C l o s e s a H a s h 0003140 B u f f e r , c l o s i n g 0003160 t h e H a s h F i l e a n 0003200 d s e t t i n g t h e H a 0003220 s h A r r a y t o N I L 0003240 s o t h a t i t c a n b 0003260 e r e c l a i m e d . I f 0003300 F I L E O N L Y ? i s n o 0003320 n - N I L t h e n o n l y 0003340 t h e H a s h F i l e w i 0003360 l l b e c l o s e d , t h 0003400 e H a s h A r r a y w i l 0003420 l b e l e f t a l o n e . 0003440 \r ( G E T H A S H B U F F E R 0003460 K E Y H A S H B U F F E R ) \t 0003500 [ F u n c t i o n ] \r G e t s 0003520 t h e v a l u e f o r K E 0003540 Y f r o m t h e H a s h 0003560 B u f f e r . \r ( P U T H A S H 0003600 B U F F E R K E Y V A L U E 0003620 H A S H B U F F E R ) \t [ F u 0003640 n c t i o n ] \r S t o r e s V 0003660 A L U E u n d e r K E Y i 0003700 n t h e H a s h B u f f e 0003720 r . I f t h e H a s h 0003740 F i l e i s o p e n e d f 0003760 o r i n p u t o n l y , t 0004000 h e n p u t t i n g a k e 0004020 y t o t h e H a s h B u 0004040 f f e r w i l l o n l y p 0004060 u t t h e k e y i n t h 0004100 e H a s h A r r a y , n o 0004120 t t h e H a s h F i l e . 0004140 I f t h e H a s h F i 0004160 l e i s o p e n f o r o 0004200 u t p u t , t h e n p u t t 0004220 i n g a k e y i n t o t 0004240 h e H a s h B u f f e r w 0004260 i l l p u t i t i n t h 0004300 e H a s h A r r a y a n d 0004320 t h e H a s h F i l e . \r 0004340 T h e f o l l o w i n g f u 0004360 n c t i o n s m o v e l a r 0004400 g e a m o u n t s o f d a 0004420 t a b e t w e e n H a s h 0004440 a r r a y s a n d H a s h 0004460 f i l e s : \r ( H A S H A R R A 0004500 Y . T O . H A S H F I L E H A 0004520 S H A R R A Y H A S H F I L E 0004540 T E S T F N ) \t [ F u n c t i 0004560 o n ] \r U s e s M A P H A S H 0004600 t o m o v e t h e c o n 0004620 t e n t s o f H A S H A R R 0004640 Y i n t o a H a s h f i 0004660 l e . I f H A S H F I L E 0004700 i s a f i l e n a m e , 0004720 C R E A T E H A S H F I L E 0004740 i s c a l l e d o n t h e 0004760 n a m e . I f H A S H F 0005000 I L E i s a n o p e n H 0005020 a s h f i l e p o i n t e r 0005040 , i t i s u s e d a n d 0005060 l e f t o p e n . T E S 0005100 T F N , i f s u p p l i e d 0005120 , i s c a l l e d j u s t 0005140 b e f o r e e a c h P U T 0005160 H A S H F I L E o n t h e 0005200 ( K E Y V A L U E H A S H A 0005220 R R A Y H A S H F I L E ) . 0005240 I f t h e T E S T F N r 0005260 e t u r n s N I L , t h e 0005300 k e y a n d v a l u e w i 0005320 l l n o t b e c o p i e d 0005340 t o t h e f i l e . \r ( 0005360 H A S H F I L E . T O . H A S H 0005400 A R R A Y H A S H F I L E H 0005420 A S H A R R A Y T E S T F N ) 0005440 \t [ F u n c t i o n ] \r U s e s 0005460 M A P H A S H F I L E t o 0005500 m o v e t h e c o n t e n t 0005520 s o f H A S H F I L E i n 0005540 t o a H a s h a r r a y . 0005560 T h e H A S H A R R A Y 0005600 a r g u m e n t i s o p t i 0005620 o n a l , i f n o t s u p 0005640 p l i e d a n e w H a s h 0005660 a r r a y i s c r e a t e 0005700 d o f t h e a p p r o p r 0005720 i a t e s i z e . T E S T 0005740 F N , i f s u p p l i e d , 0005760 i s c a l l e d j u s t 0006000 b e f o r e e a c h P U T H 0006020 A S H o n t h e ( K E Y 0006040 V A L U E H A S H F I L E H 0006060 A S H A R R A Y ) . I f t 0006100 h e T E S T F N r e t u r n 0006120 s N I L , t h e k e y a 0006140 n d v a l u e w i l l n o 0006160 t b e c o p i e d t o t 0006200 h e a r r a y . \0 \0 \0 \0 \0 003 0006220 ( L I S T ( ( P A G E N I L 0006240 ( P A P E R S I Z E L e t t 0006260 e r F O L I O I N F O ( A R 0006300 A B I C ) S T A R T I N G P A 0006320 G E # 1 ) ( 0 0 6 1 2 0006340 7 9 2 ) ( ( F O L I O N I L 0006360 ( P A R A L O O K S ( Q U A 0006400 D C E N T E R E D ) C H A R 0006420 L O O K S ( S U P E R S C R I 0006440 P T 0 I N V I S I B L E O 0006460 F F S E L E C T P O I N T O 0006500 F F P R O T E C T E D O F F 0006520 S I Z E 1 0 F A M I L Y 0006540 M O D E R N O V E R L I N E 0006560 O F F S T R I K E O U T O F 0006600 F U N D E R L I N E O F F 0006620 E X P A N S I O N R E G U L A 0006640 R S L O P E R E G U L A R 0006660 W E I G H T M E D I U M I N 0006700 V E R T E D O F F U S E R I 0006720 N F O N I L S T Y L E N I 0006740 L ) F O R M A T I N F O ( A 0006760 R A B I C ) ) ( 1 7 4 3 6 0007000 2 8 8 3 6 ) N I L ) ( H E 0007020 A D I N G N I L ( H E A D I 0007040 N G T Y P E R U N N I N G H E 0007060 A D ) ( 8 4 7 4 4 5 2 8 0007100 3 6 ) N I L ) ( T E X T N 0007120 I L N I L ( 8 4 9 6 4 5 0007140 6 6 0 0 ) N I L ) ) ) ( P 0007160 A G E N I L ( P A P E R S I 0007200 Z E L e t t e r F O L I O I 0007220 N F O ( A R A B I C ) ) ( 0 0007240 0 6 1 2 7 9 2 ) ( ( F O 0007260 L I O N I L ( P A R A L O O 0007300 K S ( Q U A D C E N T E R E 0007320 D ) C H A R L O O K S ( S U 0007340 P E R S C R I P T 0 I N V I 0007360 S I B L E O F F S E L E C T 0007400 P O I N T O F F P R O T E C 0007420 T E D O F F S I Z E 1 0 0007440 F A M I L Y M O D E R N O V 0007460 E R L I N E O F F S T R I K 0007500 E O U T O F F U N D E R L I 0007520 N E O F F E X P A N S I O N 0007540 R E G U L A R S L O P E R 0007560 E G U L A R W E I G H T M E 0007600 D I U M I N V E R T E D O F 0007620 F U S E R I N F O N I L S 0007640 T Y L E N I L ) F O R M A T 0007660 I N F O ( A R A B I C ) ) ( 0007700 1 7 4 3 6 2 8 8 3 6 ) N 0007720 I L ) ( H E A D I N G N I L 0007740 ( H E A D I N G T Y P E R U 0007760 N N I N G H E A D ) ( 8 4 7 0010000 4 4 5 2 8 3 6 ) N I L ) 0010020 ( T E X T N I L N I L ( 8 0010040 4 9 6 4 5 6 6 0 0 ) N I 0010060 L ) ) ) ( P A G E N I L ( 0010100 P A P E R S I Z E L e t t e r 0010120 F O L I O I N F O ( A R A B 0010140 I C ) ) ( 0 0 6 1 2 7 9 0010160 2 ) ( ( F O L I O N I L ( 0010200 P A R A L O O K S ( Q U A D 0010220 C E N T E R E D ) C H A R L O 0010240 O K S ( S U P E R S C R I P T 0010260 0 I N V I S I B L E O F F 0010300 S E L E C T P O I N T O F F 0010320 P R O T E C T E D O F F S 0010340 I Z E 1 0 F A M I L Y M O 0010360 D E R N O V E R L I N E O F 0010400 F S T R I K E O U T O F F 0010420 U N D E R L I N E O F F E X 0010440 P A N S I O N R E G U L A R 0010460 S L O P E R E G U L A R W E 0010500 I G H T M E D I U M I N V E 0010520 R T E D O F F U S E R I N F 0010540 O N I L S T Y L E N I L ) 0010560 F O R M A T I N F O ( A R A 0010600 B I C ) ) ( 1 7 4 3 6 2 8 0010620 8 3 6 ) N I L ) ( H E A D 0010640 I N G N I L ( H E A D I N G 0010660 T Y P E R U N N I N G H E A D 0010700 ) ( 8 4 7 4 4 5 2 8 3 6 0010720 ) N I L ) ( T E X T N I L 0010740 N I L ( 8 4 9 6 4 5 6 0010760 6 0 0 ) N I L ) ) ) ) ) \0 \0 \0 0011000 \0 \0 005 \0 006 \0 1 \0 \0 \0 \0 001 310 \0 \v \0 0011020 \0 \0 004 003 004 \0 \0 002 \0 \0 001 001 310 001 \0 \0 0011040 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0011060 \0 \0 \0 \0 \0 \0 \0 ( \0 \0 \0 \0 001 310 \0 021 0011100 \0 \0 \0 004 002 003 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0011120 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 ( 0011140 \0 212 \0 212 001 8 \0 006 \0 \0 \0 004 002 003 \0 \0 0011160 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0011200 \0 \0 \0 \0 \0 \0 \0 ( \0 212 \0 212 001 8 \0 \0 0011220 \0 \0 \0 004 002 004 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0011240 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 D 0011260 \0 \0 \0 \0 001 310 \0 \0 \0 \0 \0 \0 003 004 \0 \0 0011300 001 001 310 001 \0 \0 \0 \0 \0 \0 \0 \v P A G E 0011320 H E A D I N G \0 \v R U N N I N G 0011340 H E A D \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0011360 \0 \0 \0 ( \0 \0 \0 \0 001 310 \0 \v \0 \0 \0 004 0011400 002 004 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0011420 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 004 0011440 \0 \a \0 024 \0 006 M O D E R N \0 \n \0 \0 0011460 \0 \0 \0 \0 002 \0 \0 027 \0 \t H E L V E T 0011500 I C A \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 024 \0 0011520 006 M O D E R N \0 \n \0 \0 \0 \0 \0 \0 001 0011540 \0 \0 024 \0 006 M O D E R N \0 \f \0 \0 \0 0011560 \0 \0 \0 002 \0 \0 024 \0 006 M O D E R N \0 0011600 006 \0 \0 \0 \0 \0 \0 \0 \0 \0 022 \0 004 L O G 0011620 O \0 030 \0 \0 \0 \0 \0 \0 \0 \0 \0 024 \0 006 M 0011640 O D E R N \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 0011660 \0 \0 \0 \0 002 \0 005 \0 \0 \0 005 \0 \0 \0 \0 006 0011700 \0 \0 \0 001 \0 \0 \0 \0 005 \0 \0 \0 \v \0 \0 \0 0011720 \0 \a \0 \0 \0 \0 \0 002 \0 005 \0 \0 \0 002 \0 001 0011740 \0 \v H R U L E . G E T F N 001 \0 024 0011760 \0 006 M O D E R N \0 \n \0 \0 \0 \0 \0 \0 0012000 \0 \0 \0 \0 \0 001 \0 \0 \0 \0 \a \0 \0 \0 \0 \0 0012020 002 \0 004 \0 \0 \0 002 \0 001 \0 \v H R U L E 0012040 . G E T F N 001 \0 024 \0 006 M O D E R 0012060 N \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 001 \0 0012100 \0 \0 \0 \a \0 \0 \0 \0 \0 002 \0 004 \0 \0 \0 002 0012120 \0 001 \0 \v H R U L E . G E T F N 001 0012140 \0 024 \0 006 M O D E R N \0 \n \0 \0 \0 \0 0012160 \0 \0 \0 \0 \0 \0 \0 001 \0 \0 \0 \0 \a \0 \0 \0 0012200 \0 \0 002 \0 003 \0 \0 \0 \v \0 \0 \0 \0 004 \0 \0 0012220 \0 \0 \0 002 \0 003 \0 \0 \0 002 \0 001 \0 \v H R 0012240 U L E . G E T F N 001 \0 024 \0 006 M O 0012260 D E R N \0 \f \0 \0 \0 \0 \0 \0 002 \0 \0 \0 0012300 \0 001 \0 \0 \0 \0 004 \0 \0 \0 \0 \0 002 \0 004 \0 0012320 \0 \0 002 \0 001 \0 \v H R U L E . G E T 0012340 F N 001 \0 024 \0 006 M O D E R N \0 \f \0 0012360 \0 \0 \0 \0 \0 002 \0 \0 \0 \0 001 \0 \0 \0 \0 004 0012400 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 , \0 \0 \0 \0 0012420 \a \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 017 \0 \0 \0 0012440 \0 \a \0 \0 \0 \0 \0 002 \0 006 \0 \0 \0 \n \0 \0 0012460 \0 \0 001 \0 \0 001 \r \0 \0 \0 \0 \a \0 \0 \0 \0 0012500 \0 002 \0 006 \0 \0 002 \t \0 \0 \0 \0 \a \0 \0 \0 0012520 \0 \0 002 \0 001 \0 \0 \0 020 \0 \0 \0 \0 \a \0 \0 0012540 \0 024 \0 \0 \0 \0 003 \0 \0 \0 001 \0 \0 \0 \0 \a 0012560 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \v \0 \0 \0 0012600 \0 \a \0 \0 \0 \0 \0 002 \0 006 \0 \0 001 t \0 \0 0012620 \0 \0 \a \0 \0 \0 \0 \0 002 \0 006 \0 \0 \0 022 \0 0012640 \0 \0 \0 \a \0 \0 \0 " \0 \0 \0 \0 003 \0 \0 \0 0012660 002 \0 \0 \0 \0 \a \0 \0 \0 \0 \0 002 \0 006 \0 \0 0012700 \0 277 \0 \0 \0 \0 \a \0 \0 \0 \0 \0 002 \0 001 \0 0012720 \0 \0 021 \0 \0 \0 \0 \a \0 \0 \0 024 \0 \0 \0 \0 0012740 003 \0 \0 \0 001 \0 \0 \0 \0 \a \0 \0 \0 001 \0 \0 0012760 \0 \0 002 \0 \0 \0 \v \0 \0 \0 \0 \a \0 \0 \0 \0 0013000 \0 002 \0 006 \0 \0 \0 317 \0 \0 \0 \0 \a \0 \0 \0 0013020 \0 \0 002 \0 001 \0 \0 \0 017 \0 \0 \0 \0 \a \0 \0 0013040 \0 016 \0 \0 \0 \0 003 \0 \0 \0 001 \0 \0 \0 \0 \a 0013060 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \v \0 \0 \0 0013100 \0 \a \0 \0 \0 \0 \0 002 \0 006 \0 \0 \0 - \0 \0 0013120 \0 \0 \a \0 \0 \0 \0 \0 002 \0 001 \0 \0 \0 017 \0 0013140 \0 \0 \0 \a \0 \0 \0 024 \0 \0 \0 \0 003 \0 \0 \0 0013160 001 \0 \0 \0 \0 \a \0 \0 \0 001 \0 \0 \0 \0 002 \0 0013200 \0 \0 \v \0 \0 \0 \0 \a \0 \0 \0 \0 \0 002 \0 006 0013220 \0 \0 001 8 \0 \0 \0 \0 \a \0 \0 \0 \0 \0 002 \0 0013240 006 \0 \0 \0 W \0 \0 \0 \0 \a \0 \0 \0 \0 \0 002 0013260 \0 001 \0 \0 \0 027 \0 \0 \0 \0 \a \0 \0 \0 031 \0 0013300 \0 \0 \0 003 \0 \0 \0 001 \0 \0 \0 \0 \a \0 \0 \0 0013320 001 \0 \0 \0 \0 002 \0 \0 \0 \v \0 \0 \0 \0 \a \0 0013340 \0 \0 \0 \0 002 \0 006 \0 \0 001 { \0 \0 \0 \0 \a 0013360 \0 \0 \0 \0 \0 002 \0 001 \0 \0 \0 027 \0 \0 \0 \0 0013400 \a \0 \0 \0 031 \0 \0 \0 \0 003 \0 \0 \0 001 \0 \0 0013420 \0 \0 \a \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \v 0013440 \0 \0 \0 \0 \a \0 \0 \0 \0 \0 002 \0 006 \0 \0 001 0013460 ^ \0 \0 \0 \0 \a \0 \0 \f 212 \0 W z 272 0013476