$ od -c -N 50000 [Indigo]<AltoSource>EFTPSOURCES.DM!2 0000000 377 \0 \0 P u p E F T P . d e c l \0 0000020 373 223 361 363 350 \0 \0 376 001 \0 251 L / / P 0000040 u p E F T P . d e c l - - D 0000060 e c l a r a t i o n s f o r 0000100 E F T P p a c k a g e \r / / 0000120 C o p y r i g h t X e r o x 0000140 C o r p o r a t i o n 1 9 7 9 0000160 \r \r / / L a s t m o d i f i 0000200 e d J u n e 3 , 1 9 7 9 0000220 1 1 : 5 8 A M b y T a f 0000240 t \r \r g e t " P u p 0 . d e c 0000260 l " \r g e t " P u p 1 . d e c 0000300 l " \r \r / / - - - - - - - - - - 0000320 - - - - - - - - - - - - - - - - * 0000420 - - \r s t r u c t u r e 376 001 \0 C 0000440 q E F T P S o c : \r / / - - - 0000460 - - - - - - - - - - - - - - - - * 0000560 - - - - - - - - - \r [ \r @ P u p 0000600 S o c \r S e q N u m w o r d \r 0000620 A b o r t P B I w o r d \t \t / 0000640 / p r o v i d e s a t e m 0000660 p o r a r y p o i n t e r t 0000700 o m o s t r e c e n t o n 0000720 e \r S o m e o n e E l s e W a i 0000740 t i n g w o r d \r T r a n s f 0000760 e r N o t S t a r t e d w o r 0001000 d \t / / t r u e w h i l e 0001020 f o r e i g n s o c k e t n 0001040 o 376 001 \0 223 ~ t c o m p l e t e 0001060 d \r c u r r e n t T i m e o u t 0001100 w o r d \t / / c u r r e n t 0001120 r e t r a n s m i s s i o n 0001140 t i m e o u t \r s t a r t T i m 0001160 e w o r d \t \t / / t i m e 0001200 a t w h i c h l a s t D a 0001220 t a w a s s e n t \r ] \r m a 0001240 n i f e s t l e n E F T P S o 0001260 c = s i z e E F T P S o c 0001300 / 1 6 \r \r / / - - - - - - - - - 0001320 - - - - - - - - - - - - - - - - * 0001420 - - - \r s t r u c t u r e B y 0001440 t e ^ 1 , 1 376 001 \0 365 l : b y t 0001460 e \r / / - - - - - - - - - - - - 0001500 - - - - - - - - - - - - - - - - * 0001600 \r \r / / - - - - - - - - - - - - 0001620 - - - - - - - - - - - - - - - - * 0001720 \r m a n i f e s t \r / / - - - - 0001740 - - - - - - - - - - - - - - - - * 0002040 - - - - - - - - \r [ \r 376 001 \0 224 - 0002060 / / W e l l - k n o w n s o 0002100 c k e t \r s o c k e t E F T P R 0002120 e c e i v e = 2 0 b \r \r / / 0002140 E F T P p r o t o c o l p 0002160 a c k e t t y p e s \r t y p e 0002200 E F T P D a t a = 3 0 b \r t 0002220 y p e E F T P A c k = 3 1 b 0002240 \r t y p e E F T P E n d = 3 0002260 2 b \r t y p e E F T P A b o r t 0002300 = 3 3 b \r \r / / R e t u r 0002320 n v a l u e s f r o m R e 0002340 c e i v e E F T P B l o c k a 0002360 n d S e n d E F T P B l o c k 0002400 \r E F T P E n d R e c e i v e d 0002420 = 0 \t / / t h a t i s , 0002440 a z e r o b y t e c o u 0002460 376 001 \0 255 ' n t \r E F T P T i m e 0002500 o u t = - 1 \r E F T P A b o 0002520 r t R e c e i v e d = - 2 \r 0002540 E F T P A b o r t S e n t = 0002560 - 3 \r E F T P R e s e t R e c e 0002600 i v e d = - 4 \r E F T P N o 0002620 t F i r s t S y n c h = - 5 0002640 \r \r / / S o m e r e t r a n 0002660 s m i s s i o n t i m e o u t 0002700 s i n u n i t s o f 1 0 0002720 m i l l i s e c o n d s \r s t 0002740 a r t i n g T i m e o u t = 0002760 1 0 0 \t / / ~ 1 s e c . \r m 0003000 a x T i m e o u t = 1 0 0 0 0003020 \t / / ~ 1 0 s e c . \r m i n 0003040 T i m e o u t = 5 \t \t / / 0003060 ~ 5 0 m 376 001 \0 373 032 s . \r d a l 0003100 l y T i m e o u t = 5 0 0 \t 0003120 / / ~ 5 s e c d a l l y 0003140 p e r i o d . \r l o n g B l o c 0003160 k T i m e o u t = 3 0 0 0 \t 0003200 / / ~ 3 0 s e c , f o r 0003220 a l o n g w a i t \r \r / / 0003240 A b o r t c o d e s , f o r 0003260 u s e w i t h i n a n E 0003300 F T P A b o r t p a c k e t \r 0003320 E x t e r n a l S e n d e r A b 0003340 o r t = 1 \r E x t e r n a l 0003360 R e c e i v e r A b o r t = 0003400 2 \r R e c e i v e r B u s y A b 0003420 o r t = 3 \r O u t O f S y n 0003440 c h A b o r t = 4 \r M i s c 0003460 A b o r t = 5 \r 376 \0 002 ] 017 ] 0003500 \r 377 \0 \0 E F T P . b c p l \0 373 231 0003520 274 250 & \0 \0 376 001 \0 232 005 / / E F T 0003540 P . b c p l - - t o p l e 0003560 v e l r o u t i n e a n d 0003600 u s e r i n t e r f a c e f 0003620 o r \r / / t h e E F T P s 0003640 u b s y s t e m \r / / J u n e 0003660 1 7 , 1 9 7 6 3 : 4 4 0003700 P M a p , b a k , j f s \r / 0003720 / l a s t m o d i f i e d 0003740 o n S e p t e m b e r 2 5 , 0003760 1 9 8 2 1 1 : 0 4 A M 0004000 b y T a f t \r / / C o p y r 0004020 i g h t X e r o x C o r p o 0004040 r a t i o n 1 9 7 9 \r \r g e t 0004060 " P u p E F T P . d e c l " 0004100 / / t h a t w i l l a l s 0004120 o g e t p u p - 376 001 \0 254 250 r 0004140 e l a t e d s t u f f \r g e t 0004160 " S t r e a m s . d " \r \r e x 0004200 t e r n a l \r [ \r / / o u t g o 0004220 i n g p r o c e d u r e s \r M 0004240 s g \r \r / / i n c o m i n g p 0004260 r o c e d u r e s \r I n i t E F 0004300 T P P a c k a g e ; E F T P S 0004320 e n d F i l e ; E F T P R e c 0004340 e i v e F i l e \r F i x e d L e 0004360 f t ; G e t F i x e d ; I n 0004400 i t i a l i z e Z o n e ; A l 0004420 l o c a t e \r I n i t i a l i z 0004440 e C o n t e x t ; C a l l C o 0004460 n t e x t L i s t ; B l o c k 0004500 \r I n i t P u p L e v e l 1 ; 0004520 I n i t i a l i z e T i m e r 376 0004540 001 \0 y 274 ; E n q u e u e ; G 0004560 e t P a r t n e r \r O p e n F i 0004600 l e ; C l o s e s ; E n d o 0004620 f s ; G e t s ; P u t s \r W 0004640 s ; W l ; W o ; W n s ; 0004660 C a l l S w a t \r S e t u p R e 0004700 a d P a r a m ; R e a d P a r 0004720 a m ; E v a l P a r a m \r \r / 0004740 / o u t g o i n g s t a t i c 0004760 s \r E F T P Z o n e ; E F T P 0005000 C t x q \r E F T P F r n P o r t 0005020 ; E F T P L c l P o r t ; E 0005040 F T P S o c k e t \r \r / / i n c 0005060 o m i n g s t a t i c s \r k e 0005100 y s ; d s p \r ] \r \r c o m p i l 0005120 e i f n o v a t h e n [ 0005140 e x t e 376 001 \0 r 231 r n a l [ 0005160 I n i t N o v a A l t o ] ] 0005200 \r \r s t a t i c \r [ \r E F T P Z 0005220 o n e ; E F T P C t x q \r E F T 0005240 P F r n P o r t ; E F T P L c l 0005260 P o r t ; E F T P S o c k e t \r 0005300 \r t e m p f i l e ; t e m p s 0005320 t r i n g \r D e b u g S w i t c 0005340 h = f a l s e \r D e b u g C 0005360 o n f i r m S w i t c h = f 0005400 a l s e \r c l i B o d y ; c l 0005420 i S w i t c h e s \r ] \r \r 0005440 m a n i f e s t \r [ \r c l i S t 0005460 a c k S i z e = 3 0 0 0 \r k 0005500 b d S t a c k S i z e = 3 0 0005520 0 0 \r ] \r \r \r / / - - - - - - - 0005540 - - - - - - - - - 376 001 \0 016 ^ - - 0005560 - - - - - - - - - - - - - - - - * 0005620 - - - - - - - - - - - - - - - \r 0005640 l e t E F T P ( ) b e \r / / 0005660 - - - - - - - - - - - - - - - - * 0005760 - \r [ \r l e t v e r s i o n T 0006000 e x t = " E F T P o f S 0006020 e p t e m b e r 2 5 , 1 9 8 0006040 2 " \r \r / / F o r t h e t i 0006060 m e b e i n g , a l l o c a 0006100 t e e v e r y t h i n g h e 0006120 r e \r l e t f r n P o r t = 0006140 v e c l e n P o r t ; 376 001 0006160 \0 016 274 E F T P F r n P o r t = 0006200 f r n P o r t \r l e t l c l 0006220 P o r t = v e c l e n P o 0006240 r t ; E F T P L c l P o r t 0006260 = l c l P o r t \r l e t s o 0006300 c k e t = v e c l e n E F 0006320 T P S o c ; E F T P S o c k e 0006340 t = s o c k e t \r l e t t 0006360 e m p S t r i n g = v e c 0006400 1 2 8 ; t e m p s t r i n g 0006420 = t e m p S t r i n g \r \r c o 0006440 m p i l e i f a l t o t h e 0006460 n [ M s g ( " I n i t i a l 0006500 i z e z o n e s " ) ] \r l e 0006520 t z o n e S i z e = F i x 0006540 e d L e f t ( ) - 1 5 0 0 0006560 / / S 376 001 \0 025 235 e t u p a 0006600 z o n e , f o r l a t e r 0006620 u s e \r i f z o n e S i z e 0006640 l s 0 t h e n z o n e S i 0006660 z e = # 7 7 7 7 7 / / b 0006700 i g g e s t A l l o c c a n 0006720 h a n d l e \r E F T P Z o n e 0006740 = G e t F i x e d ( z o n e 0006760 S i z e ) \r I n i t i a l i z e 0007000 Z o n e ( E F T P Z o n e , z 0007020 o n e S i z e ) \r c o m p i l e 0007040 i f n o v a t h e n [ I 0007060 n i t N o v a A l t o ( E F T P 0007100 Z o n e ) ] \r W l ( v e r s i 0007120 o n T e x t ) \r / / W s ( " [ 0007140 " ) ; W n s ( d s p , z o n 0007160 e S i z e , 0 376 001 \0 227 317 , 1 0007200 0 ) ; W s ( " - ( " ) \r / 0007220 / W n s ( d s p , z o n e S 0007240 i z e , 0 , 1 0 ) ; W s ( 0007260 " + 1 ) = " ) \r / / W n s 0007300 ( d s p , F i x e d L e f t ( 0007320 ) , 0 , 1 0 ) \r / / W l ( 0007340 " ] " ) \r \r / / C h e c k f 0007360 o r a n y g l o b a l f l 0007400 a g s . . . W e w i l l 0007420 s e t i t u p h e r e , 0007440 o t h e r s \r / / c a n r e 0007460 a d m o r e o f i t l a 0007500 t e r \r l e t c l i = f a 0007520 l s e \r l e t b o d y = v 0007540 e c 2 5 6 ; c l i B o d y 0007560 = b o d y \r l e t s w 376 001 \0 0007600 k m i t c h e s = v e c 1 0007620 2 8 ; c l i S w i t c h e s 0007640 = s w i t c h e s \r \r / / R 0007660 e a d f r o m t h e d e f 0007700 a u l t , f i l e C O M . C 0007720 M \r S e t u p R e a d P a r a m 0007740 ( c l i B o d y , c l i S w i 0007760 t c h e s , 0 , 0 ) \r / / S 0010000 c a n t h e g l o b a l s 0010020 w i t c h e s \r f o r i = 0010040 1 t o c l i S w i t c h e s 0010060 ! 0 s w i t c h o n c l i S 0010100 w i t c h e s ! i i n t o \r 0010120 [ G l o b a l S w i t c h B 0010140 l o c k \r c a s e $ d : 0010160 c a s e $ D : \r 0010200 [ \r 376 001 \0 337 220 D e b 0010220 u g S w i t c h = t r u e \r 0010240 e n d c a s e \r 0010260 ] \r c a s e $ c 0010300 : c a s e $ C : \r 0010320 [ \r D e b u g C o 0010340 n f i r m S w i t c h = t r 0010360 u e \r D e b u g S w 0010400 i t c h = t r u e \r 0010420 e n d c a s e \r 0010440 ] \r c a s e $ s : c a 0010460 s e $ S : \r [ \r 0010500 C a l l S w a t ( " S 0010520 c a n n i n g g l o b a l s 0010540 w i t c h e s " ) \r 0010560 e n d c a s e \r ] \r 0010600 d e f a 376 001 \0 9 ! u l t : 0010620 \r [ \r W 0010640 s ( " U n k n o w n g l o b a 0010660 l s w i t c h : " ) \r 0010700 P u t s ( d s p , c l i 0010720 S w i t c h e s ! i ) \r 0010740 W l ( " " ) \r ] 0010760 \r ] G l o b a l S w i t c 0011000 h B l o c k \r \r / / S e e i 0011020 f t h e r e i s a n y t h 0011040 i n g e l s e l e f t i n 0011060 C O M . C M , g e t u n p 0011100 a c k e d s t r i n g \r R e a 0011120 d P a r a m ( 0 , 0 , 0 , 0011140 0 , t r u e ) / / p u t 0011160 s f i l e n a m e i n t o 0011200 c l i B o d y \r i f 376 001 \0 031 0011220 C c l i B o d y ! 0 n e 0 0011240 t h e n c l i = t r u e \r 0011260 \r / / M a j o r t a s k h 0011300 e r e i s t o i n i t i a 0011320 l i z e s t o r a g e a n d 0011340 c o n t e x t l i s t , \r / 0011360 / s t a r t l e v e l 1 r 0011400 u n n i n g , d e c i d e w 0011420 h a t o t h e r p r o c e s 0011440 s e s ( c o n t e x t s ) \r / 0011460 / t o e n a b l e , a n d 0011500 t h e n l e t t h e m a 0011520 l l r u n \r \r M s g ( " I n i 0011540 t i a l i z e c o n t e x t s 0011560 " ) \r E F T P C t x q = A l 0011600 l o c a t e ( E F T P Z o n e , 0011620 376 001 \0 335 340 2 ) / / M a i 0011640 n c o n t e x t q u e u e \r 0011660 E F T P C t x q ! 0 = 0 \r \r 0011700 M s g ( " I n i t i a l i z e 0011720 p u p s t u f f " ) \r / / I n 0011740 i t i a l i z a t i o n s \r I n 0011760 i t P u p L e v e l 1 ( E F T P 0012000 Z o n e , E F T P C t x q , 0012020 1 0 ) / / u p t o 1 0 0012040 b u f f e r s \r I n i t E F T 0012060 P P a c k a g e ( ) \r \r \r / / 0012100 D e c i d e i f w e s h o 0012120 u l d s c h e d u l e t h e 0012140 i n t e r a c t i v e i n p 0012160 u t h a n d l e r , \r / / o 0012200 r t h e c o m m a n d l i 0012220 n e i n t 376 001 \0 / 342 e r p r e 0012240 t e r \r \r t e s t c l i 0012260 \r i f s o I n i t E F T 0012300 P C l i ( ) \r i f n o t 0012320 I n i t E F T P K b d ( ) \r \r M 0012340 s g ( " S t a r t c o n t e x 0012360 t m e c h a n i s m " ) \r / / 0012400 N o w p a s s o f f c o n 0012420 t r o l , a n d n e v e r 0012440 r e t u r n h e r e \r C a l l 0012460 C o n t e x t L i s t ( E F T P 0012500 C t x q ! 0 ) r e p e a t 0012520 / / l o o p f o r e v e r 0012540 \r ] \r \r \r / / T h e s e n e 0012560 x t t w o r o u t i n e s 0012600 r u n i n t h e c o n t e 0012620 x t ( a n d s t a 376 001 \0 242 377 0012640 c k ) o f \r / / E F T P ( ) 0012660 , b u t m e r e l y e s t 0012700 a b l i s h a n d e n q u e 0012720 u e a c o n t e x t i n 0012740 w h i c h \r / / t h e r e a 0012760 l r o u t i n e s c a n r 0013000 u n . A c t u a l r o u t 0013020 i n e s c a n l i v e e l 0013040 s e w h e r e . \r / / - - - - - 0013060 - - - - - - - - - - - - - - - - * 0013140 - - - - - - - - - - - - \r a n d 0013160 I n i t E F T P C l i ( ) b 0013200 e \r / / - - - - - - - - - - - - 0013220 - - - - - - - - - - - - - - - - 0013240 376 001 \0 ^ 366 - - - - - - - - - - - 0013260 - - - - - - - - - - - - - - - - 0013300 - - - - - - - - - - \r E n q u e 0013320 u e ( E F T P C t x q , I n i 0013340 t i a l i z e C o n t e x t ( A 0013360 l l o c a t e ( E F T P Z o n e 0013400 , c l i S t a c k S i z e ) , 0013420 \r c l i S t a c k S i z e , 0013440 E F T P C l i ) ) \r \r \r / / - - 0013460 - - - - - - - - - - - - - - - - * 0013540 - - - - - - - - - - - - - - - \r 0013560 a n d I n i t E F T P K b d ( 0013600 ) b e \r / / - - - - - - - - - 0013620 - - - - - - - - - - - - - - - - 0013640 - - - - - 376 001 \0 273 022 - - - - - - 0013660 - - - - - - - - - - - - - - - - 0013700 - - - - - - - - - - - - - \r E n 0013720 q u e u e ( E F T P C t x q , 0013740 I n i t i a l i z e C o n t e x 0013760 t ( A l l o c a t e ( E F T P Z 0014000 o n e , k b d S t a c k S i z 0014020 e ) , \r k b d S t a c k S i z 0014040 e , E F T P K b d ) ) \r \r \r / 0014060 / - - - - - - - - - - - - - - - 0014100 - - - - - - - - - - - - - - - - * 0014160 - - \r a n d M s g ( s t r ) 0014200 b e \r / / - - - - - - - - - - - 0014220 - - - - - - - - - - - - - - - - 0014240 - - - - - - - - - - 376 001 \0 262 \r - 0014260 - - - - - - - - - - - - - - - - 0014300 - - - - - - - - - - - \r [ \r u n 0014320 l e s s D e b u g S w i t c h 0014340 r e t u r n \r W s ( s t r ) \r 0014360 t e s t D e b u g C o n f i r 0014400 m S w i t c h \r i f s 0014420 o [ W l ( " [ O K ? ? ] " ) 0014440 ; G e t s ( k e y s ) ] \r 0014460 i f n o t W l ( " " ) \r ] 0014500 \r \r \r / / O n e o f t h e 0014520 s e r o u t i n e s w i l l 0014540 h a v e b e e n p l a c e 0014560 d o n t h e c o n t e x t 0014600 l i s t , \r / / a n d w i 0014620 l l t h e r e f o r e b e 0014640 r u n n i n g \r / / - - - - - 376 0014660 001 \0 027 346 - - - - - - - - - - - - 0014700 - - - - - - - - - - - - - - - - * 0014760 \r a n d E F T P C l i ( ) b 0015000 e \r / / - - - - - - - - - - - - 0015020 - - - - - - - - - - - - - - - - * 0015100 - - - - - \r [ \r / / P i c k 0015120 o f f t h e r e l e v e n t 0015140 i n f o r m a t i o n f r o 0015160 m t h e f i l e C O M . C 0015200 M \r / / f o r m a t i s : 0015220 e f t p < f i l e n a m e > 0015240 t o / f r o m < m a c h i n e 0015260 n a m 376 001 \0 214 305 e o r n u 0015300 m b e r > \r / / I f w e g 0015320 e t h e r e , t h e f i l 0015340 e n a m e i s a l r e a d 0015360 y i n c l i B o d y \r R e a 0015400 d P a r a m ( 0 , 0 , t e m 0015420 p s t r i n g ) / / g e t 0015440 t h e d i r e c t i o n \r s 0015460 w i t c h o n t e m p s t r i 0015500 n g ! 1 i n t o \r [ C l 0015520 i C m d \r c a s e $ t : 0015540 c a s e $ T : \r 0015560 [ \r t e m p f i l e 0015600 = \r E v a l 0015620 P a r a m ( c l i B o d y , " 0015640 I " , " F i l e d o e s n 0015660 o t e x i s t , 376 001 \0 307 376 t 0015700 r y a g a i n : " ) \r 0015720 u n l e s s G e t P a r t 0015740 n e r ( R e a d P a r a m ( " P 0015760 " ) , d s p , E F T P F r n 0016000 P o r t , \r 0 , 0016020 s o c k e t E F T P R e c e i v 0016040 e ) d o \r [ 0016060 \r C l i E r r 0016100 o r ( ) \r e n 0016120 d c a s e \r ] 0016140 \r R e p o r t R e s 0016160 u l t ( E F T P S e n d F i l e 0016200 ( t e m p f i l e , E F T P F 0016220 r n P o r t ) ) \r C 0016240 l o s e s ( t e m p f i l e ) \r 0016260 e n d c a s e \r 376 001 0016300 \0 251 E ] \r c a 0016320 s e $ f : c a s e $ F : \r 0016340 [ \r t e 0016360 m p f i l e = E v a l P a r a 0016400 m ( c l i B o d y , " O " ) \r 0016420 u n l e s s G e t 0016440 P a r t n e r ( R e a d P a r a 0016460 m ( " P " ) , d s p , E F T 0016500 P F r n P o r t ) d o \r 0016520 [ \r 0016540 C l i E r r o r ( ) \r 0016560 e n d c a s e \r 0016600 ] \r R e 0016620 p o r t R e s u l t ( E F T P R 0016640 e c e i v e F i l e ( t e m p f 0016660 i l e , E F T P F r n P o r t 0016700 ) ) \r 376 001 \0 313 376 C l 0016720 o s e s ( t e m p f i l e ) \r 0016740 e n d c a s e \r 0016760 ] \r d e f a u l t : 0017000 \r [ \r C 0017020 l i E r r o r ( ) \r 0017040 e n d c a s e \r ] \r 0017060 ] C l i C m d \r f i n i s 0017100 h / / w e d o n o t 0017120 h a n g a r o u n d . . . . 0017140 . \r ] \r \r / / - - - - - - - - - 0017160 - - - - - - - - - - - - - - - - * 0017240 - - - - - - - - \r a n d C l i 0017260 E r r o r ( ) b e \r / / - - - 0017300 - - - - - - - - 376 001 \0 = 253 - - - 0017320 - - - - - - - - - - - - - - - - * 0017400 - - - \r [ \r W l ( " T a k e c 0017420 a r e , t h e s y n t a x 0017440 f o r c o m m a n d l i n e 0017460 s h o u l d b e : " ) \r W s 0017500 ( " e f t p < f i l e n a m e 0017520 > t o / f r o m < m a c h i 0017540 n e n a m e o r n u m b e 0017560 r > " ) \r ] \r \r / / - - - - - - 0017600 - - - - - - - - - - - - - - - - * 0017660 - - - - - - - - - - - \r a n d 0017700 E F T P K b d ( ) b e \r 376 001 \0 0017720 D f / / - - - - - - - - - - - - 0017740 - - - - - - - - - - - - - - - - * 0020020 - - - - - \r [ \r [ C m d L o o p 0020040 \r l e t a b o r t C m d = 0020060 f a l s e \r M s g ( " G e t c 0020100 o m m a n d f r o m k b d " 0020120 ) \r W s ( " - > " ) \r l e t c 0020140 m d = G e t K e y s ( ) \r s 0020160 w i t c h o n c m d i n t o 0020200 \r [ C o m m a n d B l o c 0020220 k \r c a s e $ S : c a 0020240 s e $ s : \r [ \r 0020260 W s ( " S e n d f i 0020300 l e - - n a m e o r n u 0020320 m b 376 001 \0 212 020 e r o f r e m 0020340 o t e h o s t : " ) \r 0020360 [ \r 0020400 u n l e s s G e t S t r i n 0020420 g ( t e m p s t r i n g ) t h 0020440 e n \r 0020460 [ \r a b 0020500 o r t C m d = t r u e \r 0020520 b r e a k \r 0020540 ] \r 0020560 i f t e m p s t 0020600 r i n g > > S t r i n g . l e n 0020620 g t h e q 0 t h e n l o 0020640 o p \r i f G 0020660 e t P a r t n e r ( t e m p s t 0020700 r i n g , d s p , E F T P F 0020720 r n P o r t , 376 001 \0 320 016 \r 0020740 0 , s o c k e t 0020760 E F T P R e c e i v e ) t h e 0021000 n b r e a k \r 0021020 W s ( " . . . t r y a g a i 0021040 n : " ) \r ] 0021060 r e p e a t \r i f 0021100 a b o r t C m d t h e n l 0021120 o o p \r W s ( " l o 0021140 c a l f i l e n a m e : " 0021160 ) \r [ \r 0021200 u n l e s s G e t 0021220 S t r i n g ( t e m p s t r i n 0021240 g ) t h e n \r 0021260 [ \r 0021300 a b o r t C m d = t r 0021320 u e \r 376 001 \0 373 0021340 g b r e a k \r 0021360 ] \r 0021400 t e m p f i l e = O p e n 0021420 F i l e ( t e m p s t r i n g , 0021440 k s T y p e R e a d O n l y , 0021460 c h a r I t e m ) \r 0021500 i f t e m p f i l e 0021520 n e 0 t h e n b r e a k 0021540 \r W s ( " F i 0021560 l e " ) ; W s ( t e m p s t 0021600 r i n g ) \r W 0021620 s ( " d o e s n o t e x i 0021640 s t , t r y a g a i n : " 0021660 ) \r ] r e p 0021700 e a t \r i f a b o 0021720 r t C m d t h e n l o o p \r 0021740 376 001 \0 201 327 R e p o r 0021760 t R e s u l t ( E F T P S e n d 0022000 F i l e ( t e m p f i l e , E 0022020 F T P F r n P o r t ) ) \r 0022040 C l o s e s ( t e m p f i 0022060 l e ) \r e n d c a s 0022100 e \r ] \r c a s 0022120 e $ R : c a s e $ r : \r 0022140 [ \r W s ( 0022160 " R e c e i v e a f i l e 0022200 - - n a m e o r n u m b e 0022220 r o f r e m o t e h o s t 0022240 : " ) \r [ \r 0022260 u n l e s s 0022300 G e t S t r i n g ( t e m p s t 0022320 r i n g ) t h e n \r 0022340 376 001 \0 p 351 [ \r 0022360 a b o r t 0022400 C m d = t r u e \r 0022420 b r e a k \r 0022440 ] \r 0022460 i f t e m p s t r i n 0022500 g > > S t r i n g . l e n g t h 0022520 e q 0 t h e n l o o p \r 0022540 i f G e t P 0022560 a r t n e r ( t e m p s t r i n 0022600 g , d s p , E F T P F r n P 0022620 o r t ) t h e n b r e a k \r 0022640 W s ( " . . . 0022660 t r y a g a i n : " ) \r 0022700 ] r e p e a t \r 0022720 i f a b o r t C m 0022740 d t h e n l o o p 376 001 \0 \v _ 0022760 \r [ \r 0023000 W s ( " l o c a l f 0023020 i l e n a m e : " ) \r 0023040 u n l e s s G e t 0023060 S t r i n g ( t e m p s t r i n 0023100 g ) t h e n \r 0023120 [ \r 0023140 a b o r t C m d = t r 0023160 u e \r b 0023200 r e a k \r 0023220 ] \r t e m p 0023240 f i l e = O p e n F i l e ( 0023260 t e m p s t r i n g , k s T y 0023300 p e R e a d O n l y , c h a r 0023320 I t e m ) \r i 0023340 f t e m p f i l e n e 0 0023360 376 001 \0 x 341 t h e n \r 0023400 [ \r 0023420 / / F i l e o p e n e 0023440 d , i t a l r e a d y e x 0023460 i s t s \r 0023500 C l o s e s ( t e m p f i l e 0023520 ) \r u n 0023540 l e s s C o n f i r m ( " F i 0023560 l e e x i s t s , O K t o 0023600 O v e r w r i t e ? " ) l 0023620 o o p \r 0023640 ] \r / / N o 0023660 w o p e n a n e w f i l 0023700 e , f o r w r i t i n g \r 0023720 t e m p f i l e 0023740 = O p e n F i l e ( t e m p 0023760 s t r i n 376 001 \0 7 247 g , k s T 0024000 y p e W r i t e O n l y , c h 0024020 a r I t e m ) \r 0024040 b r e a k \r 0024060 ] r e p e a t \r i 0024100 f a b o r t C m d t h e n 0024120 l o o p \r \r R e p o 0024140 r t R e s u l t ( E F T P R e c 0024160 e i v e F i l e ( t e m p f i l 0024200 e , E F T P F r n P o r t ) ) 0024220 \r C l o s e s ( t e 0024240 m p f i l e ) \r e n 0024260 d c a s e \r ] \r 0024300 c a s e # 1 5 : 0024320 / / C R i s a n o - o p \r 0024340 [ \r W l 0024360 ( " " ) \r 376 001 \0 034 / 0024400 e n d c a s e \r ] \r 0024420 c a s e $ Q : c a s e 0024440 $ q : \r [ \r 0024460 W s ( " Q u i t . . . " ) 0024500 \r i f C o n f i r 0024520 m ( " C o n f i r m ? " ) t h 0024540 e n f i n i s h \r 0024560 e n d c a s e / / p r o g 0024600 r a m t e r m i n a t e s h 0024620 e r e ! ! ! ! \r ] \r 0024640 c a s e $ ? : \r 0024660 [ \r W l ( " S 0024700 e n d , R e c e i v e , Q u 0024720 i t . . . " ) \r e n 0024740 d c a s e \r ] \r 0024760 d e f a u l t : \r 376 0025000 001 \0 \r 327 [ \r P u t 0025020 s ( d s p , c m d ) \r 0025040 W l ( " ? ? ? S e n d , 0025060 R e c e i v e , Q u i t . . . 0025100 " ) \r e n d c a s e 0025120 \r ] \r ] C o m 0025140 m a n d B l o c k \r B l o c k ( 0025160 ) \r ] C m d L o o p r e p e a 0025200 t / / w i l l 0025220 r u n u n t i l a q u i 0025240 t \r ] \r \r \r / / - - - - - - - - 0025260 - - - - - - - - - - - - - - - - * 0025340 - - - - - - - - - \r a n d R e 0025360 p o r t R e s u l t ( b o o l e 0025400 a n ) 376 001 \0 @ i b e \r / / - - 0025420 - - - - - - - - - - - - - - - - * 0025500 - - - - - - - - - - - - - - - \r 0025520 [ \r t e s t b o o l e a n \r 0025540 i f s o W l ( " . . . a l 0025560 l d o n e " ) \r i f n o 0025600 t W l ( " . . . f i l e t r 0025620 a n s f e r f a i l e d " ) \r 0025640 ] \r \r \r / / - - - - - - - - - - 0025660 - - - - - - - - - - - - - - - - * 0025740 - - - - - - - \r a n d G e t K 0025760 e y s ( ) = v a l o f \r / / 0026000 - - - - - - - - - 376 001 \0 & 224 - - 0026020 - - - - - - - - - - - - - - - - * 0026100 - - - - - - \r [ \r w h i l e E 0026120 n d o f s ( k e y s ) d o B 0026140 l o c k ( ) \r r e s u l t i s 0026160 G e t s ( k e y s ) \r ] \r \r \r / 0026200 / - - - - - - - - - - - - - - - 0026220 - - - - - - - - - - - - - - - - * 0026300 - - \r a n d G e t S t r i n g 0026320 ( s t r ) = v a l o f \r / / 0026340 - - - - - - - - - - - - - - - - * 0026400 - - - - - - - - - - - - - - 376 001 0026420 \0 376 370 - - - - - - - - - - - - - 0026440 - - - - - - \r [ \r / / C a l l 0026460 e r m u s t p r o v i d e 0026500 t h e p l a c e t o p u t 0026520 t h e s t r i n g \r / / R 0026540 e t u r n s f a l s e i f 0026560 D E L i s h i t . U s e 0026600 s d e f a u l t s t r e a m 0026620 s d s p a n d k e y s \r l 0026640 e t d e l e t i n g F l a g , 0026660 c h a r = f a l s e , 0 0026700 \r s t r > > S t r i n g . l e n 0026720 g t h = 0 \r \r [ c h a 0026740 r L o o p \r i f s t r > 0026760 > S t r i n g . l e n g t h e 0027000 q 2 5 5 t h e n r e s u l 0027020 t i s 376 001 \0 \0 347 t r u e \r 0027040 c h a r = G e t K e y s ( 0027060 ) / / t h i s w i l l 0027100 b l o c k f o r a b i t \r 0027120 s w i t c h o n c h a r 0027140 i n t o \r [ C h a 0027160 r B l o c k \r c a s 0027200 e # 1 5 : / / C R 0027220 \r [ \r 0027240 W l ( " " ) \r 0027260 r e s u l t i s t r 0027300 u e \r ] \r 0027320 c a s e # 2 1 : 0027340 / / ^ Q , r e s e t t 0027360 h e l i n e \r 0027400 [ \r W l ( " 0027420 x x x " ) \r 376 001 \0 006 ~ 0027440 d e l e t i n g F l a 0027460 g = f a l s e \r 0027500 c h a r = 0 \r 0027520 s t r > > S t r i n g . l e n 0027540 g t h = 0 \r e 0027560 n d c a s e \r 0027600 ] \r c a s e # 1 0 0027620 : c a s e # 1 : 0027640 / / B S o r ^ A \r 0027660 [ \r i 0027700 f s t r > > S t r i n g . l e 0027720 n g t h e q 0 t h e n e 0027740 n d c a s e \r 0027760 u n l e s s d e l e t i n g F 0030000 l a g t h e n \r 0030020 [ \r 376 001 \0 0030040 206 363 d e l e t i n g 0030060 F l a g = t r u e \r 0030100 W s ( " [ " ) \r 0030120 ] \r 0030140 P u t s ( d s p , s t 0030160 r > > S t r i n g . c h a r ^ ( 0030200 s t r > > S t r i n g . l e n g 0030220 t h ) ) \r s t 0030240 r > > S t r i n g . l e n g t h 0030260 = s t r > > S t r i n g . l 0030300 e n g t h - 1 \r 0030320 e n d c a s e \r 0030340 ] \r c a s e 0030360 # 2 2 : / / ^ R , 0030400 r e t y p e t h e l i n e 0030420 \r [ \r 0030440 376 001 \0 352 262 W l ( " " ) 0030460 ; W s ( s t r ) ; d e l e t 0030500 i n g F l a g = f a l s e \r 0030520 e n d c a s e \r 0030540 ] \r 0030560 c a s e # 1 7 7 : / / D 0030600 E L , d e l e t e t h e l i 0030620 n e a n d r e t u r n f a 0030640 l s e \r [ \r 0030660 W l ( " X X X 0030700 " ) \r r e s u 0030720 l t i s f a l s e \r 0030740 ] \r d e f a 0030760 u l t : \r 0031000 [ \r i 0031020 f d e l e t i n g F l a g t 0031040 h e n \r 376 001 \0 027 330 0031060 [ \r 0031100 d e l e t i n g F l a g = 0031120 f a l s e \r 0031140 W s ( " ] " ) \r 0031160 ] \r 0031200 s t r > > S t r i n g . l e n 0031220 g t h = s t r > > S t r i n 0031240 g . l e n g t h + 1 \r 0031260 s t r > > S t r i n 0031300 g . c h a r ^ ( s t r > > S t r 0031320 i n g . l e n g t h ) = c h 0031340 a r \r P u t s 0031360 ( d s p , c h a r ) \r 0031400 ] \r ] C h 0031420 a r B l o c k \r ] c h a r 0031440 L o o p r e p e a t 376 001 \0 026 0031460 316 \r \r ] \r \r \r / / - - - - - - - 0031500 - - - - - - - - - - - - - - - - * 0031560 - - - - - - - - - - \r a n d C 0031600 o n f i r m ( c o n f i r m S t 0031620 r i n g ) = v a l o f \r / / 0031640 - - - - - - - - - - - - - - - - * 0031740 - \r [ \r / / A g e n e r a l 0031760 g u y , f o r c o n f i r 0032000 m i n g s o m e a c t i o n 0032020 \r P u t s ( d s p , $ [ ) ; W 0032040 s ( c o n f i r m S t r i n g ) 0032060 ; 376 \0 330 ( 257 P u t s ( d s p , 0032100 $ ] ) \r s w i t c h o n G e t 0032120 K e y s ( ) i n t o \r [ 0032140 \r c a s e $ y : c a s 0032160 e $ Y : c a s e $ * N : \r 0032200 [ W l ( " Y e s 0032220 . " ) ; r e s u l t i s t r 0032240 u e ] \r c a s e $ n : 0032260 c a s e $ N : c a s e $ 0032300 * 1 7 7 : \r [ W l 0032320 ( " N o . " ) ; r e s u l t 0032340 i s f a l s e ] \r d e 0032360 f a u l t : W l ( " ? " ) \r 0032400 ] r e p e a t \r ] \r 377 \0 0032420 \0 E F T P F i l e . b c p l \0 373 0032440 223 361 363 350 \0 \0 376 001 \0 c H / / E F 0032460 T P F i l e . b c p l \r / / J 0032500 u n e 1 7 , 1 9 7 6 1 0 0032520 : 5 7 P M b k , j f s \r 0032540 / / l a s t m o d i f i e d 0032560 o n J u n e 3 , 1 9 7 9 0032600 1 1 : 4 7 A M b y T a 0032620 f t \r / / C o p y r i g h t 0032640 X e r o x C o r p o r a t i o 0032660 n 1 9 7 9 \r \r g e t " P u p 0032700 E F T P . d e c l " / / t 0032720 h a t w i l l a l s o g e 0032740 t p u p - r e l a t e d s t 0032760 u f f \r \r e x t e r n a l \r [ \r 0033000 / / i n c o m i n g p r o c e 0033020 d u r e s \r I n i t E F T P P a 0033040 c k a g e ; O p e n 376 001 \0 342 023 0033060 E F T P S o c ; C l o s e E F 0033100 T P S o c \r R e c e i v e E F T 0033120 P B l o c k ; S e n d E F T P 0033140 B l o c k ; S e n d E F T P E 0033160 n d ; G e t E F T P A b o r t 0033200 \r E n d o f s ; R e a d B l o 0033220 c k ; W r i t e B l o c k ; 0033240 P u t s ; F i l e P o s \r W s 0033260 ; W o ; W n s ; W l ; Z 0033300 e r o \r \r / / i n c o m i n g 0033320 s t a t i c s , f o r c o 0033340 m m o n u s e , s p a c e 0033360 a l l o c a t e d e l s e w h 0033400 e r e \r E F T P L c l P o r t ; 0033420 E F T P F r n P o r t ; E F 0033440 T P S o c k e t ; d s p \r \r / 0033460 376 001 \0 332 R / o u t g o i n g p 0033500 r o c e d u r e s \r E F T P S e 0033520 n d F i l e ; E F T P R e c e 0033540 i v e F i l e \r ] \r \r s t a t i 0033560 c \r [ \r / / f o r u s e i 0033600 n t h i s p r o g r a m , 0033620 a l l o c a t e d i n t h i 0033640 s m o d u l e \r b y t e c o u 0033660 n t ; t o t a l b y t e c o u 0033700 n t \r p a c k e t c o u n t ; 0033720 b l o c k c o u n t \r ] \r \r / / 0033740 T h e s e r o u t i n e s 0033760 w i l l b e c a l l e d f 0034000 r o m t h e F r o n t E n d 0034020 , a n d m a y b e \r / / 0034040 c a l l e d m o r e t h a n 0034060 o n c e 376 001 \0 U * i n t h 0034100 e l i f e o f a p r o g 0034120 r a m \r \r / / - - - - - - - - - 0034140 - - - - - - - - - - - - - - - - * 0034220 - - - - - - - - \r l e t E F T 0034240 P S e n d F i l e ( d i s k s t 0034260 r e a m , f o r e i g n p o r 0034300 t ) = v a l o f \r / / - - - 0034320 - - - - - - - - - - - - - - - - * 0034400 - - - - - - - - - - - - - - \r [ 0034420 \r O p e n E F T P S o c ( E F T 0034440 P S o c k e t , 0 , f o r e 0034460 i g n p o r t ) \r p 376 001 \0 034 2 a 0034500 c k e t c o u n t = 0 \r t o 0034520 t a l b y t e c o u n t = 0 0034540 \r \r l e t m a x B u f f e r B 0034560 y t e s = 2 * 2 5 6 * 6 0034600 / / e n o u g h t o b u f 0034620 f e r 6 d i s k p a g e s 0034640 \r l e t t e m p v e c = v 0034660 e c 2 5 6 * 6 / / 0034700 i n w o r d s \r l e t b y t 0034720 e s L e f t I n B u f f e r = 0034740 0 \r l e t n e x t A d d r 0034760 = t e m p v e c \r \r l e t r 0035000 e s u l t = n i l \r \r / / 0035020 A l o o p , t o r e a d 0035040 p a g e s a n d s e n d o 0035060 f f b l o c k s \r [ S 376 0035100 001 \0 253 306 e n d l o o p \r / 0035120 / S e e i f w e n e e d 0035140 m o r e i n p u t \r i f 0035160 b y t e s L e f t I n B u f f 0035200 e r e q 0 t h e n \r 0035220 [ \r / / S e 0035240 e i f t i m e t o q u 0035260 i t \r i f E n d 0035300 o f s ( d i s k s t r e a m ) 0035320 t h e n b r e a k \r 0035340 b y t e s L e f t I n B u f f 0035360 e r = \r F i l l F 0035400 r o m D i s k ( d i s k s t r e 0035420 a m , t e m p v e c , m a x 0035440 B u f f e r B y t e s ) \r 0035460 t o t a l b y t e c o u n 0035500 t = 376 001 \0 7 022 t o t a l b y 0035520 t e c o u n t + b y t e s L 0035540 e f t I n B u f f e r \r 0035560 n e x t A d d r = t e m 0035600 p v e c / / r e s e t a 0035620 d d r e s s p o i n t e r \r 0035640 ] \r / / d a t a 0035660 r e m a i n s t o b e s 0035700 e n t , a t n e x t A d d r 0035720 \r p a c k e t c o u n t 0035740 = p a c k e t c o u n t + 0035760 1 \r t e s t b y t e s L 0036000 e f t I n B u f f e r l s 5 0036020 1 2 \r i f s o b y t e c 0036040 o u n t = b y t e s L e f t 0036060 I n B u f f e r \r i f n o 0036100 t b y t e c o u 376 001 \0 q } n t 0036120 = 5 1 2 \r \r [ d u m m 0036140 y L o o p \r r e s u l t 0036160 = \r S e n d E F T 0036200 P B l o c k ( E F T P S o c k e 0036220 t , n e x t A d d r , b y t 0036240 e c o u n t , l o n g B l o c 0036260 k T i m e o u t ) \r i f 0036300 r e s u l t e q E F T P T i 0036320 m e o u t & \r 0036340 E F T P S o c k e t > > E F 0036360 T P S o c . T r a n s f e r N o 0036400 t S t a r t e d t h e n \r 0036420 [ \r 0036440 W l ( " N o a n s w e r 0036460 y e t , w i l l k e e p t 0036500 r y i n g . . . " ) \r 376 001 0036520 \0 360 m l o o p \r 0036540 ] \r b r e a 0036560 k \r ] d u m m y L o o p 0036600 r e p e a t \r \r / / S o m 0036620 e t h i n g h a p p e n e d . 0036640 . . \r i f r e s u l t 0036660 g e 0 t h e n \r 0036700 [ \r b y t e s L e 0036720 f t I n B u f f e r = b y t 0036740 e s L e f t I n B u f f e r - 0036760 b y t e c o u n t \r 0037000 n e x t A d d r = n e x t 0037020 A d d r + b y t e c o u n t 0037040 / 2 \r l o o p 0037060 / / i t w e n t p r o p e r 0037100 l y \r ] \r \r / 0037120 / I f 376 001 \0 306 343 w e g e t 0037140 h e r e , h a d a r e a l 0037160 f a i l u r e . . . . \r 0037200 s w i t c h o n r e s u l t 0037220 i n t o \r [ r e s u 0037240 l t C a s e \r c a s 0037260 e E F T P T i m e o u t : \r 0037300 [ \r 0037320 W s ( " E F T P S e n d 0037340 t i m e d o u t w h i l e 0037360 s e n d i n g . . . . " ) \r 0037400 e n d c a s e \r 0037420 ] \r 0037440 c a s e E F T P A b o r t S e 0037460 n t : \r [ \r 0037500 W s ( " E F T P 0037520 A b o r t h a 376 001 \0 217 223 d t 0037540 o b e s e n t . . . . " ) \r 0037560 e n d c a s e 0037600 \r ] \r 0037620 c a s e E F T P A b o r t 0037640 R e c e i v e d : \r 0037660 [ \r W s 0037700 ( " E F T P A b o r t r e c e 0037720 i v e d w h i l e s e n d i 0037740 n g . . . . " ) \r 0037760 l e t t e m p p b i = 0040000 G e t E F T P A b o r t ( E F T 0040020 P S o c k e t ) \r 0040040 P r i n t A b o r t P B I ( 0040060 t e m p p b i ) \r 0040100 e n d c a s e \r 0040120 ] \r d e 376 001 \0 0040140 i 304 f a u l t : \r 0040160 [ \r W s ( 0040200 " U n k n o w n e r r o r f 0040220 r o m E F T P S e n d . . . . 0040240 " ) \r ] \r 0040260 ] r e s u l t C a s e \r 0040300 C l o s e E F T P S o c ( 0040320 E F T P S o c k e t ) \r r 0040340 e s u l t i s f a l s e 0040360 / / b a i l o u t \r ] S 0040400 e n d l o o p r e p e a t 0040420 / / k e e p g o i n g , t 0040440 i l y o u b r e a k o u t 0040460 \r \r / / A l l o f t h e 0040500 d a t a h a s b e e n s e 0040520 n t ; n o w d o a n e n 0040540 d 376 001 \0 367 R s e q u e n c e \r 0040560 r e s u l t = S e n d E F T 0040600 P E n d ( E F T P S o c k e t , 0040620 l o n g B l o c k T i m e o u 0040640 t ) \r C l o s e E F T P S o c ( 0040660 E F T P S o c k e t ) \r t e s t 0040700 r e s u l t \r i f s o 0040720 [ W n s ( d s p , t o t a l 0040740 b y t e c o u n t , 0 , 1 0 0040760 ) ; W s ( " b y t e s s e 0041000 n t . " ) ] \r i f n 0041020 o t W s ( " S e n d E n d s 0041040 e q u e n c e f a i l e d . . 0041060 . . . " ) \r r e s u l t i s r 0041100 e s u l t \r ] \r \r \r / / - - - - 0041120 - - - - - - - - - - - - - - - - 0041140 - - - - - - - 376 001 \0 032 277 - - - - 0041160 - - - - - - - - - - - - - - - - * 0041220 \r a n d F i l l F r o m D i s 0041240 k ( d i s k s t r e a m , a d 0041260 d r , m a x b y t e s ) = 0041300 v a l o f \r / / - - - - - - - - 0041320 - - - - - - - - - - - - - - - - * 0041400 - - - - - - - \r [ \r / / R e t u 0041420 r n s t h e n u m b e r o 0041440 f b y t e s r e a d i n t 0041460 o t h e b u f f e r \r / / 0041500 W a t c h o u t , R e a d b 0041520 l o c k r e t u r n s a w 0041540 o r d c o u n t \r l e 376 001 \0 z 0041560 234 t b y t e c o u n t = \r 0041600 R e a d B l o c k ( d i s k s t 0041620 r e a m , a d d r , m a x b 0041640 y t e s r s h i f t 1 ) l 0041660 s h i f t 1 \r i f b y t e 0041700 c o u n t e q 0 t h e n 0041720 r e s u l t i s 0 / / h i 0041740 t e o f , q u i t e a r l 0041760 y \r i f b y t e c o u n t < 0042000 m a x b y t e s t h e n \r 0042020 [ \r / / g o t t h 0042040 e l a s t p a g e ; w e 0042060 h a v e t o d o s o m e 0042100 h a c k i n g h e r e \r 0042120 l e t f i l e p o s = v e 0042140 c 1 \r F i l e P o s ( d 0042160 i 376 001 \0 356 244 s k s t r e a m , 0042200 f i l e p o s ) \r / / s e 0042220 e i f t h e f i l e s t 0042240 o t a l b y t e c o u n t 0042260 i s o d d \r i f ( ( f 0042300 i l e p o s ! 1 ) & 1 ) e 0042320 q 1 t h e n b y t e c o u 0042340 n t = b y t e c o u n t - 1 \r 0042360 ] \r r e s u l t i s b y t 0042400 e c o u n t \r ] \r \r / / - - - - 0042420 - - - - - - - - - - - - - - - - * 0042500 - - - - - - - - - - - \r a n d 0042520 D u m p T o D i s k ( d i s k s 0042540 t r e a m , a d d r , b y t 0042560 e c o u n t 376 001 \0 234 246 ) = v 0042600 a l o f \r / / - - - - - - - - - 0042620 - - - - - - - - - - - - - - - - * 0042700 - - - - - - \r [ \r / / W a t c 0042720 h o u t f o r a n o d d 0042740 b y t e c o u n t \r W r i t e 0042760 B l o c k ( d i s k s t r e a m 0043000 , a d d r , b y t e c o u n 0043020 t r s h i f t 1 ) \r / / M 0043040 a y h a v e f a i l e d t 0043060 o w r i t e o n e b y t e 0043100 \r i f ( b y t e c o u n t & 0043120 1 ) e q 1 t h e n P u 0043140 t s ( d i s k s t r e a m , a 0043160 d d r > > B y t e ^ b 376 001 \0 Y ; 0043200 y t e c o u n t ) \r ] \r \r \r / / 0043220 - - - - - - - - - - - - - - - - * 0043300 - - - - - - - - - - - - - - - \r 0043320 a n d E F T P R e c e i v e F 0043340 i l e ( d i s k s t r e a m , 0043360 f o r e i g n p o r t ) = v 0043400 a l o f \r / / - - - - - - - - - 0043420 - - - - - - - - - - - - - - - - * 0043500 - - - - - - \r \r [ \r / / u s e 0043520 E F T P L c l P o r t , a l l 0043540 o c a t e d e l s e w h e r e 0043560 \r Z e r o ( E F T P L c l P o r 0043600 376 001 \0 [ 225 t , l e n P o r t ) 0043620 \r E F T P L c l P o r t > > P o 0043640 r t . s o c k e t ^ 2 = s o 0043660 c k e t E F T P R e c e i v e \r 0043700 \r O p e n E F T P S o c ( E F T 0043720 P S o c k e t , E F T P L c l 0043740 P o r t , f o r e i g n p o r 0043760 t ) \r p a c k e t c o u n t = 0044000 0 \r t o t a l b y t e c o u n 0044020 t = 0 \r \r l e t m a x B u 0044040 f f e r B y t e s = 2 * 2 5 0044060 6 * 6 / / 6 d i s k p 0044100 a g e s \r l e t t e m p v e c 0044120 = v e c 2 5 6 * 6 / 0044140 / i n w o r d s \r l e t b y 0044160 t e s L e f t I n B u f f e r 0044200 = 0 \r l 376 001 \0 z ) e t n e x 0044220 t A d d r = t e m p v e c \r 0044240 \r / / a l o o p t o g e 0044260 t b l o c k s , a n d w r 0044300 i t e t o t h e d i s k \r 0044320 [ R e c e i v e l o o p \r 0044340 / / M a k e s u r e t 0044360 h e r e i s e n o u g h f 0044400 r e e s p a c e \r i f 0044420 m a x B u f f e r B y t e s - b 0044440 y t e s L e f t I n B u f f e r 0044460 l s 5 1 2 t h e n \r 0044500 [ \r t o t a l 0044520 b y t e c o u n t = t o t a 0044540 l b y t e c o u n t + b y t 0044560 e s L e f t I n B u f f e r \r 0044600 D u m p T 376 001 \0 025 \n o 0044620 D i s k ( d i s k s t r e a m , 0044640 t e m p v e c , b y t e s L 0044660 e f t I n B u f f e r ) \r 0044700 n e x t A d d r = t e 0044720 m p v e c \r b y t e 0044740 s L e f t I n B u f f e r = 0044760 0 \r ] \r l e t 0045000 b y t e c o u n t = \r 0045020 R e c e i v e E F T P B l o 0045040 c k ( E F T P S o c k e t , n 0045060 e x t A d d r , l o n g B l o 0045100 c k T i m e o u t ) \r i f 0045120 b y t e c o u n t e q 0 0045140 t h e n \r [ \r 0045160 / / R e c e i v e d a 0045200 n E n d . . . . \r 376 0045220 001 \0 262 234 i f b y t e s L e f 0045240 t I n B u f f e r g r 0 t 0045260 h e n \r D u m 0045300 p T o D i s k ( d i s k s t r e 0045320 a m , t e m p v e c , b y t 0045340 e s L e f t I n B u f f e r ) \r 0045360 t o t a l b y t e c 0045400 o u n t = t o t a l b y t e 0045420 c o u n t + b y t e s L e f 0045440 t I n B u f f e r \r 0045460 b r e a k / / e n d h a 0045500 s b e e n p r o p e r l y 0045520 r e c e i v e d \r ] 0045540 \r i f b y t e c o u n t 0045560 g r 0 t h e n \r 0045600 [ \r / / o d d 0045620 b y t e 376 001 \0 270 n c o u n t s 0045640 a r e n o t l e g a l , e 0045660 x c e p t i n t h e l a s 0045700 t p a c k e t \r b 0045720 y t e s L e f t I n B u f f e r 0045740 = b y t e s L e f t I n B u 0045760 f f e r + b y t e c o u n t 0046000 \r n e x t A d d r 0046020 = n e x t A d d r + b y t 0046040 e c o u n t r s h i f t 1 \r 0046060 p a c k e t c o u n 0046100 t = p a c k e t c o u n t 0046120 + 1 \r l o o p \r 0046140 ] \r \r / / S o m 0046160 e f o r m o f e r r o r 0046200 r e t u r n , f i g u r e i 0046220 t o u t h e r 376 001 \0 t 264 e 0046240 a n d p u n t \r s w i t 0046260 c h o n b y t e c o u n t i 0046300 n t o \r [ R e c e i 0046320 v e C a s e B l o c k \r 0046340 c a s e E F T P T i m e o 0046360 u t : \r [ \r 0046400 i f E F T P S 0046420 o c k e t > > E F T P S o c . T 0046440 r a n s f e r N o t S t a r t e 0046460 d t h e n \r 0046500 [ \r 0046520 W l ( " N o t h i n g r e 0046540 c e i v e d y e t , w i l l 0046560 k e e p l i s t e n i n g . 0046600 . . " ) \r 0046620 l o o p \r 376 001 0046640 \0 g 003 ] \r 0046660 W s ( " R e c e i v e r t 0046700 i m e d o u t . . . . " ) \r 0046720 e n d c a s e \r 0046740 ] \r 0046760 c a s e E F T P A b o r t S 0047000 e n t : \r [ \r 0047020 W s ( " A b o 0047040 r t h a d t o b e s e n 0047060 t f r o m r e c e i v e r . 0047100 . . . " ) \r e 0047120 n d c a s e \r 0047140 ] \r c a s e E F T 0047160 P A b o r t R e c e i v e d : \r 0047200 [ \r 0047220 W s ( " E F T P A b o r 0047240 t r 376 001 \0 314 S e c e i v e d 0047260 w h i l e r e c e i v i n g . 0047300 . . . " ) \r l 0047320 e t t e m p p b i = G e t 0047340 E F T P A b o r t ( E F T P S o 0047360 c k e t ) \r P 0047400 r i n t A b o r t P B I ( t e m 0047420 p p b i ) \r e 0047440 n d c a s e \r 0047460 ] \r c a s e E F T 0047500 P R e s e t R e c e i v e d : \r 0047520 [ \r 0047540 W s ( " A s k e d t o 0047560 r e s e t . . . . [ N o t i 0047600 m p l e m e n t e d h e r e ] 0047620 " ) \r e n d c 0047640 a s e \r 376 001 \0 _ V 0047660 ] \r ] R e c e i 0047700 v e C a s e B l o c k \r C 0047720 l o s e E F T P S o c ( E F T P 0047740 S o c k e t ) \r r e s u l 0047760 t i s f a l s e \r ] R e 0050000 c e i v e l o o p r e p e a t 0050020 \r \r / / E n d h a s b e e n 0050040 r e c e i v e d , t i m e 0050060 t o c l e a n u p a n d 0050100 l e a v e \r C l o s e E F T P S 0050120 o c ( E F T P S o c k e t ) \r W 0050140 n s ( d s p , t o t a l b y t 0050160 e c o u n t , 0 , 1 0 ) ; 0050200 W s ( " b y t e s r e c e i 0050220 v e d . " ) \r r e s u l t i s 0050240 t r u e \r ] \r \r / / - - 376 001 \0 0050260 Y e - - - - - - - - - - - - - - 0050300 - - - - - - - - - - - - - - - - * 0050340 - - - - - - - - - - - - - - - \r 0050360 a n d P r i n t A b o r t P B 0050400 I ( p b i ) b e \r / / - - - - 0050420 - - - - - - - - - - - - - - - - * 0050500 - - - - - - - - - - - \r [ \r P u 0050520 t s ( d s p , $ * N ) ; W o 0050540 ( p b i > > P B I . p u p . w o 0050560 r d s ^ 1 ) ; W s ( " - A 0050600 b o r t : " ) \r f o r i = 0050620 3 t o ( 3 + ( p b i > 0050640 > P B I . p u p . l e n g t h - 0050660 ( p 376 \0 ; 1 304 u p O v B y t e s 0050700 + 2 ) ) - 1 ) d o \r 0050720 P u t s ( d s p , p b i > > P 0050740 B I . p u p . b y t e s ^ i ) \r 0050760 ] \r 377 \0 \0 P u p E F T P S e n d 0051000 . b c p l \0 373 223 361 363 350 \0 \0 376 001 \0 0051020 4 Q / / P u p E F T P S e n d 0051040 . b c p l - - b y J . S 0051060 h o c h \r / / C o p y r i g h 0051100 t X e r o x C o r p o r a t 0051120 i o n 1 9 7 9 \r \r / / L a s 0051140 t m o d i f i e d J u n e 0051160 3 , 1 9 7 9 1 2 : 4 5 P 0051200 M b y T a f t \r \r g e t " 0051220 P u p E F T P . d e c l " \r \r e 0051240 x t e r n a l \r [ \r / / o u t 0051260 g o i n g p r o c e d u r e s 0051300 \r S e n d E F T P B l o c k ; 0051320 S e n d E F T P E n d \r \r / / 0051340 i n c o m i n g p r o c e d u 0051360 r e s \r S e n d E F T P A b o r 0051400 t \r G e t P B I ; R e l e a s 0051420 e P 376 001 \0 1 026 B I ; C o m p l 0051440 e t e P u p \r S e t T i m e r ; 0051460 T i m e r H a s E x p i r e d 0051500 ; B l o c k \r D e q u e u e ; 0051520 M u l t E q ; M a x ; M i 0051540 n ; M o v e B l o c k \r ] \r \r 0051560 \r / / - - - - - - - - - - - - - 0051600 - - - - - - - - - - - - - - - - * 0051660 - - - - - - - - - - - - - - - \r 0051700 l e t S e n d E F T P B l o c 0051720 k ( s o c , a d d r , b y t 0051740 e C n t , t i m e o u t ) = 0051760 v a l o f \r / / - - - - - - - 0052000 - - - - - - - - - - - - - - - - 0052020 - - - - - - - 376 001 \0 0 207 - - - - 0052040 - - - - - - - - - - - - - - - - * 0052100 - - - - - - - - - - \r [ \r l e t 0052120 r e s u l t = S e n d E F 0052140 T P P a c k e t ( s o c , a d 0052160 d r , b y t e C n t , t i m 0052200 e o u t , t y p e E F T P D a 0052220 t a ) \r i f r e s u l t g e 0052240 0 t h e n s o c > > E F T 0052260 P S o c . S e q N u m = s o 0052300 c > > E F T P S o c . S e q N u 0052320 m + 1 \r r e s u l t i s r e 0052340 s u l t \r ] \r \r \r / / - - - - - 0052360 - - - - - - - - - - - - - - - - * 0052420 - - - - - - - - - - - - 376 001 \0 J 0052440 321 - - - - - - - - - - - - - - - 0052460 - - - - - - - - - - - - \r a n d 0052500 S e n d E F T P E n d ( s o c 0052520 , t i m e o u t ) = v a l 0052540 o f \r / / - - - - - - - - - - - 0052560 - - - - - - - - - - - - - - - - * 0052660 - \r / / T h e e n d s e q u 0052700 e n c e r e q u i r e s a 0052720 c o m p l e t e a c k f o r 0052740 t h e f i r s t \r / / o u 0052760 t g o i n g e n d , a n d 0053000 t h e n a n e x t r a e n 0053020 d i s s e n t , a s p a 0053040 r 376 001 \0 307 X t o f t h e \r / 0053060 / t h r e e w a y h a n d 0053100 s h a k e . \r [ \r i f S e n d 0053120 E F T P P a c k e t ( s o c , 0053140 0 , 0 , t i m e o u t , t 0053160 y p e E F T P E n d ) l s 0 0053200 r e s u l t i s f a l s e \r 0053220 \r / / f i r s t e n d s e n 0053240 t a n d a c k e d o k . 0053260 S e n d s e c o n d E n d 0053300 b u t d o n ' t w a i t f 0053320 o r a c k \r s o c > > E F T P 0053340 S o c . S e q N u m = s o c 0053360 > > E F T P S o c . S e q N u m 0053400 + 1 \r S e n d E F T P P a c k 0053420 e t ( s o c , 0 , 0 , 0 , 0053440 t y p e E 376 001 \0 032 273 F T P E n 0053460 d ) \r r e s u l t i s t r u e 0053500 \r ] \r \f \r / / - - - - - - - - - 0053520 - - - - - - - - - - - - - - - - * 0053620 - - - \r a n d S e n d E F T P 0053640 P a c k e t ( s o c , a d d r 0053660 , d a t a B y t e s , t i m 0053700 e o u t , t y p e ) = v a 0053720 l o f \r / / - - - - - - - - - - 0053740 - - - - - - - - - - - - - - - - * 0054040 - - \r / / T h i s 376 001 \0 372 277 0054060 i s a g e n e r a l r o u 0054100 t i n e , u s a b l e f o r 0054120 d a t a o r e n d p a c 0054140 k e t s \r / / W i l l h a n 0054160 d l e r e t r a n s m i s s i 0054200 o n s h e r e . P a s s e s 0054220 i n a l o n g t i m e o 0054240 u t \r / / R e t u r n s t h 0054260 e n u m b e r o f d a t a 0054300 b y t e s s e n t ( > = 0 0054320 ) i f O K ; \r / / R e t u 0054340 r n s a n e r r o r c o d 0054360 e ( < 0 ) i f t h e r e 0054400 w a s a n e r r o r \r [ \r 0054420 S e t T i m e r ( l v s o c > 0054440 > E F T P S o c . s t a r t T i 0054460 376 001 \0 267 342 m e , 0 ) / / r 0054500 e m e m b e r s t a r t t i 0054520 m e \r l e t l o n g T i m e r 0054540 = n i l ; S e t T i m e r 0054560 ( l v l o n g T i m e r , t 0054600 i m e o u t ) \r \r [ / / 0054620 r e p e a t \r / / c o 0054640 n s t r u c t t h e o u t g 0054660 o i n g p a c k e t \r l 0054700 e t p b i = G e t P B I ( 0054720 s o c ) \r p b i > > P B I 0054740 . p u p . i d ^ 2 = s o c > 0054760 > E F T P S o c . S e q N u m \r 0055000 M o v e B l o c k ( l v 0055020 p b i > > P B I . p u p . w o r 0055040 d s ^ 1 , a d d r , ( d a t 0055060 a B y t e 376 001 \0 221 314 s + 1 ) r 0055100 s h i f t 1 ) \r C o m p 0055120 l e t e P u p ( p b i , t y p 0055140 e , d a t a B y t e s + p u p 0055160 O v B y t e s ) \r l e t 0055200 s h o r t T i m e r = n i l 0055220 \r S e t T i m e r ( l v 0055240 s h o r t T i m e r , s o c > 0055260 > E F T P S o c . c u r r e n t 0055300 T i m e o u t ) \r \r 0055320 [ / / r e p e a t \r 0055340 B l o c k ( ) \r 0055360 i f t i m e o u t n e - 1 0055400 & T i m e r H a s E x p i r 0055420 e d ( l v l o n g T i m e r ) 0055440 t h e n \r r 0055460 e s u l t i s E F 376 001 \0 277 177 T 0055500 P T i m e o u t / / h e 0055520 i s n o t a n s w e r i n g 0055540 n o w \r i f T i 0055560 m e r H a s E x p i r e d ( l v 0055600 s h o r t T i m e r ) t h e 0055620 n \r [ \r 0055640 / / e x p o n e n t 0055660 i a l l y a g e r e t r a n 0055700 s m i s s i o n i n t e r v a 0055720 l \r A g e T i 0055740 m e o u t ( s o c ) ; b r e a 0055760 k / / r e - t r a n s m 0056000 i t \r ] \r 0056020 p b i = D e q u e u 0056040 e ( l v s o c > > E F T P S o 0056060 c . i Q ) ; i f p b i e 376 0056100 001 \0 0 224 q 0 l o o p \r \r 0056120 / / C h e c k t h e 0056140 s o u r c e o f t h i s p 0056160 a c k e t \r u n l e 0056200 s s M u l t E q ( l v s o c 0056220 > > E F T P S o c . f r n P o r 0056240 t . s o c k e t , \r 0056260 l v p b i > > P B I . p u p 0056300 . s P o r t . s o c k e t ) d 0056320 o \r [ R e l 0056340 e a s e P B I ( p b i ) ; l o 0056360 o p ] \r \r / / G o 0056400 t a p a c k e t r e a l l 0056420 y f o r u s f r o m o u 0056440 r p a r t n e r \r 0056460 A g e T i m e o u t ( s o c ) \r 0056500 376 001 \0 \n \0 s w i t c 0056520 h o n p b i > > P B I . p u p 0056540 . t y p e i n t o \r 0056560 [ \r c 0056600 a s e t y p e E F T P A c k : 0056620 \r [ \r 0056640 i f p b 0056660 i > > P B I . p u p . i d ^ 2 0056700 e q s o c > > E F T P S o c . 0056720 S e q N u m t h e n \r 0056740 [ R e l 0056760 e a s e P B I ( p b i ) ; r e 0057000 s u l t i s d a t a B y t e s 0057020 ] \r i 0057040 f p b i > > P B I . p u p . i 0057060 d ^ 2 g r s o c > > E F T P 0057100 S o c . S e q N u 376 001 \0 * 343 m 0057120 t h e n \r 0057140 [ \r 0057160 S e n d E F T P A b o 0057200 r t ( s o c , O u t O f S y n 0057220 c h A b o r t , \r 0057240 " Y o u r r 0057260 e c e i v e r h a s g o t t 0057300 e n o u t o f s y n c h . 0057320 " , p b i ) \r 0057340 R e l e a s e P B 0057360 I ( p b i ) \r 0057400 r e s u l t i s E 0057420 F T P A b o r t S e n t \r 0057440 ] \r 0057460 R e l e a s 0057500 e P B I ( p b i ) \r 376 001 0057520 \0 362 233 e n d c a 0057540 s e \r ] 0057560 \r c a s e t 0057600 y p e E F T P A b o r t : \r 0057620 [ \r 0057640 i f s o c > > 0057660 E F T P S o c . A b o r t P B I 0057700 n e 0 t h e n \r 0057720 R e l e a s 0057740 e P B I ( s o c > > E F T P S o 0057760 c . A b o r t P B I ) \r 0060000 s o c > > E F T 0060020 P S o c . A b o r t P B I = 0060040 p b i \r 0060060 r e s u l t i s E F T P A b o 0060100 r t R e c e i v e d / / b a 0060120 i l 376 001 \0 035 & o u t \r 0060140 ] \r 0060160 d e f a u l t : R e l e 0060200 a s e P B I ( p b i ) \r 0060220 ] \r 0060240 ] r e p e a t \r ] r e 0060260 p e a t \r ] \r \f \r / / - - - - - 0060300 - - - - - - - - - - - - - - - - * 0060400 - - - - - - - \r a n d A g e T 0060420 i m e o u t ( s o c ) b e \r / 0060440 / - - - - - - - - - - - - - - - 0060460 - - - - - - - - - - - - - - - - * 0060520 - - - - - - - - 376 001 \0 o 226 - - - 0060540 - - - - - - - - - - - - - - - - 0060560 - - \r / / u p d a t e t h e 0060600 a d a p t i v e t i m e o u t 0060620 \r / / = 2 t i m e s t h 0060640 e a v e r a g e r e s p o n 0060660 s e t i m e , e x p o n e n 0060700 t i a l l y a g e d o v e r 0060720 \r / / t h e l a s t 8 s 0060740 a m p l e s . \r [ \r l e t t 0060760 = n i l ; S e t T i m e r ( 0061000 l v t , 0 ) \r c o m p i l e 0061020 t e s t a l t o \r i f s 0061040 o [ t = ( t - s o c > > 0061060 E F T P S o c . s t a r t T i m 0061100 e ) l s h i f t 3 + 4 ] 0061120 \r i f n o t [ t 376 \0 234 0061140 220 ` = ( t - s o c > > E F T 0061160 P S o c . s t a r t T i m e ) 0061200 l s h i f t 1 + 1 ] \r s o 0061220 c > > E F T P S o c . c u r r e 0061240 n t T i m e o u t = ( 7 * s 0061260 o c > > E F T P S o c . c u r r 0061300 e n t T i m e o u t + \r M a 0061320 x ( m i n T i m e o u t , M i 0061340 n ( m a x T i m e o u t , t ) 0061360 ) ) r s h i f t 3 \r ] \r 377 \0 0061400 \0 P u p E F T P R e c e i v e . 0061420 b c p l \0 373 223 361 363 350 \0 \0 376 001 \0 ^ 0061440 031 / / P u p E F T P R e c e i 0061460 v e . b c p l - - b y J . 0061500 S h o c h \r / / C o p y r i 0061520 g h t X e r o x C o r p o r 0061540 a t i o n 1 9 7 9 \r \r / / L 0061560 a s t m o d i f i e d J u n 0061600 e 5 , 1 9 7 9 1 2 : 1 2 0061620 P M b y T a f t \r \r g e t 0061640 " P u p E F T P . d e c l " \r 0061660 \r e x t e r n a l \r [ \r / / o 0061700 u t g o i n g p r o c e d u r 0061720 e s \r R e c e i v e E F T P B l 0061740 o c k ; R e c e i v e E F T P 0061760 P a c k e t \r \r / / i n c o m 0062000 i n g p r o c e d u r e s \r S 0062020 e n d E F T P A b o r t \r G e t 0062040 P 376 001 \0 270 M B I ; R e l e a s 0062060 e P B I ; C o m p l e t e P u 0062100 p \r S e t T i m e r ; T i m e 0062120 r H a s E x p i r e d ; B l o 0062140 c k ; D e q u e u e ; M u l 0062160 t E q \r M o v e B l o c k \r ] \r 0062200 \r \r / / - - - - - - - - - - - - 0062220 - - - - - - - - - - - - - - - - * 0062320 \r l e t R e c e i v e E F T P 0062340 B l o c k ( s o c , a d d r , 0062360 t i m e o u t ) = v a l o 0062400 f \r / / - - - - - - - - - - - - 0062420 - - - - - - - - - - - - - - - - 0062440 - - - - - - 376 001 \0 ( 216 - - - - - 0062460 - - - - - - - - - - - - - - - - * 0062520 - - - - - \r / / R e t u r n s 0062540 a b y t e c o u n t ( > 0062560 = 0 ) o r a n e r r o r 0062600 c o d e ( < 0 ) \r [ \r l e t 0062620 i n P b i = 0 \r l e t r e 0062640 c e i v e R e s u l t = R e 0062660 c e i v e E F T P P a c k e t ( 0062700 s o c , t i m e o u t , l v 0062720 i n P b i ) \r i f r e c e i 0062740 v e R e s u l t g e 0 t h 0062760 e n / / s u c c e e d e d \r 0063000 [ \r M o v e B l o c 0063020 k ( a d d r , l v i n P b i 0063040 > > P B I . p u p . w 376 001 \0 U 022 0063060 o r d s ^ 1 , ( r e c e i v e 0063100 R e s u l t + 1 ) r s h i f t 0063120 1 ) \r i f i n P b i 0063140 t h e n / / i g n o r e 0063160 z e r o - l e n g t h p a c k 0063200 e t s \r [ R e l e 0063220 a s e P B I ( i n P b i ) ; i 0063240 f r e c e i v e R e s u l t 0063260 e q 0 l o o p ] \r r 0063300 e s u l t i s r e c e i v e R 0063320 e s u l t / / c o u n t o 0063340 f d a t a B y t e s \r ] 0063360 \r u n l e s s r e c e i v e R 0063400 e s u l t e q E F T P N o t 0063420 F i r s t S y n c h r e s u l 0063440 t i s r e c e i v e R e s u l 0063460 376 001 \0 351 206 t \r ] r e p e a t \r 0063500 \f \r / / - - - - - - - - - - - - 0063520 - - - - - - - - - - - - - - - - * 0063620 \r a n d R e c e i v e E F T P 0063640 P a c k e t ( s o c , t i m e 0063660 o u t , l v P b i ) = v a 0063700 l o f \r / / - - - - - - - - - - 0063720 - - - - - - - - - - - - - - - - * 0064020 - - \r / / R e t u r n s a 0064040 b y t e c o u n t ( > = 0 ) 0064060 o r a 376 001 \0 017 n e r r o 0064100 r c o d e ( < 0 ) \r / / I 0064120 f a b y t e c o u n t , 0064140 @ l v P b i c o n t a i n s 0064160 t h e p b i w i t h t h e 0064200 d a t a \r / / N o t e t h 0064220 a t w h e n w e s t a r t 0064240 , w e m a y n o t y e t 0064260 k n o w t h e s o c k e t 0064300 \r / / n u m b e r o f t 0064320 h e f o r e i g n s o c k e 0064340 t . . . . . \r [ \r l e t s y n 0064360 c M s g = " Y o u r s e n 0064400 d e r h a s g o t t e n o 0064420 u t o f s y n c . " \r l e t 0064440 b u s y M s g = " R e c e 0064460 i v e r b u s y , 376 001 \0 222 6 0064500 p l e a s e t r y a g a i n 0064520 l a t e r . " \r l e t l o n 0064540 g T i m e r = n i l ; S e 0064560 t T i m e r ( l v l o n g T i 0064600 m e r , t i m e o u t ) \r 0064620 [ / / r e p e a t \r 0064640 / / w a i t f o r a n i 0064660 n c o m i n g p a c k e t \r 0064700 B l o c k ( ) \r i f 0064720 t i m e o u t n e - 1 & 0064740 T i m e r H a s E x p i r e d ( 0064760 l v l o n g T i m e r ) r e 0065000 s u l t i s E F T P T i m e o 0065020 u t \r l e t i n P b i 0065040 = D e q u e u e ( l v s o c 0065060 > > E F T P S o c . i Q ) \r 376 0065100 001 \0 336 F i f i n P b i e 0065120 q 0 l o o p \r l e t 0065140 i n S e q N u m = i n P b i 0065160 > > P B I . p u p . i d ^ 2 \r \r 0065200 / / S e e i f w e 0065220 a r e a l r e a d y c o m m 0065240 i t t e d t o a f i l e 0065260 t r a n s f e r \r i f s 0065300 o c > > E F T P S o c . T r a n 0065320 s f e r N o t S t a r t e d t 0065340 h e n \r [ \r 0065360 / / N o e s t a b l i s 0065400 h e d f i l e t r a n s f e 0065420 r i s i n p r o g r e s s 0065440 . \r / / T o s t 0065460 a r t a f i l e t r a n s 0065500 f e r , 376 001 \0 u U ( 1 ) h i 0065520 s m u s t b e a v a l i 0065540 d p a c k e t 0 , \r 0065560 / / a n d e i t h e r 0065600 ( 2 ) i t s s o u r c e 0065620 m u s t m a t c h o u r s 0065640 o c k e t ' s f o r e i g n 0065660 p o r t \r / / o 0065700 r ( 3 ) w e m u s t b e 0065720 p r o m i s c u o u s . \r 0065740 i f i n P b i > > P B 0065760 I . p u p . t y p e e q t y 0066000 p e E F T P D a t a & i n S 0066020 e q N u m e q 0 & \r 0066040 ( s o c > > E F T P S o 0066060 c . f r n P o r t . h o s t e 0066100 q 0 % / / 376 001 \0 360 / ( 2 0066120 ) \r ( s o c > > E 0066140 F T P S o c . f r n P o r t . h 0066160 o s t e q i n P b i > > P B 0066200 I . p u p . s P o r t . h o s t 0066220 & / / ( 3 ) \r 0066240 s o c > > E F T P S o c . f r 0066260 n P o r t . n e t e q i n P 0066300 b i > > P B I . p u p . s P o r 0066320 t . n e t ) ) t h e n / / 0066340 ( 3 ) \r [ / 0066360 / e s t a b l i s h a " c 0066400 o n n e c t i o n " \r 0066420 s o c > > E F T P S o c 0066440 . T r a n s f e r N o t S t a r 0066460 t e d = f a l s e \r 0066500 s o c > > E F T P 376 001 0066520 \0 234 275 S o c . S e q N u m = 0066540 0 \r M o v e B 0066560 l o c k ( l v s o c > > E F T 0066600 P S o c . f r n P o r t , l v 0066620 i n P b i > > P B I . p u p . 0066640 s P o r t , l e n P o r t ) \r 0066660 ] \r 0066700 ] \r \r / / D o s o u 0066720 r c e f i l t e r i n g \r 0066740 u n l e s s M u l t E q ( l 0066760 v s o c > > E F T P S o c . f 0067000 r n P o r t , l v i n P b i 0067020 > > P B I . p u p . s P o r t , 0067040 l e n P o r t ) d o \r 0067060 [ / / D i d n o t 0067100 p a s s s o u r c e f i l t 0067120 e r , 376 001 \0 356 231 g e n e r a t 0067140 e A b o r t \r t e 0067160 s t i n P b i > > P B I . p u 0067200 p . t y p e e q t y p e E F 0067220 T P D a t a & i n S e q N u 0067240 m e q 0 \r 0067260 i f s o \r 0067300 [ \r / 0067320 / A t t e m p t e d f i r s 0067340 t p a c k e t o f t r a n 0067360 s f e r . \r 0067400 / / E i t h e r w e a 0067420 r e b u s y o r w e a r 0067440 e l i s t e n i n g a n d 0067460 n o t p r o m i s c u o u s . 0067500 \r S e n 0067520 d E F T P A b o 376 001 \0 ] r t ( 0067540 s o c , R e c e i v e r B u s 0067560 y A b o r t , b u s y M s g , 0067600 i n P b i ) \r 0067620 s o c > > E F T P S o c 0067640 . S o m e o n e E l s e W a i t 0067660 i n g = t r u e \r 0067700 ] \r 0067720 i f n o t \r 0067740 [ \r 0067760 / / N o t l e g a l f 0070000 i r s t p a c k e t o f t 0070020 r a n s f e r . \r 0070040 S e n d E F T P A b o 0070060 r t ( s o c , O u t O f S y n 0070100 c h A b o r t , s y n c M s g 0070120 , i n P b i ) \r 376 001 \0 0070140 * 303 ] \r 0070160 R e l e a s e P B I ( i n P 0070200 b i ) \r i f s o c 0070220 > > E F T P S o c . T r a n s f 0070240 e r N o t S t a r t e d r e s 0070260 u l t i s E F T P N o t F i r 0070300 s t S y n c h \r l o 0070320 o p / / w a i t f o r 0070340 n e x t i n p u t \r 0070360 ] \r \r / / C h e c k 0070400 t h e s e q u e n c e n u m 0070420 b e r - - s h o u l d b e 0070440 e x p e c t e d o r e x p 0070460 e c t e d - 1 \r i f ( s 0070500 o c > > E F T P S o c . S e q N 0070520 u m - i n S e q N u m ) r s h 0070540 i f 376 001 \0 ' m t 1 n e 0 0070560 t h e n \r [ \r 0070600 / / S e q u e n c e 0070620 n u m b e r i n c o r r e c t 0070640 . \r / / I f w e 0070660 r e c e i v e a d a t a 0070700 p a c k e t w i t h s e q u 0070720 e n c e n u m b e r 0 \r 0070740 / / f r o m o u r 0070760 p a r t n e r , t h e n a s 0071000 s u m e h e w a n t s t o 0071020 r e s t a r t . \r 0071040 / / O t h e r w i s e a b o 0071060 r t t h e t r a n s f e r 0071100 a n d r e t u r n a n e r 0071120 r o r . \r u n l e s 0071140 s i n S e q 376 001 \0 030 177 N u m 0071160 e q 0 d o \r 0071200 S e n d E F T P A b o r t ( s 0071220 o c , O u t O f S y n c h A b 0071240 o r t , s y n c M s g , i n 0071260 P b i ) \r R e l e a 0071300 s e P B I ( i n P b i ) \r 0071320 r e s u l t i s i n S e 0071340 q N u m e q 0 ? E F T P R 0071360 e s e t R e c e i v e d , E F 0071400 T P A b o r t S e n t \r 0071420 ] \r \f \r / / R e c e i v e 0071440 E F T P P a c k e t ( c o n t 0071460 ' d ) \r \r / / P a c k e 0071500 t h a s p a s s e d a l l 0071520 f i l t e r s . N o w p 0071540 r o c e s s i t . \r 376 001 \0 315 0071560 237 s w i t c h o n i n P b 0071600 i > > P B I . p u p . t y p e 0071620 i n t o \r [ \r 0071640 c a s e t y p e E F T P 0071660 D a t a : \r [ 0071700 \r A c k E F T 0071720 P P a c k e t ( s o c , i n P 0071740 b i ) \r i f 0071760 i n S e q N u m n e s o c > 0072000 > E F T P S o c . S e q N u m 0072020 t h e n \r 0072040 [ R e l e a s e P B I ( i n 0072060 P b i ) ; l o o p ] / / 0072100 r e t r a n s m i s s i o n \r 0072120 s o c > > E F T 0072140 P S o c . S e q N u m = s o 0072160 c 376 001 \0 9 0 > > E F T P S o c . 0072200 S e q N u m + 1 \r 0072220 @ l v P b i = i n P b i 0072240 \r r e s u l t 0072260 i s i n P b i > > P B I . p u 0072300 p . l e n g t h - p u p O v 0072320 B y t e s / / a n d r e 0072340 t u r n \r ] \r 0072360 c a s e t y p e E 0072400 F T P E n d : \r 0072420 [ \r A c k E 0072440 F T P P a c k e t ( s o c , i 0072460 n P b i ) ; R e l e a s e P B 0072500 I ( i n P b i ) \r 0072520 i f i n S e q N u m n e 0072540 s o c > > E F T P S o c . S e 0072560 q N u m l 376 001 \0 370 001 o o p 0072600 / / r e t r a n s m i s s i o n 0072620 \r s o c > > E 0072640 F T P S o c . S e q N u m = 0072660 s o c > > E F T P S o c . S e q 0072700 N u m + 1 \r l 0072720 e t d a l l y T i m e r = 0072740 n i l ; S e t T i m e r ( l v 0072760 d a l l y T i m e r , d a l 0073000 l y T i m e o u t ) \r 0073020 [ / / r e p e 0073040 a t \r B 0073060 l o c k ( ) \r 0073100 i f T i m e r H a s E x 0073120 p i r e d ( l v d a l l y T i 0073140 m e r ) r e s u l t i s E F 0073160 T P E n d R e c e i v 376 001 \0 \v r 0073200 e d \r i 0073220 n P b i = D e q u e u e ( l 0073240 v s o c > > E F T P S o c . i 0073260 Q ) \r i 0073300 f i n P b i e q 0 l o o 0073320 p \r \r i 0073340 f i n P b i > > P B I . p u p 0073360 . t y p e n e t y p e E F T 0073400 P E n d t h e n \r 0073420 [ R e l e a 0073440 s e P B I ( i n P b i ) ; l o 0073460 o p ] \r 0073500 i f s o c > > E F T P S o c 0073520 . S e q N u m e q i n P b i 0073540 > > P B I . p u p . i d ^ 2 t 0073560 h e n \r 0073600 376 001 \0 216 ' [ R e l 0073620 e a s e P B I ( i n P b i ) ; 0073640 r e s u l t i s E F T P E n d 0073660 R e c e i v e d ] \r \r 0073700 / / W a s a 0073720 r e t r a n s m i s s i o n 0073740 o f f i r s t e n d , a c 0073760 k i t \r 0074000 A c k E F T P P a c k e t ( s 0074020 o c , i n P b i ) ; R e l e 0074040 a s e P B I ( i n P b i ) \r 0074060 ] r e p e 0074100 a t \r e n d c 0074120 a s e \r ] \r 0074140 c a s e t y p e E F 0074160 T P A b o r t : \r 0074200 [ \r 376 001 \0 o 375 0074220 i f s o c > > E F T P S o 0074240 c . A b o r t P B I n e 0 0074260 t h e n R e l e a s e P B I ( 0074300 s o c > > E F T P S o c . A b o 0074320 r t P B I ) \r 0074340 s o c > > E F T P S o c . A b o 0074360 r t P B I = i n P b i \r 0074400 r e s u l t i s 0074420 E F T P A b o r t R e c e i v e 0074440 d \r ] \r 0074460 ] \r R e l e a s e P 0074500 B I ( i n P b i ) \r ] r 0074520 e p e a t \r ] \r \r \r / / - 0074540 - - - - - - - - - - - - - - - - * 0074600 - - - - - - - - - - 376 001 \0 261 / - 0074620 - - - - - - - - - - - - - - - - * 0074660 \r a n d A c k E F T P P a c k 0074700 e t ( s o c , p b i ) b e \r 0074720 / / - - - - - - - - - - - - - - 0074740 - - - - - - - - - - - - - - - - * 0075020 - - - - - - - - - - - - - - \r [ 0075040 \r / / c o n s t r u c t t h 0075060 e o u t g o i n g a c k p 0075100 a c k e t \r l e t a c k P b i 0075120 = G e t P B I ( s o c ) \r a 0075140 c k P b i > > P B I . p u p . i 0075160 d ^ 2 = p b i > > P B I . p 0075200 u p . i d ^ 2 \r C o m p l e t 376 0075220 \0 ( 001 222 e P u p ( a c k P b i , 0075240 t y p e E F T P A c k , p u 0075260 p O v B y t e s ) \r ] \r 377 \0 \0 P 0075300 u p E F T P C o m m o n . b c p 0075320 l \0 373 223 361 363 350 \0 \0 376 001 \0 ] 212 / / 0075340 P u p E F T P C o m m o n . b 0075360 c p l - - b y J . S h o 0075400 c h \r / / C o p y r i g h t 0075420 X e r o x C o r p o r a t i o 0075440 n 1 9 7 9 \r \r / / L a s t 0075460 m o d i f i e d J u n e 3 , 0075500 1 9 7 9 1 2 : 0 0 P M 0075520 b y T a f t \r \r g e t " P u 0075540 p E F T P . d e c l " \r \r e x t 0075560 e r n a l \r [ \r / / o u t g o 0075600 i n g p r o c e d u r e s \r I 0075620 n i t E F T P P a c k a g e ; 0075640 O p e n E F T P S o c ; C l o 0075660 s e E F T P S o c ; G e t E F 0075700 T P A b o r t ; S e n d E F T 0075720 P A b o r t \r \r / / i n c 376 001 0075740 \0 365 003 o m i n g p r o c e d u 0075760 r e s \r O p e n L e v e l 1 S o 0076000 c k e t ; C l o s e L e v e l 0076020 1 S o c k e t ; G e t P B I ; 0076040 R e l e a s e P B I \r S e t P 0076060 u p D P o r t ; A p p e n d S 0076100 t r i n g T o P u p ; C o m p 0076120 l e t e P u p \r D e f a u l t A 0076140 r g s ; Z e r o \r \r / / o u 0076160 t g o i n g s t a t i c s \r l 0076200 E F T P S o c \r ] \r \r s t a t i 0076220 c [ l E F T P S o c = l 0076240 e n E F T P S o c ] \r \r \r / / 0076260 - - - - - - - - - - - - - - - - * 0076340 - - - 376 001 \0 226 260 - - - - - - - - 0076360 - - - - - - - - - - - - - - - - 0076400 - \r l e t I n i t E F T P P a 0076420 c k a g e ( p a c k a g e Z o n 0076440 e ) b e [ ] \r / / - - - - 0076460 - - - - - - - - - - - - - - - - * 0076560 - - - - - - - - \r \r / / - - - - 0076600 - - - - - - - - - - - - - - - - * 0076700 - - - - - - - - \r a n d O p e 0076720 n E F T P S o c ( s o c , l c 0076740 l p o r t , f 376 001 \0 375 255 r n p 0076760 o r t ; n u m a r g s n a ) 0077000 b e \r / / - - - - - - - - - - 0077020 - - - - - - - - - - - - - - - - * 0077120 - - \r [ \r D e f a u l t A r g s 0077140 ( l v n a , - 1 , 0 , 0 0077160 ) \r Z e r o ( s o c , l e n E 0077200 F T P S o c ) \r s o c > > E F T 0077220 P S o c . T r a n s f e r N o t 0077240 S t a r t e d = t r u e \r s 0077260 o c > > E F T P S o c . c u r r 0077300 e n t T i m e o u t = s t a 0077320 r t i n g T i m e o u t \r O p e 0077340 n L e v e l 1 S o c k e t 376 001 \0 0077360 356 224 ( s o c , l c l p o r t , 0077400 f r n p o r t ) \r ] \r \r / / - 0077420 - - - - - - - - - - - - - - - - * 0077520 - - - - - - - - - - - \r a n d 0077540 C l o s e E F T P S o c ( s o c 0077560 ) b e \r / / - - - - - - - - - 0077600 - - - - - - - - - - - - - - - - * 0077700 - - - \r [ \r i f s o c > > E F 0077720 T P S o c . A b o r t P B I n 0077740 e 0 t h e n R e l e a s e 0077760 P B 376 001 \0 334 \f I ( s o c > > E F 0100000 T P S o c . A b o r t P B I ) \r 0100020 C l o s e L e v e l 1 S o c k e 0100040 t ( s o c ) \r ] \r \r / / - - - - 0100060 - - - - - - - - - - - - - - - - * 0100160 - - - - - - - - \r a n d G e t 0100200 E F T P A b o r t ( s o c ) = 0100220 s o c > > E F T P S o c . A b 0100240 o r t P B I \r / / - - - - - - - 0100260 - - - - - - - - - - - - - - - - * 0100360 - - - - - \r \r 376 001 \0 \t C / / - - 0100400 - - - - - - - - - - - - - - - - * 0100500 - - - - - - - - - - \r a n d S 0100520 e n d E F T P A b o r t ( s o c 0100540 , a b o r t C o d e , a b o 0100560 r t S t r i n g , p b i ; n 0100600 u m a r g s n a ) b e \r / / 0100620 - - - - - - - - - - - - - - - - * 0100720 - - - - - - - - - - - - \r / / 0100740 c o n s t r u c t t h e o u 0100760 t g o i n g a b o r t 376 001 \0 324 0101000 224 p a c k e t , \r / / w i l 0101020 l g e t s e n t t o s o 0101040 u r c e o f p b i i f s 0101060 u p p l i e d , \r / / w i l l 0101100 g e t s e n t t o y o u 0101120 r c u r r e n t f o r e i g 0101140 n p o r t o t h e r w i s e 0101160 \r [ \r l e t a b o r t P b i 0101200 = G e t P B I ( s o c ) \r i f 0101220 n a g r 3 t h e n \r 0101240 [ \r a b o r t P b i > > 0101260 P B I . p u p . i d ^ 2 = p 0101300 b i > > P B I . p u p . i d ^ 2 0101320 \r S e t P u p D P o r t ( 0101340 a b o r t P b i , l v p b i 0101360 > > P B I . p u p . s P o r t ) 0101400 \r 376 \0 253 L ] ] \r a b o r t 0101420 P b i > > P B I . p u p . i d ^ 0101440 2 = s o c > > E F T P S o c 0101460 . S e q N u m \r a b o r t P b i 0101500 > > P B I . p u p . w o r d s ^ 0101520 1 = a b o r t C o d e \r A p 0101540 p e n d S t r i n g T o P u p ( 0101560 a b o r t P b i , 3 , a b o 0101600 r t S t r i n g ) \r C o m p l e 0101620 t e P u p ( a b o r t P b i , 0101640 t y p e E F T P A b o r t ) \r ] 0101660 \r 377 \0 \0 C o m p i l e E F T P . 0101700 c m \0 373 223 361 363 350 \0 \0 376 \0 s 353 250 B 0101720 c p l / f E F T P . b c p l \r 0101740 B c p l / f E F T P F i l e . 0101760 b c p l \r B c p l / f P u p E 0102000 F T P S e n d . b c p l \r B c p 0102020 l / f P u p E F T P R e c e i 0102040 v e . b c p l \r B c p l / f P 0102060 u p E F T P C o m m o n . b c p 0102100 l \r 377 \0 \0 L o a d E F T P . c m 0102120 \0 373 223 361 363 350 \0 \0 376 \0 355 243 033 B L D 0102140 R / L / V E F T P E F T P F 0102160 i l e P u p E F T P S e n d 0102200 P u p E F T P R e c e i v e P 0102220 u p E F T P C o m m o n P u p 0102240 A l E t h b P u p A l E t h a 0102260 P u p A l E t h I n i t P u 0102300 p 1 b P u p A l 1 a P u p D 0102320 u m m y G a t e P u p R o u t 0102340 e P u p 1 I n i t P u p 1 O 0102360 p e n C l o s e P u p N a m e 0102400 L o o k u p C o n t e x t C 0102420 o n t e x t I n i t I n t e r 0102440 r u p t I n t e r r u p t I n 0102460 i t A l t o Q u e u e A l t 0102500 o T i m e r G P \r 377 \0 \0 R e l 0102520 e a s e E F T P . c m \0 373 223 361 363 0102540 350 \0 \0 376 \0 273 227 362 F t p M a x c 0102560 c o n n / c A l t o s t o 0102600 r e / c E F T P . r u n E F 0102620 T P . s y m s ^ \r d u m p / c 0102640 E F T P p a c k a g e . d m 0102660 P u p E F T P . d e c l P u p 0102700 E F T P S e n d . b r P u p E 0102720 F T P R e c e i v e . b r P u 0102740 p E F T P C o m m o n . b r ^ 0102760 \r c o n n / c A l t o S o u r 0103000 c e d u m p / c E F T P S o 0103020 u r c e s . d m @ E F T P . c 0103040 m @ \r 377 \0 \0 E F T P . c m \0 373 223 0103060 361 363 350 \0 \0 376 \0 216 032 _ P u p E F T 0103100 P . d e c l E F T P . b c p l 0103120 E F T P F i l e . b c p l P 0103140 u p E F T P S e n d . b c p l 0103160 P u p E F T P R e c e i v e . b 0103200 c p l P u p E F T P C o m m o 0103220 n . b c p l C o m p i l e E F 0103240 T P . c m L o a d E F T P . c 0103260 m R e l e a s e E F T P . c m 0103300 E F T P . c m 374 0103311