$ od -c -N 50000 [eris]<Lisp>KOTO>LISPUSERS>HASHDATUM.TEDIT!1 0000000 X E R O X \t H A S H D A T U M \r 0000020 2 \r \r 4 \r \r 1 \r \r H A S H D A T 0000040 U M \r 1 \r \r 4 \r \r B y : C h 0000060 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 . A 0000120 R P A ) \r R e q u i r e s : H 0000140 A S H \r \r H A S H D A T U M f 0000160 a c i l i t a t e s s t o r i 0000200 n g r a n d o m I n t e r l 0000220 i s p - D d a t a t y p e s 0000240 o n H a s h F i l e s u s 0000260 i n g t h e h a s h e d t 0000300 e x t f e a t u r e o f t 0000320 h e H A S H p a c k a g e . 0000340 \r T h e p a c k a g e d e 0000360 f i n e s t w o f u n c t i 0000400 o n s w h i c h s t o r e 0000420 a n i t e m i n a H a s 0000440 h F i l e a s a s t r e 0000460 a m o f b y t e s u s i n 0000500 g u s e r s u p p l i e d 0000520 i n p u t a n d o u t p u t 0000540 f u n c t i o n s . \r ( G E T 0000560 H A S H D A T U M K E Y H A 0000600 S H F I L E R E A D F N ) \t [ 0000620 F u n c t i o n ] \r ( P U T H A 0000640 S H D A T U M K E Y D A T U 0000660 M H A S H F I L E P R I N T 0000700 F N ) \t [ F u n c t i o n ] \r \r 0000720 U s e R E A D F N a n d P 0000740 R I N T F N t o s t o r e 0000760 a n d r e t r i v e D A T U 0001000 M o n H A S H F I L E . 0001020 T h e R E A D F N t a k e s 0001040 a s t r e a m a s i t s 0001060 a r g u m e n t , t h e P 0001100 R I N T F N t a k e s t h e 0001120 D A T U M a n d a s t r 0001140 e a m . T h e P u t f u 0001160 n c t i o n r e t u r n s t 0001200 h e H a s h F i l e t e 0001220 x t p o i n t e r r e c o r 0001240 d w h i c h c o n t a i n s 0001260 t w o b y t e p o i n t e 0001300 r w h e r e t h e d a t u 0001320 m b e g i n s a n d e n d 0001340 s o n t h e f i l e . 0001360 T h e G e t f u n c t i o n 0001400 r e t u r n s t h e r e s 0001420 u l t o f t h e R E A D F 0001440 N . \r \r T h e f o l l o w i n 0001460 g m a c r o s a r e d e f 0001500 i n e d i n f i l e u s i 0001520 n g t h e t w o f u n c t 0001540 i o n s a b o v e : \r ( G E T 0001560 H A S H G R A P H K E Y H A 0001600 S H F I L E ) \t [ F u n c t i o 0001620 n ] \r ( P U T H A S H G R A P H 0001640 K E Y G R A P H H A S H F 0001660 I L E ) \t [ F u n c t i o n ] \r 0001700 \r U s e t h e G R A P H E R 0001720 f u n c t i o n s R E A D G 0001740 R A P H a n d D U M P G R A 0001760 P H t o s t o r e G R A P 0002000 H o n H A S H F I L E u n 0002020 d e r K E Y . \r \r ( G E T H A 0002040 S H B I T M A P K E Y H A S 0002060 H F I L E ) \t [ F u n c t i o n 0002100 ] \r ( P U T H A S H B I T M A P 0002120 K E Y B I T M A P H A S H 0002140 F I L E ) \t [ F u n c t i o n ] 0002160 \r U s e R E A D B I T M A P 0002200 a n d P R I N T B I T M A P 0002220 t o s t o r e B I T M A P 0002240 o n H A S H F I L E i n a 0002260 t e x t f o r m a t . \r \r ( 0002300 G E T H A S H B I N A R Y B I T 0002320 M A P K E Y H A S H F I L E 0002340 ) \t [ F u n c t i o n ] \r ( P U 0002360 T H A S H B I N A R Y B I T M A 0002400 P K E Y B I T M A P H A S 0002420 H F I L E ) \t [ F u n c t i o n 0002440 ] \r \r U s e R E A D B M a n 0002460 d W R I T E B M f r o m B 0002500 I T M A P F N S t o s t o 0002520 r e B I T M A P o n H A S 0002540 H F I L E i n a b i n a r 0002560 y f o r m a t . \r \r ( G E T H 0002600 A S H U G L Y K E Y H A S H 0002620 F I L E ) \t [ F u n c t i o n ] 0002640 \r ( P U T H A S H U G L Y K E 0002660 Y U G L Y V A R H A S H F I 0002700 L E ) \t [ F u n c t i o n ] \r \r 0002720 U s e H R E A D a n d H P 0002740 R I N T t o s t o r e r a 0002760 n d o m I n t e r l i s p - D 0003000 d a t u m s o n H A S H F 0003020 I L E . I t e m s s u c h 0003040 a s m e n u d a t u m s 0003060 c a n b e s t o r e d o n 0003100 H a s h F i l e s u s i n 0003120 g t h e s e m a c r o s . \r 0003140 \r S i n c e t h e i t e m s 0003160 a r e p u t o n t h e 0003200 f i l e u s i n g t h e t 0003220 e x t h a s h i n g f e a t 0003240 u r e o f t h e H A S H 0003260 p a c k a g e , w h e n r e 0003300 h a s h i n g o r c o p y i 0003320 n g o f t h e f i l e o 0003340 c c u r s , t h e d a t a 0003360 p o r t i o n o f t h e f 0003400 i l e w i l l b e c o p i 0003420 e d o v e r c o r r e c t l 0003440 y . \r \0 \0 \0 \0 \0 003 ( L I S T ( 0003460 ( P A G E N I L ( F O L I O 0003500 I N F O ( A R A B I C ) S T 0003520 A R T I N G P A G E # 1 ) ( 0003540 0 0 6 1 2 7 9 2 ) ( ( F 0003560 O L I O N I L ( P A R A L O 0003600 O K S ( Q U A D C E N T E R 0003620 E D ) C H A R L O O K S ( S 0003640 U P E R S C R I P T 0 S I Z 0003660 E 1 0 F A M I L Y M O D E 0003700 R N O V E R L I N E O F F 0003720 S T R I K E O U T O F F U N 0003740 D E R L I N E O F F S L O P 0003760 E R E G U L A R W E I G H T 0004000 M E D I U M ) F O R M A T I 0004020 N F O ( A R A B I C ) ) ( 1 0004040 7 4 3 6 2 8 8 3 6 ) N I 0004060 L ) ( H E A D I N G N I L 0004100 ( H E A D I N G T Y P E R U N 0004120 N I N G H E A D ) ( 8 4 7 4 0004140 4 4 4 4 3 6 ) N I L ) ( 0004160 T E X T N I L N I L ( 8 4 0004200 9 6 4 5 6 6 0 0 ) N I L 0004220 ) ) ) ( P A G E N I L N I 0004240 L ( 0 0 6 1 2 7 9 2 ) 0004260 ( ( F O L I O N I L ( P A R 0004300 A L O O K S ( Q U A D C E N 0004320 T E R E D ) C H A R L O O K S 0004340 ( S U P E R S C R I P T 0 0004360 S I Z E 1 0 F A M I L Y M 0004400 O D E R N O V E R L I N E O 0004420 F F S T R I K E O U T O F F 0004440 U N D E R L I N E O F F S 0004460 L O P E R E G U L A R W E I 0004500 G H T M E D I U M ) ) ( 2 8 0004520 2 4 2 7 2 3 6 ) N I L ) 0004540 ( H E A D I N G N I L ( H 0004560 E A D I N G T Y P E R U N N I 0004600 N G H E A D ) ( 8 4 7 4 4 0004620 4 4 4 3 6 ) N I L ) ( T E 0004640 X T N I L N I L ( 8 4 9 0004660 6 4 5 6 6 0 0 ) N I L ) ) 0004700 ) ( P A G E N I L N I L 0004720 ( 0 0 6 1 2 7 9 2 ) ( ( 0004740 F O L I O N I L ( P A R A L 0004760 O O K S ( Q U A D C E N T E 0005000 R E D ) C H A R L O O K S ( 0005020 S U P E R S C R I P T 0 S I 0005040 Z E 1 0 F A M I L Y M O D 0005060 E R N O V E R L I N E O F F 0005100 S T R I K E O U T O F F U 0005120 N D E R L I N E O F F S L O 0005140 P E R E G U L A R W E I G H 0005160 T M E D I U M ) ) ( 2 8 2 0005200 4 2 7 2 3 6 ) N I L ) ( 0005220 H E A D I N G N I L ( H E A 0005240 D I N G T Y P E R U N N I N G 0005260 H E A D ) ( 8 4 7 4 4 4 4 0005300 4 3 6 ) N I L ) ( T E X T 0005320 N I L N I L ( 8 4 9 6 0005340 4 5 6 6 0 0 ) N I L ) ) ) ) 0005360 ) \0 \0 \0 \0 \0 005 \0 \t \0 ( \0 \0 \0 \0 001 0005400 310 \0 \0 \0 \0 \0 \0 002 004 \0 \0 \0 \0 \0 \0 \0 0005420 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0005440 \0 \0 1 \0 \0 \0 \0 001 310 \0 \v \0 \0 \0 004 003 0005460 004 \0 \0 002 \0 \0 001 001 310 001 \0 \0 \0 \0 \0 \0 0005500 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0005520 \0 \0 \0 ( \0 H \0 H \0 \0 \0 \0 \0 \0 \0 \0 0005540 002 004 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0005560 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 ( \0 \0 \0 \0 0005600 \0 \0 \0 \0 \0 \0 \0 \0 002 004 \0 \0 \0 \0 \0 \0 0005620 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0005640 \0 \0 \0 ( \0 \0 \0 \0 001 310 \0 021 \0 \0 \0 004 0005660 002 003 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0005700 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 ( \0 212 \0 212 0005720 001 8 \0 006 \0 \0 \0 004 002 003 \0 \0 \0 \0 \0 \0 0005740 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0005760 \0 \0 \0 ( \0 \0 \0 \0 001 310 \0 \v \0 \0 \0 004 0006000 002 004 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0006020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 ( \0 212 \0 212 0006040 001 8 \0 \0 \0 \0 \0 004 002 004 \0 \0 \0 \0 \0 \0 0006060 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0006100 \0 \0 \0 D \0 \0 \0 \0 001 310 \0 \0 \0 \0 \0 \0 0006120 003 004 \0 \0 001 001 310 001 \0 \0 \0 \0 \0 \0 \0 \v 0006140 P A G E H E A D I N G \0 \v R U N 0006160 N I N G H E A D \0 \0 \0 \0 \0 \0 \0 \0 0006200 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 004 \0 \a \0 024 0006220 \0 006 M O D E R N \0 \n \0 \0 \0 \0 \0 \0 0006240 002 \0 \0 027 \0 \t H E L V E T I C A \0 0006260 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 024 \0 006 M O D 0006300 E R N \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 024 \0 0006320 006 M O D E R N \0 \f \0 \0 \0 \0 \0 \0 002 0006340 \0 \0 024 \0 006 M O D E R N \0 006 \0 \0 \0 0006360 \0 \0 \0 \0 \0 \0 024 \0 006 M O D E R N \0 0006400 \n \0 \0 \0 \0 \0 \0 001 \0 \0 022 \0 004 L O G 0006420 O \0 030 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0006440 002 \0 \t \0 \0 \0 005 \0 \0 \0 \0 \a \0 \0 \0 001 0006460 \0 \0 \0 \0 005 \0 \0 \0 \n \0 \0 \0 \0 003 \0 \0 0006500 \0 \0 \0 002 \0 \t \0 \0 \0 002 \0 001 \0 \v H R 0006520 U L E . G E T F N 001 \0 024 \0 006 M O 0006540 D E R N \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0006560 \0 001 \0 \0 \0 \0 003 \0 \0 \0 \0 \0 002 \0 \b \0 0006600 \0 \0 002 \0 001 \0 \v H R U L E . G E T 0006620 F N 001 \0 024 \0 006 M O D E R N \0 \n \0 0006640 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 001 \0 \0 \0 \0 003 0006660 \0 \0 \0 \0 \0 002 \0 \b \0 \0 \0 002 \0 001 \0 \v 0006700 H R U L E . G E T F N 001 \0 024 \0 006 0006720 M O D E R N \0 \n \0 \0 \0 \0 \0 \0 \0 \0 0006740 \0 \0 \0 001 \0 \0 \0 \0 003 \0 \0 \0 \0 \0 002 \0 0006760 006 \0 \0 \0 \n \0 \0 \0 \0 004 \0 \0 \0 \0 \0 002 0007000 \0 006 \0 \0 \0 002 \0 001 \0 \v H R U L E . 0007020 G E T F N 001 \0 024 \0 006 M O D E R N 0007040 \0 \f \0 \0 \0 \0 \0 \0 002 \0 \0 \0 \0 001 \0 \0 0007060 \0 \0 004 \0 \0 \0 \0 \0 002 \0 \b \0 \0 \0 002 \0 0007100 001 \0 \v H R U L E . G E T F N 001 \0 0007120 024 \0 006 M O D E R N \0 \f \0 \0 \0 \0 \0 0007140 \0 002 \0 \0 \0 \0 001 \0 \0 \0 \0 004 \0 \0 \0 \0 0007160 \0 002 \0 005 \0 \0 \0 , \0 \0 \0 \0 003 \0 \0 \0 0007200 \0 \0 002 \0 005 \0 \0 \0 017 \0 \0 \0 \0 003 \0 \0 0007220 \0 \0 \0 002 \0 004 \0 \0 \0 001 \0 \0 \0 \0 003 \0 0007240 \0 \0 \0 \0 002 \0 001 \0 \0 \0 \t \0 \0 \0 \0 001 0007260 \0 \0 \0 t \0 \0 \0 \0 003 \0 \0 \0 \0 \0 002 \0 0007300 \a \0 \0 \0 212 \0 \0 \0 \0 003 \0 \0 \0 \0 \0 002 0007320 \0 002 \0 \0 \0 016 \0 \0 \0 \0 003 \0 \0 \0 023 \0 0007340 \0 \0 \0 006 \0 \0 \0 001 \0 \0 \0 \0 003 \0 \0 \0 0007360 001 \0 \0 \0 \0 002 \0 \0 \0 \v \0 \0 \0 \0 003 \0 0007400 \0 \0 \0 \0 002 \0 002 \0 \0 \0 016 \0 \0 \0 \0 003 0007420 \0 \0 \0 032 \0 \0 \0 \0 006 \0 \0 \0 001 \0 \0 \0 0007440 \0 003 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \v \0 0007460 \0 \0 \0 003 \0 \0 \0 \0 \0 002 \0 003 \0 \0 \0 001 0007500 \0 \0 \0 \0 003 \0 \0 \0 \0 \0 002 \0 001 \0 \0 001 0007520 S \0 \0 \0 \0 003 \0 \0 \0 \0 \0 002 \0 001 \0 \0 0007540 \0 001 \0 \0 \0 \0 003 \0 \0 \0 \0 \0 002 \0 001 \0 0007560 \0 \0 H \0 \0 \0 \0 003 \0 \0 \0 \0 \0 002 \0 002 0007600 \0 \0 \0 016 \0 \0 \0 \0 003 \0 \0 \0 \f \0 \0 \0 0007620 \0 006 \0 \0 \0 001 \0 \0 \0 \0 003 \0 \0 \0 001 \0 0007640 \0 \0 \0 002 \0 \0 \0 \v \0 \0 \0 \0 003 \0 \0 \0 0007660 \0 \0 002 \0 002 \0 \0 \0 016 \0 \0 \0 \0 003 \0 \0 0007700 \0 022 \0 \0 \0 \0 006 \0 \0 \0 001 \0 \0 \0 \0 003 0007720 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \v \0 \0 \0 0007740 \0 003 \0 \0 \0 \0 \0 002 \0 001 \0 \0 \0 001 \0 \0 0007760 \0 \0 003 \0 \0 \0 \0 \0 002 \0 001 \0 \0 \0 X \0 0010000 \0 \0 \0 003 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 0010020 \0 \0 \0 \0 003 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 0010040 017 \0 \0 \0 \0 003 \0 \0 \0 \f \0 \0 \0 \0 006 \0 0010060 \0 \0 001 \0 \0 \0 \0 003 \0 \0 \0 001 \0 \0 \0 \0 0010100 002 \0 \0 \0 \v \0 \0 \0 \0 003 \0 \0 \0 \0 \0 002 0010120 \0 002 \0 \0 \0 017 \0 \0 \0 \0 003 \0 \0 \0 023 \0 0010140 \0 \0 \0 006 \0 \0 \0 001 \0 \0 \0 \0 003 \0 \0 \0 0010160 001 \0 \0 \0 \0 002 \0 \0 \0 \v \0 \0 \0 \0 003 \0 0010200 \0 \0 \0 \0 002 \0 \a \0 \0 \0 M \0 \0 \0 \0 003 0010220 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 0010240 003 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 025 \0 \0 \0 0010260 \0 003 \0 \0 \0 \f \0 \0 \0 \0 006 \0 \0 \0 001 \0 0010300 \0 \0 \0 003 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 0010320 \v \0 \0 \0 \0 003 \0 \0 \0 \0 \0 002 \0 002 \0 \0 0010340 \0 025 \0 \0 \0 \0 003 \0 \0 \0 023 \0 \0 \0 \0 006 0010360 \0 \0 \0 001 \0 \0 \0 \0 003 \0 \0 \0 001 \0 \0 \0 0010400 \0 002 \0 \0 \0 \v \0 \0 \0 \0 003 \0 \0 \0 \0 \0 0010420 002 \0 001 \0 \0 \0 001 \0 \0 \0 \0 003 \0 \0 \0 \0 0010440 \0 002 \0 001 \0 \0 \0 W \0 \0 \0 \0 003 \0 \0 \0 0010460 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 003 \0 \0 0010500 \0 \0 \0 002 \0 002 \0 \0 \0 \r \0 \0 \0 \0 003 \0 0010520 \0 \0 \f \0 \0 \0 \0 006 \0 \0 \0 001 \0 \0 \0 \0 0010540 003 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \v \0 \0 0010560 \0 \0 003 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 \r \0 0010600 \0 \0 \0 003 \0 \0 \0 024 \0 \0 \0 \0 006 \0 \0 \0 0010620 001 \0 \0 \0 \0 003 \0 \0 \0 001 \0 \0 \0 \0 002 \0 0010640 \0 \0 \v \0 \0 \0 \0 003 \0 \0 \0 \0 \0 002 \0 001 0010660 \0 \0 \0 001 \0 \0 \0 \0 003 \0 \0 \0 \0 \0 002 \0 0010700 001 \0 \0 \0 220 \0 \0 \0 \0 003 \0 \0 \0 \0 \0 002 0010720 \0 001 \0 \0 \0 001 \0 \0 \0 \0 003 \0 \0 \0 \0 \0 0010740 002 \0 001 \0 \0 \0 302 \0 \0 \0 \0 003 \0 \0 \0 \0 0010760 \0 002 \0 001 \0 \0 \a # \0 ~ z 272 0010774