$ 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