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