$ od -c -N 50000 [Indigo]<AltoSource>TIMESOURCE.DM!2 0000000 377 \0 \0 T i m e . d \0 373 223 362 023 245 \0 0000020 \0 376 001 \0 $ ] / / T i m e . d 0000040 - - d e f i n i t i o n s f 0000060 o r t i m e c o n v e r s i 0000100 o n p a c k a g e \r / / C o 0000120 p y r i g h t X e r o x C o 0000140 r p o r a t i o n 1 9 7 9 \r \r 0000160 / / \t L a s t m o d i f i e d 0000200 D e c e m b e r 3 1 , 1 9 0000220 7 7 4 : 0 5 P M \r \r / / - 0000240 - - - - - - - - - - - - - - - - * 0000340 - - - - - - - - - - - \r s t r u 0000360 c t u r e U T V : \t / / U n 0000400 p a c k e d T i m e V e c t 0000420 o r \r / / - 376 001 \0 267 353 - - - - - 0000440 - - - - - - - - - - - - - - - - * 0000540 - - - - - - \r [ \r y e a r w o 0000560 r d \t \t / / A c t u a l y e 0000600 a r ( e . g . , 1 9 7 7 ) \r 0000620 m o n t h w o r d \t \t / / M 0000640 o n t h ( J a n u a r y = 0000660 0 ) \r d a y w o r d \t \t / / 0000700 D a y ( f i r s t d a y = 0000720 1 ) \r h o u r w o r d \t \t / 0000740 / H o u r o f d a y ( m 0000760 i d n i g h t = 0 ) \r m i n 0001000 u t e w o r d \t \t / / M i n 0001020 u t e \r s e c o n d 376 001 \0 [ 255 0001040 w o r d \t \t / / S e c o n d \r 0001060 w o r d 6 w o r d = \r 0001100 [ \r d a y l i g h t b i 0001120 t 1 \t / / T r u e i f D 0001140 a y l i g h t S a v i n g s 0001160 T i m e i n e f f e c t \r 0001200 w e e k d a y b i t 3 \t 0001220 / / D a y o f w e e k ( 0001240 M o n d a y = 0 , S u n d 0001260 a y = 6 ) \r b l a n k 0001300 b i t 1 \r z o n e : \t 0001320 \t / / L o c a l t i m e z 0001340 o n e \r [ \r 0001360 s i g n b i t 1 \t / / 0001400 Z e r o i f w e s t o f 0001420 G r e e n w i c h , o n e i 0001440 376 001 \0 6 246 f e a s t \r 0001460 h o u r b i t 4 \t / / 0001500 H o u r s f r o m G r e e n 0001520 w i c h \r m i n u t 0001540 e b i t 6 \t / / A d d i t 0001560 i o n a l m i n u t e s \r 0001600 ] \r ] \r ] \r \r m a 0001620 n i f e s t \r [ \r l e n U T V 0001640 = s i z e U T V / 1 6 \r \r / 0001660 / I n d i c e s f o r e r 0001700 r o r r e t u r n f r o m 0001720 P A C K D T \r i Y e a r = o 0001740 f f s e t U T V . y e a r / 1 0001760 6 + 1 \r i M o n t h = o f 0002000 f s e t U T V . m o n t h / 1 0002020 6 + 1 \r i D a y = o f f s 0002040 e t U T 376 001 \0 223 224 V . d a y / 0002060 1 6 + 1 \r i H o u r = o f 0002100 f s e t U T V . h o u r / 1 6 0002120 + 1 \r i M i n u t e = o f 0002140 f s e t U T V . m i n u t e / 0002160 1 6 + 1 \r i S e c o n d = 0002200 o f f s e t U T V . s e c o n 0002220 d / 1 6 + 1 \r ] \r \r / / - - - 0002240 - - - - - - - - - - - - - - - - * 0002340 - - - - - - - - - \r / / s t r 0002360 u c t u r e L T P : \t / / L 0002400 o c a l T i m e P a r a m e 0002420 t e r s - - n o w d e f i 0002440 n e d i n A l t 376 001 \0 315 260 o 0002460 D e f s . d \r / / - - - - - - - 0002500 - - - - - - - - - - - - - - - - * 0002600 - - - - - \r / / [ \r / / s i 0002620 g n b i t 1 \t \t / / Z e r 0002640 o i f w e s t o f G r e 0002660 e n w i c h , o n e i f e 0002700 a s t \r / / z o n e H b i t 0002720 4 \t \t / / L o c a l t i m 0002740 e z o n e i n h o u r s 0002760 f r o m G r e e n w i c h \r / 0003000 / b l a n k b i t 2 \r / / 0003020 b e g i n D S T b i t 9 \t 0003040 / / D a y o f y e a r 376 0003060 \0 247 > S o n o r b e f o r e 0003100 w h i c h D S T s t a r t 0003120 s \r / / b l a n k b i t 1 0003140 \r / / z o n e M b i t 6 \t 0003160 \t / / A d d i t i o n a l m 0003200 i n u t e s o f l o c a l 0003220 t i m e z o n e \r / / e n d 0003240 D S T b i t 9 \t \t / / D a 0003260 y o f y e a r o n o r 0003300 b e f o r e w h i c h D S T 0003320 e n d s \r / / ] \r 377 \0 \0 T i 0003340 m e C o n v B . b c p l \0 373 223 362 0003360 023 245 \0 \0 376 001 \0 5 267 / / T i m e 0003400 C o n v B . b c p l - - c o 0003420 n v e r s i o n b e t w e e n 0003440 p a c k e d a n d u n p a 0003460 c k e d r e p r e s e n t a t 0003500 i o n s . \r / / \t \t \t R e q u i 0003520 r e s c o m p a n i o n m o 0003540 d u l e T i m e C o n v A . a 0003560 s m \r / / C o p y r i g h t 0003600 X e r o x C o r p o r a t i o 0003620 n 1 9 7 9 \r \r / / \t L a s t 0003640 m o d i f i e d D e c e m b e 0003660 r 3 1 , 1 9 7 7 7 : 0 5 0003700 P M \r \r g e t " A l t o D e 0003720 f s . d " \r g e t " T i m e . 0003740 d " \r \r e x t e r n a l \r [ \r / 0003760 / O u t g o i n 376 001 \0 246 E g 0004000 p r o c e d u r e s \r U N P A C 0004020 K D T ; P A C K D T ; W E E 0004040 K D A Y \r \r / / I n c o m i n 0004060 g p r o c e d u r e s \r T i m 0004100 e D i v ; T i m e M u l \r M o 0004120 v e B l o c k ; R e a d C a l 0004140 e n d a r ; D o u b l e A d d 0004160 ; S y s E r r \r \r / / I n c 0004200 o m i n g s t a t i c s \r m o 0004220 n t h T a b l e ; O s V e r s 0004240 i o n \r ] \r \r / / \t T h e i n 0004260 t e r n a l f o r m a t f o 0004300 r a c a l e n d a r d a t 0004320 e a n d t i m e \r / / ( o 0004340 r s i m p l y " d a y t i m 0004360 e " ) i s a 3 2 - b i 376 001 0004400 \0 375 [ t i n t e g e r ( P T 0004420 V , p a c k e d t i m e v 0004440 e c t o r ) \r / / r e p r e s 0004460 e n t i n g s e c o n d s r 0004500 e l a t i v e t o m i d n i 0004520 g h t , J a n u a r y 1 , 0004540 1 9 0 1 G M T . \r / / T h e 0004560 r e i s a n u n p a c k e 0004600 d f o r m a t ( U T V , u 0004620 n p a c k e d t i m e v e c 0004640 t o r , d e f i n e d i n 0004660 T i m e . d ) \r / / m o r e 0004700 s u i t a b l e f o r p e r 0004720 s o n - o r i e n t e d I / O 0004740 : a 7 - w o r d v e c t o 0004760 r c o n t a i n i n g y e a 0005000 r , \r 376 001 \0 236 372 / / m o n t h 0005020 ( J a n u a r y = 0 ) , d a 0005040 y ( f i r s t d a y o f 0005060 m o n t h = 1 ) , h o u r , 0005100 m i n u t e , \r / / s e c o n 0005120 d , d a y o f w e e k , 0005140 d a y l i g h t s a v i n g 0005160 t i m e f l a g , a n d t 0005200 i m e z o n e i n f o r m a 0005220 t i o n . \r / / C o n v e r s 0005240 i o n b e t w e e n t h e 0005260 t w o f o r m s i s n o t 0005300 t r i v i a l , s i n c e 0005320 i t m u s t d e a l w i t 0005340 h \r / / l e a p y e a r s , 0005360 d a y l i g h t t i m e , 0005400 t i m e z o n 376 001 \0 323 340 e s , 0005420 a n d l e n g t h s o f 0005440 m o n t h s . \r \r / / N o t e 0005460 s : \r / / ( 1 ) T h i s i 0005500 m p l e m e n t a t i o n d o 0005520 e s n o t n e e d t o k 0005540 n o w t h e G r e g o r i a 0005560 n c a l e n d a r \r / / r u 0005600 l e w h e r e b y y e a r s 0005620 d i v i s i b l e b y 1 0 0005640 0 a r e n ' t l e a p y e 0005660 a r s u n l e s s a l s o 0005700 d i v i s i b l e \r / / b y 0005720 4 0 0 . T h i s i s b e 0005740 c a u s e t h e A l t o c 0005760 a l e n d a r o n l y s p a 0006000 n s t h e y e a r s \r 376 001 \0 0006020 335 276 / / 1 9 0 1 t o 2 0 3 0006040 6 , a n d t h e y e a r 0006060 2 0 0 0 i s a l e a p y 0006100 e a r . \r \r / / ( 2 ) T h i 0006120 s v e r s i o n o f t h e 0006140 c o d e i s i n t e n d e 0006160 d t o w o r k w h e t h e 0006200 r o r n o t t h e \r / / 0006220 l o c a l t i m e p a r a 0006240 m e t e r s a r e a v a i l 0006260 a b l e . I f t h e y a 0006300 r e n ' t , \r / / w e a s s 0006320 u m e t h a t t h e l o c 0006340 a l t i m e z o n e i s 0006360 8 ( P a c i f i c S t a n d 0006400 a r d ) . T h i s \r / / c 0006420 o m 376 001 \0 336 3 p a t i b i l i t 0006440 y c o d e s h o u l d b e 0006460 r e m o v e d e v e n t u a 0006500 l l y . I t i s m a r k 0006520 e d b y " * * * * " . \r \r \r 0006540 / / - - - - - - - - - - - - - - 0006560 - - - - - - - - - - - - - - - - * 0006640 - - - - - - - - - - - - - - \r s 0006660 t r u c t u r e U L T : / 0006700 / U n p a c k e d L o c a l 0006720 T i m e i n f o r m a t i o 0006740 n \r / / - - - - - - - - - - - - 0006760 - - - - - - - - - - - - - - - - * 0007020 - - - - - - - 376 001 \0 212 $ - - - - 0007040 - - - - - - - - - - - - - - - - 0007060 - - - - - \r / / U N P A C K D 0007100 T a n d P A C K D T k n o 0007120 w a b o u t t h e o r d e 0007140 r o f t h e s e w o r d s 0007160 . B e w a r e ! \r [ \r b e g 0007200 i n D S T w o r d \t \t / / D 0007220 a y o f y e a r o n o r 0007240 b e f o r e w h i c h D S 0007260 T s t a r t s \r e n d D S T 0007300 w o r d \t \t / / D a y o f 0007320 y e a r o n o r b e f o r 0007340 e w h i c h D S T e n d s 0007360 \r z o n e : \t \t \t / / L o c a 0007400 l t i m e z o n e - - f 0007420 o r m a t s a m e a 376 001 \0 - 0007440 356 s i n U T V s t r u c t 0007460 u r e \r [ \r b l a n 0007500 k b i t 5 \r s i g n 0007520 b i t 1 \r h o u r b i 0007540 t 4 \r m i n u t e b i 0007560 t 6 \r ] \r c o m p Z o n 0007600 e w o r d \t \t / / C o m p o 0007620 s i t e z o n e : m i n u t 0007640 e s w e s t ( + ) o r e 0007660 a s t ( - ) o f G M T \r ] 0007700 \r \r \r m a n i f e s t e c O S 0007720 V e r s i o n = 2 9 0 0 0007740 / / E r r o r c o d e f o 0007760 r O S o l d e r t h a n 0010000 v e r s i o n 1 4 \r \f \r / / - 0010020 - - - - - - - - - - - - - - - - 0010040 - 376 001 \0 026 345 - - - - - - - - - - 0010060 - - - - - - - - - - - - - - - - * 0010140 \r l e t U N P A C K D T ( p t 0010160 v , u t v ) = v a l o f \r 0010200 / / - - - - - - - - - - - - - - 0010220 - - - - - - - - - - - - - - - - * 0010300 - - - - - - - - - - - - - - \r / 0010320 / U n p a c k s 3 2 - b i t 0010340 t i m e a t p t v i n t 0010360 o U T V s t r u c t u r e 0010400 ( s e e T i m e . d ) . \r / / 0010420 I f p t v i s 0 , u s 0010440 e s c u r 376 001 \0 264 203 r e n t 0010460 d a t e a n d t i m e . \r [ 0010500 \r / / S e t u p l o c a l 0010520 t i m e p a r a m e t e r s 0010540 \r l e t b e g i n D S T , e 0010560 n d D S T , z o n e , c o m 0010600 p Z o n e = n i l , n i l 0010620 , n i l , n i l \r S e t u p 0010640 U L T ( l v b e g i n D S T , 0010660 0 ) \r u t v > > U T V . w o r 0010700 d 6 = 0 \r u t v > > U T V . 0010720 z o n e = z o n e \r \r / / 0010740 G e t o r d e f a u l t p 0010760 a c k e d t i m e \r l e t p 0011000 v = v e c 2 \r t e s t p 0011020 t v e q 0 \r i f s o 0011040 R e a d C a l e n d a 376 001 \0 204 026 0011060 r ( p v ) \r i f n o t M 0011100 o v e B l o c k ( p v , p t v 0011120 , 2 ) \r \r / / U n p a c k 0011140 s e c o n d s t r a i g h t f 0011160 o r w a r d l y \r u t v > > U T 0011200 V . s e c o n d = T i m e D 0011220 i v ( p v , 6 0 , p v ) \r \r 0011240 / / p v n o w h a s n u 0011260 m b e r o f m i n u t e s 0011300 s i n c e J a n 1 , 1 9 0 0011320 1 . \r / / A t t h i s p o 0011340 i n t , a p p l y t h e l 0011360 o c a l t i m e z o n e b 0011400 y s u b t r a c t i n g i t 0011420 f r o m p v . \r / / S i n 0011440 c e t h i s m a y c a u s 0011460 376 001 \0 k 3 e t h e r e s u l 0011500 t t o u n d e r f l o w , 0011520 a l s o a d d 4 y e a r s 0011540 ' w o r t h \r / / o f m i 0011560 n u t e s s o a s t o m 0011600 a k e i t p o s i t i v e 0011620 a g a i n , t h e r e b y m 0011640 a k i n g d a y z e r o b 0011660 e \r / / J a n 1 , 1 8 9 7 0011700 . ( W e i g n o r e t h 0011720 e f a c t t h a t 1 9 0 0 0011740 w a s n o t a l e a p 0011760 y e a r ) . \r / / N o t e t 0012000 h a t c o m p Z o n e i s 0012020 i n t h e r a n g e [ - 7 0012040 2 0 . . 7 2 0 ] \r l e t t v 0012060 = v e c 376 001 \0 246 257 2 \r t v ! 0012100 0 , t v ! 1 = 3 2 , 6 6 0012120 8 8 - c o m p Z o n e / / 0012140 4 y e a r s = 2 1 0 3 8 4 0012160 0 = 3 2 * 2 ^ 1 6 + 6 6 0012200 8 8 m i n u t e s \r D o u b l 0012220 e A d d ( p v , t v ) \r \r / / 0012240 N o w u n p a c k m i n u 0012260 t e \r u t v > > U T V . m i n u 0012300 t e = T i m e D i v ( p v , 0012320 6 0 , p v ) \r \r / / G o 0012340 a r o u n d t h i s l o o p 0012360 t w i c e i f d a y l i g 0012400 h t s a v i n g s t i m e 0012420 m u s t b e a p p l i e d . 0012440 \r f o r i = 0 t o 1 0012460 d o \r [ \r 376 001 \0 364 \v 0012500 / / N o w u n p a c k h o 0012520 u r i n d a y \r l e t 0012540 p v 2 = v e c 2 \r 0012560 u t v > > U T V . h o u r = 0012600 T i m e D i v ( p v , 2 4 , 0012620 p v 2 ) \r \r / / p v 2 ! 0012640 1 h a s d a y s s i n c e 0012660 J a n 1 , 1 8 9 7 . C 0012700 o m p u t e d a y o f w e 0012720 e k . \r / / J a n 1 , 0012740 1 8 9 7 w o u l d h a v e 0012760 b e e n a T h u r s d a y 0013000 ( = 3 ) i f 1 9 0 0 w e 0013020 r e a l e a p y e a r . \r 0013040 t v ! 0 , t v ! 1 = 0013060 0 , p v 2 ! 1 + 3 \r 376 0013100 001 \0 256 034 u t v > > U T V . w e 0013120 e k d a y = T i m e D i v ( 0013140 t v , 7 , t v ) \r \r / 0013160 / U n p a c k 4 - y e a r 0013200 c y c l e s a n d d a y w 0013220 i t h i n c y c l e , a n d 0013240 n o r m a l i z e d a y t 0013260 o \r / / 3 6 6 - d a y 0013300 y e a r s . \r l e t d a 0013320 y = T i m e D i v ( p v 2 , 0013340 3 * 3 6 5 + 3 6 6 , p v 2 ) 0013360 \r d a y = d a y + 0013400 ( d a y g e 3 * 3 6 5 + 3 1 0013420 + 2 8 ? 3 , ( d a y + ( 3 6 0013440 5 - 3 1 - 2 8 ) ) / 3 6 5 ) \r \r 0013460 / / p v 2 ! 1 n o w 0013500 h a s 376 001 \0 023 = n u m b e r 0013520 o f 4 - y e a r c y c l e s 0013540 s i n c e J a n 1 , 1 8 0013560 9 7 . \r / / C o m p u t 0013600 e r e a l y e a r a n d 0013620 d a y i n y e a r . \r 0013640 u t v > > U T V . y e a r = 0013660 1 8 9 7 + 4 * p v 2 ! 1 + 0013700 d a y / 3 6 6 \r d a y 0013720 = d a y r e m 3 6 6 \r \r 0013740 / / C o m p u t e m o n 0013760 t h a n d d a y i n m o 0014000 n t h \r l e t m o n t h 0014020 = 0 \r w h i l e d a 0014040 y g e m o n t h T a b l e ! 0014060 ( m o n t h + 1 ) d o m o n 0014100 t h = m o n t 376 001 \0 250 214 h + 0014120 1 \r u t v > > U T V . m o 0014140 n t h = m o n t h \r u 0014160 t v > > U T V . d a y = d a 0014200 y - m o n t h T a b l e ! m 0014220 o n t h + 1 \r \r / / I 0014240 f d a y l i g h t s a v i n 0014260 g s t i m e a p p l i e s , 0014300 a d d o n e h o u r a n 0014320 d g o a r o u n d \r / 0014340 / t h e l o o p a g a i n 0014360 . N o t e t h a t d a y 0014400 l i g h t s a v i n g s t i 0014420 m e g o e s i n t o e f f 0014440 e c t a t \r / / 2 A 0014460 M s t a n d a r d t i m e 0014500 a n d o u t o f e f f 376 001 0014520 \0 " | e c t a t 2 A M d 0014540 a y l i g h t t i m e , w h 0014560 i c h i s \r / / 1 A 0014600 M s t a n d a r d t i m e 0014620 ( s t a n d a r d t i m e i 0014640 s w h a t u t v p r e s e 0014660 n t l y c o n t a i n s ) . \r 0014700 i f n o t C h e c k D 0014720 a t e G E ( u t v , b e g i n 0014740 D S T , 2 ) % C h e c k D 0014760 a t e G E ( u t v , e n d D S 0015000 T , 1 ) b r e a k \r u 0015020 t v > > U T V . d a y l i g h t 0015040 = t r u e \r D o u b l 0015060 e A d d ( p v , t a b l e [ 0015100 0 ; 1 ] ) \r ] \r \r r 0015120 e s u 376 001 \0 327 5 l t i s u t v 0015140 \r ] \r \f \r / / - - - - - - - - - 0015160 - - - - - - - - - - - - - - - - * 0015260 - - - \r a n d P A C K D T ( u 0015300 t v , p t v , u s e W o r d 0015320 6 ; n u m a r g s n a ) = 0015340 v a l o f \r / / - - - - - - - 0015360 - - - - - - - - - - - - - - - - * 0015460 - - - - - \r / / P a c k s t 0015500 h e t i m e d e s c r i b e 0015520 d b y u t v 376 001 \0 f 255 i n 0015540 t o a 3 2 - b i t t i m e 0015560 , r e t u r n i n g z e r o 0015600 i f \r / / s u c c e s s f u 0015620 l a n d t h e i n d e x 0015640 o f t h e i n c o r r e c t 0015660 U T V c e l l i f u n s 0015700 u c c e s s f u l . \r / / I f 0015720 u s e W o r d 6 t h e n u 0015740 s e s t h e z o n e a n d 0015760 d a y l i g h t i n f o r m 0016000 a t i o n i n w o r d 6 0016020 o f u t v ; \r / / o t h e r 0016040 w i s e i g n o r e s i t 0016060 a n d u s e s t h e l o c 0016100 a l t i m e z o n e a n d 0016120 c o m p u t e s D S T 376 001 \0 0016140 210 035 o n t h e \r / / b a s 0016160 i s o f t h e d a t e i 0016200 n u t v . R e c o m p u t 0016220 e s t h e w e e k d a y f 0016240 i e l d u n c o n d i t i o n 0016260 a l l y . \r [ \r i f n a l s 0016300 3 t h e n u s e W o r d 6 0016320 = f a l s e \r \r / / S e t 0016340 u p l o c a l t i m e p a 0016360 r a m e t e r s \r l e t b e g 0016400 i n D S T , e n d D S T , z 0016420 o n e , c o m p Z o n e = 0016440 n i l , n i l , n i l , n 0016460 i l \r S e t u p U L T ( l v b 0016500 e g i n D S T , ( u s e W o r 0016520 d 6 ? u t v , 0 ) ) \r \r / / 0016540 T 376 001 \0 022 F e s t v a l i d 0016560 i t y o f u n p a c k e d 0016600 f o r m \r l e t y e a r , m 0016620 o n t h , d a y = u t v > 0016640 > U T V . y e a r - 1 9 0 1 , 0016660 u t v > > U T V . m o n t h , 0016700 u t v > > U T V . d a y \r l e t 0016720 h o u r , m i n u t e , s 0016740 e c o n d = u t v > > U T V 0016760 . h o u r , u t v > > U T V . 0017000 m i n u t e , u t v > > U T V 0017020 . s e c o n d \r i f y e a r 0017040 l s 0 % y e a r g e 1 0017060 3 6 r e s u l t i s i Y e a 0017100 r \r l e t y e a r 4 = y e 0017120 a r & 3 / / y e a r 0017140 r e m 4 - 376 001 \0 213 366 - p o 0017160 s i t i o n i n 4 - y e a r 0017200 c y c l e \r i f m o n t h 0017220 l s 0 % m o n t h g e 0017240 1 2 r e s u l t i s i M o n 0017260 t h \r i f d a y l s 1 % 0017300 d a y g r m o n t h T a b 0017320 l e ! ( m o n t h + 1 ) - m o n 0017340 t h T a b l e ! m o n t h % \r 0017360 ( m o n t h e q 1 & 0017400 d a y e q 2 9 & y e a 0017420 r 4 n e 3 ) r e s u l t i 0017440 s i D a y \r i f h o u r l 0017460 s 0 % h o u r g e 2 4 0017500 r e s u l t i s i H o u r \r 0017520 i f m i n u t e l s 0 % 0017540 m i n u t e g e 6 376 001 \0 267 0017560 341 0 r e s u l t i s i M i n 0017600 u t e \r i f s e c o n d l s 0017620 0 % s e c o n d g e 6 0017640 0 r e s u l t i s i S e c o 0017660 n d \r \r / / C o m p u t e d 0017700 a y s s i n c e J a n u a r 0017720 y 1 , 1 8 9 7 , l o c a l 0017740 t i m e . I t w i l l 0017760 b e c o r r e c t e d t o \r 0020000 / / J a n u a r y 1 , 1 9 0020020 0 1 l a t e r ( s e e b e 0020040 l o w f o r r e a s o n ) . 0020060 \r d a y = ( ( y e a r + 4 ) 0020100 / 4 ) * ( 3 * 3 6 5 + 3 6 6 ) 0020120 + \t / / D a y s i n p r e 0020140 v i o u s 4 - y e a r c y c 0020160 l 376 001 \0 243 e s \r 3 0020200 6 5 * y e a r 4 + \t \t \t / / 0020220 D a y s i n t h i s 4 - y 0020240 e a r c y c l e \r 0020260 m o n t h T a b l e ! m o n t h 0020300 + \t \t / / D a y s i n p 0020320 r e v i o u s m o n t h s t 0020340 h i s y e a r \r d 0020360 a y - \t \t \t \t / / D a y s 0020400 i n t h i s m o n t h \r 0020420 ( y e a r 4 n e 3 0020440 & m o n t h g e 2 ? 2 , 0020460 1 ) \t / / C o r r e c t i o 0020500 n f o r l e a p y e a r \r 0020520 \r / / C o m p u t e w e e k 0020540 d a y f o r D S T c h e c 0020560 k . \r / / 376 001 \0 225 Z N o t e 0020600 t h a t J a n u a r y 1 , 0020620 1 8 9 7 w a s a T h u r s 0020640 d a y ( = 3 ) . \r p t v ! 0 , 0020660 p t v ! 1 = 0 , d a y + 0020700 3 \r l e t t v = v e c 2 0020720 \r u t v > > U T V . w e e k d a 0020740 y = T i m e D i v ( p t v , 0020760 7 , t v ) \r \r / / C o m p 0021000 u t e m i n u t e s s i n c 0021020 e J a n u a r y 1 , 1 8 9 0021040 7 , l o c a l t i m e . \r p 0021060 t v ! 1 = d a y \r T i m e M 0021100 u l ( h o u r , 2 4 , p t v 0021120 ) \r T i m e M u l ( m i n u t e 0021140 , 6 0 , p t v ) \r \r / / A 0021160 p p l y t i m e z 376 001 \0 W 376 0021200 o n e c o r r e c t i o n ( 0021220 c o n v e r t t o G M T ) 0021240 b y a d d i n g l o c a l 0021260 t i m e z o n e . \r / / S i 0021300 m u l t a n e o u s l y , s u 0021320 b t r a c t 4 y e a r s ' 0021340 w o r t h o f m i n u t e s 0021360 t o c o r r e c t t h e 0021400 o r i g i n \r / / f r o m 1 0021420 8 9 7 t o 1 9 0 1 . T h 0021440 i s f o r c e s t h e s i 0021460 g n o f t h e a d d e d 0021500 q u a n t i t y a l w a y s \r 0021520 / / t o b e n e g a t i v 0021540 e . N o t e t h a t c o 0021560 m p Z o n e i s i n t h e 0021600 376 001 \0 } 035 r a n g e [ - 7 2 0021620 0 . . 7 2 0 ] \r t v ! 0 , t v 0021640 ! 1 = - 3 2 - 1 , c o m p 0021660 Z o n e - 6 6 8 8 / / H i 0021700 g h p a r t m u s t b e 0021720 o n e s - c o m p l e m e n t \r 0021740 \r / / I f d a y l i g h t 0021760 s a v i n g s t i m e i s 0022000 n o w a p p l i c a b l e , 0022020 s u b t r a c t o n e h o u 0022040 r t o c o n v e r t \r / / 0022060 t o s t a n d a r d t i m e 0022100 . \r i f ( u s e W o r d 6 ? 0022120 u t v > > U T V . d a y l i g h 0022140 t , \r C h e c k D a t e G E ( 0022160 u t v , b e g i n D S T , 2 0022200 ) & n 376 001 \0 242 e o t C h e 0022220 c k D a t e G E ( u t v , e n 0022240 d D S T , 2 ) ) t h e n \r 0022260 t v ! 1 = t v ! 1 - 6 0022300 0 \r D o u b l e A d d ( p t v , 0022320 t v ) \r \r / / P a c k s e 0022340 c o n d s a n d w e a r e 0022360 f i n i s h e d \r T i m e M u 0022400 l ( s e c o n d , 6 0 , p t 0022420 v ) \r r e s u l t i s 0 \r ] \r 0022440 \f \r / / - - - - - - - - - - - - 0022460 - - - - - - - - - - - - - - - - * 0022560 \r a n d W E E K D A Y ( p t v 0022600 ) = v a l o f \r 376 001 \0 362 036 / 0022620 / - - - - - - - - - - - - - - - 0022640 - - - - - - - - - - - - - - - - * 0022720 - - - - - - - - - - - - - \r / / 0022740 R e t u r n s t h e d a y 0022760 o f w e e k o f t h e 0023000 p a c k e d d a y t i m e i 0023020 n p t v . \r [ \r l e t u t v 0023040 = v e c l e n U T V \r U N 0023060 P A C K D T ( p t v , u t v ) 0023100 \r r e s u l t i s u t v > > U 0023120 T V . w e e k d a y \r ] \r \r \r / 0023140 / - - - - - - - - - - - - - - - 0023160 - - - - - - - - - - - - - - - - 0023200 - - - - - - - - - - - - - - - 376 0023220 001 \0 270 255 - - - - - - - - - - - - 0023240 - - - - - - - - - - - - - - - - 0023260 - - \r a n d C h e c k D a t e 0023300 G E ( u t v , d s t D a y , 0023320 d s t H o u r ) = v a l o f 0023340 \r / / - - - - - - - - - - - - - 0023360 - - - - - - - - - - - - - - - - * 0023440 - - - - - - - - - - - - - - - \r 0023460 / / R e t u r n s t r u e 0023500 i f t h e c u r r e n t t 0023520 i m e i s g r e a t e r t 0023540 h a n o r e q u a l t o 0023560 t h e \r / / s p e c i f i e d 0023600 D S T t i m e a n d f a 0023620 l s e 376 001 \0 352 377 o t h e r w i 0023640 s e . \r / / u t v = u n p 0023660 a c k e d t i m e v e c t o 0023700 r d e s c r i b i n g c u r 0023720 r e n t d a t e a n d t i 0023740 m e \r / / ( m o n t h , d 0023760 a y , h o u r , a n d w e 0024000 e k d a y f i e l d s m u s 0024020 t b e v a l i d ) \r / / d 0024040 s t D a y = d a y o n o 0024060 r b e f o r e w h i c h D 0024100 S T s w i t c h o c c u r s 0024120 \r / / d s t H o u r = h o 0024140 u r a t w h i c h D S T 0024160 s w i t c h o c c u r s \r [ \r 0024200 l e t d a y = m o n t h T 0024220 a b l e ! ( u t v 376 001 \0 ? 356 > > 0024240 U T V . m o n t h ) + u t v 0024260 > > U T V . d a y \r l e t w e 0024300 e k d a y = u t v > > U T V 0024320 . w e e k d a y \r r e s u l t i 0024340 s ( d a y l s d s t D a y 0024360 - 6 ? f a l s e , \r d a 0024400 y g r d s t D a y ? t r u 0024420 e , \r w e e k d a y e q 0024440 6 ? u t v > > U T V . h o u 0024460 r g e d s t H o u r , \r 0024500 d a y - w e e k d a y g r 0024520 d s t D a y - 6 ) \r ] \r \r \r / / 0024540 - - - - - - - - - - - - - - - - * 0024620 - - - - - - - - - - - - - - 376 001 0024640 \0 250 ^ - - - - - - - - - - - - - 0024660 - \r a n d S e t u p U L T ( u 0024700 l t , u t v ) b e \r / / - - 0024720 - - - - - - - - - - - - - - - - * 0025020 - - - - - - - - - - \r / / S e 0025040 t s u p u n p a c k e d l 0025060 o c a l t i m e i n f o r m 0025100 a t i o n f o r u s e b y 0025120 U N P A C K D T a n d P A 0025140 C K D T . \r / / S t o r e s 0025160 r e s u l t s i n u l t ( 0025200 s e e U L T s t r u c t u r 0025220 e f o r c o n t e n t s ) . 0025240 \r / / 376 001 \0 266 004 I f u t v 0025260 i s n o n z e r o , u s e s 0025300 i t ( r a t h e r t h a n 0025320 5 7 0 ) t o s u p p l y 0025340 t h e l o c a l t i m e z 0025360 o n e . \r / / * * * * D e f 0025400 a u l t s t i m e i n f o r 0025420 m a t i o n t o P a c i f i 0025440 c i f u n a v a i l a b l e 0025460 f r o m s y s t e m . \r [ \r 0025500 i f O s V e r s i o n l s 0025520 1 4 t h e n S y s E r r ( 0 0025540 , e c O S V e r s i o n ) \r \r 0025560 / / E x t r a c t o r d e 0025600 f a u l t t i m e p a r a m 0025620 e t e r s \r t e s t t i m e P 0025640 a r a m s ! 0 376 001 \0 217 310 e q 0025660 0 % t i m e P a r a m s ! 1 0025700 e q 0 \r i f n o t \r 0025720 [ \r u l t 0025740 > > U L T . b e g i n D S T = 0025760 t i m e P a r a m s > > L T P 0026000 . b e g i n D S T \r 0026020 u l t > > U L T . e n d D S T 0026040 = t i m e P a r a m s > > L T 0026060 P . e n d D S T \r u 0026100 l t > > U L T . z o n e . s i g 0026120 n = t i m e P a r a m s > > 0026140 L T P . s i g n \r u 0026160 l t > > U L T . z o n e . h o u 0026200 r = t i m e P a r a m s > > 0026220 L T P . z o n e H \r 0026240 u l t > > U L T . z o n e 376 001 \0 0026260 q * . m i n u t e = t i m e 0026300 P a r a m s > > L T P . z o n e 0026320 M \r ] \r i f s 0026340 o \r [ / / * * * 0026360 * D e f a u l t t h e m i 0026400 f n o t p r e s e n t \r 0026420 u l t > > U L T . b e g 0026440 i n D S T , u l t > > U L T . 0026460 e n d D S T = 1 2 1 , 3 0 0026500 5 \r u l t > > U L T 0026520 . z o n e = 8 l s h i f t 0026540 s i z e U L T . z o n e . m 0026560 i n u t e \r ] / / 0026600 * * * * \r i f u t v n e 0026620 0 t h e n u l t > > U L T . 0026640 z o n e = u t v > > U T V . 0026660 z o 376 \0 323 267 236 n e \r \r / / C o 0026700 m p u t e c o m p o s i t e 0026720 z o n e - - m i n u t e s 0026740 w e s t ( + ) o r e a s t 0026760 ( - ) o f G M T \r u l t > 0027000 > U L T . c o m p Z o n e = 0027020 6 0 * ( u l t > > U L T . z o n 0027040 e . h o u r ) + u l t > > U 0027060 L T . z o n e . m i n u t e \r i 0027100 f u l t > > U L T . z o n e . 0027120 s i g n n e 0 t h e n u 0027140 l t > > U L T . c o m p Z o n e 0027160 = - ( u l t > > U L T . c o 0027200 m p Z o n e ) \r ] \r 377 \0 \0 T i m 0027220 e C o n v A . a s m \0 373 223 362 023 245 0027240 \0 \0 376 001 \0 0 270 ; T i m e C o n 0027260 v A . a s m - - a s s e 0027300 m b l y - l a n g u a g e c o 0027320 d e f o r t i m e c o n v 0027340 e r s i o n p a c k a g e \r ; 0027360 C o p y r i g h t X e r o x 0027400 C o r p o r a t i o n 1 9 7 0027420 9 \r \r ; \t L a s t m o d i f i 0027440 e d D e c e m b e r 1 5 , 0027460 1 9 7 7 5 : 4 7 P M \r \r ; 0027500 O u t g o i n g p r o c e d 0027520 u r e s \r . e n t T i m e D i 0027540 v , T i m e M u l \r \r ; O u 0027560 t g o i n g s t a t i c s \r . 0027600 e n t m o n t h T a b l e \r \r 0027620 . s r e l \r \r T i m e D i v : 0027640 . T i m e D i 376 001 \0 | 7 v \r T i 0027660 m e M u l : . T i m e M u l \r 0027700 m o n t h T a b l e : . m o n 0027720 t h T a b l e \r \r . n r e l \r \r 0027740 \r ; T i m e D i v ( l v D i v 0027760 i d e n d , d i v i s o r , 0030000 l v Q u o t i e n t ) = r e 0030020 m a i n d e r \r ; P e r f o r 0030040 m s u n s i g n e d d i v i 0030060 s i o n o f 3 2 - b i t n 0030100 u m b e r a t @ l v D i v i 0030120 d e n d b y \r ; 1 6 - b i t 0030140 d i v i s o r . P u t s 0030160 t h e 3 2 - b i t q u o t i 0030200 e n t i n @ l v Q u o t i e 0030220 n t a n d \r ; r e t u r n s 0030240 t h e r e m a i n d 376 001 \0 ! 0030260 + e r . \r \r . T i m e D i v : \r 0030300 \t s t a 3 1 2 \r \t s t a 0030320 0 2 2 \t \t ; S a v e l v 0030340 D i v i d e n d \r \t m o v 2 0030360 3 \t \t \t ; P r e s e r v e f 0030400 r a m e p o i n t e r \r \t m o 0030420 v 1 2 \t \t \t ; D i v i s o 0030440 r \r \t m k z e r o 0 0 \t \t ; 0030460 H i g h d i v i d e n d _ 0030500 0 \r \t l d a 1 @ 2 3 \t \t 0030520 ; L o w d i v i d e n d _ 0030540 l v D i v i d e n d ! 0 \r \t d 0030560 i v \t \t \t ; A c 0 _ r e m a i 0030600 n d e r , a c 1 _ q u o t i e 0030620 n t \r \t # 7 7 4 0 0 \r \t s t a 0030640 1 @ 3 3 \t \t ; l v Q u o 0030660 t 376 001 \0 372 261 i e n t ! 0 _ q 0030700 u o t i e n t \r \t i s z 2 3 0030720 \r \t i s z 3 3 \r \t l d a 1 0030740 @ 2 3 \t \t ; L o w d i v 0030760 i d e n d _ l v D i v i d e 0031000 n d ! 1 \r \t d i v \t \t \t ; A c 0031020 0 _ r e m a i n d e r , a c 1 0031040 _ q u o t i e n t \r \t # 7 7 4 0031060 0 0 \r \t s t a 1 @ 3 3 \t \t 0031100 ; l v Q u o t i e n t ! 1 _ 0031120 q u o t i e n t \r \t m o v 3 0031140 2 \r \t l d a 3 1 2 \r \t j 0031160 m p 1 3 \t \t \t ; R e t u r 0031200 n r e m a i n d e r i n a 0031220 c 0 \r \r \r ; T i m e M u l ( a 0031240 d d e n d , m u l t i p l i e 0031260 r , l v M 376 001 \0 231 316 u l t i p 0031300 l i c a n d ) \r ; M u l t i p 0031320 l i e s t h e 3 2 - b i t 0031340 n u m b e r a t @ l v M u l 0031360 t i p l i c a n d b y t h e 0031400 1 6 - b i t m u l t i p l i 0031420 e r , \r ; t h e n a d d s 0031440 t h e 1 6 - b i t a d d e n 0031460 d , a n d p u t s t h e 0031500 r e s u l t b a c k i n t o 0031520 @ l v M u l t i p l i c a n d 0031540 . \r \r . T i m e M u l : \r \t s t 0031560 a 3 1 2 \r \t m o v 2 3 0031600 \t \t \t ; P r e s e r v e f r 0031620 a m e \r \t m o v 1 2 \t \t \t ; 0031640 M u l t i p l i e r \r \t i s z 0031660 3 3 \r \t l d a 1 376 001 \0 352 377 0031700 @ 3 3 \t \t ; l v M u l t i 0031720 p l i c a n d ! 1 \r \t m u l \t \t 0031740 \t ; ( a c 0 , a c 1 ) _ a 0031760 c 1 * a c 2 + a c 0 \r \t s t 0032000 a 1 @ 3 3 \t \t ; l v M u 0032020 l t i p l i c a n d ! 1 _ l 0032040 o w p r o d u c t \r \t d s z 0032060 3 3 \r \t l d a 1 @ 3 3 \t 0032100 \t ; l v M u l t i p l i c a n 0032120 d ! 0 \r \t m u l \t \t \t ; ( a c 0032140 0 , a c 1 ) _ a c 1 * a c 2 0032160 + a c 0 \r \t s t a 1 @ 3 0032200 3 \t \t ; l v M u l t i p l i 0032220 c a n d ! 0 _ h i g h p r 0032240 o d u c t \r \t m o v 3 2 \r \t 0032260 l d a 3 1 2 \r \t j m p 1 0032300 376 \0 353 263 340 3 \r \r \r \r ; m o n 0032320 t h T a b l e ! i i s t h e 0032340 n u m b e r o f d a y s 0032360 p r e c e d i n g t h e f i 0032400 r s t d a y o f m o n t h 0032420 i . \r ; I t i s a s s u 0032440 m e d t h a t t h i s i s 0032460 a l e a p y e a r ( i . 0032500 e . , F e b 2 9 e x i s t 0032520 s ) . \r \r . m o n t h T a b l e 0032540 : \r \t 0 \r \t 3 1 . \r \t 6 0 . \r \t 0032560 9 1 . \r \t 1 2 1 . \r \t 1 5 2 . \r 0032600 \t 1 8 2 . \r \t 2 1 3 . \r \t 2 4 4 0032620 . \r \t 2 7 4 . \r \t 3 0 5 . \r \t 3 0032640 3 5 . \r \t 3 6 6 . \r \r . e n d \r 0032660 377 \0 \0 T i m e I O . b c p l \0 373 0032700 227 037 i 316 \0 \0 376 001 \0 224 212 / / T i 0032720 m e I O . b c p l - - c o n 0032740 v e r s i o n b e t w e e n 0032760 u n p a c k e d i n t e r n a 0033000 l r e p r e s e n t a t i o n 0033020 \r / / \t \t a n d e x t e r n a 0033040 l ( p r i n t e d ) f o r m 0033060 \r / / C o p y r i g h t X e 0033100 r o x C o r p o r a t i o n 0033120 1 9 7 9 , 1 9 8 1 \r \r / / l 0033140 a s t m o d i f i e d M a y 0033160 5 , 1 9 8 1 6 : 4 8 P 0033200 M b y T a f t \r \r g e t " 0033220 T i m e . d " \r \r / / \t W R I T 0033240 E U D T ( s t r m , u v e c 0033260 [ , p r i n t Z o n e ] ) \r / 0033300 / w r i t e s t h 376 001 \0 263 202 0033320 e u n p a c k e d d a t e 0033340 a n d t i m e f r o m u v 0033360 e c o n t o t h e \r / / s 0033400 t r e a m s t r m i n t h 0033420 e f o r m " 2 9 - D E C - 7 0033440 4 1 4 : 4 3 : 3 7 " . I f 0033460 u v e c = 0 , \r / / u s e s 0033500 t h e c u r r e n t d a t 0033520 e a n d t i m e . I f 0033540 p r i n t Z o n e i s s u p 0033560 p l i e d a n d t r u e , \r 0033600 / / a p p e n d s t h e t 0033620 i m e z o n e t o t h e 0033640 r e s u l t , e . g . , " 0033660 P D T " o r " + 0 3 " o 0033700 r " - 0 2 : 3 0 " . \r \r / / \t 0033720 376 001 \0 237 ^ C O N V U D T ( s t r 0033740 g , u v e c [ , p r i n t 0033760 Z o n e ] ) \r / / s a m e a 0034000 s W R I T E U D T , b u t 0034020 p u t s t h e r e s u l t 0034040 i n t o t h e s t r i n g 0034060 s t r g . \r / / V a l u e i 0034100 s s t r g . \r \r / / \t F I N D 0034120 M O N T H ( s t r g ) \r / / r 0034140 e t u r n s t h e m o n t h 0034160 n u m b e r ( 0 - 1 1 ) f 0034200 o r t h e m o n t h w h o 0034220 s e n a m e \r / / i s s t 0034240 r g ( m a y b e a p r e 0034260 f i x ) , o r - 1 i f n 0034300 o t a m o n t h n a m e . 0034320 \r \r / / \t 376 001 \0 235 027 M O N T H N 0034340 A M E ( m o ) \r / / r e t u r 0034360 n s t h e n a m e o f m 0034400 o n t h n u m b e r m o . \r 0034420 \r \r e x t e r n a l \r [ \r / / 0034440 o u t g o i n g p r o c e d u 0034460 r e s \r W R I T E U D T \r C O N 0034500 V U D T \r F I N D M O N T H \r M 0034520 O N T H N A M E \r \r / / i n c 0034540 o m i n g p r o c e d u r e s 0034560 \r U N P A C K D T \r P A C K D T 0034600 \r M o v e B l o c k \r W s s \r M 0034620 a x \r ] \r \r s t r u c t u r e 0034640 S t r i n g : \t / / B C P L 0034660 s t r i n g \r [ \r l e n g t h 0034700 b y t e \r c h a r ^ 1 , 2 5 5 0034720 b y t e \r ] \r \r \r / 376 001 \0 227 4 / 0034740 E x p o r t e d p r o c e d 0034760 u r e s \r \r / / - - - - - - - - 0035000 - - - - - - - - - - - - - - - - * 0035100 - - - - \r l e t C O N V U D T 0035120 ( s t r g , u v e c , p r i 0035140 n t Z o n e ; n u m a r g s 0035160 n a ) = v a l o f \r / / - - 0035200 - - - - - - - - - - - - - - - - * 0035300 - - - - - - - - - - \r / / S i 0035320 g h , t h i s w o u l d 376 0035340 001 \0 206 1 b e m u c h e a s i 0035360 e r u s i n g s t r e a m s 0035400 a n d t h e T e m p l a t 0035420 e p a c k a g e . . . \r [ \r l 0035440 e t u c u r = v e c 6 \r 0035460 i f u v e c e q 0 t h e 0035500 n [ U N P A C K D T ( 0 , 0035520 u c u r ) ; u v e c = u c 0035540 u r ] \r l e t w 2 d ( s , 0035560 x , p o s ) b e \r [ \r 0035600 i f x g e 1 0 t h 0035620 e n s > > S t r i n g . c h a 0035640 r ^ p o s = x / 1 0 + $ 0 \r 0035660 s > > S t r i n g . c h a 0035700 r ^ ( p o s + 1 ) = ( x r 0035720 e m 1 0 ) + $ 0 \r ] \r M 0035740 o v e B 376 001 \0 022 277 l o c k ( s t 0035760 r g , " 0 - x x x - 0 0 0036000 0 : 0 0 : 0 0 " , 1 0 ) \r w 2 0036020 d ( s t r g , u v e c > > U T 0036040 V . d a y , 1 ) \r l e t m n 0036060 = m o n t h n a m e s ( ) + 0036100 u v e c ! 1 * 5 \r / / t r i m 0036120 t o 3 c h a r s \r f o r 0036140 i = 1 t o 3 d o s t 0036160 r g > > S t r i n g . c h a r ^ 0036200 ( 3 + i ) = m n > > S t r i 0036220 n g . c h a r ^ i \r w 2 d ( s t 0036240 r g , u v e c > > U T V . y e 0036260 a r r e m 1 0 0 , 8 ) \r w 0036300 2 d ( s t r g , u v e c > > U 0036320 T V . h o u r , 1 1 ) \r w 2 d 0036340 ( s t r g , u v 376 001 \0 366 226 e c 0036360 > > U T V . m i n u t e , 1 4 0036400 ) \r w 2 d ( s t r g , u v e c 0036420 > > U T V . s e c o n d , 1 7 0036440 ) \r \r i f n a g e 3 & 0036460 p r i n t Z o n e t h e n \r 0036500 [ \r s t r g > > S t r 0036520 i n g . c h a r ^ 1 9 = $ * 0036540 S \r M o v e B l o c k ( l 0036560 v s t r g > > S t r i n g . c 0036600 h a r ^ 2 0 , " 0 T : 0 0 " , 0036620 3 ) \r s t r g > > S t r 0036640 i n g . l e n g t h = 2 2 \r 0036660 s w i t c h o n u v e c 0036700 > > U T V . z o n e i n t o \r 0036720 [ \r c a 0036740 s e 4 l s h i f t s i 376 001 0036760 \0 312 8 z e U T V . z o n e . m 0037000 i n u t e : \r c a s 0037020 e 5 l s h i f t s i z e 0037040 U T V . z o n e . m i n u t e : 0037060 \r c a s e 6 l s 0037100 h i f t s i z e U T V . z o 0037120 n e . m i n u t e : \r 0037140 c a s e 7 l s h i f t s 0037160 i z e U T V . z o n e . m i n 0037200 u t e : \r c a s e 0037220 8 l s h i f t s i z e U T 0037240 V . z o n e . m i n u t e : \r 0037260 c a s e 9 l s h i 0037300 f t s i z e U T V . z o n e 0037320 . m i n u t e : \r c 0037340 a s e 1 0 l s h i f t s i 0037360 z e 376 001 \0 $ ] U T V . z o n e 0037400 . m i n u t e : \r 0037420 s t r g > > S t r i n g . c 0037440 h a r ^ 2 0 = " A E C M P Y 0037460 H " > > S t r i n g . c h a r ^ 0037500 ( u v e c > > U T V . z o n e . 0037520 h o u r - 3 ) \r 0037540 s t r g > > S t r i n g . c h 0037560 a r ^ 2 1 = ( u v e c > > U 0037600 T V . d a y l i g h t ? $ D , 0037620 $ S ) \r e n 0037640 d c a s e \r c a s e 0037660 0 : \r u n l 0037700 e s s u v e c > > U T V . d a 0037720 y l i g h t d o / / d a 0037740 y l i g h t f a l l s t h r 0037760 u t o d e f 376 001 \0 373 272 a u l 0040000 t c a s e \r 0040020 [ s t r g ! ( 2 0 / 2 ) 0040040 = $ G l s h i f t 8 + 0040060 $ M ; e n d c a s e ] \r 0040100 d e f a u l t : \r 0040120 l e t h = u 0040140 v e c > > U T V . z o n e . h o 0040160 u r \r i f u 0040200 v e c > > U T V . z o n e . s i 0040220 g n t h e n h = - h \r 0040240 i f u v e c > 0040260 > U T V . d a y l i g h t t h 0040300 e n h = h - 1 \r 0040320 s t r g > > S t r i n g 0040340 . c h a r ^ 2 0 = ( h l s 0040360 0 ? $ - , $ + ) \r 376 001 \0 0040400 301 @ w 2 d ( s t 0040420 r g , M a x ( h , - h ) , 0040440 2 1 ) \r i f 0040460 u v e c > > U T V . z o n e . m 0040500 i n u t e n e 0 t h e n \r 0040520 [ w 2 0040540 d ( s t r g , u v e c > > U T 0040560 V . z o n e . m i n u t e , 2 0040600 4 ) ; s t r g > > S t r i n g 0040620 . l e n g t h = 2 5 ] \r 0040640 e n d c a s e \r 0040660 ] \r ] \r r e s 0040700 u l t i s s t r g \r ] \r \f \r / 0040720 / - - - - - - - - - - - - - - - 0040740 - - - - - - - - - - - - - - - - * 0041000 - - 376 001 \0 001 c - - - - - - - - - 0041020 - - - - - - - - - - - - - - - - 0041040 - - \r a n d W R I T E U D T ( 0041060 s t r m , u v e c , p r i n 0041100 t Z o n e ; n u m a r g s n 0041120 a ) b e \r / / - - - - - - - - 0041140 - - - - - - - - - - - - - - - - * 0041240 - - - - \r [ \r l e t s t r g 0041260 = v e c 1 2 / / x x 0041300 - x x x - x x x x : x x : x x 0041320 s x x : x x \r C O N V U D T ( 0041340 s t r g , u v e c , n a g 0041360 e 3 & p r i n t Z o n e ) 0041400 \r W s s ( s t 376 001 \0 005 004 r m , 0041420 s t r g ) \r ] \r \r / / - - - - - 0041440 - - - - - - - - - - - - - - - - * 0041540 - - - - - - - \r a n d M O N T 0041560 H N A M E ( m o ) = m o n t 0041600 h n a m e s ( ) + m o * 5 \r / / 0041620 - - - - - - - - - - - - - - - - * 0041720 - - - - - - - - - - - - \r \r / / 0041740 - - - - - - - - - - - - - - - - * 0042000 - - - - - - - - - - - - 376 001 \0 ! 0042020 037 - - - - - - - - - - - - - - - 0042040 - - - - - - - - - - - - - - - - 0042060 - \r a n d F I N D M O N T H ( 0042100 s t r g ) = v a l o f \r / / 0042120 - - - - - - - - - - - - - - - - * 0042220 - - - - - - - - - - - - \r [ \r l 0042240 e t l e n = s t r g > > S 0042260 t r i n g . l e n g t h \r i f 0042300 l e n l s 3 r e s u l t i 0042320 s - 1 \r l e t m n t b l = 0042340 m o n t h n a m e s ( ) \r f o 0042360 r j = 0 b y 5 t o 0042400 5 5 d o \r [ \r l e 0042420 t 376 001 \0 313 \n t s t r = m n 0042440 t b l + j \r i f l e n 0042460 g r t s t r > > S t r i n g . 0042500 l e n g t h t h e n l o o p 0042520 \r l e t i = 1 \r 0042540 [ / / r e p e a t \r 0042560 i f ( t s t r > > 0042600 S t r i n g . c h a r ^ i & 0042620 # 3 3 7 ) n e \r 0042640 ( s t r g > > S t r i n g . c h 0042660 a r ^ i & # 3 3 7 ) t h e 0042700 n b r e a k \r i f 0042720 i e q l e n r e s u l t 0042740 i s j / 5 \r i = 0042760 i + 1 \r ] r e p 0043000 e a t \r ] \r r e s u l t i 0043020 s - 1 \r ] 376 001 \0 a W \r \r \r / / 0043040 L o c a l p r o c e d u r e 0043060 s \r \r / / - - - - - - - - - - - 0043100 - - - - - - - - - - - - - - - - * 0043200 - \r a n d m o n t h n a m e s 0043220 ( ) = / / ( S i g h . 0043240 ) \r / / - - - - - - - - - - - - 0043260 - - - - - - - - - - - - - - - - * 0043360 \r / / m o n t h n a m e s ! ( 0043400 j * 5 ) i s t h e n a m e 0043420 o f m o n t h j 376 001 \0 7 232 0043440 \r " x * 0 0 7 J a n u a r y * 0 0043460 0 0 * 0 0 0 * 0 1 0 F e b r u a 0043500 r y * 0 0 0 * 0 0 5 M a r c h * 0043520 0 0 0 * 0 0 0 * 0 0 0 * 0 0 0 * 0043540 0 0 5 A p r i l * 0 0 0 * 0 0 0 0043560 * 0 0 0 * 0 0 0 * 0 0 3 M a y * 0043600 0 0 0 * 0 0 0 * 0 0 0 * 0 0 0 * 0043620 0 0 0 * 0 0 0 * 0 0 4 J u n e * 0043640 0 0 0 * 0 0 0 * 0 0 0 * 0 0 0 * 0043660 0 0 0 * 0 0 4 J u l y * 0 0 0 * 0043700 0 0 0 * 0 0 0 * 0 0 0 * 0 0 0 * 0043720 0 0 6 A u g u s t * 0 0 0 * 0 0 0043740 0 * 0 0 0 * 0 1 1 S e p t e m b 0043760 e r * 0 0 7 O c t o b e r * 0 0 0044000 0 * 0 0 0 * 0 1 0 N o v e m b e 0044020 r * 0 0 0 * 0 1 0 D e c e m b e 0044040 376 \0 \t 375 266 r * 0 0 0 " + 1 \r 377 \0 0044060 \0 C o m p i l e T i m e . c m \0 0044100 373 223 362 023 245 \0 \0 376 \0 = ? d B c p l 0044120 / f T i m e C o n v B . b c p 0044140 l \r A s m / e T i m e C o n v 0044160 A . a s m \r B c p l / f T i m 0044200 e I O . b c p l \r 377 \0 \0 D u m p 0044220 T i m e . c m \0 373 227 037 k 307 \0 \0 376 0044240 \0 206 224 W f t p m a x c c o n 0044260 n e c t / c A l t o D u m p 0044300 / c T i m e . d m T i m e C 0044320 o n v B . b r T i m e C o n v 0044340 A . b r T i m e I O . b r T 0044360 i m e . d c o n n e c t / c 0044400 A l t o S o u r c e D u m p / 0044420 c T i m e S o u r c e . d m 0044440 @ T i m e . c m @ \r 377 \0 \0 T i m 0044460 e T e s t . b c p l \0 373 223 362 023 245 0044500 \0 \0 376 001 \0 M P / / T i m e T e 0044520 s t . b c p l \r / / C o p y r 0044540 i g h t X e r o x C o r p o 0044560 r a t i o n 1 9 7 9 \r \r / / 0044600 B l d r T i m e T e s t T i 0044620 m e C o n v B T i m e C o n v 0044640 A T i m e I O \r \r \r e x t e r 0044660 n a l \r [ \r W s ; W R I T E U 0044700 D T ; W E E K D A Y ; D o u 0044720 b l e A d d ; G e t s ; M o 0044740 v e B l o c k ; W n s \r U N P 0044760 A C K D T ; P A C K D T ; R 0045000 e a d C a l e n d a r \r d s p ; 0045020 k e y s \r ] \r \r l e t T e s 0045040 t ( ) b e \r [ \r l e t t i m 0045060 e = v e c 2 \r R e a d C a 0045100 l e n d a r ( 376 001 \0 222 357 t i m e 0045120 ) \r l e t n e g a t i v e = 0045140 f a l s e \r [ \r l 0045160 e t u t v = v e c 6 \r 0045200 U N P A C K D T ( t i m e , 0045220 u t v ) \r W s ( " * n 0045240 " ) \r W R I T E U D T ( d 0045260 s p , u t v , t r u e ) \r 0045300 W s ( " ( " ) \r W s 0045320 ( s e l e c t o n W E E K D A 0045340 Y ( t i m e ) i n t o \r 0045360 [ \r c a s e 0045400 0 : " M o n d a y " \r 0045420 c a s e 1 : " T u e s d 0045440 a y " \r c a s e 2 0045460 : " W e d n e s d a y " \r 0045500 c a s e 3 : 376 001 \0 361 0045520 214 " T h u r s d a y " \r 0045540 c a s e 4 : " F r i d a 0045560 y " \r c a s e 5 : 0045600 " S a t u r d a y " \r 0045620 c a s e 6 : " S u n d a 0045640 y " \r ] ) \r W 0045660 s ( " ) " ) \r l e t c h 0045700 e c k = v e c 2 \r l 0045720 e t c = P A C K D T ( u t 0045740 v , c h e c k , t r u e ) \r 0045760 t e s t c e q 0 \r 0046000 i f n o t [ W s ( 0046020 " - - P A C K D T f a i l 0046040 e d , c o d e = " ) ; W 0046060 n s ( d s p , c ) ] \r 0046100 i f s o i f t i m e ! 0046120 0 376 001 \0 ` 362 n e c h e c k ! 0046140 0 % t i m e ! 1 n e c h 0046160 e c k ! 1 t h e n \r 0046200 [ \r W 0046220 s ( " * n - - P A C K D T 0046240 i n c o r r e c t : g o o 0046260 d = " ) \r 0046300 W n s ( d s p , t i m e ! 0 , 0046320 6 , 1 0 ) ; W n s ( d s p 0046340 , t i m e ! 1 , 6 , 1 0 ) 0046360 \r W s ( " , 0046400 b a d = " ) \r 0046420 W n s ( d s p , c h e c k 0046440 ! 0 , 6 , 1 0 ) ; W n s ( 0046460 d s p , c h e c k ! 1 , 6 , 0046500 1 0 ) \r ] \r 0046520 l e t 376 001 \0 324 221 d = 0046540 n i l \r s w i t c h o n 0046560 G e t s ( k e y s ) i n t o \r 0046600 [ \r c a 0046620 s e $ S : c a s e $ s : \r 0046640 [ d = t 0046660 a b l e [ 0 ; 1 ] ; b 0046700 r e a k ] \r c a s 0046720 e $ M : c a s e $ m : \r 0046740 [ d = t a 0046760 b l e [ 0 ; 6 0 ] ; b 0047000 r e a k ] \r c a s 0047020 e $ H : c a s e $ h : \r 0047040 [ d = t a 0047060 b l e [ 0 ; 6 0 * 6 0 ] 0047100 ; b r e a k ] \r 0047120 c a s e $ D : c a 376 001 \0 c 352 0047140 s e $ d : \r 0047160 [ d = t a b l e [ 1 ; 0047200 2 0 8 6 4 ] ; b r e a k 0047220 ] \r c a s e $ 3 : 0047240 \r [ d = 0047260 t a b l e [ 3 9 ; - 2 9 4 0047300 4 0 ] ; b r e a k ] \r 0047320 c a s e $ + : \r 0047340 [ n e g a t i v e 0047360 = f a l s e ; e n d c a s 0047400 e ] \r c a s e $ 0047420 - : \r [ n e 0047440 g a t i v e = t r u e ; e 0047460 n d c a s e ] \r c 0047500 a s e $ Q : c a s e $ q : 0047520 \r f i n i s h 0047540 376 \0 267 O 027 \r ] r e 0047560 p e a t \r l e t v = 0047600 v e c 2 \r M o v e B l o 0047620 c k ( v , d , 2 ) \r i 0047640 f n e g a t i v e t h e n \r 0047660 [ \r v ! 0047700 1 = - v ! 1 \r v 0047720 ! 0 = ( v ! 1 e q 0 ? 0047740 - v ! 0 , n o t v ! 0 ) \r 0047760 ] \r D o u b l e 0050000 A d d ( t i m e , v ) \r 0050020 ] r e p e a t \r ] \r \r 377 \0 \0 T 0050040 i m e . c m \0 373 223 362 023 245 \0 \0 376 \0 0050060 ` ' P T i m e . d T i m e C o 0050100 n v B . b c p l T i m e C o n 0050120 v A . a s m T i m e I O . b c 0050140 p l C o m p i l e T i m e . c 0050160 m D u m p T i m e . c m T i 0050200 m e T e s t . b c p l T i m e 0050220 . c m 374 0050224