$ 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