$ od -c -N 50000 [Indigo]<Spruce>12>sources>sprucespool.sr!1 0000000 / / B c p l S p r u c e S p 0000020 o o l . B c p l \r / / U s e 0000040 E F T P p r o t o c o l t 0000060 o a c c e p t a n d q u e 0000100 u e P r e s s F i l e s \r \r 0000120 / / g e t " S p r u c e . d " 0000140 m a k e s t o o m a n y 0000160 " g e t " f i l e s \r \t g e t 0000200 " S p r u c e I n L d O u t L 0000220 d . d " \t \t / / I n L d / O u 0000240 t L d m e s s a g e s f o r 0000260 s p o o l e r < - > s e r 0000300 v i c e c o m m u n i c a t i 0000320 o n \r \t g e t " S p r u c e P 0000340 r i n t e r s . d " \r \t g e t 0000360 " S p r u c e D o c . d " \r / / 0000400 \t g e t " S p r u c e f o n t 0000420 . d " \r / / \t g e t " S p r u 0000440 c e b a n d . d " \r \t g e t " 0000460 s p r u c e M i s c . d " \r g e 0000500 t " S p r u c e F i l e s . d 0000520 " \r g e t " p u p E f t p . d 0000540 e c l " \r \r e x t e r n a l / 0000560 / d e f i n e d h e r e \r \t 0000600 [ \r \t I n i t S p o o l \r \t P r 0000620 e p a r e T o S p o o l \r \t S o 0000640 m e o n e I s K n o c k i n g \r 0000660 \t S p o o l A F i l e \r \t ] \r \r 0000700 e x t e r n a l / / e x t e 0000720 r n a l \r \t [ \r \t / / S p \0 006 0000740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0000760 \0 \0 001 336 \0 \0 \0 \0 006 232 \0 \0 366 357 370 366 0001000 r u c e Q u e u e \r \t A d d T o 0001020 Q u e u e \r \t C l e a n u p Q u 0001040 e u e \r \t F u l l Q u e u e \r \t 0001060 I n i t i a l i z e Q u e u e \r 0001100 \r \t / / S p r u c e U s e r \r 0001120 \t P o s t \r \r \t / / S p r u c 0001140 e F i l e s , S p r u c e S t 0001160 r e a m s \r \t C r e a t e S p r 0001200 u c e F i l e \r \t C r e a t e S 0001220 p r u c e S u b f i l e \r \t C u 0001240 r r e n t P o s \r \t F o r g e t 0001260 S p r u c e F i l e \r \t I n i t 0001300 S p r u c e F i l e \r \t R e s e 0001320 t S p r u c e F i l e \r \t W i n 0001340 d o w C r e a t e S t r e a m \r 0001360 \t W i n d o w N e x t P a g e \r 0001400 \t W i n d o w W r i t e B l o c 0001420 k \r \r \t / / S p r u c e U t i 0001440 l s \r \t C u r s o r C h a r \r \t 0001460 C u r s o r D i g i t \r \t F i l 0001500 l I n N a m e s \r \t F S G e t X 0001520 \r \t V p a g e T o R p a g e \r \r 0001540 \t / / S p r u c e P L i s t s 0001560 \r \t P a r s e P r i n t I n s t 0001600 a n c e P a r a m s \r \t G e n P 0001620 r i n t e r C a p a b i l i t i 0001640 e s \r \t G e n J o b S t a t u s 0001660 \r \r \t / / E F T P \r \t C l o s 0001700 e E F T P S o c \r \t I n i t E F 0001720 T P P a c k a g e \r \t O p e \0 006 0001740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0001760 \0 \0 001 336 376 \0 \0 \0 004 232 \0 \0 366 357 370 366 0002000 n E F T P S o c \r \t R e c e i v 0002020 e E F T P P a c k e t \r \t S e n 0002040 d E F T P A b o r t \r \r \t / / 0002060 P u p P a c k a g e \r \t A p p 0002100 e n d S t r i n g T o P u p \r \t 0002120 C o m p l e t e P u p \r \t E x c 0002140 h a n g e P o r t s \r \t I n i t 0002160 P u p L e v e l 1 \r \t O p e n L 0002200 e v e l 1 S o c k e t \r \t R e l 0002220 e a s e P B I \r \r \t / / Q u e 0002240 u e \r \t D e q u e u e \r \t E n q 0002260 u e u e \r \r \t / / C o n t e x 0002300 t s \r \t B l o c k \r \t I n i t i 0002320 a l i z e C o n t e x t \r \r \t / 0002340 / O S \r \t C l o s e s \r \t E n 0002360 d o f s \r \t M o v e B l o c k \r 0002400 \t P u t s \r \t Z e r o \r \r \t / / 0002420 s t a t i c s \r \t C a p a b i 0002440 l i t i e s \r \t f r e e F i l e 0002460 \r \t m a x Q u e u e d \r \t n u m 0002500 F i l e s S p o o l e d \r \t n u 0002520 m M u s t P r i n t \r \t p r e s 0002540 s F i l e I n d e x \r \t p r i n 0002560 t e r N a m e \r \t r e a s o n V 0002600 e c \r \t S p o o l F i l e \r \t s 0002620 p o o l i n g \r \t s p o o l S o 0002640 c k e t \r \t S p r u c e Z o n e 0002660 \r \t ] \r \r s t a t i c [ s t 0002700 a t u s S o c k e t ; P o s t 0002720 S t r ] \r \r / / F i l e \0 006 0002740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0002760 \0 \0 001 336 374 \0 \0 \0 002 232 \0 \0 366 357 370 366 0003000 - w i d e s t r u c t u r e 0003020 a n d m a n i f e s t d e c 0003040 l a r a t i o n s . \r \r m a n i 0003060 f e s t \r \t [ \r \t S T A T S t a 0003100 c k S i z e = 2 0 0 / / 0003120 e n o u g h 7 - 1 7 - 7 9 / 0003140 / 1 0 0 8 - 3 - 7 7 \r \t E 0003160 F T P F a i l e d = - 1 0 0003200 \r \t E F T P S e r v e r F a i l 0003220 e d = - 1 1 \r \t M e d i u 0003240 m W a i t A b o r t = 7 \r \t 0003260 L o n g W a i t A b o r t = 0003300 6 \r \t s o c k e t P r i n t e r 0003320 S t a t u s = # 2 1 \r \t t y 0003340 p e P r i n t e r S t a t u s R 0003360 e q u e s t = # 2 0 0 \r \t t 0003400 y p e P r i n t e r S t a t u s 0003420 R e p l y = # 2 0 1 \r \t t y 0003440 p e P r C a p a b i l i t y R e 0003460 q u e s t = # 2 0 2 \r \t t y 0003500 p e P r C a p a b i l i t y R e 0003520 p l y = # 2 0 3 \r \t t y p e 0003540 J o b S t a t u s R e q u e s t 0003560 = # 2 0 4 \r \t t y p e J o b 0003600 S t a t u s R e p l y = # 2 0003620 0 5 \r \r \t I n t e r P u p T i m 0003640 e o u t = 1 2 0 0 / / 1 0003660 2 s e c o n d s , t h e n 0003700 c h e c k f o r o t h e r 0003720 r e q u e s t s \r \t \0 006 020 @ 377 v 0003740 037 \0 \a \0 035 \0 \0 ( \0 232 \0 257 \0 \0 @ 0003760 \0 \0 001 332 372 \0 \0 \0 \v 025 \0 \0 364 355 370 366 0004000 m a x T i m e o u t s = 3 \t 0004020 / / a f t e r t h 0004040 i s m a n y , a b o r t t 0004060 r a n s f e r a n y h o w \r \r 0004100 \t n a h S p o o l = 3 \r \r \t 0004120 P r I n s t P a s s 0 = # 1 0004140 2 5 3 1 4 \r \t P r I n s t P a s 0004160 s 1 = # 1 7 0 3 7 7 \r \t ] \r 0004200 \r \r \r / / \t T h i s m o d u l 0004220 e u s e s P u p E F T P , 0004240 a n d u n d e r l y i n g P 0004260 u p p a c k a g e s , a l o 0004300 n g w i t h t h e S p r u 0004320 c e Q u e u e m o d u l e t 0004340 o \r / / m a n a g e t h e 0004360 s p o o l q u e u e , t o 0004400 l i s t e n t o t h e E t 0004420 h e r n e t , r e s p o n d 0004440 t o s t a t u s r e q u e s 0004460 t s , a n d s p o o l i n 0004500 c o m i n g \r / / P r e s s 0004520 f i l e s . \r \r / / \t P u p E F 0004540 T P h a s b e e n m o d e 0004560 s t l y m o d i f i e d f r 0004600 o m t h e p u b l i c l y 0004620 a v a i l a b l e v e r s i o 0004640 n , a l l o w i n g b e t t 0004660 e r a c c e s s t o \r / / 0004700 t h e p b i - l e v e l a n 0004720 d t o e r r o r m a n \0 006 0004740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0004760 \0 \0 001 336 376 257 \0 \0 \t 025 \0 \0 366 357 370 366 0005000 a g e m e n t . \r \r / / \t T h e 0005020 m a i n r o u t i n e ( s 0005040 e e S p r o u l l e r ( ) i 0005060 n S p r u c e . b c p l ) c 0005100 a l l s S o m e o n e I s K n 0005120 o c k i n g u n t i l s o m 0005140 e o n e i s , \r / / t h e n 0005160 S p o o l A F i l e t o g 0005200 e t o n e . P r e p a r e T 0005220 o S p o o l i s c a l l e d 0005240 , t o s t a r t E F T P 0005260 l i s t e n i n g , a s s o 0005300 o n a s p o s s i b l e a 0005320 f t e r \r / / t h e p r e v 0005340 i o u s f i l e i s i n . 0005360 \r \r \f \r / / - - - - - - - - - 0005400 - - - - - - - - - - - - - - - - * 0005440 - - - - - - - - - - - - - \r l e 0005460 t S o m e o n e I s K n o c k 0005500 i n g ( ) = v a l o f \r / / 0005520 - - - - - - - - - - - - - - - 0005540 - - - - - - - - - - - - - - - - * 0005600 - - - - - - - \r / / \t F i l t e 0005620 r o u t n o n - E F T P d 0005640 a t a r e q u e s t s d i r 0005660 e c t e d t o s p o o l S o 0005700 c k e t ( s o c k e t 2 0 ) 0005720 . \r / / \t R e t u r n s t \0 006 0005740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0005760 \0 \0 001 336 374 257 \0 \0 \a 025 \0 \0 366 357 370 366 0006000 r u e o n l y i f t h e r 0006020 e ' s a n E F T P d a t a 0006040 r e q u e s t q u e u e d 0006060 o n t h e s o c k e t . D 0006100 o e s n o t d e q u e u e ! 0006120 \r / / \t A s i m p l e " e a 0006140 r " f u n c t i o n i n t 0006160 h e S p r i n t p r o g r a 0006200 m s i m u l a t e s t h i s 0006220 f u n c t i o n \r \t [ \r \t l e 0006240 t i n P b i = s p o o l S 0006260 o c k e t > > E F T P S o c . i 0006300 Q . h e a d \t / / N . B . N 0006320 O T d e q u e u e d y e t ! 0006340 \r \t u n l e s s i n P b i d 0006360 o [ B l o c k ( ) ; r e s 0006400 u l t i s f a l s e ] \r \t / 0006420 / ~ ~ i f l o c k e d o 0006440 n h o s t a n d n o t t 0006460 h i s h o s t , r e l e a s 0006500 e p b i a n d c o n t i n 0006520 u e \r \t i f i n P b i > > P B 0006540 I . p u p . t y p e e q t y 0006560 p e E F T P D a t a r e s u l 0006600 t i s i n P b i / / g o 0006620 t r y i t \r \t R e l e a s e P 0006640 B I ( D e q u e u e ( l v s p 0006660 o o l S o c k e t > > E F T P S 0006700 o c . i Q ) ) / / i g n o r 0006720 a b l e p a c k e t \r \t ] \0 006 0006740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0006760 \0 \0 001 336 372 257 \0 \0 005 025 \0 \0 366 357 370 366 0007000 r e p e a t / / u n t i l 0007020 q e m p t y o r a g o 0007040 o d o n e f o u n d \r \r / / 0007060 - - - - - - - - - - - - - - - 0007100 - - - - - - - - - - - - - - - - * 0007140 - - - - - - - \r a n d S p o o 0007160 l A F i l e ( ) = v a l o f 0007200 / / S o m e o n e i s k 0007220 n o w n t o b e k n o c k 0007240 i n g \r / / - - - - - - - - - 0007260 - - - - - - - - - - - - - - - - * 0007320 - - - - - - - - - - - - - \r / / 0007340 \t M a n a g e s t h e E F T 0007360 P o p e r a t i o n , t h e 0007400 q u e u e i n g o p e r a t 0007420 i o n v i a S p r u c e Q u 0007440 e u e f u n c t i o n s , a 0007460 n d t h e \r / / r e p o r t 0007500 i n g o f r e s u l t s t 0007520 o t h e S p r u c e U s e r 0007540 c o n t e x t v i a t h e 0007560 P o s t ( ) f u n c t i o n 0007600 . F i l l I n N a m e s ( ) , 0007620 p r o p e r l y a \r / / S 0007640 p r i n t o p e r a t i o n , 0007660 e x a m i n e s t h e P r 0007700 e s s d i r e c t o r y f o 0007720 r P r e s s f i l e i \0 006 0007740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0007760 \0 \0 001 336 370 257 \0 \0 003 025 \0 \0 366 357 370 366 0010000 n f o r m a t i o n : n a m e 0010020 , c r e a t o r , d a t e , 0010040 \r / / a p p r o x i m a t e 0010060 s i z e , e t c . T h i s 0010100 i s u s e d i n r e p o r 0010120 t s a t t h e u s e r t 0010140 e r m i n a l a n d i n s 0010160 p o o l e r s t a t u s p a 0010200 c k e t s . \r / / \t R e t u r n 0010220 s t r u e o n l y i f a 0010240 n o t h e r s p o o l r e q 0010260 u e s t a r r i v e d w h i 0010300 l e s p o o l i n g ( s o m 0010320 e o n e e l s e k n o c k e 0010340 d ) . \r [ \r l e t d o 0010360 c , s p o o l R e s u l t = 0010400 0 , E C S p o o l T e r m i 0010420 n a t e \r t e s t s p o o 0010440 l i n g t h e n \r \t [ \r \t t e 0010460 s t F u l l Q u e u e ( ) t 0010500 h e n \r \t \t [ \r \t \t P o s t S t 0010520 r = " S o r r y , S p r u 0010540 c e S p o o l i n g F a c i 0010560 l i t y F u l l - - P l e a s 0010600 e T r y A g a i n . " \r \t \t 0010620 n u m M u s t P r i n t = 3 0010640 \r \t \t S e n d E F T P A b o r t 0010660 ( s p o o l S o c k e t , M e 0010700 d i u m W a i t A b o r t , P 0010720 \0 006 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( 001 025 0010740 001 * 001 - 001 D 001 H 001 216 001 241 \0 \0 @ 0010760 \0 \0 001 320 366 257 \0 \0 002 \t \0 \0 357 350 370 366 0011000 o s t S t r ) \r \t \t ] \r \t 0011020 o r \r \t \t [ \r \t \t C u r s o 0011040 r C h a r ( $ E ) \r \t \t d o c 0011060 = F e t c h A F i l e ( ) \r \t 0011100 \t ] \r \t ] \r o r \r \t [ \r 0011120 \t P o s t S t r = ( r e a s 0011140 o n V e c ! 0 ? r e a s o n V 0011160 e c , " S o r r y , S p r u 0011200 c e S e r v i c e n o t A 0011220 v a i l a b l e - - P l e a 0011240 s e T r y A g a i n L a t 0011260 e r . " ) \r \t S e n d E F T P 0011300 A b o r t ( s p o o l S o c k e 0011320 t , L o n g W a i t A b o r t 0011340 , P o s t S t r ) \r \t ] \r \r 0011360 C l o s e E F T P S o c ( s 0011400 p o o l S o c k e t ) \r l e 0011420 t s o m e o n e E l s e K n o 0011440 c k e d = s p o o l S o c k 0011460 e t > > E F T P S o c . S o m e 0011500 o n e E l s e W a i t i n g \r 0011520 i f d o c t h e n \r 0011540 [ \r P o s t S t r = 0011560 " " / / N o i n f o r m 0011600 a t i o n t o r e l a t e \r 0011620 l e t s p o o l e d F 0011640 i l e = d o c > > D o c G . 0011660 P r e s s F i l e \r C l 0011700 e a n u \0 006 020 @ 377 v 037 \0 \a \0 035 \0 0011720 \0 ( \0 \t \0 \r \0 025 \0 031 \0 * \0 ? \0 C 0011740 \0 F \0 M \0 P \0 266 \0 354 \0 360 \0 \0 @ 0011760 \0 \0 001 304 377 241 \0 \0 / G \0 \0 351 342 370 366 0012000 p Q u e u e ( s p o o l e d F i 0012020 l e > > S P r u c e F i l e . n 0012040 u m P a g e s , f a l s e ) 0012060 / / E l i m i n a t e o b l 0012100 i t e r a t e d e n t r i e s 0012120 \r i f d o c > > D o c 0012140 G . r e p o r t C o d e e q 0012160 0 t h e n \r \t [ \r \t p r e s s 0012200 F i l e I n d e x = p r e s 0012220 s F i l e I n d e x + 1 \r \t s p 0012240 o o l e d F i l e > > S P r u c 0012260 e F i l e . f i l e C o d e = 0012300 F I L E P r e s s + 1 + ( p r 0012320 e s s F i l e I n d e x r e m 0012340 F I L E P r e s s M o d u l u 0012360 s ) \r \t I n i t S p r u c e F i 0012400 l e ( s p o o l e d F i l e , 0012420 1 , 3 ) ; F i l l I n N a m 0012440 e s ( 0 , d o c , s p o o l 0012460 e d F i l e ) / / f i l l 0012500 i n s t u f f f r o m P r 0012520 e s s d i r . \r \t R e s e t S 0012540 p r u c e F i l e ( s p o o l e 0012560 d F i l e ) \r \t A d d T o Q u e 0012600 u e ( d o c ) \r \t i f n u m F 0012620 i l e s S p o o l e d g e m 0012640 a x Q u e u e d - ( m a x Q u e 0012660 u e d r s h i f t 2 ) % 0012700 / / c h e c k q u e u e n 0012720 e a r - f u l l \r \t \0 006 0012740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0012760 \0 \0 001 336 376 360 \0 \0 - G \0 \0 366 357 370 366 0013000 f r e e F i l e > > S P r u c e 0013020 F i l e . n u m P a g e s l e 0013040 ( S p o o l F i l e > > S P r 0013060 u c e F i l e . n u m P a g e s 0013100 r s h i f t 2 ) t h e n \r 0013120 \t \t n u m M u s t P r i n t = 0013140 1 \r \t P o s t S t r , s p o 0013160 o l R e s u l t = " R e c e 0013200 i v e d f r o m r e m o t e 0013220 h o s t " , 0 \r \t ] \r 0013240 ] / / d o c \r P o s t 0013260 ( d o c , s p o o l R e s u l 0013300 t , P o s t S t r ) \r P r 0013320 e p a r e T o S p o o l ( s o m 0013340 e o n e E l s e K n o c k e d ? 0013360 $ I , $ R ) / / R e a d 0013400 y , d e n o t e w h e t h e 0013420 r o t h e r s a t t h e 0013440 d o o r \r r e s u l t i s 0013460 s o m e o n e E l s e K n o c k 0013500 e d \r ] \r \r / / - - - - - 0013520 - - - - - - - - - - - - - - - - * 0013600 - \r a n d P r e p a r e T o S 0013620 p o o l ( c u r s o r C h a r ; 0013640 n u m a r g s n a ) b e 0013660 / / S p r u c e s p o o l e 0013700 r , t h a t i s \r / / - - 0013720 - - - - - - - - - - - - - - \0 006 0013740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0013760 \0 \0 001 336 374 360 \0 \0 + G \0 \0 366 357 370 366 0014000 - - - - - - - - - - - - - - - - * 0014040 - - - - - - \r / / \t A s s u m e 0014060 s s o c k e t h a s b e e 0014100 n i n i t i a l i z e d , a 0014120 n d i s a t p r e s e n t 0014140 c l o s e d . C a l l e d 0014160 b y S p o o l A F i l e ( ) 0014200 a f t e r \r / / c o m p l e t 0014220 e p r o c e s s i n g o f 0014240 a p r e v i o u s l y - s p o 0014260 o l e d f i l e , a n d f 0014300 r o m S p r o u l l e r ( ) 0014320 i n S p r u c e t o b e g 0014340 i n l i s t e n i n g o n \r 0014360 / / i n i t i a l s t a r t 0014400 u p o r a f t e r r e t u 0014420 r n i n g f r o m S p r i n 0014440 t . c u r s o r C h a r i s 0014460 t y p i c a l l y $ R ( r 0014500 e c e i v e d ) , o r $ I \r 0014520 / / ( i n t e r f e r e n c e 0014540 - - s o m e o n e e l s e 0014560 k n o c k e d ) . T h e c 0014600 u r s o r w i l l c o n t a 0014620 i n t h i s l e t t e r a 0014640 n d t h e l o w o r d e r 0014660 d i g i t o f \r / / t h e 0014700 n u m b e r o f f i l e s 0014720 l e f t . T h i s s i \0 006 0014740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0014760 \0 \0 001 336 372 360 \0 \0 ) G \0 \0 366 357 370 366 0015000 m p l e , l a r g e l y v e 0015020 s t i g i a l c o d e , a s 0015040 s i s t s i n s t a t u s 0015060 d i s p l a y . \r [ \r 0015100 l e t f o r e i g n P 0015120 o r t = v e c l e n P o r 0015140 t ; Z e r o ( f o r e i g n P 0015160 o r t , l e n P o r t ) \r 0015200 l e t l o c a l P o r t 0015220 = v e c l e n P o r t ; Z 0015240 e r o ( l o c a l P o r t , l 0015260 e n P o r t ) \r l o c a 0015300 l P o r t > > P o r t . s o c k 0015320 e t ^ 2 = s o c k e t E F T 0015340 P R e c e i v e / / # 2 0 \r 0015360 O p e n E F T P S o c ( 0015400 s p o o l S o c k e t , l o c 0015420 a l P o r t , f o r e i g n P 0015440 o r t ) \r C u r s o r C 0015460 h a r ( n a ? c u r s o r C h 0015500 a r , $ R ) \r C u r s 0015520 o r D i g i t ( n u m F i l e s 0015540 S p o o l e d r e m 1 0 ) \r 0015560 ] \r \r \f \r / / - - - - 0015600 - - - - - - - - - - - - - - - - * 0015660 - - \r a n d F e t c h A F i l 0015700 e ( ) = v a l o f \r / / - 0015720 - - - - - - - - - - - - - - \0 006 0015740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0015760 \0 \0 001 336 370 360 \0 \0 ' G \0 \0 366 357 370 366 0016000 - - - - - - - - - - - - - - - - * 0016040 - - - - - - - \r / / I t i s 0016060 k n o w n t h a t a t l 0016100 e a s t o n e E F T P d a 0016120 t a p a c k e t i s q u e 0016140 u e d . U s e P u p E F T P 0016160 t o a t t e m p t t o s 0016200 p o o l a f i l e . \r / / 0016220 H a n d l e a l l e r r o r 0016240 c o m m u n i c a t i o n w 0016260 i t h r e m o t e h o s t . 0016300 R e t u r n a n y s p o o 0016320 l e d s u b f i l e a n d 0016340 a s u c c e s s r e p o r t 0016360 . \r / / R e t u r n s a D 0016400 o c G s t r u c t u r e , w 0016420 i t h n o n - e m p t y f i 0016440 e l d s : \r / / r e p o r t C 0016460 o d e : \r / / \t 0 : s u c 0016500 c e s s f u l l y r e c e i v 0016520 e d a f i l e . \r / / \t 0016540 o t h e r w i s e : E F T P 0016560 a b o r t c o d e . \r / / P 0016600 r e s s F i l e : \r / / \t T 0016620 h e s u b f i l e o f f r 0016640 e e F i l e ( o f S p o o l 0016660 F i l e ) c o n s u m e d b 0016700 y t h e s p o o l i n g a 0016720 t t e m p t , s u c c e s \0 006 0016740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0016760 \0 \0 001 336 366 360 \0 \0 % G \0 \0 366 357 370 366 0017000 s f u l o r n o t \r / / \t 0017020 ( u s e d b y c a l l 0017040 e r t o a d j u s t q u e 0017060 u e , e t c . ) \r / / F i l 0017100 e H o s t : n e t w o r k a 0017120 n d h o s t o f r e q u e 0017140 s t i n g u s e r \r / / s p 0017160 o o l S o c k e t s t i l l 0017200 c o n t a i n s s t a t e i 0017220 n f o r m a t i o n c o n c e 0017240 r n i n g t h e t r a n s f 0017260 e r . \r [ \r l e 0017300 t n u m T i m e o u t s , b 0017320 y t e C o u n t = m a x T i 0017340 m e o u t s , n i l \r 0017360 l e t d o c = F S G e t X 0017400 ( l e n D o c G , S p r u c e 0017420 Z o n e , 0 ) \r \t d o c > > D 0017440 o c G . d u p l e x = ( C a 0017460 p a b i l i t i e s & m D u 0017500 p l e x ) n e 0 \r d 0017520 o c > > D o c G . F i l e H o s 0017540 t = @ ( l v ( s p o o l S o 0017560 c k e t > > E F T P S o c . i Q 0017600 . h e a d ) > > P B I . p u p . 0017620 s P o r t . n e t ) \r l 0017640 e t s = W i n d o w C r e 0017660 a t e S t r e a m ( f r e e F i 0017700 l e , k s T y p e W r i t e B 0017720 e f o r e R e a d , c h a \0 006 0017740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0017760 \0 \0 001 336 364 360 \0 \0 # G \0 \0 366 357 370 366 0020000 r I t e m , 0 , 0 , n a h 0020020 S p o o l ) \r / / E f 0020040 t p a w a y , s t o r i n g 0020060 i n t o s t r e a m \r \t [ \r 0020100 \t l e t s t r , i n P b i 0020120 = n i l , 0 \r \t b y t e C o 0020140 u n t = R e c e i v e E F T 0020160 P P a c k e t ( s p o o l S o c 0020200 k e t , I n t e r P u p T i m 0020220 e o u t , l v i n P b i ) \r 0020240 \t s w i t c h o n b y t e C o 0020260 u n t i n t o \r \t [ \r 0020300 \t d e f a u l t : / / 0020320 > 0 ( o r 0 a n d n o 0020340 t e n d - - e m p t y p 0020360 a c k e t ) , g o t s o m e 0020400 t h i n g \r \t \t [ \r \t \t l e t 0020420 w o r d C o u n t = b y t e 0020440 C o u n t r s h i f t 1 \r \t 0020460 \t l e t a d d r = l v i 0020500 n P b i > > P B I . p u p . w o 0020520 r d s ^ 1 \r \t \t i f a d d r ! 0020540 0 e q P r I n s t P a s s 0 0020560 & a d d r ! 1 e q P r I 0020600 n s t P a s s 1 t h e n \r \t \t 0020620 i f P a r s e P r i n t I 0020640 n s t a n c e P a r a m s ( a d 0020660 d r + 2 , \r \t \t \t i n P b i > > 0020700 P B I . p u p . l e n g t h - p 0020720 u p O v B y t e s - 4 , d \0 006 0020740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0020760 \0 \0 001 336 362 360 \0 \0 ! G \0 \0 366 357 370 366 0021000 o c ) \r \t \t t h e n \r \t \t 0021020 [ \r \t \t R e l e a s e 0021040 P B I ( i n P b i ) \r \t \t 0021060 i f d o c > > D o c G . n P a 0021100 g e s g e f r e e F i l e > 0021120 > S P r u c e F i l e . n u m P 0021140 a g e s t h e n \r \t \t \t [ \r 0021160 \t \t \t s t r = P o s t S t r 0021200 ; n u m M u s t P r i n t = 0021220 3 \r \t \t \t b y t e C o u n t 0021240 = E F T P A b o r t S e n t \r 0021260 \t \t \t d o c a s e E F T P S e 0021300 r v e r F a i l e d \r \t \t \t ] \r 0021320 \t \t d o c > > D o c G . n 0021340 P a g e s = 0 \r \t \t l 0021360 o o p \r \t \t ] \r \t \t l e t 0021400 w o r d s W r i t = W i n 0021420 d o w W r i t e B l o c k ( s , 0021440 a d d r , w o r d C o u n t 0021460 ) \r \t \t l e t c h r = a d 0021500 d r > > B y t e ^ b y t e C o u 0021520 n t / / i n c a s e o d 0021540 d \r \t \t R e l e a s e P B I ( i 0021560 n P b i ) \r \t \t i f w o r d C 0021600 o u n t n e w o r d s W r i 0021620 t d o \r \t \t \t [ \r \t \t \t s t r 0021640 = P o s t S t r ; n u m M 0021660 u s t P r i n t = 3 \r \t \t \t 0021700 b y t e C o u n t = E F T P 0021720 A b o r t S e n t \r \t \t \t d \0 006 0021740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0021760 \0 \0 001 336 360 360 \0 \0 037 G \0 \0 366 357 370 366 0022000 o c a s e E F T P S e r v e r 0022020 F a i l e d \r \t \t \t ] \r \t \t i f 0022040 ( b y t e C o u n t & 1 ) n 0022060 e 0 t h e n P u t s ( s , 0022100 c h r ) / / o n l y w o 0022120 r k s i f l a s t i n f 0022140 i l e ! ! ! ! \r \t \t e n d c a s 0022160 e \r \t \t ] \r \t c a s e 0022200 0 : / / E F T P E n d R e c 0022220 e i v e d ( a l l d o n e ) 0022240 o r 0 ( e m p t y p a c 0022260 k e t ) , d e p e n d i n g 0022300 o n p b i e x i s t e n c e 0022320 \r \t \t t e s t i n P b i t h 0022340 e n d o c a s e 1 o r b 0022360 r e a k \r \t c a s e E 0022400 F T P T i m e o u t : \r \t \t n u 0022420 m T i m e o u t s = n u m T 0022440 i m e o u t s - 1 \r \t \t i f n 0022460 u m T i m e o u t s g e 0 0022500 & / / i f t r a f f i 0022520 c i s h e a v y , q u i t 0022540 - - e l s e b e m o r e 0022560 t o l e r a n t \r \t \t n o 0022600 t s p o o l S o c k e t > > E 0022620 F T P S o c . S o m e o n e E l 0022640 s e W a i t i n g e n d c a s 0022660 e / / w a i t a w h i l 0022700 e \r \t \t s t r = " R e c e i 0022720 v e r t i m e d o u t . \0 006 0022740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0022760 \0 \0 001 336 356 360 \0 \0 035 G \0 \0 366 357 370 366 0023000 . . . " ; d o c a s e E F T 0023020 P F a i l e d \r \t c a s 0023040 e E F T P A b o r t S e n t : 0023060 s t r = " A b o r t h a 0023100 d t o b e s e n t f r o 0023120 m r e c e i v e r . . . . " ; 0023140 d o c a s e E F T P F a i l 0023160 e d \r \t c a s e E F T 0023200 P A b o r t R e c e i v e d : 0023220 s t r = " E F T P A b o r t 0023240 r e c e i v e d w h i l e 0023260 r e c e i v i n g . . . . " ; 0023300 d o c a s e E F T P F a i l e 0023320 d \r \t c a s e E F T P 0023340 R e s e t R e c e i v e d : \r \t 0023360 \t s t r = " R e s e t R e 0023400 q u e s t . . . e x p e c t 0023420 a r e s t a r t " \r \t \t s p 0023440 o o l S o c k e t > > E F T P S 0023460 o c . S o m e o n e E l s e W a 0023500 i t i n g = t r u e \r \t \t d 0023520 o c a s e E F T P F a i l e d 0023540 \r \t c a s e E F T P N 0023560 o t F i r s t S y n c h : s t 0023600 r = " F i r s t P a c k e 0023620 t R e c e i v e d o u t o 0023640 f s y n c h " ; d o c a s e 0023660 E F T P F a i l e d \r \t 0023700 c a s e E F T P S e r v e r 0023720 F a i l e d : \r \t \t S e n d \0 006 0023740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0023760 \0 \0 001 336 354 360 \0 \0 033 G \0 \0 366 357 370 366 0024000 E F T P A b o r t ( s p o o l S 0024020 o c k e t , E x t e r n a l R 0024040 e c e i v e r A b o r t , s t 0024060 r ) / / - - A b o r t , 0024100 t h e n F a l l T h r u - 0024120 - \r \t c a s e E F T P 0024140 F a i l e d : \r \t \t u n l e s s 0024160 n u m M u s t P r i n t d o 0024200 n u m M u s t P r i n t = 0024220 1 \r \t \t M o v e B l o c k ( l v 0024240 d o c > > D o c G . F i l e S 0024260 t r , s t r , s i z e D o 0024300 c G . F i l e S t r / 1 6 ) \r \t 0024320 \t b r e a k \r \t ] \r \t ] 0024340 r e p e a t \r l e t 0024360 n u m C h a r s = C u r r e 0024400 n t P o s ( s ) \r l e t 0024420 n u m U s e d = E n d o 0024440 f s ( s ) ? f r e e F i l e > 0024460 > S P r u c e F i l e . n u m P 0024500 a g e s , W i n d o w N e x t 0024520 P a g e ( s ) - 1 \r i 0024540 f n o t n u m C h a r s & 0024560 n u m U s e d t h e n n u 0024600 m C h a r s = f r e e F i l 0024620 e > > S P r u c e F i l e . p a 0024640 g e S i z e l s h i f t 1 \r 0024660 d o c > > D o c G . P r 0024700 e s s F i l e = \r \t C r e a t 0024720 e S p r u c e S u b f i l e \0 006 0024740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0024760 \0 \0 001 336 352 360 \0 \0 031 G \0 \0 366 357 370 366 0025000 ( l v f r e e F i l e , 1 , 0025020 n u m U s e d , n u m C h a 0025040 r s ) \r C l o s e s ( s 0025060 ) \r d o c > > D o c G . 0025100 r e p o r t C o d e = b y t 0025120 e C o u n t \r u n l e s 0025140 s s p o o l S o c k e t > > E 0025160 F T P S o c . T r a n s f e r N 0025200 o t S t a r t e d d o \r \t d o 0025220 c > > D o c G . F i l e H o s t 0025240 = @ ( l v s p o o l S o c 0025260 k e t > > E F T P S o c . f r n 0025300 P o r t . n e t ) \r r e 0025320 s u l t i s d o c \r ] 0025340 \r \f \r / / - - - - - - - - - - 0025360 - - - - - - - - - - - - - - - - * 0025420 - - - - - - - - - - - - \r a n d 0025440 P r i n t e r S t a t u s ( ) 0025460 b e / / R e s p o n d t 0025500 o s t a t u s r e q u e s t 0025520 s \r / / - - - - - - - - - - - 0025540 - - - - - - - - - - - - - - - - * 0025600 - - - - - - - - - - - \r / / \t L 0025620 i s t e n s o n s o c k e t 0025640 2 1 f o r " E a r s P r 0025660 o t o c o l " s t a t u s r 0025700 e q u e s t s . R e s p o n d 0025720 s a s d i r e c t e d \0 006 0025740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0025760 \0 \0 001 336 350 360 \0 \0 027 G \0 \0 366 357 370 366 0026000 b y t h e p r o t o c o l . 0026020 \r \t [ \r \t B l o c k ( ) r e p 0026040 e a t w h i l e s t a t u s S 0026060 o c k e t > > P u p S o c . i Q 0026100 . h e a d e q 0 \r \t l e t 0026120 p b i = D e q u e u e ( l v 0026140 s t a t u s S o c k e t > > P 0026160 u p S o c . i Q ) \r \t s w i t c 0026200 h o n p b i > > P B I . p u p 0026220 . t y p e i n t o \r \t [ 0026240 \r \t d e f a u l t : R e 0026260 l e a s e P B I ( p b i ) ; e 0026300 n d c a s e \r \t c a s e 0026320 t y p e P r i n t e r S t a t u 0026340 s R e q u e s t : \r \t \t [ \r \t \t 0026360 E x c h a n g e P o r t s ( p b 0026400 i ) / / p r e p a r e t o 0026420 r e s p o n d \r \t \t l e t r 0026440 e s p o n s e = n o t s p 0026460 o o l i n g ? 1 , \r \t \t \t 2 + 0026500 ( s p o o l S o c k e t > > E F 0026520 T P S o c . T r a n s f e r N o 0026540 t S t a r t e d ? 0 , 1 ) \r 0026560 \t \t p b i > > P B I . p u p . w 0026600 o r d s ^ 1 = r e s p o n s 0026620 e \r \t \t l e t c h a r P o s 0026640 = 3 \r \t \t A p p ( p b i , p r 0026660 i n t e r N a m e , l v c h 0026700 a r P o s ) \r \t \t A p p ( p b i 0026720 , " i s " , l v c h a \0 006 0026740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0026760 \0 \0 001 336 346 360 \0 \0 025 G \0 \0 366 357 370 366 0027000 r P o s ) \r \t \t A p p ( p b i , 0027020 s e l e c t o n r e s p o n 0027040 s e i n t o \r \t \t [ \r 0027060 \t \t c a s e 1 : " U 0027100 n a v a i l a b l e " \r \t \t 0027120 c a s e 2 : " S p o o 0027140 l i n g a n d w a i t i n g 0027160 " \r \t \t c a s e 3 : 0027200 " S p o o l i n g a n d b u 0027220 s y ( f i l e t r a n s f e 0027240 r i n p r o g r e s s ) " \r 0027260 \t \t ] \t \t , l v c h 0027300 a r P o s ) \r \t \t i f r e s p 0027320 o n s e e q 1 t h e n A 0027340 p p ( p b i , r e a s o n V e c 0027360 , l v c h a r P o s ) \r \t \t A 0027400 p p ( p b i , " * N " , l v c 0027420 h a r P o s ) \r \t \t C o m p l e 0027440 t e P u p ( p b i , t y p e P 0027460 r i n t e r S t a t u s R e p l 0027500 y ) \r \t \t e n d c a s e \r \t \t ] 0027520 \r \t c a s e t y p e P r 0027540 C a p a b i l i t y R e q u e s 0027560 t : \r \t \t [ \r \t \t E x c h a n g 0027600 e P o r t s ( p b i ) / / p 0027620 r e p a r e t o r e s p o n 0027640 d \r \t \t l e t l e n g t h = 0027660 G e n P r i n t e r C a p a b 0027700 i l i t i e s ( l v p b i > > 0027720 P B I . p u p . b y t e s ) \0 006 0027740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0027760 \0 \0 001 336 344 360 \0 \0 023 G \0 \0 366 357 370 366 0030000 + p u p O v B y t e s \r \t \t C o 0030020 m p l e t e P u p ( p b i , t 0030040 y p e P r C a p a b i l i t y R 0030060 e p l y , l e n g t h ) \r \t \t 0030100 e n d c a s e \r \t \t ] \r \t 0030120 c a s e t y p e J o b S t a t 0030140 u s R e q u e s t : \r \t \t [ \r \t 0030160 \t E x c h a n g e P o r t s ( p 0030200 b i ) / / p r e p a r e t 0030220 o r e s p o n d \r \t \t l e t 0030240 l e n g t h = G e n J o b S 0030260 t a t u s ( l v p b i > > P B 0030300 I . p u p . b y t e s ) + p u p 0030320 O v B y t e s \r \t \t C o m p l e 0030340 t e P u p ( p b i , t y p e J 0030360 o b S t a t u s R e p l y , l 0030400 e n g t h ) \r \t \t e n d c a s e 0030420 \r \t \t ] \r \t ] \r \t ] r e 0030440 p e a t \r \r / / - - - - - - - 0030460 - - - - - - - - - - - - - - - - * 0030520 - - - - - - - - - - - - - - - \r 0030540 a n d I n i t S p o o l ( s p 0030560 r u c e C t x q ) b e \r / / 0030600 - - - - - - - - - - - - - - - - * 0030660 - - - - - - \r / / \t I n i t i a 0030700 l i z e S p r o u l l e r Q 0030720 ( s p o o l q u e u e ) , \0 006 0030740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0030760 \0 \0 001 336 342 360 \0 \0 021 G \0 \0 366 357 370 366 0031000 a n d s p o o l S o c k e t 0031020 ( t h u s E F T P a n d 0031040 P u p l e v e l 1 . ) \r / / 0031060 \t S t a r t u p t h e S t 0031100 a t u s - l i s t e n e r c o 0031120 n t e x t . s p r u c e C t x 0031140 q i s t h e q u e u e o 0031160 f c o n t e x t s r u n i 0031200 n S p r u c e . \r \t [ \r \t I n 0031220 i t i a l i z e Q u e u e ( ) \t 0031240 / / S p o o l i n g q u e u 0031260 e \r \t s p o o l S o c k e t = 0031300 0 \r \t I n i t P u p L e v e l 0031320 1 ( S p r u c e Z o n e , s p 0031340 r u c e C t x q , 1 0 ) / / 0031360 u p t o 1 0 b u f f e r 0031400 s - - f o r n o w \r \t I n 0031420 i t E F T P P a c k a g e ( ) \r 0031440 \t s p o o l S o c k e t = F 0031460 S G e t X ( l e n E F T P S o c 0031500 , S p r u c e Z o n e , 0 ) 0031520 \r \t s t a t u s S o c k e t = 0031540 F S G e t X ( l e n P u p S o 0031560 c ) \r \t O p e n L e v e l 1 S o 0031600 c k e t ( s t a t u s S o c k e 0031620 t , t a b l e [ 0 ; 0 ; 0031640 s o c k e t P r i n t e r S t 0031660 a t u s ] ) \r \t E n q u e u e 0031700 ( s p r u c e C t x q , \r \t \t I 0031720 n i t i a l i z e C o n t e \0 006 0031740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0031760 \0 \0 001 336 340 360 \0 \0 017 G \0 \0 366 357 370 366 0032000 x t ( F S G e t X ( S T A T S t 0032020 a c k S i z e ) , S T A T S t 0032040 a c k S i z e , P r i n t e r 0032060 S t a t u s ) ) \r \t / / T h e 0032100 s p o o l e r i t s e l f 0032120 r u n s i n t h e m a i n 0032140 p r o g r a m c o n t e x t 0032160 ( S p r o u l l e r M a i n ) 0032200 \r \t ] \r \r / / - - - - - - - 0032220 S p o o l i n g u t i l i t i 0032240 e s - - - - - - - \r \r / / - 0032260 - - - - - - - - - - - - - - - - * 0032340 - - - - - \r a n d A p p ( p b 0032360 i , s t r , p C h a r P o s 0032400 ) b e \r / / - - - - - - - - 0032420 - - - - - - - - - - - - - - - - * 0032460 - - - - - - - - - - - - - - \r / 0032500 / \t P u p e r r o r s t r i 0032520 n g s a r e p l a c e d i 0032540 n P u p d a t a , w i t h 0032560 c h a r a c t e r s e v e n 0032600 - b y t e a l i g n e d , a 0032620 n d n o l e n g t h . \r / / 0032640 T h i s f u n c t i o n i 0032660 n t e r f a c e s w i t h t 0032700 h e P u p l e v e l 1 u 0032720 t i l i t y f o r s e t \0 006 0032740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0032760 \0 \0 001 336 336 360 \0 \0 \r G \0 \0 366 357 370 366 0033000 t i n g t h e m u p . I t 0033020 m a i n t a i n s a c u r 0033040 r e n t \r / / e n d - o f - s 0033060 t r i n g c o u n t t h a t 0033100 t h e u t i l i t y r e q 0033120 u i r e s b u t d o e s n 0033140 o t m a i n t a i n . \r \t [ \r 0033160 \t A p p e n d S t r i n g T o P 0033200 u p ( p b i , @ p C h a r P o 0033220 s , s t r ) \r \t @ p C h a r P 0033240 o s = @ p C h a r P o s + 0033260 s t r > > S T R . l e n g t h 0033300 \r \t ] \r \r / / c o m p i l e i 0033320 f f a l s e t h e n [ \r / 0033340 / - - - - - - - - - - - - - - 0033360 - - - - - - - - - - - - - - - - * 0033420 - - - - - - - - \r / / l e t 0033440 P r i n t A b o r t P B I ( p b 0033460 i ) b e \r / / - - - - - - - 0033500 - - - - - - - - - - - - - - - - * 0033540 - - - - - - - - - - - - - - - \r 0033560 / / ~ ~ P r i n t A b o r t 0033600 P B I ( . . . ) i s a g o 0033620 o d i d e a - - t h e p 0033640 o s t i n g e q u i v . ( f 0033660 r o m a b o r t c a s e ) \r 0033700 \t / / [ \r \t / / P u t s ( d 0033720 s p , $ * N ) ; W o ( p b \0 006 0033740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0033760 \0 \0 001 336 334 360 \0 \0 \v G \0 \0 366 357 370 366 0034000 i > > P B I . p u p . w o r d s 0034020 ^ 1 ) ; W s ( " - A b o r 0034040 t : " ) \r \t / / f o r i 0034060 = 3 t o ( 3 + ( p b 0034100 i > > P B I . p u p . l e n g t 0034120 h - ( p u p O v B y t e s + 2 ) 0034140 ) - 1 ) d o \r \t \t / / P 0034160 u t s ( d s p , p b i > > P B 0034200 I . p u p . b y t e s ^ i ) \r \t 0034220 / / ] \r / / ] / / ~ ~ 0034240 d e p e n d i n g o n c o m 0034260 p l e x i t y , c o u l d u 0034300 s e i n U i n t p o s t 0034320 a c t i v i t y \r \f \r / / - - 0034340 - - - - - H i s t o r y . 0034360 . . \r \r / / D C S , J u l 0034400 y 1 5 , 1 9 7 7 4 : 5 3 0034420 P M , d e r i v e d f r o 0034440 m S p r u c e S p o o l \r / / 0034460 J u l y 1 6 , 1 9 7 7 0034500 4 : 0 1 P M , t u n e f o 0034520 r r e a l e n v i r o n m e 0034540 n t \r / / J u l y 1 8 , 1 0034560 9 7 7 6 : 4 1 P M , r e 0034600 v i s i o n s f o r u s e 0034620 w i t h r e a l m a i n l 0034640 o o p \r / / J u l y 2 5 , 0034660 1 9 7 7 1 : 2 5 P M , a 0034700 s s i g n f i l e C o d e s 0034720 t o s p o o l e d s u b \0 006 0034740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0034760 \0 \0 001 336 332 360 \0 \0 \t G \0 \0 366 357 370 366 0035000 f i l e s \r / / A u g u s t 0035020 1 , 1 9 7 7 1 0 : 2 3 A 0035040 M , a d d P r i n t S t a t 0035060 u s f u n c t i o n \r / / A 0035100 u g u s t 3 , 1 9 7 7 1 0035120 : 4 2 P M , i m p l e m e n 0035140 t f r e e F i l e / s p o o l 0035160 e d f i l e s i n v a r i a 0035200 n t s \r / / A u g u s t 2 2 0035220 , 1 9 7 7 5 : 4 0 P M , 0035240 f i l l i n n a m e s a 0035260 f t e r f i l e a r r i v e 0035300 s \r / / A u g u s t 2 8 , 0035320 1 9 7 7 8 : 1 0 A M , S 0035340 p r u c e - > S p r i n t , S 0035360 p r o u l l e r - > S p r u c e 0035400 \r / / S e p t e m b e r 7 , 0035420 1 9 7 7 1 2 : 3 4 P M , 0035440 a d d Q u e u e c o n t r 0035460 o l ( n u m M u s t P r i n t 0035500 ) c o d e \r / / O c t o b e 0035520 r 2 5 , 1 9 7 7 1 0 : 2 0035540 7 A M , u p g r a d e s p 0035560 o o l e r r o r r e p o r t 0035600 i n g , q u e u e m a n a g 0035620 e m e n t \r / / N o v e m b e 0035640 r 3 , 1 9 7 7 8 : 2 6 0035660 P M , u p g r a d e s t a n 0035700 d - a l o n e p r i n t i n g 0035720 , v 4 . ( 2 , 7 ) \r / / \0 006 0035740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0035760 \0 \0 001 336 330 360 \0 \0 \a G \0 \0 366 357 370 366 0036000 D e c e m b e r 1 6 , 1 9 7 0036020 7 1 1 : 4 1 A M , p o s 0036040 t c o d e r e l e a s e s 0036060 d o c a f t e r s p o o l 0036100 e r r o r \r / / D e c e m b e 0036120 r 1 6 , 1 9 7 7 1 1 : 4 0036140 1 A M , r e p o r t s e n 0036160 d i n g h o s t b e t t e r 0036200 \r / / J a n u a r y 6 , 1 0036220 9 7 8 5 : 3 9 P M , i m 0036240 p r o v e c u r s o r r e p 0036260 o r t i n g \r / / J a n u a r 0036300 y 1 7 , 1 9 7 8 3 : 3 2 0036320 P M , Z e r o - l e n g t h 0036340 E F T P D a t a p a c k e 0036360 t i s O K \r / / J a n u a 0036400 r y 2 3 , 1 9 7 8 8 : 2 0036420 8 A M , p r e s s F i l e I 0036440 n d e x w r a p - a r o u n d 0036460 r e p a i r e d \r / / M a y 0036500 1 5 , 1 9 7 8 9 : 4 0 0036520 P M , f i x n u m M u s t P 0036540 r i n t b u g - - w a s 0036560 f a r t o o c o n s e r v a 0036600 t i v e \r / / A u g u s t 3 0036620 0 , 1 9 7 8 9 : 1 0 A M 0036640 , m a s s i v e r e v i s i 0036660 o n , t o u s e " q u e u 0036700 e o b j e c t " , c l e a n 0036720 u p s p o o l e r \r / / \0 006 0036740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0036760 \0 \0 001 336 326 360 \0 \0 005 G \0 \0 366 357 370 366 0037000 S e p t e m b e r 1 , 1 9 0037020 7 8 1 1 : 0 4 A M , r e 0037040 p o r t f u l l , n o t s 0037060 p o o l i n g r e p o r t i n 0037100 g t o e n d u s e r \r / / 0037120 S e p t e m b e r 3 , 1 9 0037140 7 8 6 : 5 5 P M , u s e 0037160 s t a t i c a d d r e s s 0037200 i n s u b f i l e c r e a t 0037220 i o n - - c r e a t e r e 0037240 l . o t h e r s u b f i l e 0037260 \r / / S e p t e m b e r 5 , 0037300 1 9 7 8 9 : 5 6 A M , 0037320 o n e m o r e f u l l f i 0037340 l e b u g \r / / S e p t e m 0037360 b e r 2 0 , 1 9 7 8 1 2 0037400 : 5 6 P M , d o c u m e n t 0037420 , r e f o r m a t \r / / S e 0037440 p t e m b e r 2 3 , 1 9 7 8 0037460 1 : 5 8 A M , u s e p 0037500 r i n t e r N a m e i n s t e 0037520 a d o f " S p r u c e " i 0037540 n s t a t u s r e p o r t \r 0037560 / / O c t o b e r 1 5 , 1 0037600 9 7 8 4 : 3 8 P M , a c 0037620 c o u n t f o r f a s t f 0037640 i l e s \r / / A p r i l 2 5 0037660 , 1 9 7 9 1 1 : 2 8 A M 0037700 u s e S p r u c e * . d n 0037720 a m e s \r / / J u l y 1 \0 006 0037740 020 @ 377 v 037 \0 \a \0 035 \0 \0 ( \0 \0 @ 0037760 \0 \0 001 336 324 360 \0 \0 003 G \0 \0 366 357 370 366 0040000 8 , 1 9 7 9 1 : 2 3 A M 0040020 P L i s t s f o r p r i n 0040040 t e r c a p a b i l i t i e s 0040060 & p r i n t i n s t a n c 0040100 e p a r a m s \r / / J a n u 0040120 a r y 1 8 , 1 9 8 0 1 : 0040140 4 7 P M , s e t D o c G . 0040160 d u p l e x t o m D u p l e 0040200 x v a l u e b e f o r e P 0040220 L i s t c h e c k \r / / M a 0040240 r c h 4 , 1 9 8 0 9 : 4 1 0040260 A M , u s e s t a t i c 0040300 f i r s t D C B t o p r e v 0040320 e n t l o s s o f d i s p 0040340 l a y s t r e a m \r / / M a 0040360 r c h 4 , 1 9 8 0 1 : 0 0 0040400 P M , i f t h e r e i s 0040420 a r e a s o n f o r n o 0040440 t s p o o l i n g , s e n d 0040460 i t a n d e c h o o n 0040500 s c r e e n \r / / M a y 1 , 0040520 1 9 8 0 , 1 2 : 4 6 P M , 0040540 i m p l e m e n t n e w p 0040560 r o t o c o l s t u f f \r / / 0040600 F e b r u a r y 2 , 1 9 8 0040620 1 2 : 4 3 P M , c h a n 0040640 g e h a n d l i n g o f p 0040660 r e s s F i l e I n d e x \r \r \0 0040700 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0040720 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 006 020 @ 0040740 377 v 037 \0 \a \0 035 \0 \0 ( 001 G \0 \0 @ 0040760 \0 \0 001 277 322 360 \0 \0 001 277 001 277 365 356 370 366 0041000