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