$ od -c -N 50000 [Indigo]<XPort>CRuntime>Private>BWSMStreamImpl.mesa!1 0000000 - - C o p y r i g h t ( C ) 0000020 1 9 8 3 , 1 9 8 4 b y 0000040 X e r o x C o r p o r a t i o 0000060 n . A l l r i g h t s r e 0000100 s e r v e d . \r - - B W S M 0000120 S t r e a m I m p l . m e s a 0000140 L a s t e d i t e d b y \r 0000160 - - P X K , \t 2 7 - J 0000200 a n - 8 4 1 3 : 5 4 : 4 3 \r - 0000220 - L X R , \t 9 - J a 0000240 n - 8 4 1 2 : 1 9 : 2 2 \r - - 0000260 R X J , \t 2 1 - D e 0000300 c - 8 3 9 : 1 9 : 3 2 \r - - 0000320 D W E , \t 2 8 - J u l 0000340 - 8 3 1 4 : 1 2 : 4 3 \r - - 0000360 B G Y , \t 1 5 - A u g 0000400 - 8 4 1 4 : 0 8 : 3 2 \r - - 0000420 M E W \t \t 2 3 - M a y - 8 6 1 0000440 0 : 2 3 : 0 2 \r \r D I R E C T O 0000460 R Y \r B y t e B l t U S I 0000500 N G [ B y t e B l t ] , \r 0000520 E n v i r o n m e n t U S I N 0000540 G [ B l o c k , B y t e , 0000560 b y t e s P e r P a g e , P a 0000600 g e C o u n t ] , \r F i l e 0000620 U S I N G [ F i l e , G e 0000640 t S i z e , n u l l F i l e , 0000660 P a g e C o u n t , P a g e 0000700 N u m b e r ] , \r H e a p 0000720 U S I N G [ C r e a t e U n i 0000740 f o r m ] , \r I n l i n e 0000760 U S I N G [ H i g h H a l f , 0001000 L o n g C O P Y , L o n g D 0001020 i v , L o n g D i v M o d , 0001040 L o n g M u l t , L o w H a l 0001060 f ] , \r M F i l e U S I N 0001100 G [ \r A c c e s s , 0001120 A c q u i r e , B y t e C o u 0001140 n t , d o n t C a r e , E r 0001160 r o r , G e t A c c e s s , 0001200 G e t L e n g t h , H a n d l 0001220 e , \r O b j e c t , P 0001240 l e a s e R e l e a s e P r o c 0001260 , R e l e a s e , R e l e a 0001300 s e C h o i c e , R e l e a s 0001320 e D a t a , \r S e t A 0001340 c c e s s , S e t R e l e a s 0001360 e D a t a , S e t L e n g t h 0001400 , T y p e ] , \r M F i l e 0001420 O p s , \r M S t r e a m U 0001440 S I N G [ E r r o r C o d e , 0001460 R e l e a s e D a t a , H a 0001500 n d l e , P l e a s e R e l e 0001520 a s e P r o c ] , \r B W S M 0001540 S t r e a m O p s U S I N G 0001560 [ H a n d l e , m S t r e a m 0001600 P a s s w o r d , M y H a n d 0001620 l e , O b j e c t , S t r e 0001640 a m O b j e c t ] , \r M U s 0001660 a g e U S I N G [ m F i l e 0001700 L o c a l S t r e a m ] , \r 0001720 S p a c e U S I N G [ \r 0001740 A l l o c a t e , D e a l 0001760 l o c a t e , F o r c e O u t 0002000 , I n t e r v a l , M a k e 0002020 R e a d O n l y , M a k e W r 0002040 i t a b l e , \r M a p 0002060 A t , U n m a p A t ] , \r 0002100 S p e c i a l M F i l e U S I 0002120 N G [ G e t C a p a W i t h A 0002140 c c e s s ] , \r S t r e a m 0002160 U S I N G [ \r B l o 0002200 c k , B y t e , C o m p l e 0002220 t i o n C o d e , d e f a u l 0002240 t I n p u t O p t i o n s , E 0002260 n d O f S t r e a m , \r 0002300 G e t P o s i t i o n P r o c e 0002320 d u r e , G e t P r o c e d u 0002340 r e , H a n d l e , I n p u 0002360 t O p t i o n s , O b j e c t 0002400 , \r P u t B y t e P r o 0002420 c e d u r e , P u t P r o c e 0002440 d u r e , P u t W o r d P r o 0002460 c e d u r e , S e n d A t t e 0002500 n t i o n P r o c e d u r e , \r 0002520 S e n d N o w P r o c e 0002540 d u r e , S e t P o s i t i o 0002560 n P r o c e d u r e , S e t S 0002600 S T P r o c e d u r e , \r 0002620 W a i t A t t e n t i o n P r 0002640 o c e d u r e ] ; \r \r B W S M S 0002660 t r e a m I m p l : M O N I T 0002700 O R L O C K S s t r e a m H 0002720 a n d l e . l o c k U S I N G 0002740 s t r e a m H a n d l e : H 0002760 a n d l e \r I M P O R T S \r 0003000 B y t e B l t , F i l 0003020 e , H e a p , I n l i n e , 0003040 M F i l e , M F i l e O p s 0003060 , S p a c e , S p e c i a l 0003100 M F i l e , S t r e a m \r 0003120 E X P O R T S M S t r e a m , 0003140 B W S M S t r e a m O p s \r 0003160 S H A R E S F i l e = \r 0003200 B E G I N \r \r - - T y p 0003220 e s : \r \r F H a n d l e 0003240 : T Y P E = M F i l e . H 0003260 a n d l e ; \r H a n d l e : 0003300 T Y P E = B W S M S t r e 0003320 a m O p s . H a n d l e ; \r 0003340 M y H a n d l e : T Y P E = 0003360 B W S M S t r e a m O p s . M 0003400 y H a n d l e ; \r S t r e a 0003420 m O b j e c t : T Y P E = 0003440 B W S M S t r e a m O p s . S t 0003460 r e a m O b j e c t ; \r O b 0003500 j e c t : T Y P E = B W S 0003520 M S t r e a m O p s . O b j e c 0003540 t ; \r \r h e a p : U N C O 0003560 U N T E D Z O N E = H e a 0003600 p . C r e a t e U n i f o r m [ 0003620 \r i n i t i a l : 2 , 0003640 o b j e c t S i z e : S I Z 0003660 E [ S t r e a m O b j e c t ] ] 0003700 ; \r R e l e a s e D a t a : 0003720 T Y P E = M S t r e a m . 0003740 R e l e a s e D a t a ; \r l 0003760 e a d e r P a g e s : C A R D 0004000 I N A L = 1 ; \r \r E 0004020 r r o r : P U B L I C E R R 0004040 O R [ \r s t r e a m : 0004060 S t r e a m . H a n d l e , 0004100 c o d e : M S t r e a m . E r 0004120 r o r C o d e ] = C O D E ; 0004140 \r \r - - O p e r a t i 0004160 o n s : \r \r b y t e s P e r 0004200 P a g e : C A R D I N A L = 0004220 E n v i r o n m e n t . b y t 0004240 e s P e r P a g e ; \r \r C o 0004260 n v e r t H a n d l e : P U B 0004300 L I C P R O C E D U R E [ s 0004320 t r e a m : S t r e a m . H a 0004340 n d l e ] R E T U R N S [ M 0004360 y H a n d l e ] = { \r 0004400 R E T U R N [ C o n v e r t H 0004420 a n d l e I n l i n e [ s t r e 0004440 a m ] ] } ; \r \r C o n v e r 0004460 t H a n d l e I n l i n e : P 0004500 R O C E D U R E [ s t r e a m 0004520 : S t r e a m . H a n d l e ] 0004540 R E T U R N S [ M y H a n d 0004560 l e ] = I N L I N E { \r 0004600 R E T U R N [ @ L O O P H 0004620 O L E [ s t r e a m , H a n d 0004640 l e ] . o b j e c t ] } ; \r \r 0004660 V a l i d a t e H a n d l e : 0004700 P R O C E D U R E [ s t r e 0004720 a m : S t r e a m . H a n d l 0004740 e ] R E T U R N S [ h : M 0004760 y H a n d l e ] = { \r 0005000 I F s t r e a m = N I L 0005020 T H E N E R R O R E r r o 0005040 r [ s t r e a m , i n v a l i 0005060 d H a n d l e ] ; \r h 0005100 254 C o n v e r t H a n d l e I 0005120 n l i n e [ s t r e a m ] ; \r 0005140 I F s t r e a m . g e t 0005160 P o s i t i o n # G e t I n 0005200 d e x O R h . p a s s w o r 0005220 d # B W S M S t r e a m O p 0005240 s . m S t r e a m P a s s w o r 0005260 d T H E N \r E R R 0005300 O R E r r o r [ s t r e a m , 0005320 i n v a l i d H a n d l e ] } 0005340 ; \r \r I s I t : P U B L I 0005360 C P R O C E D U R E [ s t r 0005400 e a m : S t r e a m . H a n d 0005420 l e ] R E T U R N S [ i s i 0005440 t : B O O L E A N 254 T R U 0005460 E ] = { \r [ ] 254 0005500 V a l i d a t e H a n d l e [ s 0005520 t r e a m ! E r r o r = > 0005540 { i s i t 254 F A L S E ; 0005560 C O N T I N U E } ] } ; \r \r 0005600 C r e a t e : P U B L I C P 0005620 R O C E D U R E [ \r f 0005640 i l e : F H a n d l e , r e 0005660 l e a s e : R e l e a s e D a 0005700 t a , \r o p t i o n s : 0005720 S t r e a m . I n p u t O p t 0005740 i o n s 254 S t r e a m . d e 0005760 f a u l t I n p u t O p t i o n 0006000 s , \r s t r e a m B a s 0006020 e : F i l e . P a g e N u m b 0006040 e r 254 0 ] \r R E T U 0006060 R N S [ s t r e a m : S t r 0006100 e a m . H a n d l e ] = \r 0006120 B E G I N \r h : H 0006140 a n d l e ; \r c a p a b 0006160 i l i t y : F i l e . F i l e 0006200 254 F i l e . n u l l F i l e 0006220 ; \r r e a d , w r i t 0006240 e , s h r i n k : B O O L E 0006260 A N 254 F A L S E ; \r 0006300 f i l e P a g e s : F i l e . 0006320 P a g e C o u n t ; \r l 0006340 e n g t h : L O N G C A R D 0006360 I N A L ; \r s e t L e n 0006400 g t h : B O O L E A N 254 F 0006420 A L S E ; \r l e n g t h 0006440 254 M F i l e . G e t L e n g 0006460 t h [ f i l e ! M F i l e . E 0006500 r r o r = > E r r o r [ N I 0006520 L , i n v a l i d F i l e ] ] 0006540 ; \r c a p a b i l i t y 0006560 254 S p e c i a l M F i l e . 0006600 G e t C a p a W i t h A c c e s 0006620 s [ f i l e ! \r M 0006640 F i l e . E r r o r = > E r 0006660 r o r [ N I L , i n v a l i d 0006700 F i l e ] ] ; \r f i l e 0006720 P a g e s 254 F i l e . G e t 0006740 S i z e [ c a p a b i l i t y ] 0006760 - ( l e a d e r P a g e s 0007000 + s t r e a m B a s e ) ; \r 0007020 I F I n l i n e . H i g 0007040 h H a l f [ f i l e P a g e s ] 0007060 # 0 T H E N E R R O R 0007100 E r r o r [ N I L , f i l e T 0007120 o o L o n g ] ; \r S E L 0007140 E C T M F i l e . G e t A c c 0007160 e s s [ f i l e ] F R O M \r 0007200 w r i t e O n l y = 0007220 > w r i t e 254 s h r i n k 0007240 254 T R U E ; \r l 0007260 o g = > s e t L e n g t h 0007300 254 w r i t e 254 r e a d 254 0007320 T R U E ; \r r e a 0007340 d W r i t e = > w r i t e 0007360 254 r e a d 254 s h r i n k 0007400 254 T R U E ; \r r e 0007420 a d O n l y = > r e a d 254 0007440 T R U E ; \r E N D 0007460 C A S E ; \r h 254 h e 0007500 a p . N E W [ S t r e a m O b j 0007520 e c t 254 [ \r s t 0007540 r e a m : [ \r 0007560 g e t B y t e : G e t B y t e 0007600 , \r p u t B y t 0007620 e : P u t B y t e , \r 0007640 g e t W o r d : G e t 0007660 W o r d , \r p u 0007700 t W o r d : P u t W o r d , \r 0007720 g e t : G e t 0007740 B l o c k , \r p 0007760 u t : P u t B l o c k , \r 0010000 d e l e t e : D e 0010020 l e t e , \r s e 0010040 t S S T : S e t S S T N o p , 0010060 \r s e n d A t t 0010100 e n t i o n : S e n d A t t e 0010120 n t i o n N o p , \r 0010140 w a i t A t t e n t i o n : 0010160 W a i t A t t e n t i o n N o 0010200 p , \r g e t P o 0010220 s i t i o n : G e t I n d e x 0010240 , \r \t s e t P o s i t i o n : 0010260 S e t I n d e x , \r \t s e n d N 0010300 o w : S e n d N o w , \r \t o p 0010320 t i o n s : o p t i o n s , \r 0010340 \t c l i e n t D a t a : N I L 0010360 ] , \r o b j e c t : 0010400 [ \r r e a d : 0010420 r e a d , \r w 0010440 r i t e : w r i t e , \r 0010460 s h r i n k : s h r 0010500 i n k , \r f i l 0010520 e P a g e s : C A R D I N A L 0010540 [ f i l e P a g e s ] , \r 0010560 l e n g t h : l e n 0010600 g t h , \r r e l 0010620 e a s e : r e l e a s e , \r 0010640 s t r e a m B a s 0010660 e : s t r e a m B a s e , \r 0010700 f i l e : f i l 0010720 e , \r c a p a : 0010740 c a p a b i l i t y , \r \t b u 0010760 f f e r S p a c e P a g e s : 0011000 l o c a l B u f f e r P a g e s 0011020 ] ] ] ; \r I F ~ h . 0011040 o b j e c t . r e a d T H E N 0011060 { \r h . s t r e a 0011100 m . g e t B y t e 254 h . s t 0011120 r e a m . g e t W o r d 254 G 0011140 e t E r r o r ; \r h 0011160 . s t r e a m . g e t 254 G e 0011200 t B l o c k E r r o r } ; \r 0011220 I F h . o b j e c t . w r 0011240 i t e T H E N { \r 0011260 I F h . o b j e c t . f i l 0011300 e P a g e s = 0 T H E N 0011320 { \r M F i l e O 0011340 p s . S e t M i n i m u m F i l 0011360 e D a t a P a g e s [ h . o b j 0011400 e c t . f i l e , 1 ] ; \r \t h 0011420 . o b j e c t . f i l e P a g e 0011440 s 254 1 } } \r E L S 0011460 E { \r h . s t r e 0011500 a m . p u t B y t e 254 L O O 0011520 P H O L E [ P u t E r r o r ] ; 0011540 \r h . s t r e a m . 0011560 p u t W o r d 254 P u t E r r 0011600 o r ; \r h . s t r e 0011620 a m . p u t 254 P u t B l o c 0011640 k E r r o r ; \r I F 0011660 h . o b j e c t . f i l e P a 0011700 g e s < h . o b j e c t . b 0011720 u f f e r S p a c e P a g e s 0011740 T H E N \r h . o 0011760 b j e c t . b u f f e r S p a c 0012000 e P a g e s 254 h . o b j e c 0012020 t . f i l e P a g e s } ; \r 0012040 I F s e t L e n g t h T 0012060 H E N { M F i l e . S e t L e 0012100 n g t h [ h . o b j e c t . f i 0012120 l e , 0 ] ; h . o b j e c t 0012140 . l e n g t h 254 0 } ; \r 0012160 S e t u p B u f f e r [ @ h 0012200 . o b j e c t , 0 ] ; \r 0012220 M F i l e . S e t R e l e a s 0012240 e D a t a [ f i l e , [ S t r 0012260 e a m R e l e a s e , h ] ] ; 0012300 \r R E T U R N [ @ h . s 0012320 t r e a m ] ; \r E N D ; 0012340 \r \r S t r e a m R e l e a s 0012360 e : M F i l e . P l e a s e R 0012400 e l e a s e P r o c = { \r 0012420 h : M y H a n d l e = 0012440 C o n v e r t H a n d l e I n 0012460 l i n e [ i n s t a n c e D a t 0012500 a ] ; \r s t r e a m H a 0012520 n d l e : H a n d l e ; \r 0012540 c : M F i l e . R e l e a 0012560 s e C h o i c e ; \r [ c 0012600 , s t r e a m H a n d l e ] 0012620 254 R e a l R e l e a s e [ f i 0012640 l e , h , i n s t a n c e D 0012660 a t a ] ; \r I F c = 0012700 g o A h e a d T H E N I n 0012720 t e r n a l D e l e t e [ h , 0012740 @ s t r e a m H a n d l e . s t 0012760 r e a m , h . f i l e ] ; \r 0013000 R E T U R N [ c ] } ; \r 0013020 \r R e a l R e l e a s 0013040 e : E N T R Y P R O C E D U 0013060 R E [ \r f i l e : M 0013100 F i l e . H a n d l e , h : 0013120 M y H a n d l e , s t r e a m 0013140 H a n d l e : H a n d l e ] 0013160 \r R E T U R N S [ c : 0013200 M F i l e . R e l e a s e C h 0013220 o i c e , s : H a n d l e ] 0013240 = { \r E N A B L E 0013260 U N W I N D = > N U L L ; 0013300 \r I F h . r e l e 0013320 a s e . p r o c = N I L T 0013340 H E N R E T U R N [ n o , s 0013360 t r e a m H a n d l e ] ; \r 0013400 I F h . f i l e = N 0013420 I L T H E N R E T U R N [ l 0013440 a t e r , s t r e a m H a n d 0013460 l e ] ; \r c 254 h . 0013500 r e l e a s e . p r o c [ @ s t 0013520 r e a m H a n d l e . s t r e a 0013540 m , h . r e l e a s e . c l i 0013560 e n t I n s t a n c e D a t a ] 0013600 ; \r R E T U R N [ c , 0013620 s t r e a m H a n d l e ] } ; 0013640 \r \r D o n t R e l e a s 0013660 e : P U B L I C M S t r e a 0013700 m . P l e a s e R e l e a s e P 0013720 r o c = { R E T U R N [ n o 0013740 ] } ; \r \r M a k e F i l 0013760 e : P R O C E D U R E [ \r 0014000 n a m e : L O N G S T 0014020 R I N G , a c c e s s : M F 0014040 i l e . A c c e s s , t y p e 0014060 : M F i l e . T y p e 254 u 0014100 n k n o w n ] \r R E T U 0014120 R N S [ f i l e : M F i l e 0014140 . H a n d l e ] = { \r 0014160 f i l e 254 M F i l e . A c 0014200 q u i r e [ n a m e , a c c e 0014220 s s , [ ] , \r I 0014240 F a c c e s s = r e a d O 0014260 n l y T H E N F A L S E E 0014300 L S E T R U E , M F i l e . 0014320 d o n t C a r e , t y p e ! 0014340 \r M F i l e . E r 0014360 r o r = > E r r o r [ N I L 0014400 , f i l e N o t A v a i l a b 0014420 l e ] ] } ; \r \r N o t I 0014440 m p l e m e n t e d : E R R O 0014460 R = C O D E ; \r \r 0014500 L o g : P U B L I C P R O 0014520 C E D U R E [ n a m e : L O 0014540 N G S T R I N G , r e l e a 0014560 s e : R e l e a s e D a t a ] 0014600 \r R E T U R N S [ S t 0014620 r e a m . H a n d l e ] = { 0014640 E R R O R N o t I m p l e m e 0014660 n t e d } ; \r \r R e 0014700 a d O n l y : P U B L I C P 0014720 R O C E D U R E [ n a m e : 0014740 L O N G S T R I N G , r e l 0014760 e a s e : R e l e a s e D a t 0015000 a ] \r R E T U R N S [ 0015020 S t r e a m . H a n d l e ] = 0015040 { \r R E T U R N [ C r 0015060 e a t e [ M a k e F i l e [ n a 0015100 m e , r e a d O n l y ] , r 0015120 e l e a s e ] ] } ; \r \r 0015140 R e a d W r i t e : P U B 0015160 L I C P R O C E D U R E [ \r 0015200 n a m e : L O N G S 0015220 T R I N G , r e l e a s e : 0015240 R e l e a s e D a t a , t y p 0015260 e : M F i l e . T y p e 254 0015300 u n k n o w n ] \r R E T 0015320 U R N S [ S t r e a m . H a n 0015340 d l e ] = { \r R E T 0015360 U R N [ C r e a t e [ M a k e F 0015400 i l e [ n a m e , r e a d W r 0015420 i t e , t y p e ] , r e l e 0015440 a s e ] ] } ; \r \r W 0015460 r i t e O n l y : P U B L I C 0015500 P R O C E D U R E [ \r 0015520 n a m e : L O N G S T R I 0015540 N G , r e l e a s e : R e l 0015560 e a s e D a t a , t y p e : 0015600 M F i l e . T y p e 254 u n k 0015620 n o w n ] \r R E T U R N 0015640 S [ S t r e a m . H a n d l e 0015660 ] = { \r R E T U R N 0015700 [ C r e a t e [ M a k e F i l e 0015720 [ n a m e , w r i t e O n l y 0015740 , t y p e ] , r e l e a s e 0015760 ] ] } ; \r \r G e t R e l 0016000 e a s e D a t a : P U B L I C 0016020 P R O C E D U R E [ s t r e 0016040 a m : M S t r e a m . H a n d 0016060 l e ] R E T U R N S [ R e l 0016100 e a s e D a t a ] = \r 0016120 { R E T U R N [ R e a l G e t R 0016140 e l e a s e D a t a [ V a l i d 0016160 a t e H a n d l e [ s t r e a m 0016200 ] , L O O P H O L E [ s t r e 0016220 a m ] ] ] } ; \r \r R e a l G 0016240 e t R e l e a s e D a t a : E 0016260 N T R Y P R O C E D U R E [ 0016300 h : M y H a n d l e , s t r 0016320 e a m H a n d l e : H a n d l 0016340 e ] R E T U R N S [ R e l e 0016360 a s e D a t a ] = \r { 0016400 R E T U R N [ h . r e l e a s e 0016420 ] } ; \r \r S e t R e l e a s 0016440 e D a t a : P U B L I C P R 0016460 O C E D U R E [ \r s t 0016500 r e a m : M S t r e a m . H a 0016520 n d l e , r e l e a s e : R 0016540 e l e a s e D a t a ] = { \r 0016560 h : M y H a n d l e 0016600 = V a l i d a t e H a n d l e 0016620 [ s t r e a m ] ; \r R e 0016640 a l S e t R e l e a s e D a t a 0016660 [ h , L O O P H O L E [ s t r 0016700 e a m ] , r e l e a s e ] } ; 0016720 \r \r R e a l S e t R e l e a 0016740 s e D a t a : E N T R Y P R 0016760 O C E D U R E [ h : M y H a 0017000 n d l e , s t r e a m H a n d 0017020 l e : H a n d l e , r e l e 0017040 a s e : R e l e a s e D a t a 0017060 ] = \r { h . r e l e a 0017100 s e 254 r e l e a s e } ; \r \r 0017120 B a c k u p L o g : P U B 0017140 L I C P R O C E D U R E [ s 0017160 t r e a m : M S t r e a m . H 0017200 a n d l e , c o u n t : M F 0017220 i l e . B y t e C o u n t ] \r 0017240 R E T U R N S [ b a c 0017260 k e d U p : M F i l e . B y t 0017300 e C o u n t ] = { E R R O R 0017320 N o t I m p l e m e n t e d } 0017340 ; \r \r S e t L o g R e a d L 0017360 e n g t h : P U B L I C P R 0017400 O C E D U R E [ \r s t 0017420 r e a m : M S t r e a m . H a 0017440 n d l e , p o s i t i o n : 0017460 L O N G I N T E G E R ] = 0017500 { \r E R R O R N o t I 0017520 m p l e m e n t e d } ; \r \r 0017540 S e t A c c e s s : P U B L I 0017560 C P R O C E D U R E [ s t r 0017600 e a m : M S t r e a m . H a n 0017620 d l e , a c c e s s : M F i 0017640 l e . A c c e s s ] = \r 0017660 B E G I N \r h : M y 0017700 H a n d l e = V a l i d a t 0017720 e H a n d l e [ s t r e a m ] ; 0017740 \r S E L E C T a c c e 0017760 s s F R O M \r w 0020000 r i t e O n l y , l o g , r 0020020 e a d W r i t e , r e a d O n 0020040 l y = > N U L L ; \r 0020060 E N D C A S E = > E r r 0020100 o r [ s t r e a m , i n v a l 0020120 i d O p e r a t i o n ] ; \r 0020140 C l e a n u p [ h , h . f 0020160 i l e ] ; \r M F i l e . 0020200 S e t A c c e s s [ h . f i l e 0020220 , a c c e s s ! \r 0020240 M F i l e . E r r o r = > 0020260 E r r o r [ s t r e a m , f 0020300 i l e N o t A v a i l a b l e ] 0020320 ] ; - - c a t c h e r r o 0020340 r s ? \r h . c a p a 254 0020360 S p e c i a l M F i l e . G e 0020400 t C a p a W i t h A c c e s s [ 0020420 h . f i l e ! \r M 0020440 F i l e . E r r o r = > E r 0020460 r o r [ s t r e a m , i n v a 0020500 l i d F i l e ] ] ; \r h 0020520 . r e a d 254 a c c e s s # 0020540 w r i t e O n l y A N D a 0020560 c c e s s # l o g ; \r 0020600 h . w r i t e 254 a c c e s 0020620 s # r e a d O n l y ; \r 0020640 I F h . r e a d T H E N 0020660 { \r s t r e a m . 0020700 g e t B y t e 254 G e t B y t 0020720 e ; \r s t r e a m . 0020740 g e t W o r d 254 G e t W o r 0020760 d ; \r s t r e a m . 0021000 g e t 254 G e t B l o c k } \r 0021020 E L S E { \r 0021040 s t r e a m . g e t B y t e 0021060 254 G e t E r r o r ; \r 0021100 s t r e a m . g e t W o r d 0021120 254 G e t E r r o r ; \r 0021140 s t r e a m . g e t 254 0021160 G e t B l o c k E r r o r } ; \r 0021200 I F h . w r i t e T 0021220 H E N { \r s t r e 0021240 a m . p u t B y t e 254 P u t 0021260 B y t e ; \r s t r e 0021300 a m . p u t W o r d 254 P u t 0021320 W o r d ; \r s t r e 0021340 a m . p u t 254 P u t B l o c 0021360 k } \r E L S E { \r 0021400 s t r e a m . p u t B y 0021420 t e 254 L O O P H O L E [ P u 0021440 t E r r o r ] ; \r s 0021460 t r e a m . p u t W o r d 254 0021500 P u t E r r o r ; \r 0021520 s t r e a m . p u t 254 P u t 0021540 B l o c k E r r o r } ; \r 0021560 S E L E C T a c c e s s F 0021600 R O M \r r e a d O n 0021620 l y = > S p a c e . M a k e 0021640 R e a d O n l y [ h . b u f f e 0021660 r S p a c e ] ; \r E 0021700 N D C A S E = > { \r 0021720 d e s i r e d P a g e s 0021740 : C A R D I N A L = l o c 0021760 a l B u f f e r P a g e s ; \r \t 0022000 I F h . b u f f e r S p a c e 0022020 P a g e s # d e s i r e d P 0022040 a g e s T H E N { \r \t I 0022060 F h . b u f f e r S p a c e P 0022100 a g e s # 0 T H E N { \r 0022120 [ ] 254 0022140 S p a c e . U n m a p A t [ h 0022160 . b u f f e r S p a c e . p o i 0022200 n t e r ] ; \r 0022220 S p a c e . D e a l l o c 0022240 a t e [ h . b u f f e r S p a c 0022260 e ] } ; \r \t h . b u f f e 0022300 r 254 N I L ; \r \t h . b u 0022320 f f e r S p a c e P a g e s 254 0022340 d e s i r e d P a g e s ; \r \t 0022360 S e t u p B u f f e r [ h , 0022400 h . f i r s t F i l e P a g e 0022420 I n B u f f e r ] } \r \t E L S E 0022440 S p a c e . M a k e W r i t a 0022460 b l e [ h . b u f f e r S p a c 0022500 e ] } ; \r E N D ; \r \r 0022520 - - G e n e r i c S t r e 0022540 a m p r o c e d u r e s ; a 0022560 s s u m e h a n d l e o k \r 0022600 \r G e t B y t e : P R O C 0022620 E D U R E [ s t r e a m : S 0022640 t r e a m . H a n d l e ] R E 0022660 T U R N S [ b y t e : U N S 0022700 P E C I F I E D [ 0 . . 2 5 6 ) 0022720 ] = \r B E G I N \r 0022740 h : M y H a n d l e 254 0022760 C o n v e r t H a n d l e I n l 0023000 i n e [ s t r e a m ] ; \r 0023020 W H I L E h . i n d e x = 0023040 h . d a t a B y t e s I n B u 0023060 f f e r D O \r I F 0023100 h . e o f I n B u f f e r T 0023120 H E N { S I G N A L S t r e 0023140 a m . E n d O f S t r e a m [ 0 0023160 ] ; R E T U R N [ 0 ] } ; \r 0023200 A d v a n c e B u f f 0023220 e r [ h ] ; \r E N D 0023240 L O O P ; \r b y t e 254 0023260 h . b u f f e r [ h . i n d e 0023300 x ] ; \r h . i n d e x 0023320 254 h . i n d e x + 1 ; \r 0023340 R E T U R N \r E N 0023360 D ; \r \r G e t I n d e x : 0023400 S t r e a m . G e t P o s i t i 0023420 o n P r o c e d u r e = { \r 0023440 h : M y H a n d l e 0023460 = C o n v e r t H a n d l e I 0023500 n l i n e [ s H ] ; \r p 0023520 o s i t i o n 254 I n l i n e 0023540 . L o n g M u l t [ h . f i r s 0023560 t F i l e P a g e I n B u f f e 0023600 r , b y t e s P e r P a g e ] 0023620 + h . i n d e x } ; \r \r 0023640 G e t W o r d : P R O C E D U 0023660 R E [ s t r e a m : S t r e 0023700 a m . H a n d l e ] R E T U R 0023720 N S [ U N S P E C I F I E D ] 0023740 = \r B E G I N \r 0023760 t : U N S P E C I F I E D 0024000 = C A R D I N A L [ G e t B y 0024020 t e [ s t r e a m ] ] * 2 5 0024040 6 ; \r R E T U R N [ t 0024060 + G e t B y t e [ s t r e a m 0024100 ] ] \r E N D ; \r \r G 0024120 e t E r r o r : P R O C E D U 0024140 R E [ s t r e a m : S t r e 0024160 a m . H a n d l e ] R E T U R 0024200 N S [ U N S P E C I F I E D ] 0024220 = { \r E R R O R E 0024240 r r o r [ s t r e a m , i n v 0024260 a l i d O p e r a t i o n ] } ; 0024300 \r \r P u t B y t e : S t r 0024320 e a m . P u t B y t e P r o c e 0024340 d u r e = { \r h : 0024360 M y H a n d l e = C o n v e 0024400 r t H a n d l e I n l i n e [ s 0024420 H ] ; \r W H I L E h . 0024440 i n d e x = h . d a t a B y 0024460 t e s I n B u f f e r D O \r 0024500 I F h . d a t a B y 0024520 t e s I n B u f f e r = h . 0024540 b u f f e r B y t e s T H E N 0024560 A d v a n c e B u f f e r [ h 0024600 ] \r E L S E \r 0024620 B E G I N \r 0024640 h . d a t a B y t e s I n 0024660 B u f f e r 254 h . d a t a B 0024700 y t e s I n B u f f e r + 1 0024720 ; \r \t h . l e n g t h 254 h . 0024740 l e n g t h + 1 ; \r 0024760 h . l e n g t h C h a n 0025000 g e d 254 T R U E ; \r 0025020 E N D ; \r E 0025040 N D L O O P ; \r h . b u 0025060 f f e r [ h . i n d e x ] 254 0025100 b y t e ; \r h . i n d e 0025120 x 254 h . i n d e x + 1 } 0025140 ; \r \r P u t W o r d : S t 0025160 r e a m . P u t W o r d P r o c 0025200 e d u r e = { \r P u 0025220 t B y t e [ s H , C A R D I N 0025240 A L [ w o r d ] / 2 5 6 ] ; 0025260 P u t B y t e [ s H , C A R 0025300 D I N A L [ w o r d ] M O D 0025320 2 5 6 ] } ; \r \r P u t E r r 0025340 o r : S t r e a m . P u t W o 0025360 r d P r o c e d u r e = { E 0025400 R R O R E r r o r [ s H , i 0025420 n v a l i d O p e r a t i o n ] 0025440 } ; \r \r S e t I n d e x : 0025460 S t r e a m . S e t P o s i t i 0025500 o n P r o c e d u r e = { \r 0025520 h : M y H a n d l e 0025540 = C o n v e r t H a n d l e I 0025560 n l i n e [ s H ] ; \r f 0025600 i l e P a g e , b y t e : C 0025620 A R D I N A L ; \r b u f 0025640 f e r P a g e : C A R D I N A 0025660 L = h . f i r s t F i l e P 0025700 a g e I n B u f f e r ; \r 0025720 o l d F i l e P a g e s : C 0025740 A R D I N A L = h . f i l e 0025760 P a g e s ; \r b u f f e 0026000 r P a g e s : C A R D I N A L 0026020 = h . b u f f e r B y t e s 0026040 / b y t e s P e r P a g e ; \r 0026060 s e t u p O f f s e t : 0026100 C A R D I N A L = l o c a l 0026120 O f f s e t ; \r I F ( 0026140 I n l i n e . L o n g M u l t [ 0026160 b u f f e r P a g e , b y t e 0026200 s P e r P a g e ] + h . i n 0026220 d e x ) = p o s i t i o n 0026240 T H E N \r R E T U R 0026260 N ; \r I F I n l i n e 0026300 . H i g h H a l f [ p o s i t i 0026320 o n ] > = b y t e s P e r P 0026340 a g e T H E N G O T O O u 0026360 t O f R a n g e ; \r [ f 0026400 i l e P a g e , b y t e ] 254 0026420 I n l i n e . L o n g D i v M 0026440 o d [ p o s i t i o n , b y t 0026460 e s P e r P a g e ] ; \r 0026500 I F h . b u f f e r = N I 0026520 L O R f i l e P a g e ~ I 0026540 N [ b u f f e r P a g e . . b u 0026560 f f e r P a g e + b u f f e r P 0026600 a g e s ) T H E N \r 0026620 B E G I N \r g r o 0026640 w F i l e : B O O L E A N ; \r 0026660 I F p o s i t i o 0026700 n > h . l e n g t h T H E 0026720 N { \r I F ~ 0026740 h . w r i t e T H E N G O T 0026760 O O u t O f R a n g e ; \r 0027000 h . f i l e P a g e 0027020 s 254 f i l e P a g e + g 0027040 r o w I n c r e m e n t ; \r \t g 0027060 r o w F i l e 254 T R U E ; \r 0027100 \t h . l e n g t h 254 p o s i 0027120 t i o n ; \r \t h . l e n g t h C 0027140 h a n g e d 254 T R U E } \r 0027160 E L S E g r o w F i 0027200 l e 254 F A L S E ; \r 0027220 S e t u p B u f f e r [ h , 0027240 M A X [ f i l e P a g e , s 0027260 e t u p O f f s e t ] - s e t u 0027300 p O f f s e t , g r o w F i l 0027320 e ! \r U N W I 0027340 N D = > h . f i l e P a g e 0027360 s 254 o l d F i l e P a g e s 0027400 ] ; \r E N D \r 0027420 E L S E I F p o s i t i o 0027440 n > h . l e n g t h A N D 0027460 ~ h . w r i t e T H E N G 0027500 O T O O u t O f R a n g e ; \r 0027520 h . i n d e x 254 \r 0027540 ( f i l e P a g e - h . 0027560 f i r s t F i l e P a g e I n B 0027600 u f f e r ) * b y t e s P e 0027620 r P a g e + b y t e ; \r 0027640 I F h . i n d e x > h 0027660 . d a t a B y t e s I n B u f f 0027700 e r T H E N { \r 0027720 h . d a t a B y t e s I n B u f 0027740 f e r 254 h . i n d e x ; \r 0027760 h . l e n g t h 254 0030000 C o m p u t e L e n g t h [ h ] 0030020 ; \r h . l e n g t h 0030040 C h a n g e d 254 T R U E } ; 0030060 \r R E T U R N ; \r 0030100 E X I T S O u t O f R a n g 0030120 e = > E R R O R E r r o r 0030140 [ s H , i n d e x O u t O f R 0030160 a n g e ] } ; \r \r G e t B l 0030200 o c k : S t r e a m . G e t P 0030220 r o c e d u r e = \r B 0030240 E G I N \r h : M y H a 0030260 n d l e = C o n v e r t H a 0030300 n d l e I n l i n e [ s H ] ; \r 0030320 b u f f e r B l o c k : 0030340 E n v i r o n m e n t . B l o 0030360 c k ; \r c o u n t R e m 0030400 a i n i n g : C A R D I N A L 0030420 254 b l o c k . s t o p I n d 0030440 e x P l u s O n e - b l o c k . 0030460 s t a r t I n d e x ; \r 0030500 c o u n t T r a n s f e r r e d 0030520 : C A R D I N A L ; \r 0030540 s s t 254 0 ; \r b y t 0030560 e s T r a n s f e r r e d 254 0030600 0 ; \r w h y 254 n o r 0030620 m a l ; \r W H I L E c 0030640 o u n t R e m a i n i n g # 0030660 0 D O \r b u f f e 0030700 r B l o c k 254 [ \r 0030720 b l o c k P o i n t e r : 0030740 h . b u f f e r , \r 0030760 s t a r t I n d e x : h 0031000 . i n d e x , \r 0031020 s t o p I n d e x P l u s O n e 0031040 : h . d a t a B y t e s I n B 0031060 u f f e r ] ; \r c o 0031100 u n t T r a n s f e r r e d 254 0031120 B y t e B l t . B y t e B l t 0031140 [ f r o m : b u f f e r B l o 0031160 c k , t o : b l o c k ] ; \r 0031200 h . i n d e x 254 0031220 h . i n d e x + c o u n t T 0031240 r a n s f e r r e d ; \r 0031260 b y t e s T r a n s f e r r 0031300 e d 254 b y t e s T r a n s f 0031320 e r r e d + c o u n t T r a 0031340 n s f e r r e d ; \r 0031360 I F ( c o u n t R e m a i n i 0031400 n g 254 c o u n t R e m a i n 0031420 i n g - c o u n t T r a n s 0031440 f e r r e d ) = 0 T H E N 0031460 E X I T ; \r I F 0031500 h . e o f I n B u f f e r T H 0031520 E N \r B E G I N 0031540 \r I F o p t i 0031560 o n s . s i g n a l E n d O f S 0031600 t r e a m T H E N \r 0031620 S I G N A L S t r e 0031640 a m . E n d O f S t r e a m [ b 0031660 l o c k . s t a r t I n d e x + 0031700 c o u n t T r a n s f e r r e d 0031720 ] ; \r w h y 254 0031740 e n d O f S t r e a m ; \r 0031760 E X I T \r 0032000 E N D ; \r b l 0032020 o c k . s t a r t I n d e x 254 0032040 b l o c k . s t a r t I n d e 0032060 x + c o u n t T r a n s f e 0032100 r r e d ; \r A d v a 0032120 n c e B u f f e r [ h ] ; \r 0032140 E N D L O O P ; \r 0032160 R E T U R N \r E N D ; 0032200 \r \r G e t B l o c k E r r o 0032220 r : S t r e a m . G e t P r o 0032240 c e d u r e = { E R R O R 0032260 E r r o r [ s H , i n v a l i 0032300 d O p e r a t i o n ] } ; \r \r 0032320 P u t B l o c k : S t r e a 0032340 m . P u t P r o c e d u r e = 0032360 \r B E G I N \r h 0032400 : M y H a n d l e = C o n 0032420 v e r t H a n d l e I n l i n e 0032440 [ s H ] ; \r b u f f e r 0032460 B l o c k : E n v i r o n m e 0032500 n t . B l o c k ; \r c o 0032520 u n t R e m a i n i n g : C A 0032540 R D I N A L 254 b l o c k . s 0032560 t o p I n d e x P l u s O n e - 0032600 b l o c k . s t a r t I n d e x 0032620 ; \r c o u n t T r a n s 0032640 f e r r e d : C A R D I N A L 0032660 ; \r W H I L E c o u n 0032700 t R e m a i n i n g # 0 D 0032720 O \r b u f f e r B l 0032740 o c k 254 [ \r 0032760 b l o c k P o i n t e r : h . 0033000 b u f f e r , \r 0033020 s t a r t I n d e x : h . i n 0033040 d e x , \r s t o 0033060 p I n d e x P l u s O n e : h 0033100 . b u f f e r B y t e s ] ; \r 0033120 c o u n t T r a n s f 0033140 e r r e d 254 B y t e B l t . 0033160 B y t e B l t [ f r o m : b l 0033200 o c k , t o : b u f f e r B 0033220 l o c k ] ; \r h . i 0033240 n d e x 254 h . i n d e x + 0033260 c o u n t T r a n s f e r r e 0033300 d ; \r I F h . e o 0033320 f I n B u f f e r A N D h . 0033340 i n d e x > h . d a t a B y 0033360 t e s I n B u f f e r T H E N 0033400 { \r \t h . d a t a B y t e s I 0033420 n B u f f e r 254 h . i n d e 0033440 x ; \r \t h . l e n g t h 254 C 0033460 o m p u t e L e n g t h [ h ] ; 0033500 \r \t h . l e n g t h C h a n g e 0033520 d 254 T R U E } ; \r 0033540 I F ( c o u n t R e m a i n 0033560 i n g 254 c o u n t R e m a i 0033600 n i n g - c o u n t T r a n 0033620 s f e r r e d ) = 0 T H E 0033640 N E X I T ; \r I F 0033660 h . e o f I n B u f f e r T 0033700 H E N { \r h . 0033720 d a t a B y t e s I n B u f f e 0033740 r 254 h . b u f f e r B y t e 0033760 s ; \r \t h . l e n g t h 254 C 0034000 o m p u t e L e n g t h [ h ] ; 0034020 \r \t h . l e n g t h C h a n g e 0034040 d 254 T R U E } ; \r 0034060 b l o c k . s t a r t I n d e 0034100 x 254 b l o c k . s t a r t I 0034120 n d e x + c o u n t T r a n 0034140 s f e r r e d ; \r A 0034160 d v a n c e B u f f e r [ h ] ; 0034200 \r E N D L O O P ; \r 0034220 I F e n d R e c o r d 0034240 T H E N C l e a n u p [ h , 0034260 h . f i l e ] ; \r R E 0034300 T U R N \r E N D ; \r \r 0034320 P u t B l o c k E r r o r : 0034340 S t r e a m . P u t P r o c e d 0034360 u r e = { E R R O R E r r 0034400 o r [ s H , i n v a l i d O p 0034420 e r a t i o n ] } ; \r \r S e 0034440 n d N o w : S t r e a m . S e 0034460 n d N o w P r o c e d u r e = 0034500 \r B E G I N \r h 0034520 : M y H a n d l e = C o n 0034540 v e r t H a n d l e I n l i n e 0034560 [ s H ] ; \r I F e n d 0034600 R e c o r d T H E N C l e a 0034620 n u p [ h , h . f i l e ] ; \r 0034640 R E T U R N \r E 0034660 N D ; \r \r D e l e t e : P 0034700 R O C E D U R E [ s t r e a m 0034720 : S t r e a m . H a n d l e ] 0034740 = { \r h : M y H a 0034760 n d l e = C o n v e r t H a 0035000 n d l e I n l i n e [ s t r e a 0035020 m ] ; \r c o p y : M F 0035040 i l e . H a n d l e 254 N I L 0035060 ; \r C h e c k D e l e t 0035100 e : E N T R Y P R O C E D U 0035120 R E [ s t r e a m H a n d l e 0035140 : H a n d l e ] = { \r 0035160 c o p y 254 h . f i l 0035200 e ; \r h . f i l e 0035220 254 N I L } ; \r B E G I 0035240 N E N A B L E M F i l e . E 0035260 r r o r = > I F c o d e 0035300 = c o u r i e r E r r o r T 0035320 H E N G O T O r e m o t e E 0035340 r r o r ; \r C h e c k D 0035360 e l e t e [ L O O P H O L E [ s 0035400 t r e a m ] ] ; \r I F 0035420 c o p y # N I L T H E N 0035440 { I n t e r n a l D e l e t e [ 0035460 h , s t r e a m , c o p y ] 0035500 ; M F i l e . R e l e a s e [ 0035520 c o p y ] } ; \r E X I T 0035540 S r e m o t e E r r o r = > 0035560 N U L L ; \r E N D ; \r 0035600 } ; \r \r I n t e r n 0035620 a l D e l e t e : P R O C E D 0035640 U R E [ \r h : M y H 0035660 a n d l e , s t r e a m : S 0035700 t r e a m . H a n d l e , f i 0035720 l e : M F i l e . H a n d l e 0035740 ] = { \r i n d e x : 0035760 L O N G C A R D I N A L 254 0036000 s t r e a m . g e t P o s i t 0036020 i o n [ s t r e a m ] ; \r 0036040 B E G I N E N A B L E M F 0036060 i l e . E r r o r = > I F 0036100 c o d e = c o u r i e r E r 0036120 r o r T H E N G O T O r e 0036140 m o t e E r r o r ; \r E 0036160 m p t y B u f f e r [ h , T R 0036200 U E , f i l e ] ; \r I 0036220 F ~ h . r e a d 253 A N D i 0036240 n d e x # 0 273 T H E N M 0036260 F i l e . S e t L e n g t h [ f 0036300 i l e , i n d e x ] ; \r 0036320 E X I T S r e m o t e E r r 0036340 o r = > N U L L ; \r 0036360 E N D ; \r L O O P H O L 0036400 E [ s t r e a m , L O N G P 0036420 O I N T E R T O W O R D ] 255 0036440 254 0 ; \r I n l i n e 0036460 . L o n g C O P Y [ f r o m : 0036500 s t r e a m , t o : s t r e 0036520 a m + 1 , n w o r d s : 0036540 S I Z E [ S t r e a m O b j e c 0036560 t ] - 1 ] ; \r h e a 0036600 p . F R E E [ @ s t r e a m ] } 0036620 ; \r \r S e t S S T N o p : 0036640 S t r e a m . S e t S S T P r o 0036660 c e d u r e = { } ; \r \r 0036700 S e n d A t t e n t i o n N o p 0036720 : S t r e a m . S e n d A t t 0036740 e n t i o n P r o c e d u r e 0036760 = { } ; \r \r W a i t A t t 0037000 e n t i o n N o p : S t r e a 0037020 m . W a i t A t t e n t i o n P 0037040 r o c e d u r e = { R E T U 0037060 R N [ 0 ] } ; \r \r - - F i 0037100 l e S t r e a m s p e c i f i 0037120 c p r o c e d u r e s ; m u 0037140 s t v a l i d a t e h a n d 0037160 l e \r \r C o p y : P U B L 0037200 I C P R O C E D U R E [ f r 0037220 o m , t o : S t r e a m . H 0037240 a n d l e , b y t e s : L O 0037260 N G C A R D I N A L ] \r 0037300 R E T U R N S [ b y t e s C 0037320 o p i e d : L O N G C A R D 0037340 I N A L ] = { \r b u 0037360 f f e r B l o c k : E n v i r 0037400 o n m e n t . B l o c k ; \r 0037420 b y t e s T o T r a n s f e 0037440 r : C A R D I N A L ; \r 0037460 f r o m H , t o H : M y H 0037500 a n d l e 254 N I L ; \r 0037520 f r o m H 254 V a l i d a t 0037540 e H a n d l e [ f r o m ! E 0037560 r r o r = > C O N T I N U E 0037600 ] ; \r t o H 254 V a l 0037620 i d a t e H a n d l e [ t o ! 0037640 E r r o r = > C O N T I N 0037660 U E ] ; \r b y t e s C o 0037700 p i e d 254 0 ; \r S E 0037720 L E C T T R U E F R O M \r 0037740 f r o m H # N I L 0037760 = > { \r W H 0040000 I L E b y t e s # 0 D O 0040020 \r \t b y t e s T o T r a n s 0040040 f e r 254 f r o m H . d a t a 0040060 B y t e s I n B u f f e r - 0040100 f r o m H . i n d e x ; \r \t 0040120 I F b y t e s T o T r a n s f 0040140 e r > b y t e s T H E N 0040160 b y t e s T o T r a n s f e r 0040200 254 I n l i n e . L o w H a l f 0040220 [ b y t e s ] ; \r \t b u f f 0040240 e r B l o c k 254 [ \r \t 0040260 b l o c k P o i n t e r : f 0040300 r o m H . b u f f e r , \r \t 0040320 s t a r t I n d e x : f r 0040340 o m H . i n d e x , \r \t 0040360 s t o p I n d e x P l u s O n e 0040400 : f r o m H . i n d e x + 0040420 b y t e s T o T r a n s f e r ] 0040440 ; \r \t I F b u f f e r B l 0040460 o c k . s t a r t I n d e x # 0040500 b u f f e r B l o c k . s t o 0040520 p I n d e x P l u s O n e T H 0040540 E N \r \t t o . p u t [ t 0040560 o , b u f f e r B l o c k , 0040600 F A L S E ] ; \r \t f r o m H 0040620 . i n d e x 254 f r o m H . i 0040640 n d e x + b y t e s T o T r 0040660 a n s f e r ; \r \t b y t e s 0040700 254 b y t e s - b y t e s 0040720 T o T r a n s f e r ; \r \t b 0040740 y t e s C o p i e d 254 b y t 0040760 e s C o p i e d + b y t e s 0041000 T o T r a n s f e r ; \r \t I 0041020 F b y t e s = 0 O R f 0041040 r o m H . e o f I n B u f f e r 0041060 T H E N R E T U R N ; \r \t 0041100 A d v a n c e B u f f e r [ f 0041120 r o m H ] ; \r \t E N D L O O 0041140 P } ; \r t o H # 0041160 N I L = > { \r 0041200 b y t e s T r a n s f e r r e 0041220 d : C A R D I N A L ; \r \t w h 0041240 y : S t r e a m . C o m p l e 0041260 t i o n C o d e ; \r \t W H I L E 0041300 b y t e s # 0 D O \r \t 0041320 b y t e s T o T r a n s f e r 0041340 254 t o H . b u f f e r B y t 0041360 e s - t o H . i n d e x ; \r 0041400 \t I F b y t e s T o T r a 0041420 n s f e r > b y t e s T H 0041440 E N b y t e s T o T r a n s f 0041460 e r 254 I n l i n e . L o w H 0041500 a l f [ b y t e s ] ; \r \t b 0041520 u f f e r B l o c k 254 [ \r \t 0041540 b l o c k P o i n t e r 0041560 : t o H . b u f f e r , \r \t 0041600 s t a r t I n d e x : t 0041620 o H . i n d e x , \r \t s 0041640 t o p I n d e x P l u s O n e : 0041660 t o H . i n d e x + b y t 0041700 e s T o T r a n s f e r ] ; \r \t 0041720 [ b y t e s T r a n s f e r 0041740 r e d , w h y , ] 254 f r 0041760 o m . g e t [ \r \t f r o 0042000 m , b u f f e r B l o c k , 0042020 S t r e a m . d e f a u l t I n 0042040 p u t O p t i o n s ] ; \r \t 0042060 I F w h y = s s t C h a n 0042100 g e T H E N \r \t E R R 0042120 O R E r r o r [ f r o m , o 0042140 t h e r ] ; \r \t t o H . i n 0042160 d e x 254 t o H . i n d e x 0042200 + b y t e s T r a n s f e r r 0042220 e d ; \r \t b y t e s 254 b 0042240 y t e s - b y t e s T r a n 0042260 s f e r r e d ; \r \t b y t e 0042300 s C o p i e d 254 b y t e s C 0042320 o p i e d + b y t e s T r a 0042340 n s f e r r e d ; \r \t I F 0042360 t o H . e o f I n B u f f e r 0042400 A N D t o H . i n d e x > 0042420 t o H . d a t a B y t e s I n B 0042440 u f f e r T H E N { \r \t 0042460 t o H . d a t a B y t e s I 0042500 n B u f f e r 254 t o H . i n 0042520 d e x ; \r \t t o H . l e 0042540 n g t h 254 C o m p u t e L e 0042560 n g t h [ t o H ] ; \r \t 0042600 t o H . l e n g t h C h a n g e 0042620 d 254 T R U E } ; \r \t I F 0042640 b y t e s = 0 O R w h 0042660 y = e n d O f S t r e a m 0042700 T H E N R E T U R N ; \r \t 0042720 I F t o H . b u f f e r B y t 0042740 e s = t o H . i n d e x T 0042760 H E N { \r \t I F t o 0043000 H . e o f I n B u f f e r T H 0043020 E N { \r 0043040 t o H . d a t a B y t e s 0043060 I n B u f f e r 254 t o H . b 0043100 u f f e r B y t e s ; \r \t 0043120 t o H . l e n g t h 254 0043140 C o m p u t e L e n g t h [ t o 0043160 H ] ; \r \t t o H . l 0043200 e n g t h C h a n g e d 254 T 0043220 R U E } ; \r 0043240 A d v a n c e B u f f e r [ 0043260 t o H ] } ; \r \t E N D L O O 0043300 P } ; \r E N D C A S 0043320 E = > E R R O R E r r o r 0043340 [ f r o m , i n v a l i d H a 0043360 n d l e ] } ; \r \r S h a 0043400 r e B l o c k : P U B L I C 0043420 P R O C E D U R E [ \r 0043440 s t r e a m : S t r e a m . H 0043460 a n d l e , s t a r t : L O 0043500 N G C A R D I N A L , l e n 0043520 g t h : C A R D I N A L ] \r 0043540 R E T U R N S [ b l o c 0043560 k : E n v i r o n m e n t . B 0043600 l o c k ] = { \r h : 0043620 M y H a n d l e = V a l i 0043640 d a t e H a n d l e [ s t r e a 0043660 m ] ; \r S e t I n d e x 0043700 [ s t r e a m , s t a r t ] ; 0043720 \r I F ~ h . e o f I n 0043740 B u f f e r A N D h . i n d 0043760 e x = h . d a t a B y t e s 0044000 I n B u f f e r T H E N A d 0044020 v a n c e B u f f e r [ h ] ; \r 0044040 b l o c k 254 [ \r 0044060 b l o c k P o i n t e r 0044100 : h . b u f f e r , \r 0044120 s t a r t I n d e x : h . 0044140 i n d e x , \r s t o 0044160 p I n d e x P l u s O n e : 0044200 - - c h e c k f o r o v e 0044220 r f l o w \r I F 0044240 l e n g t h > L A S T [ C 0044260 A R D I N A L ] - h . i n d 0044300 e x T H E N h . d a t a B y 0044320 t e s I n B u f f e r \r 0044340 E L S E M I N [ h . 0044360 d a t a B y t e s I n B u f f e 0044400 r , h . i n d e x + l e n 0044420 g t h ] ] } ; \r \r G 0044440 e t F i l e : P U B L I C P 0044460 R O C E D U R E [ s t r e a m 0044500 : S t r e a m . H a n d l e ] 0044520 \r R E T U R N S [ f i 0044540 l e : M F i l e . H a n d l e 0044560 ] = { \r R E T U R N 0044600 [ V a l i d a t e H a n d l e [ 0044620 s t r e a m ] . f i l e ] } ; \r 0044640 \r E n d O f : P U 0044660 B L I C P R O C E D U R E [ 0044700 s t r e a m : S t r e a m . H 0044720 a n d l e ] R E T U R N S [ 0044740 B O O L E A N ] = { \r 0044760 h : M y H a n d l e = V 0045000 a l i d a t e H a n d l e [ s t 0045020 r e a m ] ; \r R E T U R 0045040 N [ h . e o f I n B u f f e r 0045060 A N D h . i n d e x = h . 0045100 d a t a B y t e s I n B u f f e 0045120 r ] } ; \r \r G e t L e n g t 0045140 h : P U B L I C P R O C E D 0045160 U R E [ s t r e a m : S t r 0045200 e a m . H a n d l e ] \r 0045220 R E T U R N S [ f i l e L e n 0045240 g t h : L O N G C A R D I N 0045260 A L ] = { \r h : M 0045300 y H a n d l e = V a l i d a 0045320 t e H a n d l e [ s t r e a m ] 0045340 ; \r R E T U R N [ h . l 0045360 e n g t h ] } ; \r \r S e t L 0045400 e n g t h : P U B L I C P R 0045420 O C E D U R E [ s t r e a m : 0045440 S t r e a m . H a n d l e , 0045460 f i l e L e n g t h : L O N G 0045500 C A R D I N A L ] = \r 0045520 B E G I N \r h : M y 0045540 H a n d l e = V a l i d a t 0045560 e H a n d l e [ s t r e a m ] ; 0045600 \r 253 I F M F i l e . G 0045620 e t A c c e s s [ h . f i l e ] 0045640 = l o g T H E N \r 0045660 I F h . l e n g t h < 0045700 f i l e L e n g t h \r 0045720 O R f i l e L e n g 0045740 t h < M F i l e O p s . G e 0045760 t R e a d L e n g t h F o r L o 0046000 g [ h . f i l e ] T H E N \r 0046020 E R R O R E r r o 0046040 r [ s t r e a m , i n v a l i 0046060 d O p e r a t i o n ] \r 0046100 E L S E R E T U R N ; 273 \r 0046120 I n t e r n a l S e t L 0046140 e n g t h [ h , s t r e a m , 0046160 f i l e L e n g t h ] ; \r 0046200 E N D ; \r \r I n t e r n 0046220 a l S e t L e n g t h : P R O 0046240 C E D U R E [ \r h : 0046260 M y H a n d l e , s t r e a m 0046300 : S t r e a m . H a n d l e , 0046320 f i l e L e n g t h : L O N 0046340 G C A R D I N A L ] = \r 0046360 B E G I N \r o l d L 0046400 e n g t h : L O N G C A R D 0046420 I N A L ; \r n e w L e n 0046440 g t h I n P a g e s : F i l e 0046460 . P a g e C o u n t = P a g 0046500 e s F o r B y t e s [ f i l e L 0046520 e n g t h ] - h . s t r e a 0046540 m B a s e ; \r b u f f e 0046560 r M i n : L O N G C A R D I 0046600 N A L = I n l i n e . L o n 0046620 g M u l t [ \r h . f 0046640 i r s t F i l e P a g e I n B u 0046660 f f e r , b y t e s P e r P a 0046700 g e ] ; \r I F ~ h . w 0046720 r i t e T H E N E R R O R 0046740 E r r o r [ s t r e a m , i n 0046760 v a l i d O p e r a t i o n ] ; 0047000 \r I F I n l i n e . H 0047020 i g h H a l f [ n e w L e n g t 0047040 h I n P a g e s ] # 0 T H 0047060 E N \r E R R O R E 0047100 r r o r [ s t r e a m , i n d 0047120 e x O u t O f R a n g e ] ; \r 0047140 o l d L e n g t h 254 h 0047160 . l e n g t h ; \r M F i 0047200 l e . S e t L e n g t h [ h . f 0047220 i l e , f i l e L e n g t h ] 0047240 ; \r h . l e n g t h 254 0047260 f i l e L e n g t h ; \r 0047300 I F n e w L e n g t h I n P 0047320 a g e s > h . f i l e P a g 0047340 e s T H E N \r h 0047360 . f i l e P a g e s 254 I n l 0047400 i n e . L o w H a l f [ n e w L 0047420 e n g t h I n P a g e s ] ; \r 0047440 S E L E C T T R U E F 0047460 R O M \r f i l e L e 0047500 n g t h < b u f f e r M i n 0047520 = > { \r p a 0047540 g e : C A R D I N A L 254 \r \t 0047560 I F f i l e L e n g t h 0047600 < = h . b u f f e r S p a c e 0047620 P a g e s * b y t e s P e r P a 0047640 g e / 2 T H E N 0 \r \t E 0047660 L S E ( I n l i n e . L o n g 0047700 D i v [ f i l e L e n g t h , 0047720 b y t e s P e r P a g e ] - 0047740 h . b u f f e r S p a c e P a g 0047760 e s / 2 ) ; \r S 0050000 e t u p B u f f e r [ h , p a 0050020 g e ] ; \r \t h . i n d e x 254 0050040 h . d a t a B y t e s I n B u f 0050060 f e r } ; \r f i l e 0050100 L e n g t h > b u f f e r M 0050120 i n + h . b u f f e r B y t 0050140 e s = > h . e o f I n B u f 0050160 f e r 254 F A L S E ; \r 0050200 o l d L e n g t h > f 0050220 i l e L e n g t h = > { \r 0050240 h . d a t a B y t 0050260 e s I n B u f f e r 254 I n l 0050300 i n e . L o w H a l f [ f i l e 0050320 L e n g t h - b u f f e r M 0050340 i n ] ; \r \t h . i n d e x 254 0050360 M I N [ h . d a t a B y t e s I 0050400 n B u f f e r , h . i n d e x 0050420 ] ; \r \t h . e o f I n B u f f e 0050440 r 254 T R U E } ; \r 0050460 E N D C A S E = > h . d 0050500 a t a B y t e s I n B u f f e r 0050520 254 I n l i n e . L o w H a l 0050540 f [ f i l e L e n g t h - b 0050560 u f f e r M i n ] ; \r R 0050600 E T U R N ; \r E N D ; \r 0050620 \r - - U t i l i t i e s \r 0050640 \r m a x B u f f e r P a g e 0050660 s : C A R D I N A L = 4 0 0050700 ; \r s w a p U n i t S i z e 0050720 : C A R D I N A L = 5 ; \r 0050740 g r o w I n c r e m e n t : 0050760 C A R D I N A L = 1 0 ; \r 0051000 \r l o c a l B u f f e r 0051020 P a g e s : C A R D I N A L 0051040 254 m a x B u f f e r P a g e s 0051060 ; \r l o c a l O f f s e t : 0051100 C A R D I N A L 254 s w a p 0051120 U n i t S i z e ; \r \r C 0051140 o m p u t e L e n g t h : P R 0051160 O C E D U R E [ h : M y H a 0051200 n d l e ] R E T U R N S [ L 0051220 O N G C A R D I N A L ] = 0051240 I N L I N E { \r R E T 0051260 U R N [ I n l i n e . L o n g M 0051300 u l t [ h . f i r s t F i l e P 0051320 a g e I n B u f f e r , b y t 0051340 e s P e r P a g e ] + h . d 0051360 a t a B y t e s I n B u f f e r 0051400 ] } ; \r \r C l e a n u p 0051420 : P R O C E D U R E [ h : 0051440 M y H a n d l e , f i l e : 0051460 M F i l e . H a n d l e ] = \r 0051500 B E G I N \r I F 0051520 h . w r i t e T H E N { \r 0051540 S p a c e . F o r c 0051560 e O u t [ h . b u f f e r S p a 0051600 c e ] } ; \r I F h . l 0051620 e n g t h C h a n g e d T H E 0051640 N { \r M F i l e . 0051660 S e t L e n g t h [ f i l e , 0051700 h . l e n g t h ] ; \r 0051720 h . l e n g t h C h a n g e d 0051740 254 F A L S E } ; \r E 0051760 N D ; \r \r S e t u p B u 0052000 f f e r : P R O C E D U R E 0052020 [ \r h : M y H a n d l 0052040 e , f i l e P a g e : C A R 0052060 D I N A L , s e t L e n g t h 0052100 : B O O L E A N 254 F A L S 0052120 E ] = \r B E G I N \r 0052140 f i l e P a g e s F o l l 0052160 o w i n g : C A R D I N A L ; 0052200 \r i n d e x O f S t a r 0052220 t O f B u f f e r : L O N G 0052240 C A R D I N A L ; \r I F 0052260 h . b u f f e r S p a c e P a 0052300 g e s = 0 O R h . f i l 0052320 e P a g e s < = f i l e P a 0052340 g e T H E N { \r 0052360 h . i n d e x 254 h . b u f f 0052400 e r B y t e s 254 h . d a t a 0052420 B y t e s I n B u f f e r 254 0052440 0 ; \r h . e o f I n 0052460 B u f f e r 254 T R U E ; \r 0052500 R E T U R N } ; \r 0052520 I F h . b u f f e r = 0052540 N I L T H E N \r B 0052560 E G I N \r h . b u f 0052600 f e r S p a c e 254 S p a c e 0052620 . A l l o c a t e [ c o u n t : 0052640 h . b u f f e r S p a c e P a 0052660 g e s ] ; \r h . b u 0052700 f f e r 254 h . b u f f e r S 0052720 p a c e . p o i n t e r ; \r 0052740 E N D \r E L S E 0052760 E m p t y B u f f e r [ h , 0053000 F A L S E ] ; \r I F s 0053020 e t L e n g t h T H E N \r 0053040 M F i l e O p s . S e 0053060 t M i n i m u m F i l e D a t a 0053100 P a g e s [ h . f i l e , h . 0053120 f i l e P a g e s + h . s t 0053140 r e a m B a s e ! \r 0053160 U N W I N D = > { S 0053200 p a c e . D e a l l o c a t e [ 0053220 h . b u f f e r S p a c e ] ; 0053240 h . b u f f e r 254 N I L } ] 0053260 ; \r [ ] 254 S p a c e 0053300 . M a p A t [ \r a t 0053320 : h . b u f f e r S p a c e , 0053340 \r w i n d o w : 0053360 [ h . c a p a , f i l e P a g 0053400 e + ( l e a d e r P a g e s 0053420 + h . s t r e a m B a s e ) 0053440 , h . b u f f e r S p a c e P 0053460 a g e s ] , \r a c c 0053500 e s s : I F h . r e a d A 0053520 N D ~ h . w r i t e A N D 0053540 ~ h . s h r i n k T H E N r 0053560 e a d O n l y E L S E r e a 0053600 d W r i t e , \r u s 0053620 a g e : M U s a g e . m F i l 0053640 e L o c a l S t r e a m , \r 0053660 s w a p U n i t s : [ 0053700 u n i f o r m [ s w a p U n i t 0053720 S i z e ] ] ] ; \r f i l 0053740 e P a g e s F o l l o w i n g 0053760 254 h . f i l e P a g e s - 0054000 f i l e P a g e ; \r i n 0054020 d e x O f S t a r t O f B u f f 0054040 e r 254 L O N G [ f i l e P a 0054060 g e ] * b y t e s P e r P a g e 0054100 ; \r - - b u g w i 0054120 t h h . s t r e a m B a s e 0054140 i n h e r e s o m e w h e r 0054160 e * * * * * * * * * * * * 0054200 * * * \r I F h . e o f 0054220 I n B u f f e r 254 ( h . l e 0054240 n g t h < = ( i n d e x O f 0054260 S t a r t O f B u f f e r + 0054300 h . b u f f e r S p a c e P a g 0054320 e s * b y t e s P e r P a g e ) 0054340 ) T H E N \r h . d 0054360 a t a B y t e s I n B u f f e r 0054400 254 I n l i n e . L o w H a l 0054420 f [ h . l e n g t h - i n d 0054440 e x O f S t a r t O f B u f f e 0054460 r ] \r E L S E h . d a 0054500 t a B y t e s I n B u f f e r 0054520 254 h . b u f f e r S p a c e P 0054540 a g e s * b y t e s P e r P a g 0054560 e ; \r h . b u f f e r B 0054600 y t e s 254 \r M I N 0054620 [ f i l e P a g e s F o l l o w 0054640 i n g , h . b u f f e r S p a 0054660 c e P a g e s ] * b y t e s 0054700 P e r P a g e ; \r h . f 0054720 i r s t F i l e P a g e I n B u 0054740 f f e r 254 f i l e P a g e ; 0054760 \r R E T U R N \r 0055000 E N D ; \r \r E m p t y B u f 0055020 f e r : P R O C E D U R E [ 0055040 h : M y H a n d l e , d e l 0055060 e t e : B O O L E A N , f i 0055100 l e : M F i l e . H a n d l e 0055120 254 N I L ] = \r B E 0055140 G I N \r I F h . b u f 0055160 f e r = N I L T H E N R 0055200 E T U R N ; \r I F f i 0055220 l e = N I L T H E N f i 0055240 l e 254 h . f i l e ; \r 0055260 C l e a n u p [ h , f i l e 0055300 ! U N W I N D = > I F 0055320 d e l e t e T H E N { \r 0055340 [ ] 254 S p a c e . U 0055360 n m a p A t [ h . b u f f e r S 0055400 p a c e . p o i n t e r ] ; \r 0055420 S p a c e . D e a l l 0055440 o c a t e [ h . b u f f e r S p 0055460 a c e ] ; \r h . b 0055500 u f f e r 254 N I L } ] ; \r 0055520 I F d e l e t e T H E 0055540 N { \r [ ] 254 S 0055560 p a c e . U n m a p A t [ h . b 0055600 u f f e r S p a c e . p o i n t 0055620 e r ] ; \r S p a c e 0055640 . D e a l l o c a t e [ h . b u 0055660 f f e r S p a c e ] ; \r 0055700 h . b u f f e r 254 N I 0055720 L } \r E L S E [ ] 254 0055740 S p a c e . U n m a p A t [ h 0055760 . b u f f e r S p a c e . p o i 0056000 n t e r ] ; \r h . i n d 0056020 e x 254 h . b u f f e r B y t 0056040 e s 254 h . d a t a B y t e s 0056060 I n B u f f e r 254 0 ; \r 0056100 R E T U R N \r E N D 0056120 ; \r \r A d v a n c e B u f f 0056140 e r : P R O C E D U R E [ h 0056160 : M y H a n d l e ] = \r 0056200 B E G I N \r f i l e 0056220 P a g e s I n B u f f e r : C 0056240 A R D I N A L = h . b u f f 0056260 e r B y t e s / b y t e s P e r 0056300 P a g e ; \r n e x t P a 0056320 g e : C A R D I N A L = h 0056340 . f i r s t F i l e P a g e I n 0056360 B u f f e r + f i l e P a g 0056400 e s I n B u f f e r ; \r 0056420 o l d F i l e P a g e s : C A 0056440 R D I N A L = h . f i l e P 0056460 a g e s ; \r c h a n g e 0056500 S i z e : B O O L E A N 254 0056520 F A L S E ; \r s e t u p 0056540 O f f s e t : C A R D I N A L 0056560 254 0 ; \r I F n e x 0056600 t P a g e > = h . f i l e P 0056620 a g e s T H E N { \r 0056640 h . f i l e P a g e s 254 0056660 h . f i l e P a g e s + g r 0056700 o w I n c r e m e n t ; c h a 0056720 n g e S i z e 254 T R U E } ; 0056740 \r S e t u p B u f f e r 0056760 [ h , M A X [ n e x t P a g e 0057000 , s e t u p O f f s e t ] - s 0057020 e t u p O f f s e t , c h a n 0057040 g e S i z e ! \r U 0057060 N W I N D = > h . f i l e P 0057100 a g e s 254 o l d F i l e P a 0057120 g e s ] ; \r h . i n d e 0057140 x 254 \r M I N [ ( n 0057160 e x t P a g e - h . f i r s t F 0057200 i l e P a g e I n B u f f e r ) 0057220 * b y t e s P e r P a g e , 0057240 h . d a t a B y t e s I n B u 0057260 f f e r ] ; \r R E T U R 0057300 N \r E N D ; \r \r P a 0057320 g e s F o r B y t e s : P R O 0057340 C E D U R E [ w : L O N G 0057360 C A R D I N A L ] R E T U R N 0057400 S [ p : L O N G C A R D I 0057420 N A L ] = \r I N L I N 0057440 E { R E T U R N [ ( w + b y t 0057460 e s P e r P a g e - 1 ) / b y t 0057500 e s P e r P a g e ] } ; \r \r 0057520 E N D . o f M S t r e a 0057540 m I m p l \r \r \r 0057554