$ 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