$ od -c -N 50000 [Indigo]<AltoSource>RSILSOURCES.DM!2>FontWidths.bcpl 0000000 / / F O N T W I D 0000020 T H S - - p u b l i c 0000040 l y d i s t r i b u t e d f 0000060 i l e . ( P R E P R E S S ) 0000100 \r / / c a t a l o g n u m b 0000120 e r ? ? ? \r / / E n c o d e F 0000140 a c e ( w e i g h t , s l o p e 0000160 , e x p a n s i o n ) = > 8 0000200 - b i t f a c e c o d e . \r 0000220 / / \t A n e n t r y t h a t 0000240 i s o m i t t e d o r m 0000260 a d e z e r o i s d e f a 0000300 u l t e d . \r / / \t A r g u m e 0000320 n t s a r e u p p e r c a 0000340 s e l e t t e r s ( e . g . 0000360 M R R ) \r / / D e c o d e 0000400 F a c e ( f a c e , l v w e i g 0000420 h t , l v s l o p e , l v e x p 0000440 a n s i o n ) \r / / \t T a k e s 0000460 8 - b i t f a c e c o d e 0000500 a n d r e t u r n s t h e 0000520 t h r e e d e s c r i p t i 0000540 v e \r / / \t l e t t e r s . \r / 0000560 / L o o k u p F o n t N a m e ( 0000600 s , n a m e , f a c e , s i z e 0000620 , r o t a t i o n , b u f x , b 0000640 u f y , b o u n d b o x \r / / \t 0000660 \t [ , b u f f e r l e n g t h , 0000700 l v p ] ) \r / / \t L o o k s u 0000720 p t h e f o n t n a m e d 0000740 b y n a m e ( s t r i n g ) 0000760 , f a c e ( e n c o d e d a s 0001000 a b o v e ) , \r \n / / \t s i z 0001020 e ( < 0 = > m i c r o n s , 0001040 > 0 = > p o i n t s ) , r 0001060 o t a t i o n ( m i n u t e s ) 0001100 . R e t u r n s \r / / \t t r 0001120 u e i f m a t c h e x i s 0001140 t s , f a l s e o t h e r w 0001160 i s e . " s " i s a s 0001200 t r e a m \r / / \t w i t h F O 0001220 N T S . W I D T H S o p e n 0001240 o n i t . " b u f x " a 0001260 n d " b u f y " w i l l b 0001300 e f i l l e d \r / / \t w i t h 0001320 x a n d y w i d t h s 0001340 r e s p e c t i v e l y ( i 0001360 n d e x e d b y c h a r c 0001400 o d e ) . \r / / \t " b o u n d b 0001420 o x " i s a 4 - w o r d 0001440 v e c t o r t o r e c e i v 0001460 e t h e b o u n d i n g b 0001500 o x \r / / \t ( r o t a t i o n s 0001520 o f b o u n d i n g b o x 0001540 a r e n o t p e r f o r m 0001560 e d ! ) \r / / \t " b u f f e r l 0001600 e n g t h " i s t h e l e 0001620 n g t h o f t h e b u f f 0001640 e r ( 2 5 6 i f o m i t t 0001660 e d ) . \r / / \t " l v p " i s 0001700 f i l l e d @ w i t h f 0001720 a m i l y c o d e ( m a y 0001740 b e o m i t t e d ) \r / / C a 0001760 l c u l a t e W i d t h s ( b e 0002000 s t , s , s i z , r o t , b o u 0002020 n d b o x , b u f x , b u f y , 0002040 b u f l ) \r / / \t I f y o u 0002060 h a v e a f i l e y o u 0002100 w a n t t o r e a d b y 0002120 h a n d , u s e t h i s p 0002140 r o c . \r / / \t b e s t i s 0002160 a n I X e n t r y t o g 0002200 e t w i d t h s f r o m ; 0002220 s i s t h e f i l e ; r 0002240 o t \r / / \t i s t h e r o t 0002260 a t i o n y o u d e s i r e 0002300 ; b o u n d b o x i s a 0002320 v e c 4 t h a t w i l l 0002340 b e \r / / \t f i l l e d w i t 0002360 h t h e b o u n d i n g b 0002400 o x ; b u f x a n d b u f 0002420 y a r e a s f o r \r / / \t 0002440 L o o k u p F o n t N a m e \r / 0002460 / M u l D i v ( a , b , c ) = 0002500 > a * b / c \r / / \t M u l t i 0002520 p l y a n d s c a l e . 0002540 A l l a r g u m e n t s p o 0002560 s i t i v e 1 6 - b i t n u 0002600 m b e r s . \r / / \t M a i n t a 0002620 i n s m a x i m u m p r e c 0002640 i s i o n . \r / / S i g n e d M 0002660 u l D i v ( a , b , c ) \r / / \t 0002700 S a m e a s M u l D i v , 0002720 b u t w i l l h a n d l e 0002740 s i g n e d n u m b e r s . \r 0002760 / / C o s ( t h e t a , l v s i 0003000 g n , l v m a g ) \r / / \t C o m 0003020 p u t e s t h e c o s i n e 0003040 o f t h e a n g l e " t 0003060 h e t a " ( i n m i n u t e 0003100 s ) a n d \r / / \t r e t u r n 0003120 s s i g n ( 0 i f p o s 0003140 i t i v e , - 1 i f n e g 0003160 a t i v e ) a n d m a g n i 0003200 t u d e \r / / \t ( 0 t o # 1 0003220 7 7 7 7 7 ) \r \r \r / / g e t " 0003240 i x . d f s " T H E F O L 0003260 L O W I N G I S A C O P Y 0003300 I X . D F S \r \r / / P R 0003320 E P R E S S D 0003340 E F I N I T I O 0003360 N S \r / / \r \r \r / / I N 0003400 D E X D e f i n 0003420 i t i o n s \r \r s t r u c t u r 0003440 e I X H : [ \r \t T y p e \t b 0003460 i t 4 \r \t L e n g t h \t b i t 0003500 1 2 \r \t ] \r \r s t r u c t u r 0003520 e I X N : [ \t \t / / F o r 0003540 a n a m e \r \t @ I X H \r \t C o 0003560 d e w o r d \r \t N a m e w o 0003600 r d \r \t c o n t d w o r d 9 0003620 \r \t ] \r \r s t r u c t u r e I 0003640 X : [ \t \t \t / / F o r s p l 0003660 i n e s , c h a r a c t e r s 0003700 \r \t @ I X H \t \t \t / / H e a d e 0003720 r \r \t [ f a m b y t e \t \t / 0003740 / F a m i l y n u m b e r \r 0003760 \t f a c e b y t e \t \t / / 0004000 F a c e c o d e \r \t ] = 0004020 f a m f a c e w o r d \r \t b c 0004040 b y t e \t \t \t / / F i r s t 0004060 c h a r n u m b e r \r \t e c 0004100 b y t e \t \t \t / / a n d l 0004120 a s t \r \t s i z w o r d \t \t / 0004140 / F o n t s i z e ( 1 0 0004160 m i c r o n u n i t s ) \r \t r 0004200 o t a t i o n w o r d \t \t / / 0004220 R o t a t i o n ( a n t i 0004240 c l o c k w i s e ) \r \t s a w 0004260 o r d 2 \t \t / / S t a r t i n 0004300 g a d d r e s s o f d a t 0004320 a p a r t \r \t l e n w o r d 0004340 2 \t \t / / L e n g t h o f 0004360 d a t a p a r t \r \t \t \t \t / / 0004400 W i d t h t y p e e n d s 0004420 h e r e \r \t \t \t \t / / S p l i n 0004440 e t y p e e n d s h e r e 0004460 \r \t r e s o l u t i o n x w o 0004500 r d \t / / 1 0 * ( n u m b e r 0004520 o f b i t s / i n c h ) \r \t 0004540 r e s o l u t i o n y w o r d 0004560 \t / / d i t t o \r 0004600 \t ] \r \r m a n i f e s t [ \r / 0004620 / I X H t y p e s \r \t I X T y 0004640 p e E n d = 0 \r \t I X T y p e N 0004660 a m e = 1 \r \t I X T y p e S p l 0004700 i n e s = 2 \r \t I X T y p e C h 0004720 a r s = 3 \r \t I X T y p e W i d 0004740 t h s = 4 \r / / I X H l e n g 0004760 t h s \r \t I X L E n d = 1 \r \t I 0005000 X L N a m e = s i z e I X N / 0005020 1 6 \r \t I X L S p l i n e s = 9 0005040 \r \t I X L C h a r s = 1 1 \r \t I 0005060 X L W i d t h s = 9 \r \t I X L M 0005100 a x = 1 1 \r \t ] \r \r / / W I 0005120 D T H s e g m e n t 0005140 d e f i n i t i o n s \r \r s t 0005160 r u c t u r e W T B : [ \t \t 0005200 / / W i d t h T a b l e B l 0005220 o c k \r \t X L w o r d \t \t \t / 0005240 / X o f f s e t \r \t Y B w o 0005260 r d \t \t \t / / Y o f f s e t \r 0005300 \t X W w o r d \t \t \t / / w i 0005320 d t h \r \t Y H w o r d \t \t \t / 0005340 / h e i g h t \r \t X W i d t h 0005360 F i x e d b i t \r \t Y W i d t 0005400 h F i x e d b i t \r \t s p a r 0005420 e b i t 1 4 \r \t ] \r \r / / 0005440 S P L I N E 0005460 s e g m e n t d e f i n i t i 0005500 o n s \r \r s t r u c t u r e S 0005520 p l i n e W i d t h : [ \t \t / 0005540 / B l o c k d e s c r i b i n 0005560 g s p l i n e w i d t h s \r 0005600 \t W X w o r d 2 \t \t / / X 0005620 w i d t h - - F P \r \t W Y 0005640 w o r d 2 \t \t / / Y w i d t 0005660 h - - F P \r \t X L w o r d 0005700 2 \t \t / / X l e f t - - 0005720 F P \r \t Y B w o r d 2 \t \t / 0005740 / Y b o t t o m - - F P \r 0005760 \t X R w o r d 2 \t \t / / X 0006000 r i g h t - - F P \r \t Y T 0006020 w o r d 2 \t \t / / Y t o p 0006040 - - F P \r \t ] \r \r m a n i f e 0006060 s t S p l i n e W i d t h s i 0006100 z e = s i z e S p l i n e W i 0006120 d t h / 1 6 \r \r m a n i f e s t 0006140 [ \r / / C o d e s i n t h 0006160 e h e i g h t e n t r y f 0006200 o r a c h a r t h a t i 0006220 n d i c a t e s o m e t h i n 0006240 g e l s e \r \t H N o n E x C o 0006260 d e = - 1 \r \t H S p l i n e C o 0006300 d e = - 2 \r \r / / D L T y p e 0006320 s ( f o r S p l i n e F i 0006340 l e ) \r \t D S p l i n e F o n t 0006360 M o v e T o = 1 \r \t D S p l i n 0006400 e F o n t D r a w T o = 2 \r \t D 0006420 S p l i n e F o n t D r a w C u 0006440 r v e = 3 \r \r \t D S p l i n 345 F 0006460 o n t N e w O b j e c t = - 1 \r 0006500 \t D S p l i n e F o n t E n d O 0006520 b j e c t s = - 2 \r \t ] \r \r \r / 0006540 / C H A R s 0006560 e g m e n t d e f i n i t i o 0006600 n s ( s c a n - c o n 366 e r t 0006620 e d c h a r s ) \r \r s t r u c 0006640 t u r e C h a r W i d t h : 0006660 [ \t \t / / B l o c k d e s c r 0006700 i b i n g c h a r w i d t h 0006720 s \r \t W X w o r d 2 \t \t / / 0006740 X w i d t h - - D P \r \t W 0006760 Y w o r d 2 \t \t / / Y w i 0007000 d t h - - D P \r \t X L w o 0007020 r d \t \t \t / / X l e f t ( o 0007040 f f s e t ) i n t e g e r \r \t 0007060 Y B w o r d \t \t \t / / Y b o 0007100 t t o m ( o f f s e t ) i n 0007120 t e g e r \r \t W w o r d \t \t \t 0007140 / / W i d t h ( i n t e g e r 0007160 ) \r \t H w o r d \t \t \t / / H e 0007200 i g h t ( i n t e g e r ) o 0007220 r s p e c i a l c o d e \r \t 0007240 ] \r \r m a n i f e s t C h a r 0007260 W i d t h s i z e = s i z e C 0007300 h a r W i d t h / 1 6 \r \r s t r 0007320 u c t u r e F H E A D : [ \t 0007340 \t / / F o n t h e a d e r , 0007360 s c a n c o n v e r t e d \r \t 0007400 h w b i t 6 \t \t \t / / H e i 0007420 g h t i n w o r d s \r \t n s 0007440 b i t 1 0 \t \t \t / / w i d t 0007460 h i n s c a n l i n e s \r 0007500 \t ] \r \r \r / / M i s c . \r s t r 0007520 u c t u r e C o n v e r t : 0007540 [ \r \t M o n o t o n e w o r d 0007560 \t \t / / T r u e i f i n p u 0007600 t t o c o n v e r s i o n 0007620 i s m o n o t o n e \r \t S p l 0007640 i n e O k w o r d \t \t / / T r 0007660 u e i f o u t p u t c a n 0007700 b e s p l i n e ( t o o 0007720 b i g ) \r \t B B G o o d w o r 0007740 d \t \t / / T r u e i f b o u 0007760 n d i n g b o x w i l l b 0010000 e c o r r e c t \r \t P r e s s 0010020 F o n t P a r t w o r d \t / / 0010040 T r u e i f s c a n c o n 0010060 v e r t i n g a p r e s s 0010100 f o n t p a r t \r \t L e n w 0010120 o r d \t \t \t / / \t ( i f s o , 0010140 t h i s i s t h e l e n 0010160 g t h ) \r \t ] \r \r m a n i f e s 0010200 t [ \r \t g o t n a m e = 1 \r \t 0010220 g o t f a c e = 2 \r \t g o t s i 0010240 z e = 4 \r \t g o t r o t a t i o 0010260 n = 8 \r \t g o t i n c l i n e = 0010300 1 6 \r \t g o t r e s o l u t i o 0010320 n = 3 2 \r \t g o t r e c o r d = 0010340 6 4 \r \t g o t f a c t o r s = 1 0010360 2 8 \r \t ] \r \r \r / / E N D O F 0010400 I X . D F S \r \r \r / / o u t 0010420 g o i n g p r o c e d u r e s 0010440 \r e x t e r n a l \r \t [ \r \t E n 0010460 c o d e F a c e \r \t L o o k u p 0010500 F o n t N a m e \r \t C a l c u l 0010520 a t e W i d t h s \r \t D e c o d 0010540 e F a c e \r \t G e n L o o k u p 0010560 \r \t M u l D i v \r \t S i g n e d 0010600 M u l D i v \r \t C o s \r \t ] \r \r 0010620 / / o u t g o i n g s t a t 0010640 i c s \r / / e x t e r n a l \r / 0010660 / \t [ \r / / \t ] \r / / s t a t i 0010700 c \r / / \t [ \r / / \t ] \r \r / / 0010720 i n c o m i n g p r o c e d u 0010740 r e s \r e x t e r n a l \r \t [ \r 0010760 \t M o v e B l o c k ; S e t B 0011000 l o c k ; Z e r o \r \t G e t s \r 0011020 \t R e a d B l o c k \r \t R e s e 0011040 t s \r \t P o s i t i o n P a g e 0011060 \r \t P o s i t i o n P t r \r \t ] 0011100 \r \r / / i n c o m i n g s t 0011120 a t i c s \r / / e x t e r n a l 0011140 \r / / \t [ \r / / \t ] \r \r / / i 0011160 n t e r n a l s t a t i c s \r 0011200 / / s t a t i c \r / / \t [ \r / / 0011220 \t ] \r \r / / F i l e - w i d e 0011240 s t r u c t u r e a n d m 0011260 a n i f e s t d e c l a r a t 0011300 i o n s . \r \r s t r u c t u r e 0011320 S T R : [ \r \t b y t ^ 0 , 0011340 2 5 5 b y t e \r \t ] \r \r / / 0011360 P r o c e d u r e s \r \r l e t \r 0011400 \r E n c o d e F a c e ( w e i g 0011420 h t , s l o p e , e x p a n s i 0011440 o n ; n u m a r g s n ) = 0011460 v a l o f [ \r \t f o r i = 0011500 2 t o n b y - 1 d o 0011520 ( l v w e i g h t ) ! i = 0 \r 0011540 \t l e t w = ( s e l e c t o n 0011560 w e i g h t i n t o [ \r \t 0011600 \t c a s e 0 : \r \t \t c a s e 0011620 $ M : c a s e $ m : 0 \r \n 0011640 \t \t c a s e $ B : c a s e 0011660 $ b : 2 \r \t \t c a s e $ L : 0011700 c a s e $ l : 4 \r \t \t d e 0011720 f a u l t : - 1 0 0 ] ) + 0011740 \r \t ( s e l e c t o n 0011760 s l o p e i n t o [ \r \t \t 0012000 c a s e 0 : \r \t \t c a s e $ 0012020 R : c a s e $ r : 0 \r \t \t 0012040 c a s e $ I : c a s e $ i 0012060 : 1 \r \t \t d e f a u l t : - 0012100 1 0 0 ] ) + \r \t ( 0012120 s e l e c t o n e x p a n s i 0012140 o n i n t o [ \r \t \t c a s e 0012160 0 : \r \t \t c a s e $ R : c 0012200 a s e $ r : 0 \r \t \t c a s e 0012220 $ C : c a s e $ c : 6 \r 0012240 \t \t c a s e $ E : c a s e 0012260 $ e : 1 2 \r \t \t d e f a u l t 0012300 : - 1 0 0 ] ) \r \t i f w 0012320 l s 0 t h e n r e s u l t 0012340 i s - 1 \r \t r e s u l t i s 0012360 w \r ] \r \r a n d \r \r D e c o d e 0012400 F a c e ( f a c e , w , s , e ) 0012420 b e [ \r \t @ s = ( t a b l e 0012440 [ $ R ; $ I ] ) ! ( f a 0012460 c e & 1 ) \r \t f a c e = f a c e 0012500 r s h i f t 1 \r \t @ w = ( t 0012520 a b l e [ $ M ; $ B ; $ 0012540 L ] ) ! ( f a c e r e m 3 0012560 ) \r \t f a c e = f a c e / 3 \r \t 0012600 @ e = ( t a b l e [ $ R ; 0012620 $ C ; $ E ] ) ! ( f a c e 0012640 r e m 3 ) \r ] \r \r a n d \r \r L 0012660 o o k u p F o n t N a m e ( s , 0012700 f a m s t r , f a c e , s i z , 0012720 r o t , b u f x , b u f y , b o 0012740 u n d b o x , b u f l , l v p ; 0012760 n u m a r g s n a ) = v 0013000 a l o f [ \r \t s i z = ( s i z 0013020 l s 0 ) ? - s i z , M u l 0013040 D i v ( s i z , 6 3 5 , 1 8 ) \t 0013060 / / p o i n t s t o m i c r 0013100 o n s \r \t i f n a e q 8 0013120 t h e n b u f l = 2 5 6 \r \t R 0013140 e s e t s ( s ) \r \t l e t p = 0013160 v e c I X L M a x \r [ \t f w R 0013200 e a d I X ( s , p ) \t \t / / R e 0013220 a d a n I X e n t r y \r \t 0013240 i f p > > I X H . T y p e e 0013260 q I X T y p e E n d t h e n 0013300 r e s u l t i s f a l s e \r 0013320 \t i f p > > I X H . T y p e 0013340 e q I X T y p e N a m e t h 0013360 e n \r \t \t [ \r \t \t l e t f n d 0013400 = t r u e \r \t \t l e t s t r = 0013420 l v p > > I X N . N a m e \r \t 0013440 \t f o r i = 0 t o s t r > 0013460 > S T R . b y t ^ 0 d o \r \t \t 0013500 i f ( ( s t r > > S T R . b 0013520 y t ^ i x o r f a m s t r > 0013540 > 323 T 322 . b y t ^ i ) & ( n o t 0013560 # 4 0 ) ) n e 0 t h e n 0013600 \r \t \t \t \t f n d = f a l s e \r \t 0013620 \t i f f n d t h e n b r e 0013640 a k \r \t \t ] \r ] r e p e a t \r 0013660 \t l e t f a m = p > > I X N . 0013700 C o d e \r \t i f n a e q 1 0013720 0 t h e n @ l v p = f a m \r 0013740 \t l e t f o u n d = f a l s e 0013760 \r \t l e t b e s t = v e c I 0014000 X L M a x \r [ \t f w R e a d I X 0014020 ( s , p ) \r \t i f p > > I X H 0014040 . T y p e e q I X T y p e E 0014060 n d t h e n b r e a k \r \t i 0014100 f p > > I X H . T y p e e q 0014120 I X T y p e W i d t h s t h 0014140 e n \r \t \t [ / / f i r s t f 0014160 i x t h e " o f f b y o 0014200 n e " p o s s i b i l i t y 0014220 o n s i z e s \r \t \t l e t 0014240 n e w S i z = p > > I X . s i 0014260 z \r \t \t i f ( ( n e w S i 0014300 z - s i z ) e q 1 ) % ( 0014320 ( n e w S i z - s i z ) e q 0014340 - 1 ) t h e n n e w S i z = 0014360 s i z \r \t \t i f p > > I X 0014400 . f a m e q f a m & \r \t \t 0014420 p > > I X . f a c e e q 0014440 f a c e & \r \t \t ( ( n 0014460 e w S i z e q s i z & p 0014500 > > I X . r o t a t i o n e q 0014520 r o t ) % \r \t \t ( p 0014540 > > I X . s i z e q 0 ) ) 0014560 t h e n \r \t \t \t [ \r \t \t \t i f 0014600 f o u n d e q f a l s e 0014620 % p > > I X . s i z n e 0 0014640 t h e n \r \t \t \t \t M o v e B l 0014660 o c k ( b e s t , p , I X L M a 0014700 x ) \r \t \t \t f o u n d = t r u e 0014720 \r \t \t \t ] \r \t ] / / e n 0014740 d o f i f I X T y p e W i 0014760 d t h s \r ] r e p e a t \r \t u 0015000 n l e s s f o u n d t h e n 0015020 r e s u l t i s f a l s e \r 0015040 \t C a l c u l a t e W i d t h s 0015060 ( b e s t , s , s i z , r o t , 0015100 b o u n d b o x , b u f x , b u 0015120 f y , b u f l ) \r \t r e s u l t 0015140 i s t r u e \r ] \r \r a n d \r \r 0015160 C a l c u l a t e W i d t h s ( 0015200 b e s t , s , s i z , r o t , b 0015220 o u n d b o x , b u f x , b u f 0015240 y , b u f l ) b e \r [ \r \t S e 0015260 t B l o c k ( b u f x , - 1 , b 0015300 u f l ) \r \t S e t B l o c k ( b 0015320 u f y , - 1 , b u f l ) \r / / P 0015340 o s i t i o n s t o r e a 0015360 d w i d t h t a b l e \r \t l 0015400 e t p = l v b e s t > > I X 0015420 . s a \t \t / / D P a d d r e s 0015440 s o f f o n t p a r t . \r 0015460 \t P o s i t i o n P a g e ( s , 0015500 ( p ! 0 l s h i f t 8 ) + ( 0015520 p ! 1 r s h i f t 8 ) + 1 ) 0015540 \r \t P o s i t i o n P t r ( s , 0015560 ( ( p ! 1 & # 3 7 7 ) l s h i 0015600 f t 1 ) ) \r \t l e t w t = v 0015620 e c s i z e W T B / 1 6 \r \t 0015640 R e a d B l o c k ( s , w t , ( 0015660 s i z e W T B / 1 6 ) ) \r \t M 0015700 o v e B l o c k ( b o u n d b o 0015720 x , w t , 4 ) \t \t / / E x t r a 0015740 c t t h e b o u n d i n g 0015760 b o x i n f o \r \t l e t b c 0016000 = b e s t > > I X . b c \r \t l e 0016020 t e c = b e s t > > I X . e c 0016040 \r \t i f b u f l l s b c 0016060 t h e n r e t u r n \t \t / / 0016100 y e s b u t . . . \r \t l e t 0016120 e c b = ( e c g e b u f l 0016140 ) ? b u f l , e c \r \r / / N o 0016160 w r e a d e i t h e r o n 0016200 e w o r d o r a n u m b 0016220 e r o f w o r d s f o r 0016240 t h e w i d t h s . \r \t f o r 0016260 i = 0 t o 1 d o \r \t [ \r 0016300 \t l e t b u f p = ( l v b 0016320 u f x ) ! i + b c \r \t t e s t 0016340 ( ( i e q 0 ) ? w t > > 0016360 W T B . X W i d t h F i x e d , 0016400 w t > > W T B . Y W i d t h F i 0016420 x e d ) \r \t i f s o \t [ \r \t \t 0016440 l e t v = G e t s ( s ) \r \t \t 0016460 S e t B l o c k ( b u f p , v , 0016500 e c b - b c + 1 ) \r \t \t ] \r \t 0016520 i f n o t \t [ \r \t \t R e a d B l 0016540 o c k ( s , b u f p , e c b - b 0016560 c + 1 ) \r \t \t ] \r \t ] \r \r / / N 0016600 o w d o s c a l i n g i f 0016620 n e e d e d . \r \t i f b e s 0016640 t > > I X . s i z n e 0 t 0016660 h e n r e t u r n \r \t f o r 0016700 i = b c t o e c b d o i 0016720 f b u f x ! i n e # 1 0 0 0016740 0 0 0 t h e n \r \t \t [ \r \t \t b 0016760 u f x ! i = M u l D i v ( b u f 0017000 x ! i , s i z , 1 0 0 0 ) \r \t \t 0017020 b u f y ! i = M u l D i v ( b u 0017040 f y ! i , s i z , 1 0 0 0 ) \r \t 0017060 \t ] \r \t f o r i = 0 t o 3 0017100 d o \r \t \t b o u n d b o x ! i 0017120 = S i g n e d M u l D i v ( b o 0017140 u n d b o x ! i , s i z , 1 0 0 0017160 0 ) \r \r / / A n d r o t a t i 0017200 o n i f n e e d e d . \r \t i 0017220 f r o t e q 0 t h e n 0017240 r e t u r n \r \t l e t c m , c 0017260 s , s m , s s = n i l , n i l , 0017300 n i l , n i l \r \t C o s ( r o t 0017320 , l v c s , l v c m ) \t \t \t 0017340 / / G e t c o s i n e \r \t C o 0017360 s ( r o t - 9 0 * 6 0 , l v s 0017400 s , l v s m ) \t \t / / a n d 0017420 s i n e \r \t f o r i = b c t 0017440 o e c b d o i f b u f x 0017460 ! i n e # 1 0 0 0 0 0 t h 0017500 e n \r \t \t [ \r \t \t l e t t = M 0017520 u l D i v ( b u f x ! i , c m , 0017540 # 1 7 7 7 7 7 ) \r \t \t i f c s 0017560 t h e n t = - t \r \t \t l e t 0017600 s = M u l D i v ( b u f y ! i 0017620 , s m , # 1 7 7 7 7 7 ) \r \t \t u 0017640 n l e s s s s t h e n s = 0017660 - s \r \t \t l e t x = t + s \r \t 0017700 \t t = M u l D i v ( b u f y ! i 0017720 , c m , # 1 7 7 7 7 7 ) \r \t \t i 0017740 f c s t h e n t = - t \r \t 0017760 \t s = M u l D i v ( b u f x ! i 0020000 , s m , # 1 7 7 7 7 7 ) \r \t \t i 0020020 f s s t h e n s = - s \r \t 0020040 \t b u f x ! i = x \r \t \t b u f y 0020060 ! i = t + s \r \t \t ] \r ] \r \r a n 0020100 d \r \r f w R e a d I X ( s , p ) 0020120 b e [ \r \t l e t a = G e t 0020140 s ( s ) \t \t / / T y p e w o r 0020160 d . \r \t p ! 0 = a \r \t l e t l 0020200 = p > > I X H . L e n g t h \r \t 0020220 i f l t h e n R e a d B l 0020240 o c k ( s , p + 1 , l - 1 ) \r ] 0020260 \r \r a n d \r \r M u l D i v ( a , 0020300 b , c ) = v a l o f [ \r / 0020320 / R e t u r n s a * b / c 0020340 u s i n g u n s i g n e d 0020360 a r i t h m e t i c . \r M u 0020400 l D i v = t a b l e [ \r \t # 5 0020420 5 0 0 1 \t / / S T A 3 , 1 , 0020440 2 \r \t # 1 5 5 0 0 0 / / M O 0020460 V 2 , 3 s a v e s t a c 0020500 k p o i n t e r \r \t # 1 1 1 0 0020520 0 0 / / M O V 0 , 2 a 0020540 \r \t # 2 1 4 0 3 \t / / L D A 0020560 0 , 3 , 3 \r \t # 1 0 1 2 2 0 \t / 0020600 / M O V Z R 0 , 0 \t c / 2 \r 0020620 \t # 6 1 0 2 0 / / M U L \r 0020640 \t # 3 1 4 0 3 / / L D A 0020660 2 , 3 , 3 c \r \t # 6 1 0 2 1 0020700 / / D I V \r \t # 1 0 1 0 1 0 0020720 / / M O V # 0 , 0 \r \t # 0020740 1 2 1 0 0 0 / / M O V 1 , 0020760 0 \r \t # 1 7 1 0 0 0 / / M O 0021000 V 3 , 2 \r \t # 3 5 0 0 1 \t / / 0021020 L D A 3 , 1 , 2 \r \t # 1 4 0 0021040 1 \t / / J M P 1 , 3 \r \t ] \r 0021060 \t r e s u l t i s M u l D i v 0021100 ( a , b , c ) \r ] \r \r a n d \r \r 0021120 S i g n e d M u l D i v ( a , b 0021140 , c ) = v a l o f [ \r \t l 0021160 e t s g n = a x o r b x 0021200 o r c \t / / S i g n b i t \r 0021220 \t l e t a b s ( x ) = ( x g 0021240 e 0 ? x , - x ) \r \t l e t 0021260 r e s = M u l D i v ( a b s ( a 0021300 ) , a b s ( b ) , a b s ( c ) ) 0021320 \r \t r e s u l t i s ( s g n 0021340 l s 0 ? - r e s , r e s ) \r 0021360 ] \r \r a n d \r \r C o s ( t h e t 0021400 a , l v s i g n , l v m a g ) 0021420 b e [ \r / / C a l c u l a t e 0021440 t h e c o s i n e o f t 0021460 h e g i v e n a n g l e , 0021500 a n d r e t u r n t h e \r / 0021520 / m a g n i t u d e a s a 0021540 f r a c t i o n o f # 1 7 0021560 7 7 7 7 ( l a r g e s t n u 0021600 m b e r ) \r / / A l s o r e 0021620 t u r n s i g n ( 0 i f 0021640 p o s i t i v e , - 1 i f 0021660 n e g a t i v e ) \r \r \t i f t 0021700 h e t a l s 0 t h e n t 0021720 h e t a = - t h e t a \r \t @ l v 0021740 s i g n = - ( ( ( t h e t a + 9 0021760 0 * 6 0 ) / ( 1 8 0 * 6 0 ) ) & 0022000 1 ) \r \t l e t d = t h e t a 0022020 r e m 9 0 * 6 0 \r \t i f ( ( 0022040 t h e t a / ( 9 0 * 6 0 ) ) & 1 0022060 ) n e 0 t h e n d = 9 0 0022100 * 6 0 - d \r \t l e t m i n = d 0022120 r e m 6 0 \t \t \t / / M i n u 0022140 t e s p a r t \r \t d = d / 6 0 0022160 \t \t \t \t / / D e g r e e s p a 0022200 r t \r / / N o w d i n r a 0022220 n g e 0 - 9 0 d e g r e e s 0022240 \r \r \t l e t r e t r i e v e c 0022260 o s ( d , m i n ) = v a l o f 0022300 [ \t / / 0 l e d l e 4 0022320 5 \r \t \t l e t c o s a r = t a 0022340 b l e [ \r \t \t # 1 7 7 7 7 7 ; 0022360 \r \t \t # 1 7 7 7 6 5 ; # 1 7 7 0022400 7 2 7 ; # 1 7 7 6 4 5 ; # 1 0022420 7 7 5 3 7 ; # 1 7 7 4 0 5 ; 0022440 \r \t \t # 1 7 7 2 2 7 ; # 1 7 7 0022460 0 2 6 ; # 1 7 6 6 0 1 ; # 1 0022500 7 6 3 3 0 ; # 1 7 6 0 3 3 ; 0022520 \r \t \t # 1 7 5 5 1 2 ; # 1 7 5 0022540 1 4 6 ; # 1 7 4 5 5 7 ; # 1 0022560 7 4 1 4 4 ; # 1 7 3 5 0 5 ; 0022600 \r \t \t # 1 7 3 0 2 4 ; # 1 7 2 0022620 3 1 7 ; # 1 7 1 5 6 7 ; # 1 0022640 7 1 0 1 4 ; # 1 7 0 2 1 6 ; 0022660 \r \t \t # 1 6 7 3 7 6 ; # 1 6 6 0022700 5 3 2 ; # 1 6 5 6 4 5 ; # 1 0022720 6 4 7 3 5 ; # 1 6 4 0 0 2 ; 0022740 \r \t \t # 1 6 3 0 2 6 ; # 1 6 2 0022760 0 3 0 ; # 1 6 1 0 0 7 ; # 1 0023000 5 7 7 4 6 ; # 1 5 6 6 6 2 ; 0023020 \r \t \t # 1 5 5 5 5 6 ; # 1 5 4 0023040 4 3 0 ; # 1 5 3 2 6 2 ; # 1 0023060 5 2 0 7 2 ; # 1 5 0 6 6 3 ; 0023100 \r \t \t # 1 4 7 4 3 2 ; # 1 4 6 0023120 1 6 2 ; # 1 4 4 6 7 2 ; # 1 0023140 4 3 3 6 2 ; # 1 4 2 0 3 2 ; 0023160 \r \t \t # 1 4 0 4 6 3 ; # 1 3 7 0023200 0 7 5 ; # 1 3 5 4 7 1 ; # 1 0023220 3 4 0 4 5 ; # 1 3 2 4 0 5 ; 0023240 \r \t \t # 1 3 0 7 4 3 ; \t / / 4 6 0023260 d e g r e e s b e c a u s e 0023300 o f i n t e r p o l a t i o 0023320 n \r \t \t ] \r \r \t \t l e t a = c 0023340 o s a r ! d \t \t / / F i r s t 0023360 a n s w e r \r \t \t i f m i n 0023400 n e 0 t h e n \t / / M u s t 0023420 i n t e r p o l a t e \r \t \t 0023440 [ \r \t \t l e t b = c o s 0023460 a r ! ( d + 1 ) \r \t \t a = a 0023500 - M u l D i v ( a - b , m i n , 0023520 6 0 ) \t / / C a r e f u l a b 0023540 o u t s i g n s \r \t \t ] \r 0023560 \t \t r e s u l t i s a \r \t ] \r 0023600 \r \t t e s t d g r 4 5 t 0023620 h e n \r \t \t [ \t \t \t / / U s e 0023640 h a l f - a n g l e f o r m u 0023660 l a e \r \t \t i f ( d & 1 ) n 0023700 e 0 t h e n m i n = m i n 0023720 + 6 0 / / D i v i d e a n g 0023740 l e b y 2 \r \t \t l e t a = 0023760 r e t r i e v e c o s ( d r s 0024000 h i f t 1 , m i n r s h i f 0024020 t 1 ) \r \t \t a = M u l D i v ( 0024040 a , a , # 1 7 7 7 7 7 ) \t / / 0024060 c o s ^ 2 ( t h e t a / 2 ) \r \t 0024100 \t a = a - # 1 0 0 0 0 0 \t \t / / 0024120 c o s ^ 2 - 1 / 2 \r \t \t @ l 0024140 v m a g = a l s h i f t 1 \t 0024160 / / 2 c o s ^ 2 - 1 \r \t \t ] 0024200 \r \t o r \t @ l v m a g = r e t r 0024220 i e v e c o s ( d , m i n ) \r \t 0024240 \r ] \r \r \r \r 0024246