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