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