$ od -c -N 50000 [eris]<Lisp>INTERMEZZO>internal>doc>STREAMS.TEDIT!1
0000000 S t r e a m s a n d F i l e
0000020 D e v i c e s \r E d i t e d
0000040 3 0 N o v 8 4 , v a n M
0000060 e l l e \r A n I n t e r l i s
0000100 p S t r e a m i s a n o
0000120 b j e c t o f d a t a t y p
0000140 e S T R E A M t h a t i s
0000160 c a p a b l e o f p e r f
0000200 o r m i n g , a t t h e l
0000220 e a s t , s e q u e n t i a l
0000240 i n p u t a n d / o r o u
0000260 t p u t o f b y t e s .
0000300 S o m e s t r e a m s c a n
0000320 d o m u c h m o r e .
0000340 S t r e a m s a r e u s e d
0000360 f o r a c c e s s t o o
0000400 p e n f i l e s , f o r w
0000420 r i t i n g t o t h e d i
0000440 s p l a y , f o r c h a t t
0000460 i n g t o r e m o t e h o
0000500 s t s , a n d w h a t e v e
0000520 r o t h e r u s e s p e o
0000540 p l e c o m e u p w i t h
0000560 . T h i s d o c u m e n t
0000600 d e s c r i b e s h o w o
0000620 n e g o e s a b o u t d e
0000640 f i n i n g a n e w d e v
0000660 i c e , t h e m e a n i n g
0000700 s o f t h e r e c o r d
0000720 f i e l d s o f t h e S T
0000740 R E A M a n d F D E V d a
0000760 t a t y p e s , a n d a n y
0001000 t h i n g e l s e t h a t
0001020 s e e m e d r e l e v a n t
0001040 a t t h e t i m e . \r T h e
0001060 i m p l e m e n t a t i o n
0001100 o f S t r e a m s i s s t
0001120 r o n g l y o b j e c t - o r
0001140 i e n t e d . E v e r y S
0001160 T R E A M h a s a p o i n
0001200 t e r t o a d e v i c e
0001220 ( t h e d a t a t y p e F D
0001240 E V ) , w h i c h c o n t a
0001260 i n s a v e c t o r o f
0001300 f u n c t i o n s t o b e
0001320 c a l l e d w h e n c e r t
0001340 a i n o p e r a t i o n s a
0001360 r e r e q u i r e d o f t
0001400 h e s t r e a m . T h e r
0001420 e c a n b e m a n y s t
0001440 r e a m s w i t h t h e s
0001460 a m e d e v i c e . I n
0001500 t h e o b j e c t - o r i e n
0001520 t e d t e r m s o f L O O
0001540 P S , o n e c a n t h i n
0001560 k o f t h e d e v i c e
0001600 a s a c l a s s , w h i c
0001620 h p r o v i d e s a s e t
0001640 o f m e t h o d s t h a t
0001660 i m p l e m e n t c l a s s
0001700 o p e r a t i o n s , a n d
0001720 t h e s t r e a m s a s
0001740 i n s t a n c e s . D e v i
0001760 c e s a n d s t r e a m s
0002000 a l s o h a v e l o c a l
0002020 s t a t e , w h i c h m i g
0002040 h t b e t h o u g h t o f
0002060 a s c l a s s a n d i n
0002100 s t a n c e v a r i a b l e s
0002120 . D e c l a r a t i o n s
0002140 f o r S T R E A M a n d F
0002160 D E V c a n b e o b t a i
0002200 n e d b y l o a d i n g E
0002220 X P O R T S . A L L . \r O P E N
0002240 S T R E A M , C L O S E F ,
0002260 F O R C E O U T P U T , R E A
0002300 D P , E O F P , G E T E O F
0002320 P T R , G E T F I L E I N F O
0002340 , S E T F I L E I N F O , D
0002360 I R E C T O R Y , C O P Y B Y
0002400 T E S , D E L F I L E , R E
0002420 N A M E F I L E , F U L L N A
0002440 M E a r e s o m e o f t
0002460 h e L i s p f u n c t i o n
0002500 s c a l l e d b y t h e
0002520 p r o g r a m m e r t h a t
0002540 u l t i m a t e l y t u r n
0002560 i n t o o p e r a t i o n s
0002600 a t t h e d e v i c e l e
0002620 v e l . T h e d e s c r i
0002640 p t i o n s t h a t f o l l
0002660 o w s o m e t i m e s a l l
0002700 u d e t o t h e s e f u n
0002720 c t i o n s , a n d k n o w
0002740 l e d g e o f h o w t h e
0002760 y o p e r a t e m a y o c
0003000 c a s i o n a l l y g i v e
0003020 t h e r e a d e r a d d i t
0003040 i o n a l c l u e s a s t
0003060 o h o w t h e d e v i c e
0003100 o p e r a t i o n s w o r k
0003120 . \r T y p i c a l l y , s o m
0003140 e p a r t o f t h e o p
0003160 e r a t i o n i s h a n d l
0003200 e d b y t h e ` ` g e n e
0003220 r i c ' ' f i l e s y s t e
0003240 m c o d e , w h i c h t h
0003260 e n c a l l s o n t h e
0003300 d e v i c e t o h a n d l e
0003320 t h a t p a r t o f t h
0003340 e o p e r a t i o n t h a t
0003360 i s d e v i c e - s p e c i
0003400 f i c . F o r e x a m p l
0003420 e , t h e f u n c t i o n
0003440 O P E N F I L E t a k e s t
0003460 h e n a m e o f t h e f
0003500 i l e i t i s t o o p e
0003520 n a n d f i l l s i n h
0003540 o s t a n d d i r e c t o r
0003560 y d e f a u l t s , a n d
0003600 d e c i d e s w h i c h d e
0003620 v i c e h a n d l e s s u c
0003640 h a f i l e . I t t h
0003660 e n c a l l s o n t h e
0003700 p a r t i c u l a r d e v i c
0003720 e t o a c t u a l l y o p
0003740 e n t h e f i l e . A f
0003760 t e r t h e f i l e i s
0004000 o p e n e d , t h e g e n e
0004020 r i c f i l e s y s t e m
0004040 c o d e r e g i s t e r s t
0004060 h e f i l e o n ( O P E N
0004100 P ) . A s a n o t h e r
0004120 e x a m p l e , o p e r a t i
0004140 o n s i n v o l v i n g o p
0004160 e n s t r e a m s f i r s t
0004200 c o e r c e n o n - s t r e
0004220 a m s ( e . g . f i l e n a
0004240 m e s ) t o o p e n s t r
0004260 e a m s b e f o r e c a l l
0004300 i n g t h e d e v i c e - s
0004320 p e c i f i c o p e r a t i o
0004340 n . \r D e v i c e s \r A d e v
0004360 i c e i s a n o b j e c t
0004400 o f t y p e F D E V ( s
0004420 o n a m e d f o r h i s t
0004440 o r i c a l r e a s o n s :
0004460 ` ` F i l e D e v i c e ' ' )
0004500 . T h e s t a n d a r d
0004520 w a y t o d e f i n e a
0004540 n e w d e v i c e i s t o
0004560 c r e a t e s u c h a n
0004600 o b j e c t , b y p e r f o
0004620 r m i n g ( c r e a t e F D
0004640 E V - - ) , a n d t h e n
0004660 p a s s t h e n e w l y
0004700 c r e a t e d F D E V t o
0004720 t h e f u n c t i o n \ D E
0004740 F I N E D E V I C E . \ D E
0004760 F I N E D E V I C E i s t h
0005000 e w a y a d e v i c e `
0005020 ` a n n o u n c e s ' ' i t s
0005040 e l f t o t h e g e n e r
0005060 i c f i l e s y s t e m . \r
0005100 ( \ D E F I N E D E V I C E N
0005120 A M E D E V ) \t [ F u n c t i
0005140 o n ] \r I n s t a l l s d e v
0005160 i c e D E V , g i v i n g
0005200 i t t h e n a m e N A M E
0005220 . N A M E m u s t b e
0005240 a n u p p e r c a s e l i t
0005260 a t o m . T h e g e n e r
0005300 i c f i l e s y s t e m c
0005320 o d e m a k e s u s e o f
0005340 t h e n a m e t o l o c
0005360 a t e t h e d e v i c e t
0005400 h a t i s w i l l i n g t
0005420 o d e a l w i t h f i l e
0005440 s w h o s e f u l l n a m
0005460 e b e g i n s { N A M E } .
0005500 I t i s p e r m i s s i
0005520 b l e t o h a v e m o r e
0005540 t h a n o n e n a m e m
0005560 a p t o t h e s a m e d
0005600 e v i c e ; t h i s e f f e
0005620 c t i v e l y p r o v i d e s
0005640 d e v i c e s y n o n y m s
0005660 . D e v i c e s a r e e
0005700 n c o u r a g e d , h o w e v
0005720 e r , t o a l w a y s c r
0005740 e a t e f i l e n a m e s
0005760 u s i n g t h e c a n o n i
0006000 c a l d e v i c e n a m e ,
0006020 i n d e p e n d e n t o f
0006040 w h a t n a m e w a s p a
0006060 s s e d i n . \r N A M E c a
0006100 n b e N I L , i n w h i
0006120 c h c a s e t h e g e n e
0006140 r i c f i l e s y s t e m
0006160 c o d e n e v e r c o n s u
0006200 l t s t h e d e v i c e d
0006220 i r e c t l y . H o w e v e
0006240 r , i t s E V E N T F N i
0006260 s s t i l l r u n a r o u
0006300 n d L i s p e x i t s , a
0006320 n d i t c a n b e u s e
0006340 d a s t h e d e v i c e
0006360 f o r a s t r e a m c r e
0006400 a t e d b y n o n s t a n d
0006420 a r d m e t h o d s . \r I f
0006440 a d e v i c e n e v e r w
0006460 a n t s t o b e i n v o k
0006500 e d b y n a m e , a n d
0006520 h a s n o i n t e r e s t i
0006540 n g E V E N T F N o r H O
0006560 S T N A M E P m e t h o d s ,
0006600 t h e n t h e r e i s n
0006620 o n e e d t o e v e r r
0006640 e g i s t e r i t w i t h
0006660 \ D E F I N E D E V I C E . \r (
0006700 \ R E M O V E D E V I C E D E
0006720 V ) \t [ F u n c t i o n ] \r R e
0006740 m o v e s d e v i c e D E V
0006760 f r o m t h e l i s t o
0007000 f k n o w n d e v i c e s ,
0007020 a s w e l l a s a n y
0007040 n a m e t h a t m a p s t
0007060 o t h a t d e v i c e . \r (
0007100 \ G E T D E V I C E F R O M N A
0007120 M E N A M E N O E R R O R
0007140 D O N T C R E A T E ) \t [ F u n
0007160 c t i o n ] \r R e t u r n s t
0007200 h e d e v i c e a s s o c i
0007220 a t e d w i t h N A M E .
0007240 N A M E c a n b e a l
0007260 i t a t o m o r s t r i n g
0007300 ; i t i s c o e r c e d
0007320 t o u p p e r c a s e , a n
0007340 d i f i t b e g i n s w
0007360 i t h a n o p e n b r a c
0007400 e , i s a s s u m e d t o
0007420 b e a f i l e n a m e ,
0007440 f r o m w h i c h t h e
0007460 h o s t n a m e i s e x t
0007500 r a c t e d . I f n o s
0007520 u c h d e v i c e i s k n
0007540 o w n , a t t e m p t s t o
0007560 f i n d o n e b y p o l
0007600 l i n g t h e H O S T N A M
0007620 E P m e t h o d s o f a l
0007640 l k n o w n d e v i c e s
0007660 ( s e e b e l o w ) ; i f
0007700 a d e v i c e i s s t i l
0007720 l n o t f o u n d , c a u
0007740 s e s a F I L E N O T F
0007760 O U N D e r r o r u n l e s
0010000 s N O E R R O R i s t r u
0010020 e . I f D O N T C R E A T
0010040 E i s t r u e , i t n e
0010060 v e r a t t e m p t s t o
0010100 c r e a t e a d e v i c e ,
0010120 j u s t r e t u r n s a n
0010140 e x i s t i n g d e v i c e
0010160 i f t h e r e i s o n e
0010200 , N I L o t h e r w i s e .
0010220 \r T h e f i e l d s o f a
0010240 n F D E V a r e d i v i d
0010260 e d u p i n t o i n f o r
0010300 m a t i o n a l f i e l d s
0010320 a n d ` ` m e t h o d s ' ' .
0010340 \r D E V I C E N A M E \t A p o
0010360 i n t e r f i e l d , t h e
0010400 n a m e o f t h e d e v
0010420 i c e , s t a n d a r d l y
0010440 a l i t a t o m . U s e
0010460 o f t h i s f i e l d i s
0010500 l a r g e l y u p t o t
0010520 h e d e v i c e , b u t i
0010540 t i s u s u a l l y s e l
0010560 e c t e d t o b e t h e
0010600 n a m e t h a t a p p e a r
0010620 s i n s i d e b r a c e s
0010640 i n f i l e n a m e s o p e
0010660 n e d o n t h i s d e v i
0010700 c e . F o r d e v i c e s
0010720 t h a t d o n o t s u p
0010740 p o r t t h e n o t i o n
0010760 o f n a m e d f i l e s ,
0011000 D E V I C E N A M E c a n b
0011020 e a n y t h i n g t h a t
0011040 t h e i m p l e m e n t o r
0011060 c a r e s t o u s e f o r
0011100 d e b u g g i n g a s s i s
0011120 t a n c e . \r R E S E T A B L
0011140 E \t A f l a g , t r u e i
0011160 f ( S E T F I L E P T R s t
0011200 r e a m 0 ) c a n b e p
0011220 e r f o r m e d . C u r r e
0011240 n t l y u n u s e d . \r R A N
0011260 D O M A C C E S S P \t T r u e
0011300 i f t h e s t r e a m i s
0011320 r a n d o m l y a c c e s s
0011340 a b l e , i . e . , i f S
0011360 E T F I L E P T R w o r k s
0011400 o n t h i s k i n d o f
0011420 s t r e a m . \r N O D I R E C T
0011440 O R I E S \t T r u e i f f i
0011460 l e s o p e n e d o n t h
0011500 i s d e v i c e d o n o t
0011520 ( u s u a l l y ) h a v e
0011540 a d i r e c t o r y a s p
0011560 a r t o f t h e i r n a m
0011600 e . T h e p r i n c i p a
0011620 l u s e f o r t h i s i
0011640 s b y t h e C O N N c o
0011660 m m a n d , w h i c h w i l
0011700 l n o t t r y t o c o n
0011720 n e c t t o t h e u s e r
0011740 ' s h o m e d i r e c t o r
0011760 y i f g i v e n a h o s
0012000 t o n l y , e . g . , C O
0012020 N N { D S K } . \r B U F F E R
0012040 E D \t T r u e i f s t r e a
0012060 m s o f t h i s s o r t
0012100 a r e b u f f e r e d i n
0012120 a m a n n e r c o m p a t i
0012140 b l e w i t h t h e m i c
0012160 r o c o d e d v e r s i o n s
0012200 o f B I N a n d B O U T
0012220 . M o r e s p e c i f i c
0012240 a l l y , B U F F E R E D i
0012260 m p l i e s t h a t t h e
0012300 d e v i c e i m p l e m e n t
0012320 s t h e G E T N E X T B U F
0012340 F E R m e t h o d . S e e
0012360 d e s c r i p t i o n o f
0012400 b u f f e r e d s t r e a m s
0012420 . \r P A G E M A P P E D \t T r u
0012440 e i f t h i s s t r e a m
0012460 i s i m p l e m e n t e d
0012500 b y t h e p a g e m a p p e
0012520 d f u n c t i o n s . A l
0012540 l p a g e m a p p e d s t r
0012560 e a m s a r e a l s o b u
0012600 f f e r e d , s o i f t h
0012620 i s f l a g i s t r u e ,
0012640 s o s h o u l d b e B U
0012660 F F E R E D . S e e d e s
0012700 c r i p t i o n o f p a g e
0012720 m a p p e d s t r e a m s . \r
0012740 F D B I N A B L E \t T r u e i
0012760 f s t r e a m s o n t h i
0013000 s d e v i c e o b e y t h
0013020 e r u l e s f o r m i c r
0013040 o c o d e d B I N w h e n e
0013060 v e r s u c h s t r e a m
0013100 i s o p e n f o r i n p u
0013120 t a c c e s s . \r F D B O U T
0013140 A B L E \t T r u e i f s t r
0013160 e a m s o n t h i s d e v
0013200 i c e o b e y t h e r u l
0013220 e s f o r m i c r o c o d e
0013240 d B O U T w h e n e v e r
0013260 s u c h s t r e a m i s o
0013300 p e n f o r o u t p u t a
0013320 c c e s s . C u r r e n t l
0013340 y u n u s e d , a s t h e
0013360 s p e c n e e d s r e v i
0013400 s i o n . \r F D E X T E N D A B
0013420 L E \t S p e c i a l k i n d
0013440 o f F D B O U T A B L E .
0013460 C u r r e n t l y u n u s e d
0013500 , a s t h e s p e c n e
0013520 e d s r e v i s i o n . \r D E
0013540 V I C E I N F O \t A p o i n t
0013560 e r t o a r b i t r a r y
0013600 d e v i c e - s p e c i f i c
0013620 i n f o r m a t i o n . T h
0013640 e s t a n d a r d u s e f
0013660 o r t h i s i s t o h o
0013700 l d l o c a l s t a t e s
0013720 p e c i f i c t o o n e o
0013740 f s e v e r a l s i m i l a
0013760 r d e v i c e s t h a t s
0014000 h a r e m e t h o d s . F
0014020 o r e x a m p l e , t h e
0014040 D o l p h i n d i s k p r o
0014060 v i d e s a s e p a r a t e
0014100 F D E V f o r e a c h p
0014120 a r t i t i o n o f t h e
0014140 m a c h i n e ; t h e D E V
0014160 I C E I N F O f i e l d o f
0014200 e a c h h a s p o i n t e
0014220 r s t o t h e p a r t i t
0014240 i o n ' s d i r e c t o r y
0014260 a n d o t h e r i n f o r m
0014300 a t i o n s p e c i f i c t
0014320 o f i l e s o n t h a t
0014340 p a r t i t i o n o n l y . \r
0014360 T h e f o l l o w i n g f i
0014400 e l d s a r e a l l p o i
0014420 n t e r f i e l d s , a n d
0014440 c o n t a i n f u n c t i o
0014460 n s f o r i m p l e m e n t
0014500 i n g v a r i o u s d e v i
0014520 c e o p e r a t i o n s .
0014540 N o t a l l d e v i c e s
0014560 n e e d h a v e a l l f i
0014600 e l d s f i l l e d i n ;
0014620 t h e r e q u i r e d o n e
0014640 s a r e l i s t e d f i r
0014660 s t a n d s o i n d i c a
0014700 t e d . S o m e ` ` r e q
0014720 u i r e d ' ' f i e l d s h
0014740 a v e d e f a u l t s s p e
0014760 c i f i e d i n t h e F D
0015000 E V ( o r S T R E A M ) r
0015020 e c o r d d e c l a r a t i o
0015040 n , s o t h e i m p l e m
0015060 e n t o r n e e d n o t e
0015100 x p l i c i t l y f i l l t
0015120 h o s e f i e l d s i f t
0015140 h e d e f a u l t i s r e
0015160 a s o n a b l e . E a c h
0015200 f i e l d i s p r e s e n t
0015220 e d w i t h i t s a r g u
0015240 m e n t s , i n t h e s t
0015260 y l e o f a f u n c t i o
0015300 n d e f i n i t i o n ; o f
0015320 c o u r s e , i t i s t
0015340 h e c o n t e n t s o f t
0015360 h e f i e l d , n o t t h
0015400 e f i e l d n a m e , t h
0015420 a t i s t h e f u n c t i
0015440 o n . U s i n g o b j e c
0015460 t - o r i e n t e d t e r m i
0015500 n o l o g y , t h e o c c u
0015520 p a n t s o f t h e s e f
0015540 i e l d s a r e r e f e r r
0015560 e d t o a s ` ` m e t h o
0015600 d s ' ' . F o r e x a m p
0015620 l e , ` ` t h e B I N m e
0015640 t h o d ' ' m e a n s ` ` t
0015660 h e f u n c t i o n t h a t
0015700 o c c u p i e s t h e B I
0015720 N f i e l d ' ' . \r O n e o
0015740 f t h e a r g u m e n t s
0015760 t o e a c h m e t h o d i
0016000 s u s u a l l y e i t h e r
0016020 t h e d e v i c e i t s e
0016040 l f , o r a s t r e a m
0016060 o p e n o n t h e d e v i
0016100 c e , s o t h a t t h e
0016120 d e v i c e ( a n d h e n c
0016140 e i t s D E V I C E I N F O
0016160 ) i s u s u a l l y a c c
0016200 e s s i b l e t o a l l t
0016220 h e s e f u n c t i o n s .
0016240 A r g u m e n t s t h a t
0016260 a r e f i l e n a m e s o
0016300 r p a t t e r n s o r p i
0016320 e c e s o f f i l e n a m
0016340 e s c a n b e e i t h e r
0016360 l i t a t o m s o r s t r
0016400 i n g s , a n d a l r e a d
0016420 y h a v e t h e i r h o s
0016440 t a n d / o r d i r e c t o
0016460 r y p a r t s a p p r o p r
0016500 i a t e l y f i l l e d i n
0016520 f r o m t h e c o n n e c
0016540 t e d d i r e c t o r y d e
0016560 f a u l t s . T h e d e v
0016600 i c e m a y a s s u m e t
0016620 h a t t h e h o s t f i e
0016640 l d o f t h e f i l e n
0016660 a m e i s i n d e e d a
0016700 n a m e t h a t t h e d e
0016720 v i c e h a s s a i d i t
0016740 i m p l e m e n t s ( s e e
0016760 H O S T N A M E P ) . ` `
0017000 F u l l ' ' f i l e n a m e
0017020 s r e t u r n e d b y t h
0017040 e s e f u n c t i o n s ( o
0017060 r s t o r e d i n t h e
0017100 F U L L F I L E N A M E f i e
0017120 l d o f a s t r e a m )
0017140 s h o u l d b e l i t a t o
0017160 m s , a n d a t l e a s t
0017200 i n t h e c u r r e n t
0017220 i m p l e m e n t a t i o n s
0017240 h o u l d b e a l l u p p
0017260 e r c a s e . \r F i e l d s r
0017300 e q u i r e d o f e v e r y
0017320 d e v i c e : \r ( H O S T N A
0017340 M E P H O S T N A M E D E V
0017360 I C E ) \r C a l l e d b y t
0017400 h e g e n e r i c f i l e
0017420 s y s t e m c o d e w h e n
0017440 p r e s e n t e d w i t h
0017460 a h o s t n a m e f o r
0017500 w h i c h t h e r e i s a
0017520 s y e t n o d e v i c e
0017540 d e f i n e d . T h e f u
0017560 n c t i o n s h o u l d r e
0017600 t u r n n o n - N I L i f
0017620 i t ` ` r e c o g n i z e s '
0017640 ' H O S T N A M E . T h e
0017660 r e a r e t w o w a y s
0017700 i n w h i c h t h i s m e
0017720 t h o d i s i n v o k e d :
0017740 \r ( 1 ) T o o b t a i n a
0017760 d e v i c e f o r H O S T
0020000 N A M E , f o r e x a m p l
0020020 e , s o t h a t a f i l
0020040 e c a n b e o p e n e d
0020060 o n i t . I n t h i s
0020100 c a s e , D E V I C E i s
0020120 a n a l r e a d y d e f i n
0020140 e d d e v i c e ( t h e o
0020160 n e w h o s e H O S T N A M
0020200 E P m e t h o d i s b e i
0020220 n g c a l l e d ) , a n d
0020240 t h e f u n c t i o n s h o
0020260 u l d r e t u r n e i t h e
0020300 r a n e w d e v i c e ,
0020320 o r T , m e a n i n g i t
0020340 i s w i l l i n g t o t
0020360 a k e r e s p o n s i b i l i
0020400 t y f o r t h i s h o s t
0020420 n a m e a s w e l l a s
0020440 a n y p r e v i o u s n a
0020460 m e u n d e r w h i c h t
0020500 h e d e v i c e w a s r e
0020520 g i s t e r e d . I n e i
0020540 t h e r c a s e , t h e c
0020560 a l l e r w i l l i n s t a
0020600 l l t h e r e t u r n e d
0020620 d e v i c e , o r D E V I C
0020640 E i f v a l u e w a s T
0020660 , a s t h e d e v i c e
0020700 t o w h i c h H O S T N A M
0020720 E m a p s . \r ( 2 ) A s a
0020740 p u r e p r e d i c a t e .
0020760 I n t h i s c a s e ,
0021000 D E V I C E i s N I L , a
0021020 n d t h e f u n c t i o n
0021040 n e e d o n l y r e t u r n
0021060 T o r N I L , i n d i c
0021100 a t i n g w h e t h e r i t
0021120 b e l i e v e s t h a t H
0021140 O S T N A M E i s t h e n
0021160 a m e o f a h o s t . \r I
0021200 n p r a c t i c e , t h e
0021220 H O S T N A M E P m e t h o d
0021240 n e e d o n l y t a k e
0021260 c a r e o f t h e f i r s
0021300 t c a s e , s i n c e t h
0021320 a t a l s o t a k e s c a
0021340 r e o f t h e s e c o n d
0021360 c a s e . T h e s e c o
0021400 n d c a s e i s p r o v i
0021420 d e d s o t h a t t h e
0021440 d e v i c e n e e d n o t
0021460 b e c r e a t e d u n t i l
0021500 t h e r e i s a n a c t
0021520 u a l u s e f o r i t ,
0021540 s h o u l d t h e d e v i c
0021560 e w i s h t o a v o i d
0021600 u n n e c e s s a r y w o r k
0021620 . I n p r a c t i c e i
0021640 t i s r a r e t h a t a
0021660 n y o n e t e s t s a h o
0021700 s t n a m e w i t h o u t
0021720 s u b s e q u e n t l y n e e
0021740 d i n g t o h a v e t h e
0021760 d e v i c e c r e a t e d
0022000 i n f u l l . \r T h e r e a
0022020 r e b a s i c a l l y t h r
0022040 e e k i n d s o f d e v i
0022060 c e s i n t h e s y s t e
0022100 m a s d i s t i n g u i s h
0022120 e d b y t h e i r H O S T
0022140 N A M E P m e t h o d s . \r (
0022160 1 ) P r e d e f i n e d d e
0022200 v i c e s w i t h e x a c t
0022220 l y o n e n a m e , o r
0022240 s t r i c t l y i n t e r n a
0022260 l d e v i c e s w i t h n
0022300 o n o t i o n o f n a m e
0022320 . F o r e x a m p l e ,
0022340 t h e C O R E d e v i c e
0022360 a l w a y s e x i s t s , a
0022400 n d h a s e x a c t l y o
0022420 n e n a m e ; t h e S P P
0022440 d e v i c e ( a n e t w o
0022460 r k b y t e s t r e a m )
0022500 h a s n o n a m e ( i t
0022520 s u p p o r t s n o f i l e
0022540 s d i r e c t l y ) . S u
0022560 c h d e v i c e s h a v e
0022600 a H O S T N A M E P m e t h
0022620 o d o f N I L L 023 t h e o
0022640 n l y n a m e t h e y e v
0022660 e r g o b y i s t h e
0022700 o n e t h e y g a v e t o
0022720 \ D E F I N E D E V I C E ,
0022740 i f a n y . T h i s i s
0022760 t h e d e f a u l t . \r ( 2
0023000 ) D e v i c e s t h a t d
0023020 o n ' t k n o w a h e a d
0023040 o f t i m e w h a t t h e
0023060 i r n a m e w i l l b e ,
0023100 b u t f o r w h i c h t
0023120 h e r e m i g h t b e m a
0023140 n y i n c a r n a t i o n s .
0023160 T h i s i s t h e m o
0023200 d e l f o r r e m o t e f
0023220 i l e s e r v e r s . T h
0023240 e s t a n d a r d w a y o
0023260 f h a n d l i n g t h i s
0023300 c a s e i s t o d e f i n
0023320 e a d u m m y d e v i c e
0023340 t h a t h a s o n l y a
0023360 H O S T N A M E P m e t h o
0023400 d , a n d n o n a m e .
0023420 W h e n t h e H O S T N A
0023440 M E P m e t h o d g e t s
0023460 c a l l e d w i t h a n a
0023500 m e t h a t t h e d e v i
0023520 c e k n o w s i t c a n
0023540 s e r v i c e , i t c r e a
0023560 t e s a d e v i c e b y
0023600 t h a t n a m e . I f g
0023620 i v e n a n a m e t h a t
0023640 i s a s y n o n y m o f
0023660 a n o t h e r n a m e , i
0023700 t m i g h t j u s t r e t
0023720 u r n t h e e x i s t i n g
0023740 d e v i c e o f t h e c
0023760 a n o n i c a l n a m e ( u
0024000 s i n g \ G E T D E V I C E F
0024020 R O M N A M E t o f i n d
0024040 t h e r i g h t d e v i c e
0024060 ) . I n e i t h e r c a
0024100 s e , t h e H O S T N A M E
0024120 P m e t h o d o f t h e
0024140 n e w d e v i c e i s u s
0024160 u a l l y N I L L 023 t h e o
0024200 r i g i n a l d e v i c e i
0024220 s t h e o n l y o n e t
0024240 h a t w o r r i e s a b o u
0024260 t c r e a t i n g n e w i
0024300 n s t a n c e s o f t h i s
0024320 c l a s s o f d e v i c e
0024340 . \r ( 3 ) L i k e ( 2 ) ,
0024360 b u t a l l t h e d i f f
0024400 e r e n t n a m e s a r e
0024420 h a n d l e d b y a s i n
0024440 g l e d e v i c e , w h i c
0024460 h t a k e s c a r e i n t
0024500 e r n a l l y o f t h e m
0024520 u l t i p l e x i n g a m o n
0024540 g , s a y , d i f f e r e n
0024560 t r e m o t e h o s t s .
0024600 H O S T N A M E P r e t u r
0024620 n s T i n t h i s c a s
0024640 e . T h i s i s u s u a
0024660 l l y c l u m s i e r t h a
0024700 n ( 3 ) , s o d i s c o u
0024720 r a g e d . \r ( E V E N T F N
0024740 D E V I C E E V E N T ) \r C a
0024760 l l e d a r o u n d L i s p
0025000 e x i t s , t o a l l o w
0025020 t h e d e v i c e t o d
0025040 o a n y n e c e s s a r y
0025060 c l e a n i n g u p , c l e
0025100 a r i n g o f c a c h e s ,
0025120 d i s c o n n e c t s w i t
0025140 h r e m o t e h o s t s ,
0025160 e t c . E V E N T i s o
0025200 n e o f t h e f o l l o w
0025220 i n g l i t a t o m s : B E
0025240 F O R E L O G O U T , B E F O
0025260 R E S Y S O U T , B E F O R E
0025300 M A K E S Y S , B E F O R E S
0025320 A V E V M , A F T E R L O G O
0025340 U T , A F T E R S Y S O U T ,
0025360 A F T E R M A K E S Y S , A
0025400 F T E R S A V E V M , A F T E
0025420 R D O S Y S O U T , A F T E R
0025440 D O M A K E S Y S , A F T E R
0025460 D O S A V E V M . T h e A
0025500 F T E R x x x e v e n t s a
0025520 r e a l l r u n w h e n
0025540 L i s p i s b o o t e d f
0025560 r o m a m e m o r y i m a
0025600 g e t h a t r e s u l t e d
0025620 f r o m a L O G O U T ,
0025640 S Y S O U T , e t c . T h
0025660 e A F T E R D O x x x e v e
0025700 n t s r u n w h e n c o n
0025720 t i n u i n g L i s p i n
0025740 t h e s a m e i n c a r n a
0025760 t i o n f o l l o w i n g t
0026000 h e S Y S O U T , e t c .
0026020 ( t h e r e i s n o s u c
0026040 h e v e n t f o r L O G O
0026060 U T , o f c o u r s e ) .
0026100 T h e ` ` a f t e r ' ' e
0026120 v e n t s a r e c a l l e d
0026140 i n t h e s a m e o r d
0026160 e r i n w h i c h t h e
0026200 d e v i c e s w e r e d e f
0026220 i n e d ; t h e ` ` b e f o
0026240 r e ' ' e v e n t s i n t
0026260 h e r e v e r s e o r d e r
0026300 . \r F o r e x a m p l e , t
0026320 h e B E F O R E L O G O U T
0026340 e v e n t f o r t h e L e
0026360 a f r e m o t e f i l e s
0026400 e r v e r d e v i c e s p e
0026420 r f o r m s a F O R C E O U
0026440 T P U T o n a l l i t s
0026460 o p e n f i l e s a n d t
0026500 h e n b r e a k s t h e c
0026520 o n n e c t i o n w i t h t
0026540 h e f i l e s e r v e r .
0026560 T h e A F T E R x x x e v
0026600 e n t s f o r t h e L e a
0026620 f d e v i c e s c a l l s
0026640 \ R E M O V E D E V I C E o n
0026660 i t s e l f t o f l u s h
0026700 a n y c o n n e c t i o n
0026720 b e t w e e n t h e n a m e
0026740 a n d t h e s e r v e r
0026760 ( s i n c e n a m e s a n d
0027000 a d d r e s s e s c a n c
0027020 h a n g e o v e r e x i t )
0027040 . T h e A F T E R x x x
0027060 e v e n t s f o r t h e D
0027100 o r a d o d i s k d e v i c
0027120 e r e b u i l d s i t s c
0027140 a c h e o f t h e d i s k
0027160 ' s d i r e c t o r y . \r T h
0027200 e r e a r e a f e w d e
0027220 v i c e s i n t h e s y s
0027240 t e m t h a t e x i s t o
0027260 n l y f o r t h e i r E V
0027300 E N T F N . I n m o s t
0027320 c a s e s , a s i m p l e r
0027340 w a y t o t e l l t h e
0027360 s y s t e m y o u w a n t
0027400 s o m e t h i n g p e r f o
0027420 r m e d a r o u n d e x i t
0027440 i s t o a d d y o u r
0027460 e v e n t f u n c t i o n t
0027500 o t h e l i s t A R O U N
0027520 D E X I T F N S i n s t e a d
0027540 o f g o i n g t o t h e
0027560 e x p e n s e o f d e f i
0027600 n i n g a d e v i c e f o
0027620 r i t . T h e r e i s
0027640 y e t a n o t h e r l i s t
0027660 , \ S Y S T E M C A C H E V A
0027700 R S , f o r h a n d l i n g
0027720 a m o r e s p e c i a l i
0027740 z e d ` ` a r o u n d e x i
0027760 t ' ' o p e r a t i o n : e
0030000 v e r y t i m e L i s p i
0030020 s b o o t e d , e a c h o
0030040 f t h e v a r i a b l e s
0030060 i n t h e l i s t \ S Y S
0030100 T E M C A C H E V A R S i s
0030120 s e t t o N I L . \r T h e
0030140 f o l l o w i n g a r e r e
0030160 q u i r e d o f a l l n a
0030200 m e d d e v i c e s , t h a
0030220 t i s , d e v i c e s t h
0030240 a t m a p f r o m s o m e
0030260 h o s t n a m e t o t h e
0030300 d e v i c e , u p o n w h
0030320 i c h f i l e s m i g h t
0030340 b e o p e n e d o r o t h
0030360 e r w i s e m a n i p u l a t
0030400 e d : \r ( D I R E C T O R Y N A
0030420 M E P H O S T / D I R D E V
0030440 I C E ) \r T r u e i f H O S
0030460 T / D I R i s a v a l i d
0030500 d i r e c t o r y n a m e
0030520 o n D E V I C E . F u n c
0030540 t i o n s h o u l d i d e a
0030560 l l y p e r f o r m r e c o
0030600 g n i t i o n a s w e l l ,
0030620 a n d r e t u r n t h e
0030640 ` ` t r u e ' ' n a m e .
0030660 F o r e x a m p l e , g i v
0030700 e n ` ` { P H Y L E X : } < L
0030720 I S P > ' ' a s a r g u m e
0030740 n t , i t m i g h t r e t
0030760 u r n { P h y l e x : P A R C
0031000 : X e r o x } < L i s p > .
0031020 H O S T / D I R m i g h t i
0031040 n c l u d e a s u b d i r e
0031060 c t o r y n a m e . T h e
0031100 d e v i c e s h o u l d a
0031120 t t e m p t t o t e l l t
0031140 h e t r u t h a b o u t w
0031160 h e t h e r t h e s u b d i
0031200 r e c t o r y e x i s t s o
0031220 r n o t , t h o u g h t h
0031240 i s m a y n o t b e p o
0031260 s s i b l e f o r d e v i c
0031300 e s w i t h f a k e s u b
0031320 d i r e c t o r i e s . D e
0031340 f a u l t s t o N I L L ,
0031360 i . e . , d e v i c e s u p
0031400 p o r t s n o d i r e c t o
0031420 r i e s . U s e d b y t
0031440 h e c o m m a n d C O N N
0031460 a n d t h e f u n c t i o n
0031500 D I R E C T O R Y N A M E P .
0031520 \r ( O P E N F I L E N A M E
0031540 A C C E S S R E C O G P A R
0031560 A M E T E R S D E V I C E ) \r
0031600 U s e d t o i m p l e m e n
0031620 t t h e O P E N F I L E a
0031640 n d O P E N S T R E A M f u
0031660 n c t i o n s . O p e n s
0031700 t h e f i l e n a m e d N
0031720 A M E o n t h i s d e v i
0031740 c e f o r a c c e s s A C
0031760 C E S S , r e t u r n i n g
0032000 a S T R E A M . T h e s
0032020 t r e a m i s u s u a l l y
0032040 o n D E V I C E ( i t s
0032060 D E V I C E f i e l d i s
0032100 D E V I C E ) , b u t i s
0032120 n o t r e q u i r e d t o
0032140 b e . T h e a r g u m e n
0032160 t s A C C E S S , R E C O G
0032200 , P A R A M E T E R S a r e
0032220 a s w i t h t h e O P E
0032240 N F I L E f u n c t i o n i
0032260 n t h e m a n u a l . T
0032300 h u s , i f N A M E d o e
0032320 s n o t i n c l u d e a
0032340 v e r s i o n n u m b e r ,
0032360 r e c o g n i t i o n i s a
0032400 c c o r d i n g t o R E C O
0032420 G , w h i c h s h o u l d
0032440 b e a p p r o p r i a t e l y
0032460 d e f a u l t e d p e r A
0032500 C C E S S ( I N P U T i m p
0032520 l i e s O L D , O U T P U T
0032540 i m p l i e s N E W , B O
0032560 T H i m p l i e s O L D / N
0032600 E W ) . \r T h e a r g u m e n
0032620 t N A M E c a n a l s o
0032640 b e a S T R E A M , w h i
0032660 c h m u s t b e a c l o
0032700 s e d s t r e a m . O P E
0032720 N F I L E s h o u l d ` ` r
0032740 e o p e n ' ' t h e s t r e
0032760 a m . T h e v a l u e r
0033000 e t u r n e d i n t h i s
0033020 c a s e m a y b e a n e
0033040 w s t r e a m ( w i t h t
0033060 h e s a m e n a m e a s
0033100 t h e o l d ) , o r t h e
0033120 o l d s t r e a m ( N A M
0033140 E ) i t s e l f . I t i
0033160 s l i k e l y t h a t t h
0033200 e s p e c i f i c a t i o n
0033220 w i l l b e c h a n g e d
0033240 a t s o m e p o i n t t o
0033260 r e q u i r e t h a t t h
0033300 e o l d s t r e a m i t s
0033320 e l f b e r e t u r n e d ,
0033340 s u i t a b l y r e o p e n
0033360 e d . \r T h e a r g u m e n t
0033400 P A R A M E T E R S i s a
0033420 l i s t o f p a i r s (
0033440 O P T I O N V A L U E ) .
0033460 T h e m o s t i n t e r e s
0033500 t i n g O P T I O N s a r e
0033520 a s f o l l o w s : \r T Y P
0033540 E \t F o r n e w f i l e s ,
0033560 t h e t y p e o f t h e
0033600 f i l e ( T E X T o r B
0033620 I N A R Y ) . I f t h i s
0033640 p a r a m e t e r i s n o
0033660 t s p e c i f i e d , t h e
0033700 v a l u e o f t h e g l
0033720 o b a l v a r i a b l e D E
0033740 F A U L T F I L E T Y P E ( i
0033760 n i t i a l l y T E X T ) s
0034000 h o u l d b e u s e d . \r C
0034020 R E A T I O N D A T E \t F o r
0034040 n e w f i l e s , t h e d
0034060 a t e o f i t s c r e a t
0034100 i o n . T h e d e v i c e
0034120 s h o u l d u s e t h i s
0034140 i f a t a l l p o s s i
0034160 b l e i n s t e a d o f l
0034200 e t t i n g t h e c r e a t
0034220 i o n d a t e d e f a u l t
0034240 t o t h e c u r r e n t
0034260 d a t e a n d t i m e . \r L
0034300 E N G T H \t T h e i n t e n d
0034320 e d l e n g t h o f t h e
0034340 f i l e , i n b y t e s .
0034360 T h i s n e e d n o t
0034400 b e a c c u r a t e 023 i t i
0034420 s o n l y a h i n t t h
0034440 a t m a y a l l o w s m a
0034460 r t e r a l l o c a t i o n .
0034500 F o r e x a m p l e , i
0034520 f t h e d e v i c e k n o
0034540 w s t h a t i t d o e s
0034560 n o t h a v e r o o m f o
0034600 r a f i l e o f t h e
0034620 s p e c i f i e d l e n g t h
0034640 , i t s h o u l d i m m e
0034660 d i a t e l y c a u s e a
0034700 F I L E S Y S T E M R E S O
0034720 U R C E S E X C E E D E D e
0034740 r r o r f o r t h e i n t
0034760 e n d e d f i l e . \r D O N '
0035000 T . C H A N G E . D A T E \t F o
0035020 r o l d f i l e s b e i n
0035040 g o p e n e d f o r a c c
0035060 e s s B O T H , d o n ' t
0035100 c h a n g e t h e c r e a t
0035120 i o n d a t e o f t h e
0035140 f i l e . A C C E S S =
0035160 B O T H w o u l d n o r m a
0035200 l l y i m p l y t h a t t
0035220 h e c o n t e n t o f t h
0035240 e f i l e i s t o c h a
0035260 n g e , a n d t h u s i t
0035300 s c r e a t i o n d a t e
0035320 s h o u l d b e u p d a t e
0035340 d . U s e o f t h i s
0035360 p a r a m e t e r i s a f
0035400 o r m o f ` ` c h e a t i n
0035420 g ' ' t o m a k e i t l
0035440 o o k a s t h o u g h t h
0035460 e f i l e h a d n o t c
0035500 h a n g e d . F o r e x a
0035520 m p l e , t h e c o d e t
0035540 h a t r e w r i t e s f i l
0035560 e m a p s u s e s t h i s
0035600 p a r a m e t e r , s i n c e
0035620 r e w r i t i n g t h e f
0035640 i l e m a p d o e s n o t
0035660 l o g i c a l l y c h a n g e
0035700 t h e f i l e ' s c o n t
0035720 e n t . \r S E Q U E N T I A L \t
0035740 I f T , i s a h i n t
0035760 t h a t t h e f i l e w i
0036000 l l , o r n e e d , o n l
0036020 y b e a c c e s s e d s e
0036040 q u e n t i a l l y , w h i c
0036060 h m a y a l l o w t h e
0036100 d e v i c e t o o p e n t
0036120 h e f i l e i n a m o r
0036140 e e f f i c i e n t m o d e
0036160 . \r A n y p a r a m e t e r s
0036200 t h a t t h e d e v i c e
0036220 d o e s n o t u n d e r s
0036240 t a n d s h o u l d b e i
0036260 g n o r e d , r a t h e r t
0036300 h a n b e c a u s e f o r
0036320 a n e r r o r . A l l
0036340 d e v i c e s a r e e n c o
0036360 u r a g e d t o s u p p o r
0036400 t a t l e a s t T Y P E
0036420 a n d C R E A T I O N D A T E
0036440 . \r T h e a d d i t i o n a l
0036460 o p t i o n s E N D O S T R
0036500 E A M O P a n d B U F F E R
0036520 S a r e h a n d l e d b y
0036540 t h e g e n e r i c f i l
0036560 e s y s t e m c o d e ; s
0036600 p e c i f y i n g t h e m i
0036620 s e q u i v a l e n t t o
0036640 c a l l i n g S E T F I L E I
0036660 N F O ( q . v . ) i m m e d
0036700 i a t e l y a f t e r t h e
0036720 o p e n . \r F i n e p o i n
0036740 t a b o u t A C C E S S =
0036760 O U T P U T : t h i s o p
0037000 e r a t i o n a l w a y s p
0037020 r o d u c e s a n e w , e
0037040 m p t y f i l e , i n d e p
0037060 e n d e n t o f w h e t h e
0037100 r i t s n a m e i s e x
0037120 a c t l y t h e n a m e o
0037140 f a n e x i s t i n g f i
0037160 l e . T h a t i s , i t
0037200 r e p l a c e s a n y o l
0037220 d f i l e b y t h e s a
0037240 m e n a m e . O n o p e
0037260 n i n g , s u c h a f i l
0037300 e h a s a n e n d o f
0037320 f i l e o f z e r o . O
0037340 f c o u r s e , s i n c e
0037360 R E C O G d e f a u l t s t
0037400 o N E W i n t h i s c a
0037420 s e , t h e n a m e c a n
0037440 o n l y c l a s h w i t h
0037460 a n o l d f i l e n a m
0037500 e i f a v e r s i o n w
0037520 a s e x p l i c i t l y s p
0037540 e c i f i e d , o r R E C O
0037560 G i s O L D o r O L D /
0037600 N E W . T o o p e n a n
0037620 o l d f i l e f o r o u
0037640 t p u t b u t p r e s e r v
0037660 e i t s c o n t e n t s ,
0037700 i . e . , o n l y w r i t e
0037720 o v e r p a r t o f t h
0037740 e f i l e , o n e s h o u
0037760 l d o p e n f o r A C C E
0040000 S S = B O T H ( s i n c e
0040020 t o p r e s e r v e t h e
0040040 o l d c o n t e n t s o n
0040060 e i m p l i c i t l y r e a
0040100 d s t h e m ) . \r E x c e p t
0040120 i o n h a n d l i n g : I
0040140 f t h e d e s i r e d f i
0040160 l e i s n o t f o u n d ,
0040200 t h e O P E N F I L E m e
0040220 t h o d s h o u l d r e t u
0040240 r n N I L r a t h e r t h
0040260 a n c a u s e a F I L E
0040300 N O T F O U N D e r r o r .
0040320 T h i s i s s o t h a
0040340 t t h e g e n e r i c f i
0040360 l e s y s t e m c o d e c
0040400 a n c a u s e t h e e r r
0040420 o r u s i n g t h e o r i
0040440 g i n a l f i l e n a m e ,
0040460 n o t t h e o n e p a c
0040500 k e d w i t h h o s t a n
0040520 d d i r e c t o r y p a s s
0040540 e d i n t o t h e O P E
0040560 N F I L E m e t h o d . T
0040600 h e d e v i c e s h o u l d
0040620 f e e l f r e e t o s i
0040640 g n a l a n y o t h e r e
0040660 r r o r s i t s e l f o n
0040700 f a i l i n g t o o p e n
0040720 t h e f i l e , e . g . ,
0040740 F I L E W O N ' T O P E N
0040760 f o r a b u s y f i l e
0041000 , P R O T E C T I O N E R R
0041020 O R , o r F I L E S Y S T
0041040 E M R E S O U R C E S E X C
0041060 E E D E D . I d e a l l y ,
0041100 t h i s e r r o r s h o u
0041120 l d b e s i g n a l e d i
0041140 n a w a y t h a t i s
0041160 r e s u m a b l e , i . e . ,
0041200 s o t h a t a u s e r
0041220 c o u l d , i n t h e b r
0041240 e a k , t a k e s o m e a
0041260 c t i o n t o r e m e d y
0041300 t h e c o n d i t i o n a n
0041320 d t h e n t y p e O K t
0041340 o c o n t i n u e . I n
0041360 m o s t c a s e s i t s u
0041400 f f i c e s t h a t a l l
0041420 t h e i n t e r n a l f u n
0041440 c t i o n s b e l o w t h e
0041460 O P E N F I L E b e n a m
0041500 e d w i t h b a c k s l a s
0041520 h e s , s o t h a t t h e
0041540 e r r o r c o d e w i l l
0041560 c h o o s e t o r e s u m
0041600 e b y r e v e r t i n g t
0041620 o t h e O P E N F I L E a
0041640 n d t r y i n g a g a i n .
0041660 \r T h e d e v i c e d o e s
0041700 n o t n e e d t o k n o
0041720 w a b o u t t h e s e t
0041740 o f o p e n f i l e s ( i
0041760 . e . , t h e v a l u e o
0042000 f ( O P E N P ) ) , a n d
0042020 i n g e n e r a l s h o u l
0042040 d i g n o r e i t . T h
0042060 a t i s , t h e d e v i c
0042100 e s h o u l d p e r f o r m
0042120 t h e o p e n a s i f
0042140 t h e r e w e r e n o o t
0042160 h e r f i l e s o p e n a
0042200 n d h e n c e n o c o n f
0042220 l i c t . T h e g e n e r
0042240 i c f i l e s y s t e m c
0042260 o d e l o o k s a t t h e
0042300 s t r e a m r e t u r n e d
0042320 f r o m t h e O P E N F I
0042340 L E m e t h o d a n d t h
0042360 e n w o r r i e s a b o u t
0042400 w h e t h e r t h e r e i
0042420 s a c t u a l l y a n o t h
0042440 e r s t r e a m o p e n b
0042460 y t h e s a m e n a m e .
0042500 I f t h e r e i s , i
0042520 t c l o s e s t h e n e w
0042540 l y o p e n e d s t r e a m
0042560 a n d t h e n e i t h e r
0042600 r e t u r n s t h e p r e
0042620 - e x i s t i n g s t r e a m
0042640 , o r c a u s e s a F I
0042660 L E W O N ' T O P E N e r
0042700 r o r i f t h e n e w a
0042720 n d o l d a c c e s s m o
0042740 d e s a r e i n c o n f l
0042760 i c t . T h i s d e s i g
0043000 n i s c r u f t y , b u t
0043020 I b e l i e v e i t s t
0043040 e m s p r i n c i p a l l y
0043060 f r o m t h e r e c o g n i
0043100 t i o n p r o b l e m 023 y o u
0043120 d o n ' t k n o w t h e
0043140 f u l l n a m e o f a f
0043160 i l e u n t i l y o u o p
0043200 e n i t , s o y o u c a
0043220 n ' t t e l l u n t i l t
0043240 h e n w h e t h e r y o u
0043260 s h o u l d h a v e t r i e
0043300 d t o o p e n i t i n
0043320 t h e f i r s t p l a c e .
0043340 I t w i l l , o f c o
0043360 u r s e , h a v e t o b e
0043400 c o m p l e t e l y c h a n
0043420 g e d w h e n w e g o t
0043440 o m u l t i p l e s t r e a
0043460 m s p e r f i l e . \r ( R E
0043500 O P E N F I L E N A M E A C
0043520 C E S S R E C O G P A R A M
0043540 E T E R S D E V I C E O L D
0043560 S T R E A M ) \r T h i s i s
0043600 e x a c t l y l i k e O P E
0043620 N F I L E , e x c e p t t h
0043640 a t i t i s c a l l e d
0043660 a f t e r L O G O U T ( o r
0043700 o t h e r ` ` a f t e r ' '
0043720 e v e n t s ) o n t h e
0043740 n a m e o f a n y s t r e
0043760 a m t h a t w a s l e f t
0044000 o p e n o v e r e x i t .
0044020 T h e i d e a i s t o
0044040 m a i n t a i n t h e i l
0044060 l u s i o n t h a t t h e
0044100 f i l e r e a l l y w a s
0044120 o p e n o v e r L O G O U T
0044140 , b u t c h e c k a n d
0044160 m a k e s u r e n o t h i n
0044200 g c h a n g e d . T h e
0044220 g e n e r i c f i l e s y s
0044240 t e m c o d e u s e s t h
0044260 e V A L I D A T I O N f i e
0044300 l d t o t e s t w h e t h
0044320 e r t h e f i l e c h a n
0044340 g e d b e h i n d y o u r
0044360 b a c k . \r O L D S T R E A M
0044400 i s t h e s t r e a m t h
0044420 a t w a s o p e n b e f o
0044440 r e e x i t , a n d i s
0044460 s u p p l i e d f o r t h e
0044500 b e n e f i t o f d e v i
0044520 c e s w h e r e t h e r e
0044540 i s n o p o s s i b i l i t
0044560 y t h a t t h e f i l e
0044600 c h a n g e d ( e . g . , {
0044620 C O R E } ) , s o t h a t
0044640 t h e y c a n j u s t r e
0044660 t u r n O L D S T R E A M d
0044700 i r e c t l y . O L D S T R
0044720 E A M i s a l s o o f u
0044740 s e f o r t h o s e d e v
0044760 i c e s t h a t h a v e t
0045000 o c h e a t i n o r d e r
0045020 t o m a i n t a i n t h e
0045040 i l l u s i o n . \r T h i s
0045060 w i l l h a v e t o c h a
0045100 n g e w h e n w e g o t
0045120 o m u l t i p l e s t r e a
0045140 m s p e r f i l e . \r ( G E
0045160 T F I L E N A M E N A M E R
0045200 E C O G D E V I C E ) \r P e r
0045220 f o r m s ` ` r e c o g n i t
0045240 i o n ' ' o n N A M E .
0045260 T h a t i s , i t r e t u
0045300 r n s t h e f u l l n a m
0045320 e o f t h e f i l e t h
0045340 a t w o u l d b e o p e n
0045360 e d b y O P E N F I L E i
0045400 n t h e i n d i c a t e d
0045420 r e c o g n i t i o n m o d e
0045440 , o r N I L i f t h e
0045460 f i l e i s n o t f o u n
0045500 d . I t i s n o t n e
0045520 c e s s a r y t h a t O P E
0045540 N F I L E a c t u a l l y b
0045560 e c a p a b l e o f o p e
0045600 n i n g t h e f i l e ( t
0045620 h e r e i s n o n e e d
0045640 t o c h e c k p r o t e c t
0045660 i o n , f o r e x a m p l e
0045700 ) . U s e d b y I N F I
0045720 L E P , O U T F I L E P , F
0045740 U L L N A M E . \r ( D E L E T E
0045760 F I L E N A M E D E V I C E
0046000 ) \r D e l e t e s t h e f i
0046020 l e n a m e d N A M E , r
0046040 e t u r n i n g i t s f u l
0046060 l n a m e o n s u c c e s
0046100 s , N I L o n f a i l u r
0046120 e . R e c o g n i t i o n
0046140 m o d e i s i m p l i c i t
0046160 l y O L D E S T . L o c a
0046200 l d e v i c e s , a f t e r
0046220 r e c o g n i z i n g t h e
0046240 f i l e , s h o u l d m a
0046260 k e s u r e t h a t i t
0046300 i s n o t O P E N P ( o p
0046320 e n f i l e s c a n n o t
0046340 b e d e l e t e d ) . T
0046360 h i s a n d R E N A M E F I
0046400 L E a r e u s u a l l y t
0046420 h e o n l y d e v i c e m
0046440 e t h o d s t h a t n e e d
0046460 t o k n o w a n y t h i n
0046500 g a b o u t w h a t f i l
0046520 e s a r e o p e n . \r ( G E
0046540 N E R A T E F I L E S D E V I
0046560 C E P A T T E R N D E S I R
0046600 E D P R O P S O P T I O N S )
0046620 \r E n u m e r a t e s f i l e
0046640 s m a t c h i n g P A T T E
0046660 R N . R e t u r n s a `
0046700 ` f i l e g e n e r a t o r
0046720 o b j e c t ' ' o f t h e
0046740 f o r m ( N E X T F I L E F N
0046760 I N F O F N . A r b i t r
0047000 a r y S t a t e ) . T h i s
0047020 i s d e s c r i b e d i n
0047040 m o r e g o r y d e t a i
0047060 l u n d e r D i r e c t o r
0047100 y E n u m e r a t i o n . \r (
0047120 R E N A M E F I L E O L D N A
0047140 M E N E W N A M E D E V I C
0047160 E ) \r R e n a m e s t h e f
0047200 i l e n a m e d O L D N A M
0047220 E t o h a v e n a m e N
0047240 E W N A M E . R e t u r n s
0047260 t h e f u l l n a m e o
0047300 f t h e n e w f i l e i
0047320 f s u c c e s s f u l , N I
0047340 L i f n o t . R e c o g
0047360 n i t i o n m o d e i s i
0047400 m p l i c i t l y O L D f o
0047420 r O L D N A M E , N E W f
0047440 o r N E W N A M E . T h e
0047460 g e n e r i c f i l e s y
0047500 s t e m c o d e i n v o k e
0047520 s t h i s m e t h o d t o
0047540 i m p l e m e n t t h e f
0047560 u n c t i o n R E N A M E F I
0047600 L E o n l y w h e n t h e
0047620 h o s t f i e l d s o f
0047640 b o t h f i l e n a m e s m
0047660 a p t o t h e s a m e d
0047700 e v i c e . D e f a u l t s
0047720 t o \ G E N E R I C . R E N
0047740 A M E F I L E , w h i c h i
0047760 s a l s o t h e f u n c t
0050000 i o n t h a t t h e s y s
0050020 t e m c a l l s w h e n t
0050040 h e o l d a n d n e w n
0050060 a m e s a r e o n d i f f
0050100 e r e n t d e v i c e s .
0050120 \ G E N E R I C . R E N A M E F
0050140 I L E i s d e f i n e d t
0050160 o c o p y O L D N A M E t
0050200 o N E W N A M E a n d t h
0050220 e n d e l e t e O L D N A M
0050240 E . \r T h e f o l l o w i n g
0050260 m e t h o d s a r e i n v
0050300 o k e d f o r o p e n s t
0050320 r e a m s . T h e y a r e
0050340 a l l r e q u i r e d : \r (
0050360 B I N S T R E A M ) \r R e t u
0050400 r n s t h e n e x t b y t
0050420 e o f i n p u t f r o m
0050440 S T R E A M , o r t a k e s
0050460 t h e a p p r o p r i a t e
0050500 a c t i o n i f a t e n
0050520 d o f f i l e . U n l e
0050540 s s a d e v i c e h a s
0050560 a g o o d r e a s o n n o
0050600 t t o , i t s h o u l d
0050620 c a l l ( \ E O F . A C T I O
0050640 N S T R E A M ) a t e n d
0050660 o f f i l e / s t r e a m .
0050700 \r T h e d e v i c e B I N
0050720 m e t h o d i s a c t u a l
0050740 l y n o t u s e d d i r e
0050760 c t l y . R a t h e r , e
0051000 v e r y s t r e a m h a s
0051020 a S T R M B I N F N f i e l
0051040 d , w h i c h i s t h e
0051060 f u n c t i o n a c t u a l l
0051100 y a p p l i e d t o d o
0051120 t h e i n p u t . T h e
0051140 S T R M B I N F N f i e l d
0051160 c o u l d t h u s b e u s
0051200 e d t o f a k e a s p e
0051220 c i a l i z a t i o n o f t
0051240 h e d e v i c e d i f f e r
0051260 i n g o n l y i n t h e
0051300 B I N m e t h o d . H o w
0051320 e v e r , t h e t y p i c a
0051340 l u s e o f S T R M B I N
0051360 F N i s t o t e m p o r a
0051400 r i l y o v e r r i d e t h
0051420 e d e v i c e d e f a u l t
0051440 . I n p a r t i c u l a r
0051460 , s e t t i n g a s t r e
0051500 a m ' s a c c e s s t o I
0051520 N P U T o r B O T H a u t
0051540 o m a t i c a l l y s e t s
0051560 t h e s t r e a m ' s S T R
0051600 M B I N F N t o b e t h e
0051620 d e v i c e ' s B I N m e
0051640 t h o d ; s e t t i n g a c
0051660 c e s s t o N I L o r O
0051700 U T P U T s e t s t h e S
0051720 T R M B I N F N t o b e a
0051740 n e r r o r . T h i s r
0051760 e l i e v e s t h e d e v i
0052000 c e ' s B I N m e t h o d
0052020 o f a n y n e e d t o c
0052040 h e c k t h e s t r e a m '
0052060 s a c c e s s o n e v e r
0052100 y c a l l t o B I N .
0052120 S o m e n e t w o r k s t r
0052140 e a m s t e m p o r a r i l y
0052160 s e t t h e i r S T R M B
0052200 I N F N t o b e a n i n
0052220 p u t e a t e r w h e n t
0052240 h e y r e c e i v e a ` `
0052260 c l e a r o u t p u t ' ' c
0052300 o m m a n d . \r C u r r e n t l
0052320 y , a l l I n t e r l i s p
0052340 - D s t r e a m s h a v e
0052360 b y t e s i z e 8 , s o B
0052400 I N a l w a y s r e t u r n
0052420 s a n 8 - b i t i n t e g
0052440 e r . \r C a l l s t o t h e
0052460 f u n c t i o n B I N a r
0052500 e c o m p i l e d i n t o
0052520 t h e B I N o p c o d e ,
0052540 w h i c h r u n s i n m i
0052560 c r o c o d e o n s o m e
0052600 m a c h i n e s i f t h e
0052620 r e q u i r e m e n t s f o r
0052640 i t a r e m e t . M o
0052660 r e o n t h i s l a t e r
0052700 . \r ( B O U T S T R E A M B
0052720 Y T E ) \r O u t p u t s B Y T
0052740 E t o S T R E A M . A s
0052760 w i t h B I N , t h i s
0053000 m e t h o d i s n o t u s
0053020 e d d i r e c t l y . R a
0053040 t h e r , e v e r y s t r e
0053060 a m h a s a S T R M B O U
0053100 T F N f i e l d , w h i c h
0053120 i s t h e f u n c t i o n
0053140 a c t u a l l y a p p l i e
0053160 d t o d o t h e o u t p
0053200 u t . S e t t i n g a s
0053220 t r e a m ' s a c c e s s t
0053240 o O U T P U T o r B O T H
0053260 a u t o m a t i c a l l y s
0053300 e t s t h e s t r e a m ' s
0053320 S T R M B O U T F N t o b
0053340 e t h e d e v i c e ' s B
0053360 O U T m e t h o d . \r T h e r
0053400 e e x i s t s a B O U T
0053420 o p c o d e , b u t t h e
0053440 d e s i g n i s i n c o m p
0053460 l e t e . \r ( P E E K B I N S
0053500 T R E A M N O E R R O R F L G
0053520 ) \r R e t u r n s t h e n e
0053540 x t i n p u t b y t e f r
0053560 o m S T R E A M , b u t d
0053600 o e s n o t a d v a n c e
0053620 t h e s t r e a m p o i n t
0053640 e r . T h u s a s u b s
0053660 e q u e n t P E E K B I N o
0053700 r B I N w i l l r e t u r
0053720 n t h e s a m e b y t e .
0053740 A t e n d o f s t r e
0053760 a m , t h e d e v i c e s
0054000 h o u l d t a k e e o f a
0054020 c t i o n a s w i t h B I
0054040 N , u n l e s s N O E R R O
0054060 R F L G i s t r u e , i n
0054100 w h i c h c a s e i t s
0054120 h o u l d r e t u r n N I L
0054140 . \r ( R E A D P S T R E A M
0054160 F L G ) \r R e t u r n s t r u
0054200 e i f i n p u t i s a v
0054220 a i l a b l e f r o m S T R
0054240 E A M , t h a t i s , i f
0054260 a B I N r i g h t n o w
0054300 w o u l d s u c c e e d w
0054320 i t h o u t w a i t i n g .
0054340 D e f a u l t s t o \ G E
0054360 N E R I C . R E A D P , w h i
0054400 c h u s e s E O F P a n d
0054420 P E E K B I N . \r R o u g h l
0054440 y s p e a k i n g , R E A D
0054460 P i s t h e c o m p l e m
0054500 e n t o f E O F P f o r
0054520 s t r e a m s t h a t a r e
0054540 n o t a r r i v i n g i n
0054560 r e a l t i m e . I t
0054600 i s i n t e r e s t i n g l y
0054620 d i f f e r e n t f o r n
0054640 e t w o r k s t r e a m s ,
0054660 o r t h e k e y b o a r d .
0054700 \r F L G i s a b i t o f
0054720 c r u f t t h a t n o t
0054740 e v e r y o n e p a y s a t
0054760 t e n t i o n t o , a n d
0055000 m a y b e f l u s h e d a
0055020 t s o m e p o i n t : i f
0055040 F L G i s N I L , t h e
0055060 n R E A D P s h o u l d r
0055100 e t u r n N I L i f t h e
0055120 o n l y i n p u t w a i t
0055140 i n g i s a n e n d o f
0055160 l i n e c h a r a c t e r .
0055200 \r ( E O F P S T R E A M ) \r R
0055220 e t u r n s t r u e w h e n
0055240 S T R E A M i s ` ` a t
0055260 e n d o f f i l e ' ' , i
0055300 . e . , a B I N w o u l d
0055320 c a u s e a n e n d o f
0055340 f i l e a c t i o n t o
0055360 o c c u r . N o t e t h a
0055400 t f o r a n e t w o r k
0055420 s t r e a m , i t i s p o
0055440 s s i b l e f o r b o t h
0055460 E O F P a n d R E A D P t
0055500 o b e f a l s e s i m u l
0055520 t a n e o u s l y , v i z .
0055540 w h e n t h e r e i s n o
0055560 i n p u t w a i t i n g (
0055600 b u f f e r e d l o c a l l y
0055620 ) , b u t t h e r e m o t
0055640 e e n d o f t h e s t r
0055660 e a m h a s n o t i n d i
0055700 c a t e d t h a t t h e r e
0055720 i s n o m o r e i n p u
0055740 t . \r T h e r e a r e s o m
0055760 e w h o c a l l E O F P
0056000 o n s t r e a m s o p e n
0056020 o n l y f o r o u t p u t .
0056040 T h i s i s a c r o c
0056060 k ; o u t p u t s t r e a m
0056100 s a r e a l w a y s a t
0056120 e n d o f f i l e . B u
0056140 t t o a v o i d c o m p l
0056160 a i n t s , a d e v i c e
0056200 c o u l d r e t u r n T f
0056220 o r E O F P o n a n o u
0056240 t p u t s t r e a m . \r ( B L
0056260 O C K I N S T R E A M B U F
0056300 F E R B Y T E O F F S E T N
0056320 B Y T E S ) \r P e r f o r m s
0056340 b u l k i n p u t t r a n s
0056360 f e r : r e t r i e v e s t
0056400 h e n e x t N B Y T E S b
0056420 y t e s f r o m S T R E A M
0056440 a n d s t o r e s t h e m
0056460 i n s u c c e s s i v e b
0056500 y t e p o s i t i o n s i n
0056520 B U F F E R s t a r t i n g
0056540 a t B Y T E O F F S E T .
0056560 D e f a u l t s t o \ G E
0056600 N E R I C . B I N S , w h i c
0056620 h r e p e a t e d l y c a l
0056640 l s B I N a n d \ P U T B
0056660 A S E B Y T E . \r I t i s a
0056700 l m o s t a l w a y s t h e
0056720 c a s e t h a t a d e v
0056740 i c e w i t h a n o n - t
0056760 r i v i a l B L O C K I N m
0057000 e t h o d c a n b e m a d
0057020 e t o b e a B u f f e r
0057040 e d d e v i c e , t h e r e
0057060 b y b e n e f i t i n g f r
0057100 o m o t h e r B u f f e r e
0057120 d o p e r a t i o n s a s
0057140 w e l l . \r ( B L O C K O U T
0057160 S T R E A M B U F F E R B Y
0057200 T E O F F S E T N B Y T E S )
0057220 \r P e r f o r m s b u l k o
0057240 u t p u t t r a n s f e r :
0057260 o u t p u t s N B Y T E S
0057300 b y t e s t o S T R E A M ,
0057320 t a k i n g t h e b y t e
0057340 s f r o m B U F F E R s t
0057360 a r t i n g a t B Y T E O F
0057400 F S E T . D e f a u l t s
0057420 t o \ G E N E R I C . B O U T
0057440 S , w h i c h r e p e a t e
0057460 d l y c a l l s \ G E T B A
0057500 S E B Y T E a n d B O U T .
0057520 \r ( F O R C E O U T P U T S T
0057540 R E A M W A I T F O R F I N I
0057560 S H ) \r F o r c e s t o i t
0057600 s u l t i m a t e d e s t i
0057620 n a t i o n a n y o u t p u
0057640 t b u f f e r e d o n S T
0057660 R E A M b u t n o t y e t
0057700 s e n t . W A I T F O R F
0057720 I N I S H m e a n s t h a t
0057740 t h e f u n c t i o n s h
0057760 o u l d n o t r e t u r n
0060000 u n t i l i t i s c o n f
0060020 i d e n t t h a t t h e o
0060040 u t p u t h a s r e a c h e
0060060 d i t s d e s t i n a t i o
0060100 n a n d b e e n c o m m i
0060120 t t e d . D e f a u l t s
0060140 t o N I L L , w h i c h i
0060160 s r e a s o n a b l e f o r
0060200 u n b u f f e r e d s t r e
0060220 a m s . \r F o r e x a m p l e
0060240 , f o r a n e t w o r k
0060260 s t r e a m , F O R C E O U T
0060300 P U T s e n d s t h e c u
0060320 r r e n t p a c k e t b e i
0060340 n g b u f f e r e d u p .
0060360 F o r a b u f f e r e d
0060400 s t r e a m t o t h e d i
0060420 s k , F O R C E O U T P U T
0060440 w r i t e s o u t t o t h
0060460 e d i s k a n y ` ` d i r
0060500 t y ' ' p a g e s , a n d
0060520 m a k e s s u r e t h e f
0060540 i l e i s i n s u c h a
0060560 s t a t e t h a t i f t
0060600 h e m a c h i n e w e r e
0060620 b o o t e d a f t e r F O R
0060640 C E O U T P U T r e t u r n s
0060660 , t h a t t h e f i l e
0060700 c o u l d b e s u c c e s s
0060720 f u l l y r e o p e n e d w
0060740 i t h n o i n f o r m a t i
0060760 o n l o s t . \r ( G E T F I L
0061000 E I N F O N A M E / S T R E A
0061020 M A T T R I B U T E D E V I
0061040 C E ) \r R e t u r n s t h e
0061060 v a l u e o f t h e s p e
0061100 c i f i e d A T T R I B U T E
0061120 o f N A M E / S T R E A M ,
0061140 w h i c h c a n b e a n
0061160 o p e n S t r e a m o r
0061200 t h e n a m e o f a ( c
0061220 l o s e d ) f i l e . R e
0061240 t u r n s N I L f o r a t
0061260 t r i b u t e s i t d o e s
0061300 n ' t k n o w a b o u t .
0061320 I t i s c o n s i d e r e
0061340 d g o o d c i t i z e n s h
0061360 i p , t h o u g h n o t a
0061400 b s o l u t e l y r e q u i r
0061420 e d , t o k n o w a b o u
0061440 t t h e f o l l o w i n g
0061460 a t t r i b u t e s : \r L E N G
0061500 T H \t L e n g t h o f t h e
0061520 s t r e a m / f i l e i n
0061540 b y t e s . I f t h e d
0061560 e v i c e ' s m e t h o d r
0061600 e t u r n s N I L , b u t
0061620 t h e s t r e a m i s r a
0061640 n d o m a c c e s s , t h e
0061660 g e n e r i c G E T F I L E
0061700 I N F O c o d e t r i e s
0061720 t h e d e v i c e ' s G E T
0061740 E O F P T R m e t h o d i n
0061760 s t e a d . \r S I Z E \t L e n g
0062000 t h i n p a g e s , i . e
0062020 . , ( F O L D H I l e n g t
0062040 h B Y T E S P E R P A G E ) .
0062060 \r C R E A T I O N D A T E \t D a
0062100 t e w h e n t h e f i l e
0062120 ' s c o n t e n t s w e r e
0062140 c r e a t e d , a s a s
0062160 t r i n g . T h e c r e a
0062200 t i o n d a t e d o e s n o
0062220 t c h a n g e w h e n a
0062240 f i l e i s c o p i e d o
0062260 r r e n a m e d , o n l y
0062300 w h e n i t i s c h a n g
0062320 e d . \r W R I T E D A T E \t D a
0062340 t e w h e n t h e f i l e
0062360 w a s w r i t t e n t o
0062400 i t s c u r r e n t p l a c
0062420 e o f s t o r a g e . \r R E
0062440 A D D A T E \t D a t e w h e n
0062460 t h e f i l e w a s l a
0062500 s t r e a d . \r I C R E A T I
0062520 O N D A T E , I W R I T E D A
0062540 T E , I R E A D D A T E \r \t T
0062560 h e c r e a t i o n , w r i
0062600 t e a n d r e a d d a t e
0062620 s a s i n t e g e r s , s
0062640 u c h a s f r o m t h e
0062660 f u n c t i o n I D A T E . \r
0062700 T Y P E \t T y p e o f t h e
0062720 c o n t e n t s : T E X T
0062740 f o r f i l e s t h a t c
0062760 o n t a i n o n l y ` ` t e
0063000 x t ' ' ( g e n e r a l l y
0063020 m e a n i n g 7 - b i t a s
0063040 c i i ) , B I N A R Y f o r
0063060 a l l o t h e r s . N I
0063100 L m e a n s u n k n o w n .
0063120 \r A U T H O R \t N a m e o f
0063140 t h e u s e r w h o c r e
0063160 a t e d t h e f i l e ( a
0063200 s t r i n g ) . \r T h e f o
0063220 l l o w i n g ` ` g e n e r i
0063240 c ' ' a t t r i b u t e s a
0063260 r e g e n e r a l l y h a n
0063300 d l e d b y t h e g e n e
0063320 r i c s i d e o f G E T F
0063340 I L E I N F O i f t h e d
0063360 e v i c e ' s G E T F I L E I
0063400 N F O m e t h o d r e t u r
0063420 n s N I L : \r E O L \t T h e
0063440 e n d o f l i n e c o n v
0063460 e n t i o n o f t h e s t
0063500 r e a m ( C R , C R L F o
0063520 r L F ) . \r B U F F E R S \t T
0063540 h e n u m b e r o f p a g
0063560 e m a p b u f f e r s f o r
0063600 u s e b y t h e s t r e
0063620 a m ( s e e d e s c r i p t
0063640 i o n o f M A X B U F F E R
0063660 S f i e l d o f p a g e m
0063700 a p p e d s t r e a m s ) . \r
0063720 E N D O F S T R E A M O P \t A c
0063740 t i o n t o t a k e o n
0063760 a n y a t t e m p t t o r
0064000 e a d b e y o n d t h e e
0064020 n d o f f i l e . T h i
0064040 s i s a f u n c t i o n
0064060 o f o n e a r g u m e n t ,
0064100 t h e s t r e a m . T h
0064120 e f u n c t i o n c a n c
0064140 a u s e a n e r r o r , o
0064160 r r e t u r n a v a l u e
0064200 , w h i c h i s i n t e r
0064220 p r e t e d a s a v a l u
0064240 e t o r e t u r n f r o m
0064260 B I N . T h e d e f a u
0064300 l t E N D O F S T R E A M O P
0064320 c a u s e s a n E N D O
0064340 F F I L E e r r o r . \r
0064360 A C C E S S \t A n a t o m d
0064400 e s c r i b i n g t h e a c
0064420 c e s s m o d e o f t h e
0064440 s t r e a m ( I N P U T ,
0064460 O U T P U T , e t c ) . T
0064500 h i s i s s o g e n e r i
0064520 c t h a t i t i s h a n
0064540 d l e d b e f o r e t h e
0064560 d e v i c e ' s m e t h o d
0064600 e v e r s e e s i t . \r B Y
0064620 T E S I Z E , O P E N B Y T E
0064640 S I Z E \t T h e s i z e o f
0064660 b y t e s t r a n s m i t t
0064700 e d o n t h e s t r e a m
0064720 . A l w a y s 8 t h e s
0064740 e d a y s . \r ( S E T F I L E
0064760 I N F O N A M E / S T R E A M
0065000 A T T R I B U T E V A L U E
0065020 D E V I C E ) \r S e t s t h
0065040 e v a l u e o f t h e s
0065060 p e c i f i e d A T T R I B U
0065100 T E o f N A M E / S T R E A
0065120 M t o b e V A L U E .
0065140 R e t u r n s T i f s u c
0065160 c e s s f u l , N I L i f
0065200 u n s u c c e s s f u l , o r
0065220 f o r a t t r i b u t e s
0065240 i t d o e s n ' t k n o w
0065260 a b o u t . \r I t i s n o t
0065300 g e n e r a l l y r e q u i
0065320 r e d t h a t S E T F I L E
0065340 I N F O r e c o g n i z e a
0065360 n y a t t r i b u t e s a t
0065400 a l l 023 N I L L i s a p
0065420 e r f e c t l y g o o d f i
0065440 l l e r f o r t h i s s l
0065460 o t . M o s t d e v i c e
0065500 s r e c o g n i z e n o m
0065520 o r e t h a n T Y P E a n
0065540 d C R E A T I O N D A T E (
0065560 I C R E A T I O N D A T E ) ,
0065600 a n d e v e n t h o s e a
0065620 r e n o t v e r y i m p o
0065640 r t a n t , a s m o s t a
0065660 p p l i c a t i o n s s e t
0065700 t h o s e a t t r i b u t e s
0065720 i n t h e P A R A M E T E
0065740 R S a r g u m e n t t o O
0065760 P E N F I L E w h e n c r e
0066000 a t i n g a f i l e . \r A T
0066020 T R I B U T E = L E N G T H
0066040 i m p l i e s a c t u a l l
0066060 y t r u n c a t i n g ( o r
0066100 l e n g t h e n i n g ) t h
0066120 e f i l e ; h o w e v e r ,
0066140 t h e S E T F I L E I N F O
0066160 n e e d n o t h a n d l e
0066200 t h i s i t s e l f 023 i f
0066220 i t r e t u r n s N I L ,
0066240 t h e n t h e g e n e r i c
0066260 f i l e s y s t e m w i l
0066300 l a t t e m p t t o u s e
0066320 t h e S E T E O F P T R m
0066340 e t h o d i n s t e a d . \r T
0066360 h e f o l l o w i n g o p e
0066400 r a t i o n s a r e o n l y
0066420 r e q u i r e d o f r a n
0066440 d o m a c c e s s s t r e a
0066460 m s . T h e y d e f a u l
0066500 t t o t h e f u n c t i o
0066520 n \ I S . N O T . R A N D A C
0066540 C E S S P , w h i c h c a u
0066560 s e s a ` ` S t r e a m i
0066600 s n o t r a n d a c c e s s
0066620 p ' ' e r r o r w h e n c
0066640 a l l e d . \r ( G E T F I L E P
0066660 T R S T R E A M ) \r R e t u r
0066700 n s t h e c u r r e n t f
0066720 i l e p o i n t e r ( b y t
0066740 e p o s i t i o n ) i n S
0066760 T R E A M . T h e f i l e
0067000 p o i n t e r i s z e r o
0067020 w h e n t h e s t r e a m
0067040 i s o p e n e d ( e x c e
0067060 p t f o r A C C E S S =
0067100 A P P E N D ) , a n d i s
0067120 i n c r e m e n t e d b y o
0067140 n e f o r e a c h b y t e
0067160 r e a d . \r A l t h o u g h
0067200 t h i s o p e r a t i o n i
0067220 s o n l y a b s o l u t e l
0067240 y r e q u i r e d f o r r
0067260 a n d o m a c c e s s s t r
0067300 e a m s , i t i s d e s i
0067320 r a b l e t o s u p p l y
0067340 i t f o r o t h e r s t r
0067360 e a m s w h e r e p o s s i
0067400 b l e . F o r e x a m p l
0067420 e , w h e n r e a d i n g
0067440 a f i l e s e q u e n t i a
0067460 l l y t h r o u g h P u p F
0067500 t p , t h e s t r e a m c
0067520 a n c o u n t t h e b y t
0067540 e s a s t h e y g o b y
0067560 a n d t h u s g i v e a
0067600 n a c c u r a t e v a l u e
0067620 f o r G E T F I L E P T R .
0067640 I f a s t r e a m h a
0067660 s n o i d e a a t a l l
0067700 o f p o s i t i o n , i t
0067720 c a n m a k e i t s G E
0067740 T F I L E P T R b e t h e
0067760 f u n c t i o n Z E R O a n
0070000 d t h e r e b y a t l e a
0070020 s t a v o i d b r e a k s
0070040 f r o m c o d e t h a t c
0070060 a l l s G E T F I L E P T R
0070100 c a r e l e s s l y . \r ( G E T
0070120 E O F P T R S T R E A M ) \r R
0070140 e t u r n s t h e f i l e
0070160 p o i n t e r o f t h e e
0070200 n d o f S T R E A M , i .
0070220 e . , t h e f i l e p o i
0070240 n t e r t h a t G E T F I L
0070260 E P T R w o u l d r e t u r
0070300 n a f t e r t h e l a s t
0070320 b y t e o f S T R E A M
0070340 i s r e a d . S a m e a
0070360 s t h e L E N G T H a t t
0070400 r i b u t e f o r a s t r
0070420 e a m t h a t r e p r e s e
0070440 n t s a f i l e . O f
0070460 c o u r s e , n o n - r a n d
0070500 o m a c c e s s s t r e a m
0070520 s m a y h a v e n o i d
0070540 e a w h e r e t h e e n d
0070560 i s , a n d c a u s i n g
0070600 a n o n - r a n d a c c e s
0070620 s p e r r o r i s p e r f
0070640 e c t l y a c c e p t a b l e
0070660 . \r ( S E T F I L E P T R S T
0070700 R E A M B Y T E N U M B E R )
0070720 \r S e t s t h e f i l e p
0070740 o i n t e r o f S T R E A M
0070760 t o b e B Y T E N U M B E
0071000 R . T h e s p e c i a l
0071020 v a l u e B Y T E N U M B E R
0071040 = 233 1 m e a n s t h e
0071060 e n d o f t h e s t r e a
0071100 m ; o t h e r n e g a t i v
0071120 e v a l u e s a r e i l l
0071140 e g a l . \r S E T F I L E P T R
0071160 b e y o n d t h e e n d
0071200 o f t h e s t r e a m i s
0071220 p e r m i s s i b l e , b u
0071240 t i t h a s n o i m m e
0071260 d i a t e e f f e c t b e y
0071300 o n d c h a n g i n g t h e
0071320 l o g i c a l f i l e p o
0071340 i n t e r . A t t e m p t i
0071360 n g t o t h e n B I N c
0071400 a u s e s a n E O F e r r
0071420 o r . A t t e m p t i n g
0071440 t o B O U T ( f o r a f
0071460 i l e o p e n f o r w r i
0071500 t e ) s h o u l d e x t e n
0071520 d t h e f i l e , s o t
0071540 h a t i t s e o f i s i
0071560 m m e d i a t e l y b e y o n
0071600 d t h e n e w l y B O U T
0071620 e d b y t e . \r A s w i
0071640 t h G E T F I L E P T R , t
0071660 h e r e i s n o r e q u i
0071700 r e m e n t t h a t t h i s
0071720 w o r k o n n o n - r a n
0071740 d o m a c c e s s s t r e a
0071760 m s , a n d i t m a y b
0072000 e c o m p l e t e l y i m p
0072020 o s s i b l e o n s o m e
0072040 o f t h e m . H o w e v e
0072060 r , f o r t h o s e n o n
0072100 - r a n d o m a c c e s s s
0072120 t r e a m s t h a t p e r f
0072140 o r m G E T F I L E P T R ,
0072160 i t i s p o s s i b l e t
0072200 o f a k e S E T F I L E P T
0072220 R f o r v a l u e s l a r
0072240 g e r t h a n t h e c u r
0072260 r e n t f i l e p o i n t e
0072300 r b y s k i p p i n g s o
0072320 m e n u m b e r o f b y t
0072340 e s i n t h e f i l e ,
0072360 e . g . , b y p e r f o r m
0072400 i n g ( R P T Q ( D I F F E
0072420 R E N C E B Y T E N U M B E R
0072440 ( G E T F I L E P T R S T R
0072460 E A M ) ) ( B I N S T R E A
0072500 M ) ) . T h e r e a r e
0072520 s o m e a p p l i c a t i o n
0072540 s f o r w h i c h f o r w
0072560 a r d S E T F I L E P T R i
0072600 s a l l t h e r a n d o m
0072620 a c c e s s t h a t i s
0072640 a c t u a l l y r e q u i r e
0072660 d , s o i t i s n i c e
0072700 t o b e a b l e t o a
0072720 c c o m m o d a t e s u c h
0072740 a p p l i c a t i o n s . \r ( B
0072760 A C K F I L E P T R S T R E A
0073000 M ) \r B a c k s u p t h e
0073020 f i l e p o i n t e r i n
0073040 S T R E A M b y o n e b y
0073060 t e . F u n c t i o n a l l
0073100 y t h e s a m e a s ( S
0073120 E T F I L E P T R S T R E A M
0073140 ( S U B 1 ( G E T F I L E P
0073160 T R S T R E A M ) ) , b u t
0073200 m a y b e p o s s i b l e
0073220 o n n o n - r a n d o m a
0073240 c c e s s s t r e a m s b y
0073260 m a i n t a i n i n g a o
0073300 n e - c h a r a c t e r b u f
0073320 f e r , w h i c h i s a l
0073340 l t h e b a c k i n g u p
0073360 t h i s o p e r a t i o n
0073400 i s f o r m a l l y r e q u
0073420 i r e d t o p e r f o r m .
0073440 I b e l i e v e t h e
0073460 m a i n u s e f o r t h i
0073500 s i s i n R E A D , w h
0073520 i c h n e e d s t o b a c
0073540 k u p t h e s t r e a m
0073560 o n e c h a r a c t e r w h
0073600 e n , f o r e x a m p l e ,
0073620 i t r e a d s a b r e a
0073640 k c h a r a c t e r t e r m
0073660 i n a t i n g a n a t o m .
0073700 \r ( S E T E O F P T R S T R E
0073720 A M L E N G T H ) \r C h a n g
0073740 e s t h e l e n g t h o f
0073760 S T R E A M t o b e L E
0074000 N G T H , i . e . , ` ` s e
0074020 t s ' ' i t s e n d o f
0074040 f i l e p o i n t e r . T
0074060 h i s m a y r e q u i r e
0074100 l e n g t h e n i n g o r t
0074120 r u n c a t i n g t h e f i
0074140 l e . U s e d b y t h e
0074160 f u n c t i o n \ S E T E O
0074200 F P T R a n d b y S E T F
0074220 I L E I N F O f o r a t t r
0074240 i b u t e L E N G T H w h e
0074260 n t h e d e v i c e ' s S
0074300 E T F I L E I N F O m e t h o
0074320 d d o e s n ' t h a n d l e
0074340 i t . \r T h e f o l l o w i
0074360 n g t h r e e f i e l d s
0074400 a r e p l a c e h o l d e r
0074420 s f o r p o s s i b l e f
0074440 u t u r e e x t e n s i o n s
0074460 . T h e s e f i e l d s
0074500 a r e n o t c u r r e n t l
0074520 y u s e d a t a l l : \r (
0074540 L A S T C S T R E A M ) \r R e
0074560 t u r n s t h e l a s t c
0074600 h a r a c t e r r e a d f r
0074620 o m S T R E A M , i . e . ,
0074640 t h e l a s t b y t e t
0074660 h a t w a s B I N e d , a
0074700 s a c h a r a c t e r .
0074720 L A S T C i s c u r r e n t
0074740 l y i m p l e m e n t e d v
0074760 i a B A C K F I L E P T R . \r
0075000 ( F R E E P A G E C O U N T H
0075020 O S T / D I R D E V I C E ) \r
0075040 I n t e n d e d u s e i s
0075060 t o r e t u r n t h e n u
0075100 m b e r o f f r e e p a g
0075120 e s o n H O S T / D I R .
0075140 M a y b e f o l d e d i
0075160 n t o a g e n e r a l G E
0075200 T / S E T d e v i c e / d i r
0075220 e c t o r y i n f o o p e r
0075240 a t i o n . \r ( M A K E D I R E
0075260 C T O R Y H O S T / D I R D
0075300 E V I C E ) \r I n t e n d e d
0075320 u s e i s t o c r e a t e
0075340 a n e w d i r e c t o r y
0075360 H O S T / D I R . \r T h e r
0075400 e m a i n i n g f i e l d s
0075420 i n t h e F D E V a r e
0075440 f o r b u f f e r e d a n d
0075460 p a g e - m a p p e d s t r
0075500 e a m s , a n d a r e i g
0075520 n o r e d f o r n o n - b u
0075540 f f e r e d d e v i c e s .
0075560 T h e s e f i e l d s a r
0075600 e d e s c r i b e d i n s
0075620 e p a r a t e s e c t i o n s
0075640 . \r S t r e a m s \r T h e f o
0075660 l l o w i n g f i e l d s a
0075700 r e u s e d b y a l l s
0075720 t r e a m s : \r D E V I C E \t P
0075740 o i n t e r t o t h i s s
0075760 t r e a m ' s F D E V . \r F U
0076000 L L F I L E N A M E \t ` ` F u l
0076020 l ' ' n a m e b y w h i c
0076040 h t h i s f i l e i s k
0076060 n o w n t o t h e u s e r
0076100 . S h o u l d b e a n
0076120 u p p e r c a s e l i t a t o
0076140 m , f u l l y q u a l i f i
0076160 e d s o t h a t g i v i n
0076200 g t h e s a m e n a m e
0076220 b a c k t o t h e f i l e
0076240 s y s t e m s h o u l d p
0076260 r o d u c e t h e s a m e
0076300 f i l e ( t o t h e e x t
0076320 e n t t h a t t h e d e v
0076340 i c e c a n s u p p o r t
0076360 s u c h u n i q u e n e s s )
0076400 . I s N I L f o r u n
0076420 n a m e d s t r e a m s . \r F
0076440 U L L N A M E \t A c c e s s f
0076460 i e l d . I s t h e s a
0076500 m e a s F U L L F I L E N A
0076520 M E , u n l e s s t h a t
0076540 i s N I L , i n w h i c h
0076560 c a s e i t i s t h e
0076600 s t r e a m i t s e l f .
0076620 T h i s a v o i d s t h e
0076640 c i r c u l a r i t y t h a t
0076660 w o u l d r e s u l t i f
0076700 t h e F U L L F I L E N A M
0076720 E f i e l d c o n t a i n e
0076740 d t h e s t r e a m d a t
0076760 u m . \r N A M E D P \t A c c e s
0077000 s f i e l d . I s T i
0077020 f t h e s t r e a m s i s
0077040 n a m e d , i . e . , i t
0077060 s F U L L F I L E N A M E i
0077100 s n o n - N I L . \r A C C E S
0077120 S B I T S \t C o n t a i n s a
0077140 n u m e r i c c o d e d e
0077160 s c r i b i n g w h a t a c
0077200 c e s s m o d e t h e f i
0077220 l e i s o p e n f o r :
0077240 t h e r e a r e r e a d ,
0077260 w r i t e a n d a p p e n d
0077300 b i t s . T h i s f i e
0077320 l d i s u s u a l l y a c
0077340 c e s s e d i n d i r e c t l
0077360 y v i a t h e A C C E S S
0077400 f i e l d . H o w e v e r
0077420 , t h e r e a r e m a c r
0077440 o s f o r r e f e r r i n g
0077460 t o p a r t i c u l a r t
0077500 y p e s o f a c c e s s u
0077520 s i n g m o r e e f f i c i
0077540 e n t b i t t e s t o p e
0077560 r a t i o n s : \r ( O P E N E D
0077600 S T R E A M ) \t A C C E S S
0077620 i s n o t N I L . \r ( R E A
0077640 D A B L E S T R E A M ) \t R e
0077660 a d b i t i s o n : A C
0077700 C E S S i s I N P U T o r
0077720 B O T H . \r ( R E A D O N L Y
0077740 S T R E A M ) \t O n l y t h
0077760 e r e a d b i t i s o n
0100000 : A C C E S S i s I N P U
0100020 T . \r ( A P P E N D A B L E S
0100040 T R E A M ) \t A p p e n d b i
0100060 t i s o n : A C C E S S
0100100 i s O U T P U T , B O T H
0100120 o r A P P E N D . \r ( A P P E
0100140 N D O N L Y S T R E A M ) \t O
0100160 n l y t h e a p p e n d b
0100200 i t i s o n : A C C E S S
0100220 i s A P P E N D . \r ( D I R
0100240 T Y A B L E S T R E A M ) \t A
0100260 p p e n d o r w r i t e b
0100300 i t i s o n : A C C E S S
0100320 i s O U T P U T , B O T H
0100340 o r A P P E N D . Y e s
0100360 , t h i s i s o p e r a t
0100400 i o n a l l y t h e s a m e
0100420 a s A P P E N D A B L E ,
0100440 g i v e n t h e f o u r p
0100460 o s s i b l e v a l u e s o
0100500 f A C C E S S . \r ( O V E R W
0100520 R I T E A B L E S T R E A M )
0100540 \t W r i t e b i t i s o n
0100560 : A C C E S S i s O U T P
0100600 U T o r B O T H . \r ( W R I
0100620 T E A B L E S T R E A M ) \t W
0100640 r i t e b i t i s o n ,
0100660 o r a p p e n d b i t i s
0100700 o n a n d f i l e i s
0100720 a t E O F . A v o i d u
0100740 s i n g t h i s o n e , i
0100760 t ' s a l i t t l e s t r
0101000 a n g e . \r A C C E S S \t A c c
0101020 e s s f i e l d f o r r e
0101040 f e r r i n g t o t h e A
0101060 C C E S S B I T S f i e l d
0101100 s y m b o l i c a l l y . I
0101120 t s v a l u e i s o n e
0101140 o f t h e l e g a l v a l
0101160 u e s o f t h e A C C E S
0101200 S a r g u m e n t t o O P
0101220 E N F I L E : I N P U T , O
0101240 U T P U T , B O T H , A P P
0101260 E N D ; o r N I L w h e n
0101300 t h e s t r e a m i s c
0101320 l o s e d . R e p l a c i n
0101340 g t h i s f i e l d h a s
0101360 t h e s i d e e f f e c t
0101400 o f s e t t i n g t h e
0101420 B I N A B L E , B O U T A B L
0101440 E , S T R M B I N F N a n d
0101460 S T R M B O U T F N f i e l
0101500 d s a p p r o p r i a t e l y
0101520 ( f r o m t h e c o r r e
0101540 s p o n d i n g d e v i c e
0101560 f i e l d s , o r t o v a
0101600 l u e s c o n s i s t e n t
0101620 w i t h n o a c c e s s ) .
0101640 \r U S E R C L O S E A B L E \t F
0101660 l a g , t r u e i f t h e
0101700 s t r e a m c a n b e c
0101720 l o s e d b y C L O S E F .
0101740 D e f a u l t i s T ,
0101760 b u t i s N I L f o r s
0102000 u c h t h i n g s a s d r
0102020 i b b l e f i l e s a n d
0102040 t h e t e r m i n a l . \r U S
0102060 E R V I S I B L E \t F l a g ,
0102100 t r u e i f t h e s t r e
0102120 a m i s t o b e l i s t
0102140 e d i n t h e r e s u l t
0102160 o f ( O P E N P ) . D e
0102200 f a u l t i s T , b u t
0102220 i s N I L f o r s u c h
0102240 t h i n g s a s d r i b b l
0102260 e f i l e s a n d t h e
0102300 t e r m i n a l . \r B I N A B L
0102320 E \t T r u e i f B I N m i
0102340 c r o c o d e c a n b e u
0102360 s e d . N o r m a l l y s
0102400 e t a u t o m a t i c a l l y
0102420 f r o m F D B I N A B L E
0102440 w h e n i n p u t a c c e s
0102460 s i s s e t . \r B O U T A B
0102500 L E \t T r u e i f B O U T
0102520 m i c r o c o d e c a n b e
0102540 u s e d . N o r m a l l y
0102560 s e t a u t o m a t i c a l
0102600 l y f r o m F D B O U T A B
0102620 L E w h e n o u t p u t a
0102640 c c e s s i s s e t . \r E X
0102660 T E N D A B L E \t T r u e i f
0102700 B O U T c a n e x t e n d
0102720 t h e b u f f e r w h e n
0102740 C O F F S E T r e a c h e s
0102760 C B U F S I Z E . O b s o
0103000 l e t e . \r S T R M B I N F N \t
0103020 F u n c t i o n c a l l e d
0103040 b y B I N . T h i s i s
0103060 n o r m a l l y s e t i n
0103100 d i r e c t l y a s a s i
0103120 d e e f f e c t o f s e t
0103140 t i n g t h e A C C E S S
0103160 f i e l d . S e t t i n g
0103200 A C C E S S t o a n i n p
0103220 u t a c c e s s ( I N P U T
0103240 o r B O T H ) s e t s t
0103260 h e S T R M B I N F N t o
0103300 b e t h e s t r e a m ' s
0103320 d e v i c e ' s B I N m e t
0103340 h o d . S e t t i n g t o
0103360 a n y o t h e r a c c e s
0103400 s s e t s t h e S T R M B
0103420 I N F N t o b e a ` ` f
0103440 i l e n o t o p e n ' ' t
0103460 r a p . \r S T R M B O U T F N \t
0103500 F u n c t i o n c a l l e d
0103520 b y B O U T . A s w i t
0103540 h S T R M B I N F N , t h i
0103560 s i s n o r m a l l y s e
0103600 t i n d i r e c t l y ( f r
0103620 o m t h e d e v i c e ' s
0103640 B O U T m e t h o d ) a s
0103660 a s i d e e f f e c t o f
0103700 s e t t i n g t h e A C C
0103720 E S S f i e l d . \r O U T C H
0103740 A R F N \t F u n c t i o n c a
0103760 l l e d t o o u t p u t a
0104000 s i n g l e b y t e . T
0104020 h i s i s l i k e S T R M
0104040 B O U T F N , e x c e p t f
0104060 o r b e i n g o n e l e v
0104100 e l h i g h e r : i t i s
0104120 i n t e n d e d f o r t e
0104140 x t o u t p u t . H e n c
0104160 e , t h i s f u n c t i o n
0104200 s h o u l d c o n v e r t
0104220 ( C H A R C O D E E O L ) i
0104240 n t o t h e s t r e a m ' s
0104260 a c t u a l e n d o f l
0104300 i n e s e q u e n c e , a n
0104320 d s h o u l d a d j u s t
0104340 C H A R P O S I T I O N a p p
0104360 r o p r i a t e l y b e f o r
0104400 e i n v o k i n g t h e s
0104420 t r e a m ' s S T R M B O U T
0104440 F N t o a c t u a l l y p
0104460 u t t h e c h a r a c t e r
0104500 . D e f a u l t s t o \
0104520 F I L E O U T C H A R F N .
0104540 T h e O U T C H A R F N f o
0104560 r t h e d i s p l a y a d
0104600 d i t i o n a l l y w o r r i
0104620 e s a b o u t s u c h t h
0104640 i n g s a s E C H O C O N T
0104660 R O L . \r C H A R P O S I T I O
0104700 N \t C u r r e n t h o r i z o
0104720 n t a l c h a r a c t e r p
0104740 o s i t i o n i n t h e s
0104760 t r e a m . I n c r e m e n
0105000 t e d ( a n d r e s e t t
0105020 o z e r o ) b y O U T C H
0105040 A R F N . U s e d b y t
0105060 h e f u n c t i o n P O S I
0105100 T I O N . \r L I N E L E N G T H
0105120 \t M a x i m u m l i n e l e
0105140 n g t h o f t h e s t r e
0105160 a m , i n c h a r a c t e r
0105200 s . U s e d b y t h e
0105220 f u n c t i o n L I N E L E N
0105240 G T H . D e f a u l t s (
0105260 a t c r e a t i o n t i m e
0105300 ) t o t h e v a l u e o
0105320 f t h e g l o b a l v a r
0105340 i a b l e F I L E L I N E L E
0105360 N G T H . \r E O L C O N V E N T
0105400 I O N \t T h e s t r e a m ' s
0105420 e n d o f l i n e c o n
0105440 v e n t i o n : t h e m a n
0105460 n e r i n w h i c h ` ` e
0105500 n d o f l i n e ' ' i s
0105520 e n c o d e d o n t h i s
0105540 s t r e a m . T h a t i s
0105560 , o u t p u t o f a n e
0105600 n d o f l i n e ( f u n c
0105620 t i o n T E R P R I ) p r o
0105640 d u c e s t h e s t r e a m
0105660 ' s e n d o f l i n e s
0105700 e q u e n c e , a n d o n
0105720 i n p u t , t h e s t r e a
0105740 m ' s e n d o f l i n e
0105760 s e q u e n c e i s c o n v
0106000 e r t e d t o ( C H A R C O
0106020 D E E O L ) b y R E A D C
0106040 . T h i s i s n o t n
0106060 e c e s s a r i l y t h e s
0106100 a m e a s t h e w a y t
0106120 h a t e n d o f l i n e
0106140 i s e n c o d e d i n t h
0106160 e a c t u a l f i l e w r
0106200 i t t e n b y , s a y , a
0106220 f i l e s e r v e r . F
0106240 o r e x a m p l e , L i s p
0106260 m i g h t o p e n a s t
0106300 r e a m t o a T e n e x
0106320 f i l e s e r v e r w i t h
0106340 E O L C O N V E N T I O N o
0106360 f C R , w h i l e t h e
0106400 s e r v e r m i g h t c h o
0106420 o s e t o t a k e e a c h
0106440 o f t h e C R s i n t
0106460 h e s t r e a m a n d a c
0106500 t u a l l y s t o r e a C
0106520 R , L F s e q u e n c e i
0106540 n t h e p h y s i c a l f
0106560 i l e . \r T h e c o n v e n t
0106600 i o n i s e n c o d e d a
0106620 s a t w o - b i t f i e l
0106640 d ; t h e c o n s t a n t s
0106660 C R . E O L C , L F . E O L
0106700 C , C R L F . E O L C c a n
0106720 b e u s e d t o r e f e
0106740 r t o t h e c u r r e n t
0106760 l y k n o w n v a l u e s
0107000 s y m b o l i c a l l y . D
0107020 e f a u l t i n I n t e r l
0107040 i s p - D i s C R . E O L C
0107060 . \r E N D O F S T R E A M O P \t
0107100 F u n c t i o n o f o n e
0107120 a r g u m e n t ( t h e s t
0107140 r e a m ) c a l l e d w h e
0107160 n a n a t t e m p t t o
0107200 r e a d b e y o n d t h e
0107220 e n d o f f i l e o c c u
0107240 r s . I f t h i s f u n
0107260 c t i o n r e t u r n s s o
0107300 m e t h i n g , i t s h o u
0107320 l d b e i n t e r p r e t e
0107340 d a s a v a l u e t o
0107360 r e t u r n f r o m B I N
0107400 ( t h e v a l u e T i s
0107420 c u r r e n t l y p r o h i b
0107440 i t e d ) . D e f a u l t s
0107460 t o \ E O S E R R O R , w
0107500 h i c h c a u s e s a n E
0107520 N D O F F I L E e r r o r
0107540 . \r V A L I D A T I O N \t P o i
0107560 n t e r f i e l d , s o m e
0107600 c o m p a c t e n c o d i n
0107620 g o f t h e s t a t e o
0107640 f t h e f i l e s u c h
0107660 t h a t i f t h e f i l e
0107700 ' s c o n t e n t c h a n g
0107720 e s , t h e V A L I D A T I
0107740 O N c h a n g e s . T h e
0107760 f i l e ' s I C R E A T I O
0110000 N D A T E a t t r i b u t e
0110020 u s u a l l y w o r k s w e
0110040 l l e n o u g h . T h e
0110060 o n l y u s e f o r t h i
0110100 s f i e l d i s t o c h
0110120 e c k w h e t h e r t h e
0110140 f i l e c h a n g e d o v e
0110160 r L O G O U T , e t c . 023 i
0110200 f t h e V A L I D A T I O N
0110220 o f t h e s t r e a m r
0110240 e t u r n e d f r o m R E O
0110260 P E N F I L E i s E Q U A L
0110300 t o t h e V A L I D A T I
0110320 O N o f t h e s t r e a m
0110340 o p e n b e f o r e L O G
0110360 O U T , t h e s t r e a m
0110400 i s a s s u m e d t o b e
0110420 u n c h n a g e d . T h i
0110440 s w i l l p r o b a b l y
0110460 b e t h e s o l e c o n c
0110500 e r n o f t h e d e v i c
0110520 e w h e n w e g o t o
0110540 m u l t i p l e s t r e a m s
0110560 p e r f i l e . \r B Y T E S
0110600 I Z E \t B y t e s i z e o f
0110620 t h e f i l e , i . e . ,
0110640 w h a t B I N a n d B O
0110660 U T t r a f f i c i n .
0110700 D e f a u l t s t o 8 .
0110720 T h i s f i e l d i s n o
0110740 t u s e d b y m a n y ;
0110760 t h e r e a r e p r o b a b
0111000 l y a l o t o f t h i n
0111020 g s t h a t w o n ' t w o
0111040 r k i f t h e b y t e s
0111060 i z e i s n o t 8 . \r O T
0111100 H E R P R O P S \t L i s t i n
0111120 p r o p e r t y l i s t f
0111140 o r m a t u s e d b y t h
0111160 e f u n c t i o n S T R E A
0111200 M P R O P . A n a l o g o u
0111220 s t o W I N D O W P R O P ,
0111240 e t c . \r I M A G E O P S \t I
0111260 m a g e o p e r a t i o n s
0111300 v e c t o r ( o b j e c t o
0111320 f t y p e I M A G E O P S )
0111340 f o r u s e o f d e v i
0111360 c e - i n d e p e n d e n t g
0111400 r a p h i c s o p e r a t i o
0111420 n s , s u c h a s D S P X
0111440 P O S I T I O N , D S P F O N
0111460 T . D e f a u l t s t o
0111500 \ N O I M A G E O P S , a v
0111520 e c t o r s u i t a b l y d
0111540 e f i n e d f o r n o n - d
0111560 i s p l a y d e v i c e s .
0111600 S e e t h e i m p l e m e
0111620 n t o r s ' m a n u a l c h
0111640 a p t e r D e v i c e - I n d
0111660 e p e n d e n t G r a p h i c
0111700 s . \r I M A G E D A T A \t D e v
0111720 i c e - d e p e n d e n t d a
0111740 t a f o r u s e b y I M
0111760 A G E O P S . \r R E V A L I D
0112000 A T E F L G \t F l a g . T h
0112020 e s t a n d a r d u s e o
0112040 f t h i s f l a g i s t
0112060 o s o l v e a p r o b l e
0112100 m w i t h c o r r e c t l y
0112120 m a i n t a i n i n g t h e
0112140 c r e a t i o n d a t e .
0112160 T h e p r o b l e m i s
0112200 t h a t t h e d e f i n i t
0112220 i o n o f ` ` c r e a t i o
0112240 n d a t e ' ' i s t h a t
0112260 t h e c r e a t i o n d a
0112300 t e c h a n g e s w h e n e
0112320 v e r t h e c o n t e n t s
0112340 o f t h e f i l e c h a
0112360 n g e . I f f o l l o w e
0112400 d l i t e r a l l y , t h i
0112420 s w o u l d m e a n , f o
0112440 r e x a m p l e , t h a t
0112460 e v e r t i m e y o u w r
0112500 o t e o u t a p a g e o
0112520 f a { D S K } f i l e ,
0112540 y o u w o u l d a l s o h
0112560 a v e t o r e w r i t e i
0112600 t s l e a d e r p a g e w
0112620 i t h a n e w c r e a t i
0112640 o n d a t e . H o w e v e
0112660 r , i t s u f f i c e s i
0112700 n p r a c t i c e t o o n
0112720 l y c h a n g e t h e c r
0112740 e a t i o n d a t e w h e n
0112760 i t w o u l d m a t t e r
0113000 , i . e . , w h e n t h e
0113020 r e w o u l d b e a n y
0113040 p o s s i b i l i t y o f s
0113060 o m e a g e n t o t h e r
0113100 t h a n t h e c u r r e n t
0113120 l y r u n n i n g L i s p
0113140 t o s e e t h e c h a n g
0113160 e . U s u a l l y , t h i
0113200 s m e a n s t h e o n l y
0113220 t i m e t o w o r r y a
0113240 b o u t i s w h e n t h e
0113260 L i s p v m e m i s s a
0113300 v e d a n d a f i l e t
0113320 h a t w a s o p e n b e f
0113340 o r e t h e s a v e i s
0113360 w r i t t e n t o a g a i n
0113400 a f t e r w a r d s . \r \t T h
0113420 u s , t h e u s e o f t
0113440 h i s f l a g ( f o r t h
0113460 o s e d e v i c e s t h a t
0113500 c a r e ) i s a s f o l
0113520 l o w s : t h e d e v i c e
0113540 ' s B E F O R E x x x e v e
0113560 n t s s e t t h i s f l a
0113600 g t r u e f o r a n y s
0113620 t r e a m s o p e n o n t
0113640 h e d e v i c e . T h e n
0113660 , w h e n e v e r t h e d
0113700 e v i c e i s a b o u t t
0113720 o d o s o m e t h i n g t
0113740 h a t w o u l d c h a n g e
0113760 t h e f i l e ' s c o n t
0114000 e n t , e . g . , w r i t e
0114020 o u t a n e w p a g e ,
0114040 i t f i r s t t e s t s
0114060 R E V A L I D A T E F L G .
0114100 I f t h e f l a g i s t
0114120 r u e , i t u p d a t e s
0114140 t h e f i l e ' s c r e a t
0114160 i o n d a t e a n d c l e
0114200 a r s t h e f l a g . \r N O
0114220 N D E F A U L T D A T E F L G \t
0114240 F l a g . S t a n d a r d
0114260 u s e i s i n c o n j u n
0114300 c t i o n w i t h R E V A L
0114320 I D A T E F L G , t o m a r
0114340 k a f i l e t h a t w a
0114360 s o p e n e d i n a w a
0114400 y t h a t t h e u s e r
0114420 c o n s t r a i n e d t h e
0114440 c r e a t i o n d a t e o f
0114460 t h e f i l e ( e . g . ,
0114500 t h e P A R A M E T E R S
0114520 a r g u m e n t t o O P E N
0114540 F I L E i n c l u d e d a n
0114560 e x p l i c i t c r e a t i
0114600 o n d a t e , o r t h e
0114620 o p t i o n D O N ' T . C H A
0114640 N G E . D A T E ) . \r F 1 , F
0114660 2 , F 3 , F 4 , F 5 \t P
0114700 o i n t e r f i e l d s f o
0114720 r p r i v a t e u s e b y
0114740 t h e s t r e a m , t o
0114760 m a i n t a i n s t r e a m -
0115000 s p e c i f i c s t a t e o
0115020 f c o n c e r n o n l y t
0115040 o t h e d e v i c e . S
0115060 t r e a m c l i e n t s t h
0115100 a t w i s h t o h a n g
0115120 i n f o r m a t i o n o n a
0115140 s t r e a m w i t h o u t
0115160 r e g a r d t o w h a t k
0115200 i n d o f s t r e a m i t
0115220 i s s h o u l d u s e t
0115240 h e f u n c t i o n S T R E
0115260 A M P R O P . \r F W 6 , F W 7
0115300 , F W 8 , F W 9 \t 1 6 - b i
0115320 t w o r d f i e l d s f o
0115340 r p r i v a t e u s e b y
0115360 t h e s t r e a m . \r D
0115400 I R T Y B I T S \t O b s o l e t
0115420 e . \r E X T R A S T R E A M O P
0115440 \t ? \r B u f f e r e d S t r e
0115460 a m s \r B u f f e r e d s t r
0115500 e a m s a r e o n e s t h
0115520 a t c o n s t r a i n t h e
0115540 m s e l v e s t o o b e y
0115560 a s e t o f c o n v e n t
0115600 i o n s t h a t m a k e i
0115620 t e a s y f o r a n a g
0115640 e n t ( e . g . , m i c r o
0115660 c o d e ) t o p e r f o r m
0115700 i n p u t o r o u t p u t
0115720 o n t h e s t r e a m w
0115740 i t h o u t k n o w i n g a
0115760 b o u t t h e d e t a i l s
0116000 o f t h e s t r e a m ' s
0116020 p h y s i c a l i / o .
0116040 T h e s t r e a m m a i n t
0116060 a i n s a ` ` c u r r e n t
0116100 b u f f e r ' ' a n d t w
0116120 o i n d i c e s i n t o t
0116140 h a t b u f f e r , t h e
0116160 o f f s e t o f t h e n e
0116200 x t b y t e , a n d t h e
0116220 o f f s e t o f t h e e
0116240 n d o f t h e b u f f e r
0116260 . A s l o n g a s t h
0116300 e f o r m e r i n d e x i
0116320 s l e s s t h a n t h e
0116340 l a t t e r , t h e s t r e
0116360 a m g u a r a n t e e s t h
0116400 a t t h e b y t e s i n
0116420 t h e b u f f e r b e t w e
0116440 e n t h o s e i n d i c e s
0116460 a r e t h e t r u e c o
0116500 n t e n t s o f t h e f i
0116520 l e / s t r e a m s t a r t i
0116540 n g a t t h e c u r r e n
0116560 t f i l e p o i n t e r .
0116600 A d v a n c i n g t h e f
0116620 i r s t i n d e x e f f e c
0116640 t i v e l y a d v a n c e s
0116660 t h e f i l e p o i n t e r
0116700 . W h e n i t r e a c h
0116720 e s t h e s e c o n d i n
0116740 d e x , a s t r e a m - s p
0116760 e c i f i c o p e r a t i o n
0117000 i s c a l l e d t o ` `
0117020 r e f i l l ' ' t h e b u f
0117040 f e r . \r T h e f o l l o w i
0117060 n g f i e l d s a r e u s
0117100 e d b y b u f f e r e d s
0117120 t r e a m s : \r C O F F S E T \t
0117140 B y t e o f f s e t i n t
0117160 h e b u f f e r C B U F P T
0117200 R o f t h e n e x t B I
0117220 N o r B O U T . \r C B U F S
0117240 I Z E \t ` ` S i z e ' ' o f
0117260 t h e c u r r e n t b u f f
0117300 e r , i . e . , b y t e o
0117320 f f s e t t h a t i s o n
0117340 e b e y o n d t h e l a s
0117360 t b y t e . \r C B U F M A X S
0117400 I Z E \t F o r o u t p u t ,
0117420 t h e m a x i m u m s i z e
0117440 t h e b u f f e r c a n
0117460 b e w r i t t e n t o .
0117500 I f C O F F S E T r e a c h
0117520 e s C B U F S I Z E , b u t
0117540 C B U F S I Z E i s l e s
0117560 s t h a n C B U F M A X S I
0117600 Z E , t h e n t h e b u f
0117620 f e r c a n b e e x t e n
0117640 d e d . \r C B U F P T R \t P o i
0117660 n t e r t o c u r r e n t
0117700 b u f f e r . M u s t b e
0117720 v a l i d i f C O F F S E
0117740 T i s l e s s t h a n C
0117760 B U F S I Z E a n d B I N A
0120000 B L E o r B O U T A B L E
0120020 i s t r u e . I t i s
0120040 n o t n e c e s s a r y t h
0120060 a t t h i s ` ` b u f f e r
0120100 ' ' b e a n y t h i n g o
0120120 t h e r t h a n s o m e c
0120140 h u n k o f m e m o r y ,
0120160 a p o r t i o n o f w h i
0120200 c h c o n t a i n s i n t e
0120220 r e s t i n g d a t a . T
0120240 h u s , t h e b y t e s f
0120260 r o m o f f s e t C O F F S
0120300 E T t o C B U F S I Z E m
0120320 u s t b e v a l i d , b u
0120340 t C O F F S E T n e e d n
0120360 o t s t a r t a t z e r o
0120400 , n o r n e e d C B U F S
0120420 I Z E o r C B U F M A X S I
0120440 Z E c o i n c i d e w i t h
0120460 t h e e n d o f t h e
0120500 u n d e r l y i n g s t r u c
0120520 t u r e . \r C B U F D I R T Y \t
0120540 F l a g , t r u e i f c u
0120560 r r e n t b u f f e r h a s
0120600 b e e n w r i t t e n t o
0120620 . \r I n g e n e r a l , t h
0120640 e d e v i c e h a s s o l
0120660 e r e s p o n s i b i l i t y
0120700 f o r s e t t i n g C B U
0120720 F S I Z E , C B U F M A X S I
0120740 Z E , a n d C B U F P T R ;
0120760 g e n e r i c c o d e d o
0121000 e s n o t t o u c h t h o
0121020 s e . T h e f i e l d s
0121040 C O F F S E T a n d C B U F
0121060 D I R T Y c a n b e c h a
0121100 n g e d b y g e n e r i c
0121120 s t r e a m c l i e n t s a
0121140 s w e l l a s b y d e v
0121160 i c e - s p e c i f i c c o d
0121200 e . F o r e x a m p l e ,
0121220 c o d e t h a t s i m u l
0121240 a t e s a B I N i n c r e
0121260 m e n t s C O F F S E T ; c
0121300 o d e t h a t w r i t e s
0121320 d i r e c t l y t o t h e
0121340 s t r e a m ' s b u f f e r
0121360 s e t s C B U F D I R T Y t
0121400 r u e . \r T h e f o l l o w i
0121420 n g m e t h o d s a r e d
0121440 e f i n e d f o r d e v i c
0121460 e s i m p l e m e n t i n g
0121500 b u f f e r e d s t r e a m s
0121520 : \r ( G E T N E X T B U F F E R
0121540 S T R E A M W H A T F O R
0121560 N O E R R O R F L G ) \t [ D e v
0121600 i c e m e t h o d ] \r C a l l
0121620 e d w h e n S T R E A M n
0121640 e e d s t o h a v e i t s
0121660 b u f f e r f i x e d , i
0121700 . e . , t h e s t a t e o
0121720 f S T R E A M i s s u c h
0121740 t h a t B I N ( W H A T F
0121760 O R = R E A D ) o r B O
0122000 U T ( W H A T F O R = W R
0122020 I T E ) c a n n o t p r o c
0122040 e e d . T h i s m e t h o
0122060 d s h o u l d d o w h a t
0122100 e v e r i s n e c e s s a r
0122120 y t o a l l o w t h e o
0122140 p e r a t i o n t o p r o c
0122160 e e d . T h i s t y p i c
0122200 a l l y i n c l u d e s d i
0122220 s p o s i n g o f t h e c
0122240 u r r e n t b u f f e r s o
0122260 m e h o w ( i f G E T N E X
0122300 T B U F F E R w a s i n v o
0122320 k e d b e c a u s e t h e
0122340 b u f f e r w a s e x h a u
0122360 s t e d ) , a n d f e t c h
0122400 i n g a n e w b u f f e r
0122420 c o n s i s t e n t w i t h
0122440 S T R E A M ' s c u r r e n
0122460 t p o s i t i o n . \r I n t
0122500 h e c a s e o f W H A T F
0122520 O R = R E A D , G E T N E
0122540 X T B U F F E R r e t u r n s
0122560 T o n s u c c e s s , i
0122600 . e . , i f S T R E A M i
0122620 s n o t a t e n d o f
0122640 f i l e . W h e n S T R E
0122660 A M i s a t e n d o f
0122700 f i l e , G E T N E X T B U F
0122720 F E R s h o u l d t a k e
0122740 s t a n d a r d e n d o f
0122760 s t r e a m a c t i o n , r
0123000 e t u r n i n g w h a t e v e
0123020 r \ E O F . A C T I O N r e
0123040 t u r n s ( i f a n y t h i
0123060 n g ) . H o w e v e r , i
0123100 f N O E R R O R F L G i s
0123120 t r u e , G E T N E X T B U F
0123140 F E R s h o u l d j u s t
0123160 r e t u r n N I L i m m e d
0123200 i a t e l y . \r ( R E L E A S E
0123220 B U F F E R S T R E A M B U
0123240 F F E R ) \t [ D e v i c e m e
0123260 t h o d ] \r P e r f o r m s a
0123300 n y d e v i c e - s p e c i f
0123320 i c o p e r a t i o n r e q
0123340 u i r e d w h e n B U F F E
0123360 R , w h i c h i s t h e
0123400 c u r r e n t v a l u e o f
0123420 S T R E A M ' s C B U F P T
0123440 R f i e l d , i s ` ` r e
0123460 l e a s e d ' ' ( w h e n t
0123500 h e C B U F P T R f i e l d
0123520 i s r e p l a c e d ) .
0123540 T h i s i s u s e d s o
0123560 t h a t d i f f e r e n t p
0123600 a g e m a p - l i k e d e v i
0123620 c e s c a n s h a r e c e
0123640 r t a i n c o d e . F o r
0123660 e x a m p l e , i n t h e
0123700 c a s e o f p a g e m a p
0123720 p e d s t r e a m s , R E L
0123740 E A S E B U F F E R m a r k s
0123760 t h e b u f f e r d i r t
0124000 y i n t h e c a s e t h
0124020 a t t h e s t r e a m ' s
0124040 C B U F D I R T Y f i e l d
0124060 h a s b e e n s e t . \r T h
0124100 i s m e t h o d i s n o t
0124120 c u r r e n t l y u s e d .
0124140 \r T h e f u n c t i o n s \
0124160 B U F F E R E D . B I N , \ B
0124200 U F F E R E D . P E E K B I N ,
0124220 \ B U F F E R E D . B O U T ,
0124240 \ B U F F E R E D . B I N S
0124260 a n d \ B U F F E R E D . B O
0124300 U T S a r e s u p p l i e d
0124320 f o r u s e b y b u f f
0124340 e r e d s t r e a m s ; t h
0124360 e y a r e s t a n d a r d l
0124400 y u s e d t o i m p l e m
0124420 e n t t h e B I N , P E E
0124440 K B I N , B O U T , B L O C
0124460 K I N a n d B L O C K O U T
0124500 d e v i c e m e t h o d s .
0124520 I n a d d i t i o n , t
0124540 h e f u n c t i o n C O P Y
0124560 B Y T E S , w h e n p r e s
0124600 e n t e d w i t h a s o u
0124620 r c e s t r e a m t h a t
0124640 i s b u f f e r e d , u t i
0124660 l i z e s t h e G E T N E X
0124700 T B U F F E R m e t h o d t
0124720 o e f f i c i e n t l y c o
0124740 p y b y t e s t o t h e
0124760 d e s t i n a t i o n a b u
0125000 f f e r - f u l l a t a t
0125020 i m e . \r P a g e m a p p e d
0125040 S t r e a m s \r P a g e m a p p
0125060 e d s t r e a m s a r e a
0125100 p a r t i c u l a r k i n d
0125120 o f r a n d o m a c c e s
0125140 s B u f f e r e d s t r e a
0125160 m t h a t b u f f e r s i
0125200 t s d a t a i n u n i t s
0125220 o f p a g e s . T h e
0125240 d e v i c e p r o v i d e s
0125260 m e t h o d s t h a t r e a
0125300 d o r w r i t e d a t a
0125320 i n u n i t s o f p a g e
0125340 s , w h i l e s y s t e m -
0125360 s u p p l i e d P a g e m a p
0125400 p e d f u n c t i o n s h a
0125420 n d l e t h e r e s p o n s
0125440 i b i l i t i e s o f a B
0125460 u f f e r e d s t r e a m ,
0125500 a s w e l l a s m a n a g
0125520 i n g t h e f i l e p o i
0125540 n t e r f o r r a n d o m
0125560 a c c e s s . I n g e n e
0125600 r a l , a s t r e a m c a
0125620 n h a v e s e v e r a l p
0125640 a g e s o f a f i l e b
0125660 u f f e r e d a t a t i m
0125700 e , a l l o w i n g t h e
0125720 c o d e t o m a k e s o m
0125740 e e f f o r t t o m a k e
0125760 e f f i c i e n t u s e o
0126000 f m u l t i - p a g e d t r
0126020 a n s f e r s w h e r e a p
0126040 p l i c a b l e . \r T o c r e
0126060 a t e a p a g e m a p p e d
0126100 d e v i c e , c r e a t e
0126120 a n F D E V , f i l l i n
0126140 t h e n e c e s s a r y p
0126160 r i v a t e f i e l d s , t
0126200 h e n c a l l t h e f o l
0126220 l o w i n g f u n c t i o n :
0126240 \r ( \ M A K E . P M A P . D E V
0126260 I C E D E V I C E ) \t [ F u n
0126300 c t i o n ] \r F i l l s i n
0126320 f i e l d s i n t h e d e
0126340 v i c e a p p r o p r i a t e
0126360 f o r p a g e m a p p e d
0126400 d e v i c e s , a n d r e t
0126420 u r n s t h e u p d a t e d
0126440 d e v i c e . T h e f i
0126460 e l d s i t f i l l s a r
0126500 e t h e f l a g f i e l d
0126520 s F D B I N A B L E , F D B
0126540 O U T A B L E , R E S E T A B
0126560 L E , R A N D O M A C C E S S
0126600 P , P A G E M A P P E D , B
0126620 U F F E R E D ( a l l t r u
0126640 e ) , a n d t h e m e t h
0126660 o d s B I N , B O U T , P
0126700 E E K B I N , B L O C K I N ,
0126720 B L O C K O U T , R E A D P
0126740 , E O F P , G E T F I L E P
0126760 T R , B A C K F I L E P T R ,
0127000 S E T F I L E P T R , G E T
0127020 E O F P T R , S E T E O F P T
0127040 R , G E T N E X T B U F F E R
0127060 a n d F O R C E O U T P U T
0127100 . \r A P a g e m a p p e d d
0127120 e v i c e i s r e q u i r e
0127140 d t o s u p p l y t h e
0127160 f o l l o w i n g m e t h o d
0127200 s ( i n a d d i t i o n t
0127220 o t h o s e r e q u i r e d
0127240 o f a l l d e v i c e s
0127260 a n d n o t f i l l e d i
0127300 n b y \ M A K E . P M A P .
0127320 D E V I C E ) : \r ( R E A D P A
0127340 G E S S T R E A M F I R S T
0127360 P A G E # B U F F E R S ) \t [
0127400 D e v i c e m e t h o d ] \r C
0127420 a u s e s p a g e s o f S
0127440 T R E A M t o b e r e a d
0127460 i n t o B U F F E R S .
0127500 T h e f i r s t p a g e r
0127520 e a d i s F I R S T P A G E
0127540 # ( z e r o f o r t h e
0127560 f i r s t p a g e o f t h
0127600 e f i l e ) . B U F F E R
0127620 S i s e i t h e r a s i
0127640 n g l e p a g e - s i z e d
0127660 b u f f e r ( a V M E M P A
0127700 G E P ) , i n w h i c h c
0127720 a s e e x a c t l y o n e
0127740 p a g e i s r e a d , o r
0127760 i t i s a l i s t o f
0130000 s u c h b u f f e r s .
0130020 R E A D P A G E S r e t u r n
0130040 s t h e t o t a l n u m b
0130060 e r o f b y t e s r e a d
0130100 . I f t h e l a s t p
0130120 a g e r e a d i s n o t
0130140 a f u l l p a g e , R E A
0130160 D P A G E S s h o u l d z e
0130200 r o o u t t h e r e s t
0130220 o f i t s b u f f e r .
0130240 R E A D P A G E S c a n a s
0130260 s u m e t h a t t h e b u
0130300 f f e r s a r e p a g e - a
0130320 l i g n e d , a l t h o u g h
0130340 t h e y n e e d n o t b
0130360 e c o n s e c u t i v e . \r
0130400 ( W R I T E P A G E S S T R E
0130420 A M F I R S T P A G E # B U
0130440 F F E R S ) \t [ D e v i c e m
0130460 e t h o d ] \r W r i t e s d a
0130500 t a f r o m B U F F E R S
0130520 o u t t o S T R E A M .
0130540 T h e f i r s t p a g e w
0130560 r i t t e n i s F I R S T P
0130600 A G E # . B U F F E R S i
0130620 s a s w i t h R E A D P A
0130640 G E S . \r N e i t h e r R E A
0130660 D P A G E S n o r W R I T E
0130700 P A G E S a f f e c t s S T
0130720 R E A M ' s f i l e p o i n
0130740 t e r o r e n d o f f i
0130760 l e ; t h o s e a r e m a
0131000 n a g e d b y h i g h e r -
0131020 l e v e l p a g e m a p p e d
0131040 r o u t i n e s . W R I T
0131060 E P A G E S m i g h t , h o
0131100 w e v e r , w a n t t o l
0131120 o o k a t S T R E A M ' s
0131140 E P A G E a n d E O F F S E
0131160 T f i e l d s i f i t n
0131200 e e d s t o t a k e a n y
0131220 s p e c i a l a c t i o n
0131240 a r o u n d t h e e n d o
0131260 f t h e f i l e . I t
0131300 i s p o s s i b l e , f o r
0131320 n o p a r t i c u l a r l y
0131340 g o o d r e a s o n , f o
0131360 r R E A D P A G E S t o g
0131400 e t c a l l e d f o r a
0131420 p a g e b e y o n d t h e
0131440 e n d o f f i l e ; i n
0131460 f a c t , t h i s s t a n d
0131500 a r d l y h a p p e n s w h
0131520 e n w r i t i n g a n e w
0131540 f i l e . T h e R E A D
0131560 P A G E S m e t h o d i n
0131600 t h i s c a s e s h o u l d
0131620 j u s t c l e a r t h e
0131640 b u f f e r a n d r e t u r
0131660 n z e r o . \r ( T R U N C A T
0131700 E F I L E S T R E A M P A G
0131720 E # O F F S E T ) \t [ D e v i
0131740 c e m e t h o d ] \r T r u n c
0131760 a t e s S T R E A M s o t
0132000 h a t i t s e n d o f f
0132020 i l e i s P A G E # , O F
0132040 F S E T , w h i c h s h o u
0132060 l d b e d e f a u l t e d
0132100 t o S T R E A M ' s E P A G
0132120 E a n d E O F F S E T .
0132140 C a n b e u s e d t o e
0132160 i t h e r s h o r t e n o r
0132200 l e n g t h e n a f i l e
0132220 ; i f l e n g t h e n i n g
0132240 , t h e f i l e s h o u l
0132260 d b e p a d d e d w i t h
0132300 n u l l s . U s e d b y
0132320 \ P A G E D . S E T E O F P T
0132340 R a n d \ P A G E D . F O R
0132360 C E O U T P U T . A s o f
0132400 t h i s w r i t i n g t h
0132420 e r e a r e s t i l l b u
0132440 g s i n t h i s c o d e
0132460 i n c e r t a i n f u n n y
0132500 c a s e s , s u c h a s
0132520 w h e n y o u S E T F I L E
0132540 P T R b e y o n d e o f a
0132560 n d t h e n B O U T . \r T h
0132600 e f o l l o w i n g f i e l
0132620 d s o f a s t r e a m a
0132640 r e m e a n i n g f u l f o
0132660 r a p a g e m a p p e d d
0132700 e v i c e . T h e g e n e
0132720 r i c p a g e m a p p e d c
0132740 o d e s m a i n t a i n t h
0132760 e m a s o p e r a t i o n s
0133000 o n t h e f i l e a r e
0133020 p e r f o r m e d , b u t
0133040 t h e y s h o u l d a l l
0133060 b e i n i t i a l i z e d a
0133100 p p r o p r i a t e l y b y
0133120 t h e d e v i c e ' s O P E
0133140 N F I L E m e t h o d : \r C P
0133160 A G E \t F o r p a g e m a p p
0133200 e d s t r e a m s , t h e
0133220 c u r r e n t p a g e p o s
0133240 i t i o n i n t h e s t r
0133260 e a m . T o g e t h e r w
0133300 i t h C O F F S E T , t h i
0133320 s c o n s t i t u t e s t h
0133340 e s t r e a m ' s f i l e
0133360 p o i n t e r . T h e d e
0133400 v i c e ' s O P E N F I L E
0133420 m e t h o d s h o u l d s e
0133440 t C P A G E a n d C O F F
0133460 S E T t o z e r o , e x c
0133500 e p t f o r f i l e s o p
0133520 e n e d w i t h a c c e s s
0133540 A P P E N D , i n w h i c
0133560 h c a s e t h e y s h o u
0133600 l d b e s e t t o t h e
0133620 e n d o f f i l e . \r E P
0133640 A G E , E O F F S E T \t F o r
0133660 p a g e m a p p e d f i l e
0133700 s , t h e p a g e a n d
0133720 b y t e o f f s e t o f t
0133740 h e e n d o f f i l e .
0133760 N o t e t h a t t h i s
0134000 i s t h e l o g i c a l e
0134020 n d o f t h e f i l e ;
0134040 i t n e e d h a v e n o t
0134060 h i n g t o d o w i t h
0134100 t h e p h y s i c a l e n d
0134120 o f f i l e , e x c e p t
0134140 t h a t w h e n a f i l
0134160 e i s c l o s e d , t h e
0134200 d e v i c e s h o u l d s
0134220 e e t o i t t h a t i t
0134240 s l o g i c a l a n d p h
0134260 y s i c a l E O F s a r e
0134300 t h e s a m e ( n o r m a l
0134320 l y s e e n t o b y t h
0134340 e T R U N C A T E F I L E i
0134360 n s i d e o f \ C L E A R M
0134400 A P , b e l o w ) . I n
0134420 f a c t , a s a t y p i c
0134440 a l f i l e i s b e i n g
0134460 w r i t t e n , E P A G E
0134500 t e n d s t o s t a y s e
0134520 v e r a l p a g e s a h e a
0134540 d o f t h e p h y s i c a
0134560 l e n d o f f i l e b y
0134600 v i r t u e o f t h e f
0134620 a c t t h a t p a g e s a
0134640 r e b e i n g b u f f e r e
0134660 d b e f o r e b e i n g w
0134700 r i t t e n o u t . \r B U F F
0134720 S \t F o r p a g e m a p p e d
0134740 s t r e a m s , a p o i n
0134760 t e r t o t h e s t r e a
0135000 m ' s B U F F E R c h a i n
0135020 . I n i t i a l l y N I L
0135040 ( n o b u f f e r s a l l
0135060 o c a t e d ) . T h e d e
0135100 v i c e u s u a l l y h a s
0135120 n o d i r e c t i n t e r
0135140 e s t i n t h i s f i e l
0135160 d . \r M A X B U F F E R S \t F o
0135200 r p a g e m a p p e d s t r
0135220 e a m s , t h e m a x i m u
0135240 m n u m b e r o f b u f f
0135260 e r s d e s i r e d i n t
0135300 h e s t r e a m ' s B U F F
0135320 S c h a i n . I f t h e
0135340 c o d e n e e d s a n o t
0135360 h e r b u f f e r a n d t
0135400 h e r e a r e a l r e a d y
0135420 M A X B U F F E R S b u f f
0135440 e r s , i t w i l l t r y
0135460 t o r e c y c l e t h e
0135500 l e a s t r e c e n t l y r
0135520 e f e r e n c e d b u f f e r
0135540 . D e f a u l t s t o \
0135560 S T R E A M . D E F A U L T . M
0135600 A X B U F F E R S . T h e
0135620 u s e r c a n c h a n g e
0135640 t h i s f i e l d f o r a
0135660 n o p e n s t r e a m b y
0135700 c a l l i n g S E T F I L E
0135720 I N F O w i t h a t t r i b
0135740 u t e B U F F E R S . \r M U L
0135760 T I B U F F E R H I N T \t F l a
0136000 g . F o r p a g e m a p p
0136020 e d s t r e a m s , i s a
0136040 h i n t t o t h e p a g
0136060 e m a p c o d e t h a t t
0136100 h e d e v i c e p r e f e r
0136120 s t o t r a n s f e r d a
0136140 t a m o r e t h a n o n e
0136160 b u f f e r a t a t i m
0136200 e . I f t h i s f l a g
0136220 i s t r u e , t h e p a
0136240 g e m a p c o d e t r i e s
0136260 t o w r i t e o u t ( W
0136300 R I T E P A G E S ) m o r e
0136320 t h a n o n e b u f f e r
0136340 a t a t i m e w h e n t
0136360 h e o p p o r t u n i t y a
0136400 r i s e s . A s i m i l a
0136420 r i m p r o v e m e n t i s
0136440 p l a n n e d , b u t n o
0136460 t i m p l e m e n t e d , f
0136500 o r r e a d i n g m u l t i
0136520 p l e b u f f e r s a t a
0136540 t i m e . \r \r T h e f o l l
0136560 o w i n g f u n c t i o n s
0136600 a r e o f u s e f o r p
0136620 a g e m a p p e d d e v i c e
0136640 s : \r ( \ P A G E D . F O R C E
0136660 O U T P U T S T R E A M W A
0136700 I T F O R F I N I S H ) \t [ F u
0136720 n c t i o n ] \r T h i s f u n
0136740 c t i o n i m p l e m e n t s
0136760 t h e F O R C E O U T P U T
0137000 m e t h o d f o r p a g e
0137020 m a p p e d s t r e a m s :
0137040 i t c a u s e s a n y d i
0137060 r t y p a g e s t o b e
0137100 w r i t t e n o u t ( u s i
0137120 n g W R I T E P A G E S ) ,
0137140 t h e n c a l l s t h e T
0137160 R U N C A T E F I L E m e t h
0137200 o d t o s e t t h e e n
0137220 d o f f i l e . \r T h i s
0137240 f u n c t i o n i s n o r m
0137260 a l l y i n s t a l l e d a
0137300 s t h e F O R C E O U T P U
0137320 T m e t h o d b y t h e
0137340 f u n c t i o n \ M A K E . P
0137360 M A P . D E V I C E . H o w
0137400 e v e r , t h e d e v i c e
0137420 c a n o v e r r i d e t h
0137440 i s d e f a u l t ( b y s
0137460 u p p l y i n g i t s o w n
0137500 f u n c t i o n i n t h a
0137520 t f i e l d ) , i n w h i
0137540 c h c a s e i t m i g h t
0137560 w a n t t o c a l l t h
0137600 e f u n c t i o n \ P A G E
0137620 D . F O R C E O U T P U T e x
0137640 p l i c i t l y a s p a r t
0137660 o f i t s m o r e c o m
0137700 p r e h e n s i v e F O R C E
0137720 O U T P U T m e t h o d . \r T
0137740 h e r e i s a n u n p l e
0137760 a s a n t n e s s i n t h e
0140000 i m p l e m e n t a t i o n
0140020 o f p a g e m a p p e d d e
0140040 v i c e s t h a t s t e m s
0140060 f r o m t h e f a c t t
0140100 h a t o r i g i n a l l y a
0140120 l l d e v i c e s ( t h e
0140140 f e w t h a t e x i s t e d
0140160 i n t h e d i s t a n t
0140200 p a s t ) w e r e m a d e
0140220 t o s u p p o r t t h e P
0140240 M A P p a c k a g e , a m
0140260 e a n s w h e r e b y a p
0140300 r o g r a m m e r c o u l d
0140320 g e t d i r e c t a c c e s
0140340 s t o t h e b u f f e r s
0140360 o f a f i l e , m u c h
0140400 a s o n e c a n w i t h
0140420 t h e P M A P J S Y S i
0140440 n T e n e x . A s a r
0140460 e s u l t , t h e b u f f e
0140500 r s u s e d b y p a g e m
0140520 a p p e d s t r e a m s a r
0140540 e s e t u p i n a s p
0140560 e c i a l m a n n e r s o
0140600 t h a t t h e g a r b a g e
0140620 c o l l e c t o r c a n t
0140640 e l l w h e n t h e u s e
0140660 r n o l o n g e r h a s
0140700 a c c e s s t o a P M A P
0140720 b u f f e r . T h e P M
0140740 A P p a c k a g e i s b e
0140760 i n g p h a s e d o u t . \r
0141000 T h i s i s a l l e x c e
0141020 e d i n g l y c r u f t y ,
0141040 a n d i s o f l i t t l e
0141060 c o n c e r n t o t h e
0141100 d e v i c e i m p l e m e n t
0141120 e r , e x c e p t f o r t
0141140 h e f a c t t h a t i t
0141160 r e q u i r e s t h a t t h
0141200 e b u f f e r s b e e x p
0141220 l i c i t l y r e l e a s e d
0141240 w h e n a s t r e a m i
0141260 s c l o s e d ; t h e b u
0141300 f f e r s a r e n o t a u
0141320 t o m a t i c a l l y c o l l
0141340 e c t e d w h e n t h e s
0141360 t r e a m i s d r o p p e d
0141400 . \r ( F O R G E T P A G E S S
0141420 T R E A M F R O M P A G E T
0141440 O P A G E ) \t [ F u n c t i o n
0141460 ] \r ` ` F o r g e t s ' ' p a
0141500 g e s F R O M P A G E t h r
0141520