$ od -c -N 50000 [_CD8_]<press>PressSources.dm!2 0000000 377 \0 \0 A l l o c . b c p l \0 373 225 0000020 + q \0 \0 \0 376 001 \0 Y \f / / A l l 0000040 o c . b c p l - - B O U N D 0000060 A R Y T A G S T O R A G E 0000100 A L L O C A T O R \r / / \r / / 0000120 l a s t m o d i f i e d A u 0000140 g u s t 8 , 1 9 7 7 4 : 0000160 1 0 P M \r / / \r / / E d M 0000200 c C r e i g h t ( a n d f r 0000220 i e n d s ) \r / / C o m p u t 0000240 e r S c i e n c e s L a b o 0000260 r a t o r y \r / / X e r o x 0000300 P A R C \r / / 3 3 3 3 C o y 0000320 o t e H i l l R o a d , \r / 0000340 / P a l o A l t o , C a l 0000360 i f . 9 4 3 0 4 \r / / \t 4 1 0000400 5 - 4 9 4 - 4 0 0 0 \r \r / / z 0000420 o n e = I n i t 376 001 \0 335 266 i 0000440 a l i z e Z o n e ( s t a r t , 0000460 l e n g t h [ , o u t O f S 0000500 p a c e R t n [ , m a l F o r 0000520 m e d R t n ] ] ) \r / / A d d 0000540 T o Z o n e ( z o n e , s t a 0000560 r t , l e n g t h ) \r / / p 0000600 t r = A l l o c a t e ( z o 0000620 n e , s i z e [ , r e t u r 0000640 n O n N o S p a c e [ , e v e 0000660 n ] ] ) \r / / . . . o 0000700 r p t r = ( z n > > Z N . 0000720 A l l o c a t e ) ( z n , s i 0000740 z e [ , r e t u r n O n N o S 0000760 p a c e [ , e v e n ] ] ) \r / 0001000 / F r e e ( z o n e , p t r 0001020 ) \r / / . . . o r 376 0001040 001 \0 006 310 ( z n > > Z N . F r e e 0001060 ) ( z n , p t r ) \r / / C h 0001100 e c k Z o n e ( z o n e ) \r \r / 0001120 / W A R N I N G : a z o n 0001140 e m u s t n o t b e b i 0001160 g g e r t h a n 3 2 k - 1 0001200 w o r d s \r \r / / D e b u g g i 0001220 n g f a c i l i t i e s : \r / 0001240 / T h e m a n i f e s t c 0001260 o n s t a n t D E B U G m a 0001300 y b e s e t t o a v a 0001320 r i e t y o f t h i n g s 0001340 w h i c h \r / / c a u s e c 0001360 o n d i t i o n a l c o m p i 0001400 l a t i o n t o i n c l u d 0001420 e e v e r m o r e s t r i 0001440 n g e n 376 001 \0 024 251 t c h e c k 0001460 i n g . \r / / T h e r e a r 0001500 e t w o k i n d s o f c 0001520 h e c k i n g : \r / / \t a . I 0001540 n d i v i d u a l c h e c k i 0001560 n g o f e a c h r e q u e 0001600 s t ( A l l o c a t e & F 0001620 r e e ) \r / / \t J u s t 0001640 c h e c k s t h e r e q u e 0001660 s t i t s e l f . \r / / \t b . 0001700 C h e c k e n t i r e d a 0001720 t a s t r u c t u r e f a i 0001740 r l y s t r i n g e n t l y 0001760 ( s l o w ) . \r / / \t T h 0002000 i s p r o c e d u r e m a y 0002020 b e c a l l e d f r o m 0002040 S W A T , a n d 376 001 \0 a 225 i 0002060 s c a l l e d \r / / \t C 0002100 h e c k Z o n e . \r / / \r / / 0002120 T h e s e t t i n g o f D 0002140 E B U G g o v e r n s w h i 0002160 c h k i n d s o f c h e c 0002200 k i n g a r e d o n e : \r / 0002220 / \t D E B U G = 0 \t N o c 0002240 h e c k i n g . \r / / \t D E B U 0002260 G = 1 \t T y p e ( a ) o 0002300 n e a c h r e q u e s t . \r 0002320 / / \t D E B U G = 2 \t T y p 0002340 e ( a ) o n e a c h r e 0002360 q u e s t , b u t c o d e 0002400 f o r \r / / \t \t \t C h e c k Z o 0002420 n e i s c o m p i l e d & 0002440 c a n b e c a l l e d 376 001 0002460 \0 3 201 f r o m S w a t \r / / 0002500 \t D E B U G = 3 \t T y p e 0002520 ( a ) a n d ( b ) o n e 0002540 a c h r e q u e s t ( V E R 0002560 Y s l o w ) . \r \r m a n i f e 0002600 s t D E B U G = 3 \r \f \r e 0002620 x t e r n a l \r [ \r / / o u t 0002640 g o i n g p r o c e d u r e s 0002660 \r I n i t i a l i z e Z o n e ; 0002700 A d d T o Z o n e \r A l l o c 0002720 a t e ; F r e e \r C h e c k Z 0002740 o n e \r \r / / i n c o m i n g 0002760 p r o c e d u r e s \r S y s E 0003000 r r \t \t / / S y s E r r ( p a 0003020 r a m , e r r N o ) \r U s c \t 0003040 \t / / U s c ( a , b ) - 1 0003060 i f 376 001 \0 370 356 a < b , 0003100 0 i f a = b ; 1 i f 0003120 a > b u n s i g n e d \r 0003140 C a l l 0 ; C a l l 1 \r ] \r \r 0003160 / / l o c a l s t a t i c s 0003200 ( o n l y n e e d e d i f 0003220 c o m p i l e d a l o n e . 0003240 . . ) \r s t a t i c [ A l l 0003260 o c a t e ; F r e e ] \r \r / 0003300 / e r r o r c o d e s \r m a 0003320 n i f e s t \r [ \r e c O u t O f 0003340 S p a c e = 1 8 0 1 \r e c Z 0003360 o n e A d d i t i o n E r r o r 0003400 = 1 8 0 2 \r e c B l o c k N 0003420 o t A l l o c a t e d = 1 8 0003440 0 3 \r e c I l l F o r m e d = 0003460 1 8 0 4 \r e c 376 001 \0 310 _ B a d 0003500 R e q u e s t = 1 8 0 5 \r ] 0003520 \r \r / / - - - - - - - - - - - - 0003540 - - - - - - - - - - - - - - - - * 0003620 - - - - - - - - - - - - - - - \r 0003640 s t r u c t u r e S B : / 0003660 / s t o r a g e b l o c k \r 0003700 / / - - - - - - - - - - - - - - 0003720 - - - - - - - - - - - - - - - - * 0004000 - - - - - - - - - - - - - \r [ \r 0004020 l e n g t h w o r d \t / / + 0004040 f o r f r e e b l o c k s 0004060 , - f o r a l l o c 376 001 \0 0004100 \a G a t e d o n e s \r d a t a 0004120 w o r d = \t / / a l l o c 0004140 a t e d b l o c k : s t a r 0004160 t o f d a t a s p a c e \r 0004200 [ \t \t / / f r e e b l 0004220 o c k o n l y \r p S b N 0004240 e x t w o r d \r p S b P 0004260 r e v i o u s w o r d \r 0004300 ] \r ] \r m a n i f e s t \r [ \r l 0004320 S b O v e r h e a d = o f f 0004340 s e t S B . d a t a / 1 6 \r m 0004360 i n L S b F r e e = s i z e 0004400 S B / 1 6 \r o f f s e t S b D 0004420 a t a = o f f s e t S B . 0004440 d a t a / 1 6 \r ] \r \r / / - - - 0004460 - - - - - - - - - - - - - - - - 0004500 - - 376 001 \0 304 356 - - - - - - - - - 0004520 - - - - - - - - - - - - - - - - * 0004560 - - - - - - - - - - - - - \r s t 0004600 r u c t u r e Z N : / / Z 0004620 o n e o b j e c t \r / / - - - 0004640 - - - - - - - - - - - - - - - - * 0004740 - - - - - - - - \r [ \r A l l o c 0004760 a t e w o r d \r F r e e w o 0005000 r d \r O u t O f S p a c e R t n 0005020 w o r d \t / / N o n - z e r 0005040 o t o r e p o r t i n s u 0005060 f f i c i e n t s p a c e \r M 0005100 a l F o r m e 376 001 \0 347 O d R t n 0005120 w o r d \t / / N o n - z e r 0005140 o t o d o c o n s i s t e 0005160 n c y c h e c k s \r a n c h o 0005200 r @ S B \r r o v e r w o r d 0005220 \r m i n A d r w o r d \r m a 0005240 x A d r w o r d \r ] \r m a n i 0005260 f e s t \r [ \r l Z n = s i z 0005300 e Z N / 1 6 \r l Z n O v e r h 0005320 e a d = l Z n + l S b O 0005340 v e r h e a d \r ] \r \r / / A c 0005360 t u a l l y a z o n e i s 0005400 a z o n e h e a d e r , 0005420 f o l l o w e d b y a c o 0005440 n s e c u t i v e s e q u e n 0005460 c e o f \r / / b l o c k s 0005500 f o l l o w e d b y 376 001 \0 \n 0005520 237 a d u m m y u s e d b l 0005540 o c k , w h i c h i s a 0005560 w o r d c o n t a i n i n g 0005600 - 1 . \r / / T h e s b i n 0005620 t h e h e a d e r a c t s 0005640 a s a n a n c h o r f o 0005660 r t h e f r e e c h a i n 0005700 . \r \f \r / / - - - - - - - - - - 0005720 - - - - - - - - - - - - - - - - * 0006020 - \r l e t I n i t i a l i z e 0006040 Z o n e ( z n , l e n g t h , O 0006060 u t O f S p a c e R t n , M a l 0006100 F o r m e d R t n ; n u m a r 0006120 g 376 001 \0 026 366 s n a ) = v a 0006140 l o f \r / / - - - - - - - - - - 0006160 - - - - - - - - - - - - - - - - * 0006260 - \r [ \r c o m p i l e i f ( o 0006300 f f s e t Z N . A l l o c a t 0006320 e ) n e 0 % ( o f f s e 0006340 t Z N . F r e e ) n e 1 6 0006360 t h e n [ f o o = 0 0006400 ] \r A l l o c a t e = C a l 0006420 l 0 \r F r e e = C a l l 1 \r 0006440 \r z n > > Z N . A l l o c a t e 0006460 = r A l l o c a t e \r z n > 0006500 > Z N . F r e e = r F r e e 0006520 \r z n > > Z 376 001 \0 235 375 N . O u t 0006540 O f S p a c e R t n = n a 0006560 l s 3 ? S y s E r r , O u 0006600 t O f S p a c e R t n \r \r l e t 0006620 s b A n c h o r = l v z 0006640 n > > Z N . a n c h o r \r s b A 0006660 n c h o r > > S B . l e n g t h 0006700 = 0 \r s b A n c h o r > > S 0006720 B . p S b N e x t = s b A n 0006740 c h o r \r s b A n c h o r > > S 0006760 B . p S b P r e v i o u s = 0007000 s b A n c h o r \r \r l e t f i 0007020 r s t F r e e = z n + l 0007040 Z n \r z n > > Z N . r o v e r 0007060 = f i r s t F r e e \r \r c o m 0007100 p i l e i f D E B U G g r 0007120 0 t h e n \r [ 376 001 \0 U 232 0007140 \r z n > > Z N . M a l F o 0007160 r m e d R t n = n a l s 0007200 4 ? S y s E r r , M a l F o 0007220 r m e d R t n \r z n > > Z 0007240 N . m i n A d r = f i r s t 0007260 F r e e \r z n > > Z N . m 0007300 a x A d r = f i r s t F r e 0007320 e \r ] \r \r A d d T o Z o n 0007340 e ( z n , f i r s t F r e e , l 0007360 e n g t h - l Z n ) \r r e s u l 0007400 t i s z n \r ] \r \r / / - - - - 0007420 - - - - - - - - - - - - - - - - * 0007520 - - - - - - - \r a n d A d d T 0007540 376 001 \0 # 213 o Z o n e ( z n , s 0007560 b , l e n g t h ) b e \r / / 0007600 - - - - - - - - - - - - - - - - * 0007700 - - - - - - - - - - - \r [ \r l e 0007720 t l S b F r e e = l e n g 0007740 t h - l S b O v e r h e a d \t / 0007760 / A c c o u n t f o r - 1 0010000 a t e n d \r c o m p i l e i f 0010020 D E B U G g r 0 t h e n 0010040 \r [ \r i f l S b F 0010060 r e e l s m i n L S b F r e 0010100 e % U s c ( l e n g t h , # 0010120 7 7 7 7 6 ) g r 0 t h e n 0010140 \r 376 001 \0 f 027 A l l o 0010160 c B o m b ( z n , e c Z o n e 0010200 A d d i t i o n E r r o r ) \r 0010220 ] \r \r s b ! l S b F r e e 0010240 = - 1 \r \r c o m p i l e i f 0010260 D E B U G g r 0 t h e n \r 0010300 [ \r l e t s b L a 0010320 s t = s b + l S b F r e e \r 0010340 l e t m i n = z n > 0010360 > Z N . m i n A d r \r t e 0010400 s t U s c ( s b , m i n ) l 0010420 s 0 \r i f s o \r 0010440 [ \r 0010460 i f U s c ( s b L a s t 0010500 , m i n ) g e 0 t h e n 0010520 A l l o c B o m b ( z n , e c 0010540 Z o n e A d d i t i 376 001 \0 I . o 0010560 n E r r o r ) \r 0010600 s b ! l S b F r e e = s b 0010620 L a s t - m i n / / N e w b 0010640 o u n d a r y t a g \r 0010660 z n > > Z N . m i n A 0010700 d r = s b \r 0010720 ] \r i f n o t \r 0010740 [ \r 0010760 l e t m a x = z n > 0011000 > Z N . m a x A d r \r 0011020 i f U s c ( s b , m a 0011040 x ) l s 0 t h e n A l l 0011060 o c B o m b ( z n , e c Z o n 0011100 e A d d i t i o n E r r o r ) \r 0011120 @ m a x = 0011140 m a x - s b / / C l o b b 376 0011160 001 \0 215 200 e r s s b > > S B . l 0011200 e n g t h f i r s t t i m e 0011220 \r z n > > Z N 0011240 . m a x A d r = s b L a s t 0011260 \r ] \r ] 0011300 \r \r s b > > S B . l e n g t h 0011320 = - l S b F r e e \r F r e e ( 0011340 z n , s b + o f f s e t S b D 0011360 a t a ) \r ] \r \f \r / / - - - - - 0011400 - - - - - - - - - - - - - - - - * 0011500 - - - - - - \r a n d r A l l o 0011520 c a t e ( z n , l S b D a t a 0011540 , r e t u r n O n N o S p a c 0011560 e , e 376 001 \0 230 266 v e n ; n u 0011600 m a r g s n a ) = v a l o 0011620 f \r / / - - - - - - - - - - - - 0011640 - - - - - - - - - - - - - - - - * 0011720 - - - - - - - - - - - - - - - \r 0011740 [ \r i f n a l s 3 t h e 0011760 n r e t u r n O n N o S p a c 0012000 e = f a l s e \r i f n a 0012020 l s 4 t h e n e v e n = 0012040 f a l s e \r \r i f e v e n 0012060 t h e n l S b D a t a = l 0012100 S b D a t a + 1 \t / / G e t 0012120 o n e m o r e \r l e t l a r 0012140 g e s t = 0 \t \t \t \t / / K e 0012160 e p t r a c k 376 001 \0 : 227 o f 0012200 f r e e b l o c k s \r l e t 0012220 l S b = l S b D a t a + 0012240 l S b O v e r h e a d \r \r / / 0012260 I t w a n ' t m e ! I t 0012300 w a s s m a s h e d b e f 0012320 o r e I g o t h e r e ! \r 0012340 c o m p i l e i f D E B U G 0012360 e q 3 t h e n [ i f z 0012400 n > > Z N . M a l F o r m e d R 0012420 t n t h e n C h e c k Z o n 0012440 e ( z n ) ] \r \r i f U s c ( 0012460 l S b , m i n L S b F r e e ) 0012500 l s 0 t h e n l S b = 0012520 m i n L S b F r e e \r \r l e t 0012540 s b R o v e r = z n > > Z N 0012560 . r o v e r \r l e t s b O 376 001 0012600 \0 352 221 r i g i n a l R o v e r 0012620 = s b R o v e r \r [ \r 0012640 l e t s b N e x t = n 0012660 i l \r [ / / l 0012700 o o p w h i l e n e x t n 0012720 e i g h b o r i s f r e e , 0012740 c o a l e s c i n g h i m 0012760 w i t h r o v e r \r 0013000 s b N e x t = s b R o v e 0013020 r + s b R o v e r > > S B . 0013040 l e n g t h \r i f 0013060 s b N e x t > > S B . l e n g t 0013100 h l e 0 b r e a k \r 0013120 i f s b N e x t e q 0013140 s b O r i g i n a l R o v e r 0013160 t h e n \r s b 0013200 O r i 376 001 \0 326 217 g i n a l R o v 0013220 e r = s b N e x t > > S B . 0013240 p S b N e x t \r / / 0013260 r e m o v e s b N e x t f 0013300 r o m h i s c h a i n s \r 0013320 s b N e x t > > S B . 0013340 p S b N e x t > > S B . p S b P 0013360 r e v i o u s = s b N e x t 0013400 > > S B . p S b P r e v i o u s 0013420 \r s b N e x t > > S 0013440 B . p S b P r e v i o u s > > S 0013460 B . p S b N e x t = s b N e 0013500 x t > > S B . p S b N e x t \r 0013520 / / a n d a d d 0013540 h i m t o u s \r 0013560 s b R o v e r > > S B . l e n g 0013600 t h = s b R 376 001 \0 361 277 o v e 0013620 r > > S B . l e n g t h + s 0013640 b N e x t > > S B . l e n g t h 0013660 \r ] r e p e a t \r 0013700 \r l e t s b = s b N 0013720 e x t - l S b \r l e t 0013740 e x t r a = s b - s b 0013760 R o v e r \r l e t s i z 0014000 = s b N e x t - s b R o 0014020 v e r \r i f s i z g r 0014040 l a r g e s t t h e n l a 0014060 r g e s t = s i z \r / 0014100 / l o o p i f b l o c k 0014120 n o t b i g e n o u g h , 0014140 o r i f r e q u e s t t o 0014160 o l a r g e t o b e l e 0014200 g a l \r / / ( l a 376 001 \0 0014220 355 306 r g e s i z e m a y b 0014240 e c a l l i n g u s j u s 0014260 t t o c o m p u t e l a r 0014300 g e s t b l o c k ) \r i 0014320 f e x t r a l s 0 % U 0014340 s c ( l S b , # 1 0 0 0 0 0 ) 0014360 g e 0 t h e n \r 0014400 [ s b R o v e r = s b R 0014420 o v e r > > S B . p S b N e x t 0014440 ; l o o p ] \r \r t e s 0014460 t e x t r a g e m i n L S 0014500 b F r e e \r i f s o 0014520 \r [ / / 0014540 s p l i t b l o c k \r 0014560 s b R o v e r > > S B 0014600 . l e n g t h = e x t r a \r 0014620 376 001 \0 R 261 z n 0014640 > > Z N . r o v e r = s b R 0014660 o v e r \r / / 0014700 s e t t h e l e n g t h 0014720 a n d m a r k t h e n e w 0014740 b l o c k u s e d \r 0014760 s b > > S B . l e n g 0015000 t h = - l S b \r 0015020 ] \r i f n o t 0015040 \r [ / / 0015060 r e m o v e r o v e r f r o 0015100 m h i s c h a i n s \r 0015120 s b R o v e r > > S 0015140 B . p S b N e x t > > S B . p S 0015160 b P r e v i o u s = s b R o 0015200 v e r > > S B . p S b P r e v i 0015220 o u s \r 376 001 \0 200 " 0015240 s b R o v e r > > S B . p S 0015260 b P r e v i o u s > > S B . p S 0015300 b N e x t = s b R o v e r > 0015320 > S B . p S b N e x t \r 0015340 z n > > Z N . r o v e 0015360 r = s b R o v e r > > S B . 0015400 p S b N e x t \r 0015420 / / a n d m a r k t h e 0015440 n e w b l o c k u s e d \r 0015460 s b = s b 0015500 R o v e r \r s 0015520 b > > S B . l e n g t h = - 0015540 s b > > S B . l e n g t h \r 0015560 ] \r l e t 0015600 a n s = s b + o f f s e 0015620 t S b D a t a \r i 376 001 \0 201 0015640 w f e v e n t h e n [ a 0015660 n s ! 0 = 0 ; a n s = 0015700 ( a n s + 1 ) & ( - 2 ) ] \r 0015720 r e s u l t i s a n s \r 0015740 ] r e p e a t w h i l e 0015760 s b R o v e r n e s b O r i 0016000 g i n a l R o v e r \r \r z n > > 0016020 Z N . r o v e r = s b R o v 0016040 e r \r i f ( r e t u r n O n N 0016060 o S p a c e n e 0 ) % ( 0016100 z n > > Z N . O u t O f S p a c 0016120 e R t n e q 0 ) t h e n \r 0016140 [ \r / / F o l l o 0016160 w i n g w i l l c l o b b e 0016200 r l o c a t i o n z e r o , 0016220 b u t . . . . \r i f r 0016240 e 376 001 \0 ' 306 t u r n O n N o S p 0016260 a c e n e - 1 t h e n @ 0016300 r e t u r n O n N o S p a c e 0016320 = l a r g e s t - l S b O v e 0016340 r h e a d \r r e s u l t i 0016360 s 0 \r ] \r r e s u l t i 0016400 s z n > > Z N . O u t O f S p 0016420 a c e R t n ( z n , e c O u t 0016440 O f S p a c e , l S b D a t a 0016460 ) \r ] \r \f \r / / - - - - - - - - 0016500 - - - - - - - - - - - - - - - - * 0016600 - - - \r a n d r F r e e ( z n 0016620 , s b ) b e \r / / - - - - - 0016640 - - - - - - 376 001 \0 { } - - - - - 0016660 - - - - - - - - - - - - - - - - * 0016740 - - - - - - - - - - - \r [ \r / / 0016760 T h i s c a n b e c a l 0017000 l e d w i t h t h e r e s 0017020 u l t o f a c a l l t o 0017040 A l l o c a t e r o u n d e 0017060 d u p b y \r / / a n y t h 0017100 i n g f r o m 0 t o 1 0017120 ( i f e v e n ) \r i f s b ! 0017140 - 1 e q 0 t h e n s b 0017160 = s b - 1 \t / / W a s e v 0017200 e n a l l o c a t i o n \r s b 0017220 = s b - o f f s e t S b 0017240 D a t a / / - > 376 001 \0 323 v 0017260 b o u n d a r y t a g \r c o m 0017300 p i l e i f D E B U G g r 0017320 0 t h e n \r [ i f s 0017340 b > > S B . l e n g t h g e 0017360 0 t h e n A l l o c B o m b 0017400 ( z n , e c B l o c k N o t A 0017420 l l o c a t e d ) ] \r l e t 0017440 s b A n c h o r = l v z n 0017460 > > Z N . a n c h o r \r \r c o m 0017500 p i l e i f D E B U G e q 0017520 3 t h e n [ i f z n > > 0017540 Z N . M a l F o r m e d R t n 0017560 t h e n C h e c k Z o n e ( z 0017600 n ) ] \r \r / / m a r k t h 0017620 e b l o c k f r e e \r s b > 0017640 > S B . l e n g t h = - s b 0017660 376 001 \0 O 362 > > S B . l e n g t h 0017700 \r \r c o m p i l e i f D E B U 0017720 G g r 0 t h e n \r [ 0017740 \r i f z n > > Z N . M a 0017760 l F o r m e d R t n t h e n \r 0020000 [ \r C h 0020020 e c k B o u n d s ( z n , s b 0020040 ) \r C h e c k F r e 0020060 e N o d e ( z n , s b A n c h 0020100 o r ) \r ] \r ] 0020120 \r / / i n s e r t b e t w e e 0020140 n a n c h o r a n d a n c 0020160 h o r . n e x t \r l e t s b T 0020200 = s b A n c h o r > > S B . 0020220 p S b N e x t \r s b > > S B . p 0020240 S b P r e v i o u s = s b A 0020260 n c h o r 376 001 \0 243 ; ; s b > > 0020300 S B . p S b N e x t = s b T 0020320 \r s b A n c h o r > > S B . p S 0020340 b N e x t = s b ; s b T > 0020360 > S B . p S b P r e v i o u s 0020400 = s b \r ] \r \f \r / / - - - - - 0020420 - - - - - - - - - - - - - - - - * 0020520 - - - - - - \r a n d C h e c k 0020540 Z o n e ( z n ) b e \r / / - - 0020560 - - - - - - - - - - - - - - - - * 0020660 - - - - - - - - - \r 376 001 \0 020 211 [ 0020700 \r c o m p i l e i f D E B U G 0020720 g r 1 t h e n \r [ \r 0020740 i f ( r v z n > > Z N 0020760 . m a x A d r ) n e - 1 t 0021000 h e n A l l o c B o m b ( z n 0021020 ) \r / / G o t h r o u g 0021040 h c o r e b y b e l i e v 0021060 i n g b o u n d a r y t a g 0021100 s , c o u n t i n g f r e e 0021120 b l o c k s \r l e t f 0021140 r e e C o u n t = 0 \r 0021160 l e t s b = z n > > Z N . 0021200 m i n A d r / / F i r s t 0021220 b l o c k \r w h i l e U 0021240 s c ( z n > > Z N . m a x A d r 0021260 , s b ) g r 0 d o \r 376 0021300 001 \0 O 4 [ \r 0021320 l e t a d d i t = s b > 0021340 > S B . l e n g t h \r 0021360 t e s t a d d i t g e 0 0021400 \r i f s o \r 0021420 [ / / 0021440 F r e e n o d e \r 0021460 C h e c k F r e e N 0021500 o d e ( z n , s b ) \r 0021520 f r e e C o u n 0021540 t = f r e e C o u n t + 1 \r 0021560 ] \r 0021600 i f n o t a d d 0021620 i t = - a d d i t / / A 0021640 l l o c a t e d o n e \r 0021660 i f U s c ( s b + a d d 0021700 i t , 376 001 \0 363 D s b ) l e 0021720 0 t h e n A l l o c B o m b 0021740 ( z n ) \r s b = 0021760 s b + a d d i t \r ] 0022000 \r i f s b n e z n > 0022020 > Z N . m a x A d r t h e n 0022040 A l l o c B o m b ( z n ) \r 0022060 / / G o t h r o u g h f r 0022100 e e l i s t , c h e c k i n 0022120 g , d e c r e m e n t i n g 0022140 f r e e c o u n t \r l e 0022160 t c n t = - 2 2 0 0 0 \t \t 0022200 / / 6 4 0 0 0 / m i n L S b F 0022220 r e e i t e r a t i o n s \r 0022240 l e t s b A n c h o r = 0022260 l v z n > > Z N . a n c h o 0022300 r \r s b = 376 001 \0 266 030 s 0022320 b A n c h o r > > S B . p S b N 0022340 e x t \r w h i l e s b 0022360 n e s b A n c h o r d o \r 0022400 [ \r C h e 0022420 c k F r e e N o d e ( z n , s 0022440 b ) \r f r e e C o u 0022460 n t = f r e e C o u n t - 0022500 1 \r c n t = c n 0022520 t - 1 ; i f c n t e q 0 0022540 t h e n A l l o c B o m b ( 0022560 z n ) \r s b = s 0022600 b > > S B . p S b N e x t \r 0022620 ] \r i f f r e e 0022640 C o u n t n e 0 t h e n 0022660 A l l o c B o m b ( z n ) \r 0022700 ] \r ] \r \r / / - - - - - - 376 001 0022720 \0 371 n - - - - - - - - - - - - - 0022740 - - - - - - - - - - - - - - - - * 0023020 - - - - - - - - \r a n d C h e 0023040 c k F r e e N o d e ( z n , s 0023060 b ) b e \r / / - - - - - - - - 0023100 - - - - - - - - - - - - - - - - * 0023200 - - - \r [ \r c o m p i l e i f 0023220 D E B U G g r 0 t h e n \r 0023240 [ \r C h e c k B o u 0023260 n d s ( z n , s b ) \r C 0023300 h e c k B o u n d s ( z n , s 0023320 b > > 376 001 \0 D 257 S B . p S b N e 0023340 x t ) \r C h e c k B o u n 0023360 d s ( z n , s b > > S B . p S 0023400 b P r e v i o u s ) \r i f 0023420 ( s b n e l v z n > > Z 0023440 N . a n c h o r & s b > > S 0023460 B . l e n g t h l s m i n L 0023500 S b F r e e ) % \r 0023520 s b > > S B . p S b N e x t > > 0023540 S B . p S b P r e v i o u s n 0023560 e s b t h e n A l l o c B 0023600 o m b ( z n ) \r ] \r ] \r \r 0023620 / / - - - - - - - - - - - - - - 0023640 - - - - - - - - - - - - - - - - * 0023720 - - - - - - - - 376 001 \0 353 201 - - - 0023740 - - \r a n d C h e c k B o u n 0023760 d s ( z n , s b ) = v a l 0024000 o f \r / / - - - - - - - - - - - 0024020 - - - - - - - - - - - - - - - - * 0024120 \r [ \r c o m p i l e i f D E B 0024140 U G g r 0 t h e n \r 0024160 [ \r i f s b n e l v 0024200 z n > > Z N . a n c h o r & 0024220 \r ( U s c ( s b + s b > 0024240 > S B . l e n g t h , z n > > 0024260 Z N . m a x A d r ) g r 0 0024300 % \r U s c ( s b , z n > 0024320 > Z N . m i n A d r ) l 376 001 \0 0024340 224 * s 0 ) t h e n A l l o 0024360 c B o m b ( z n ) \r ] \r ] 0024400 \r \r / / - - - - - - - - - - - - 0024420 - - - - - - - - - - - - - - - - * 0024500 - - - - - - - - - - - - - - - \r 0024520 a n d A l l o c B o m b ( z n 0024540 , e c ; n u m a r g s n a 0024560 ) b e \r / / - - - - - - - - 0024600 - - - - - - - - - - - - - - - - * 0024700 - - - \r [ \r i f n a l e 1 0024720 t h e n e c = e c I l l 0024740 F o 376 \0 a 023 \r r m e d \r l e t 0024760 M a l F o r m e d R t n = z 0025000 n > > Z N . M a l F o r m e d R 0025020 t n ? z n > > Z N . M a l F 0025040 o r m e d R t n , S y s E r r 0025060 \r M a l F o r m e d R t n ( z n 0025100 , e c ) \r ] \r 377 \0 \0 C o n v e 0025120 r t . b c p l \0 373 226 022 \t f \0 \0 376 0025140 001 \0 F 202 / / C o n v e r t . b 0025160 c p l \r \r / / l a s t m o d 0025200 i f i e d b y B u t t e r f 0025220 i e l d , O c t o b e r 1 3 0025240 , 1 9 8 0 1 2 : 0 0 P M 0025260 \r / / - S e t S C V T r a n 0025300 s f o r m , r e s o l u t i o 0025320 n s 1 X i n s t e a d o f 0025340 1 0 X - 1 0 / 1 3 / 8 0 \r 0025360 \r / / 1 2 / 1 3 / 7 7 : C o n 0025400 v e r t A C h a r n o w p u 0025420 t s o u t O R b i t f o r 0025440 m a t c h a r a c t e r s \t J 0025460 . M a l e s o n \r / / c a t a 0025500 l o g n u m b e r ? ? ? \r \r 0025520 / / C o n v e r t A W i d t h ( 0025540 p s , p 376 001 \0 300 R c , p ) \r / / 0025560 \t C o n v e r t t h e w i d 0025600 t h s o f a s i n g l e 0025620 c h a r a c t e r . \r / / \t p s 0025640 - > S p l i n e W i d t h . 0025660 F i l l s u p p c - > 0025700 C h a r W i d t h . \r / / \t p 0025720 - > C o n v e r t s t r u 0025740 c t u r e . \r / / r e t u r n 0025760 s t r u e i f b i t m a p 0026000 f o r c h a r a c t e r i 0026020 s l a r g e \r / / ( o n l 0026040 y r o u t i n e s w h i c h 0026060 a r e p r e p a r e d t o 0026100 d e a l w i t h s p l i n 0026120 e \r / / \t \t o u t p u t c h e 0026140 c k t h e c o 376 001 \0 K 231 n s 0026160 e r v a t i v e r e t u r n 0026200 f r o m C o n v e r t A W i d 0026220 t h ) \r / / C o n v e r t A C h 0026240 a r ( w , w o , p c , p , F S G 0026260 e t , F S P u t ) \r / / \t C o n 0026300 v e r t s a s i n g l e c 0026320 h a r a c t e r . p - > C 0026340 o n v e r t s t r u c t u r e 0026360 , \r / / \t w h i c h d e s c r 0026400 i b e s s o m e p a r a m e 0026420 t e r s . \r / / \t w i s w i 0026440 n d o w t o r e a d s p l 0026460 i n e s f r o m ; w o w i 0026500 n d o w t o p u t \r / / \t s 0026520 c a n - c o n v e r t e d c h 0026540 a r a c t e r s i n t o . 376 001 0026560 \0 225 036 \r / / \t p c - > C h a 0026600 r W i d t h s t r u c t u r e 0026620 t o r e t u r n g o o d i 0026640 e s . \r / / \t R e t u r n s a 0026660 n e r r o r c o d e : \r / / 0026700 \t \t 0 = A l l O K \r / / \t 0026720 \t 1 = n o t e n o u g h c 0026740 o r e i n S C V \r / / \t \t 2 0026760 , 3 = S C V e r r o r s 0027000 i n s p l i n e s \r / / \t \t 4 0027020 = t o o b i g t o s c 0027040 a n c o n v e r t , t r y 0027060 S c a l e A C h a r \r / / \t \t 1 0027100 0 = S p l i n e d e s c r i 0027120 p t i o n f i l e i l l e g 0027140 a l \r / / \t \t 1 1 = I l l e g 0027160 a l 376 001 \0 353 360 P r e s s f o 0027200 n t o b j e c t \r / / \t \t 1 2 0027220 = S c a n c o n v e r t s 0027240 c r e w e d u p - - n o t 0027260 e v e n # i n t e r s e c 0027300 t i o n s \r / / \t \t 1 3 = B i 0027320 t i n t e r s e c t i o n o 0027340 u t o f r a n g e \r / / \t \t 0027360 1 4 = C o n v e r s i o n d 0027400 i d n o t t e r m i n a t e 0027420 p r o p e r l y . \r / / \t F S 0027440 G e t , F S P u t a r e r o 0027460 u t i n e s f o r g e t t i 0027500 n g , r e l e a s i n g s t 0027520 o r a g e . \r / / S c a l e A C 0027540 h a r ( w , w o , p c ) \r / / \t 0027560 C o n v e r t s 376 001 \0 221 236 a 0027600 s i n g l e c h a r a c t e r 0027620 i n t o s c a l e d s p l 0027640 i n e r e p r e s e n t a t i 0027660 o n \r / / \t w i s w i n d o 0027700 w t o r e a d s p l i n e 0027720 s f r o m ; w o w i n d o 0027740 w t o p u t \r / / \t s c a l 0027760 e d s p l i n e s i n t o . 0030000 \r / / \t p c - > C h a r W i 0030020 d t h s t r u c t u r e t o 0030040 r e t u r n g o o d i e s . 0030060 \r \r / / S e t S C V T r a n s f 0030100 o r m ( s i z , r o t a t i o n 0030120 , i n c l i n e , r e s o l u t 0030140 i o n x , r e s o l u t i o n y 0030160 ) \r / / \t S e t u p S 376 001 \0 0030200 330 367 C V t r a n s f o r m a t 0030220 i o n m a t r i x . \r / / C o 0030240 s ( t h e t a , l v s i g n , l 0030260 v m a g ) \r / / \t C o m p u t e 0030300 s t h e c o s i n e o f 0030320 t h e a n g l e " t h e t a 0030340 " ( i n m i n u t e s ) a 0030360 n d \r / / \t r e t u r n s s i 0030400 g n ( 0 i f p o s i t i v 0030420 e , - 1 i f n e g a t i v 0030440 e ) a n d m a g n i t u d e 0030460 \r / / \t ( 0 t o # 1 7 7 7 7 0030500 7 ) \r \r \r g e t " i x . d f s 0030520 " \r g e t " s c v . d f s " \r 0030540 \r / / o u t g o i n g p r o 0030560 c e d u r e s \r e x t e r n a l 0030600 \r \t 376 001 \0 025 l [ \r \t C o n v e r 0030620 t A C h a r \r \t C o n v e r t A 0030640 W i d t h \r \t S c a l e A C h a 0030660 r \r \t S e t S C V T r a n s f o 0030700 r m \r \t C o s \r \t ] \r \r / / o 0030720 u t g o i n g s t a t i c s \r 0030740 e x t e r n a l \r \t [ \r \t c o n 0030760 v e r t T h i c k e n \r \t c o n 0031000 v e r t O r b i t i z e d \r \t ] 0031020 \r s t a t i c \r \t [ \r \t c o n v 0031040 e r t T h i c k e n = f a l s e 0031060 \r \t c o n v e r t O r b i t i z 0031100 e d = f a l s e \r \t ] \r \r / / 0031120 i n c o m i n g p r o c e d u 0031140 r e s \r e x t e r n a l \r \t [ \r 0031160 / / I n S C V p a c k a g e 0031200 \r \t S C V I n 376 001 \0 235 362 i t \r \t 0031220 S C V B e g i n O b j e c t \r \t 0031240 S C V E n d O b j e c t \r \t S C 0031260 V M o v e T o F \r \t S C V D r a 0031300 w T o F \r \t S C V D r a w C u r 0031320 v e \r \t S C V M a t r i x \r \t S 0031340 C V R e a d R u n s \r \t S C V T 0031360 r a n s f o r m F \r \t S C V F l 0031400 u s h \r \t F l o o r \r \r \r / / W 0031420 i n d o w p a c k a g e \r \t W 0031440 i n d o w S e t P o s i t i o n 0031460 \r \t W i n d o w G e t P o s i t 0031500 i o n \r \t W i n d o w R e a d B 0031520 l o c k \r \t W i n d o w W r i t 0031540 e B l o c k \r \t W i n d o w R e 0031560 a d \r \t W i n d o w W r i t e \r 0031600 \t W i n d o w C o p y \r 376 001 \0 \f 0031620 h \r / / B l o c k m o v e , 0031640 s t o r e \r \t Z e r o ; S e t 0031660 B l o c k ; M o v e B l o c k 0031700 \r \r / / M i s c \r \t M u l D i v 0031720 \r \t M u l F u l l ; D i v F u l 0031740 l \r \t D o u b l e A d d V \r \r / 0031760 / F l o a t i n g p o i n t \r 0032000 \t F L D ; F S T ; F L D I ; F N 0032020 E G ; F A D ; F M L ; F D V \r \t 0032040 F C M ; F L D V ; F S T D P ; F 0032060 T R \r \t ] \r \r / / i n c o m i 0032100 n g s t a t i c s \r \r / / i 0032120 n t e r n a l s t a t i c s \r 0032140 \r / / F i l e - w i d e s t 0032160 r u c t u r e a n d m a n i 0032200 f e s t d e c l a r a t i o n 0032220 s 376 001 \0 344 | . \r \r / / P r o c 0032240 e d u r e s \r \r l e t \r \r \f C o 0032260 n v e r t A W i d t h ( s , c , 0032300 p ) = v a l o f [ \r \r / / 0032320 s - > S p l i n e W i d t 0032340 h s t r u c t u r e o f c 0032360 h a r t o c o m p u t e w 0032400 i d t h s . \r / / c - > C 0032420 h a r W i d t h s t r u c t u 0032440 r e t o r e c e i v e r e 0032460 s u l t s . \r / / p - > C 0032500 o n v e r t s t r u c t u r e 0032520 t h a t g o v e r n s h o 0032540 w t h i n g s a r e d o n 0032560 e . \r / / R e t u r n s t r 0032600 u e i f s p l i n e w i l 0032620 l b e n 376 001 \0 345 316 e e d e d 0032640 . \r \r \t l e t s p l i n e = f 0032660 a l s e \r \t l e t p w = l v 0032700 s > > S p l i n e W i d t h . W 0032720 X \r \t t e s t p w ! 0 e q 0032740 0 & p w ! 1 e q - 1 t 0032760 h e n \r \t [ \t \t \t \t \t / / 0033000 N o n e x i s t e n t c h a 0033020 r \r \t \t c > > C h a r W i d t h 0033040 . H = H N o n E x C o d e \r \t 0033060 ] \r \t o r \r \t [ \t \t \t 0033100 \t \t / / T r a n s f o r m w i 0033120 d t h s \r \t \t S C V T r a n s f 0033140 o r m F ( l v s > > S p l i n 0033160 e W i d t h . W X , l v s > > 0033200 S p l i n e W i d t h . W Y ) \r 0033220 \t \t F S T D P ( 8 , l 376 001 \0 k 016 0033240 v c > > C h a r W i d t h . W 0033260 X ) \t / / a n d s a v e f o 0033300 r A C f i l e \r \t \t F S T D 0033320 P ( 9 , l v c > > C h a r W i 0033340 d t h . W Y ) \t / / a s d o u 0033360 b l e - p r e c i s i o n \r \r / 0033400 / C a l c u l a t e b o u n d 0033420 i n g b o x . \r \r / / W a r n 0033440 i n g : t h e c a l c u l a 0033460 t i o n f o r t h e b o u 0033500 n d i n g b o x i s r e a 0033520 l l y n o t g o o d e n o 0033540 u g h . \r / / T h i s i s 0033560 b e c a u s e t h e b o u n 0033600 d i n g b o x k e p t w i 0033620 t h t h e S D d e s c r i 0033640 376 001 \0 311 215 p t i o n i s c a 0033660 l c u l a t e d \r / / a l i 0033700 t t l e d i f f e r e n t l y 0033720 t h a n w i l l b e t h 0033740 e e n d p o i n t s o f t 0033760 h e s p l i n e s w h e n 0034000 p a s s e d \r / / t o S C V 0034020 d u r i n g c o n v e r s i 0034040 o n . A s a r e s u l t 0034060 , s m a l l r o u n d - o f 0034100 f e r r o r s w i l l o c 0034120 c u r \r / / ( p a r t l y b 0034140 e c a u s e S C V D r a w C u 0034160 r v e u s e s - > r e l a t 0034200 i v e < - n u m b e r s ! ) . 0034220 T h i s c a n c h a n g 0034240 e \r / / 376 001 \0 245 234 2 E - 9 i 0034260 n t o - 2 E - 9 , w h i c h 0034300 w i l l c a u s e a d i 0034320 f f e r e n t b o u n d i n g 0034340 b o x t o b e c a l c u 0034360 l a t e d . \r \r \t t e s t p > 0034400 > C o n v e r t . B B G o o d 0034420 t h e n \r \t \t [ \t \t \t / / T r a 0034440 n s f o r m b o u n d i n g 0034460 b o x \r \t \t S C V T r a n s f o 0034500 r m F ( l v s > > S p l i n e 0034520 W i d t h . X L , l v s > > S 0034540 p l i n e W i d t h . Y B ) \r \t 0034560 \t F L D ( 1 , 8 ) \t \t \t / / S a 0034600 v e l e f t e d g e \r \t \t l 0034620 e t y b = F l o o r ( 9 ) \t \t 0034640 / / Y b o t t o m 376 001 \0 9 366 \r 0034660 \r \t \t S C V T r a n s f o r m F 0034700 ( l v s > > S p l i n e W i d 0034720 t h . X R , l v s > > S p l i 0034740 n e W i d t h . Y T ) \r \t \t l e 0034760 t y h = F l o o r ( 9 ) \r \r / 0035000 / N o w s w a p y b o t t o 0035020 m a n d y h e i g h t i f 0035040 i n v e r t e d ( w i l l 0035060 h a p p e n i f c h a r a c 0035100 t e r i s r o t a t e d ) . 0035120 \r \t \t i f y b g r y h t 0035140 h e n [ l e t t = y b ; 0035160 y b = y h ; y h = t ] \r \t \t 0035200 y h = y h - y b + 1 \r \r / / A n 0035220 d s a m e f o r x , b u 0035240 t ( 1 ) c h e c k f o r 376 0035260 001 \0 221 225 e m p t y c h a r a 0035300 c t e r , a n d ( 2 ) \r / / 0035320 i n s c a n d i r e c t i 0035340 o n , t h i n g s a r e a 0035360 s s y m e t r i c , b e c a u 0035400 s e o f t h e k i n d o 0035420 f \r / / s c a n c o n v e r 0035440 s i o n w e a r e d o i n 0035460 g . \r \r \t \t l e t x l , x w 0035500 = n i l , n i l \r \t \t l e t s 0035520 g = F C M ( 1 , 8 ) \r \t \t s w i 0035540 t c h o n s g i n t o \r \t \t 0035560 [ \r \t \t c a s e 0 : \t 0035600 x l = 0 ; x w = 0 ; y b = 0 0035620 ; y h = 0 \t / / C h a r a c t 0035640 e r i s e m p t y \r \t \t 0035660 e n 376 001 \0 354 222 d c a s e \r \t 0035700 \t c a s e 1 : \t F L D ( 2 0035720 , 1 ) ; F L D ( 1 , 8 ) ; F L D 0035740 ( 8 , 2 ) / / S w a p - - 0035760 a c 1 < a c 8 \r \t \t 0036000 c a s e - 1 : \t x l = F l o o 0036020 r ( 1 ) + 1 \t \t / / A s s y m e 0036040 t r y \r \t \t x w = F l o 0036060 o r ( 8 ) - x l + 1 \r \t \t 0036100 e n d c a s e \r \t \t ] \r \t 0036120 \t c > > C h a r W i d t h . X L 0036140 = x l \r \t \t c > > C h a r W i d 0036160 t h . Y B = y b \r \t \t c > > C h 0036200 a r W i d t h . H = y h \r \t \t c 0036220 > > C h a r W i d t h . W = x w 0036240 \r \r \t \t i f p > > C o n v e r 0036260 t . S p l i n e O 376 001 \0 \r 306 k 0036300 & S p l i n e N e e d e d ( c 0036320 , 1 ) t h e n \r \t \t \t [ \r \t \t 0036340 \t c > > C h a r W i d t h . H = 0036360 H S p l i n e C o d e \r \t \t \t s 0036400 p l i n e = t r u e \r \t \t \t ] \r 0036420 \t \t ] / / e n d o f " t e 0036440 s t B B G o o d " \r \t 0036460 o r / / r o t a t e d , c a 0036500 n ' t g e t b o u n d i n g 0036520 b o x , B U T : w e c a 0036540 n t e l l i f i t l o o 0036560 k s l i k e \r \t \t / / s p l i 0036600 n e s a r e n e e d e d ( 0036620 s i n c e D P W X , W Y a 0036640 r e c o m p u t e d a l r e 0036660 a d y ) \r \t \t [ i f ( ( 376 001 0036700 \0 322 261 l v c > > C h a r W i d 0036720 t h . W X ) ! 0 g r 5 0 ) % 0036740 \r \t \t \t ( ( l v c > > C h a r 0036760 W i d t h . W Y ) ! 0 g r 5 0037000 0 ) t h e n s p l i n e = t 0037020 r u e \r \t \t ] \r \t ] / / 0037040 e n d o f g o o d c h a r 0037060 a c t e r \r \t r e s u l t i s 0037100 s p l i n e \r ] \r \r a n d \r \r C 0037120 o n v e r t A C h a r ( w , w o 0037140 , p c , p , F S G e t , F S P u 0037160 t ) = v a l o f [ \r \r / / 0037200 A s s u m e w p o s i t i o 0037220 n e d a t s p l i n e , w 0037240 o p o s i t i o n e d t o 0037260 r e c e i v e i t . \r / / p 0037300 c - 376 001 \0 266 ' > C h a r W i 0037320 d t h s t r u c t u r e t o 0037340 r e c e i v e r e s u l t s 0037360 ( b o u n d i n g b o x o 0037400 n l y ) \r / / p - > C o 0037420 n v e r t s t r u c t u r e 0037440 t h a t g o v e r n s h o w 0037460 t h i n g s a r e d o n e 0037500 . \r \r \t l e t o r i g i n a l 0037520 l e n = 3 2 0 0 0 \t \t / / G e n 0037540 e r o u s e s t i m a t e ! \r 0037560 \t i f p > > C o n v e r t . P 0037600 r e s s F o n t P a r t t h e 0037620 n o r i g i n a l l e n = p > 0037640 > C o n v e r t . L e n \r \r \t S 0037660 C V I n i t ( F S G e t , F S P 0037700 u t ) \r \t S C V 376 001 \0 006 \r B e g 0037720 i n O b j e c t ( n o t p > > 0037740 C o n v e r t . M o n o t o n e 0037760 , p > > C o n v e r t . M o n o 0040000 t o n e ) \r \r \t l e t o p o s 0040020 = v e c 3 \t \t \t / / R e m e m 0040040 b e r o l d p o s f o r 0040060 s p l i n e \r \t W i n d o w G e 0040100 t P o s i t i o n ( w , o p o s 0040120 ) \r \t W i n d o w G e t P o s i 0040140 t i o n ( w o , o p o s + 2 ) \r 0040160 \r \t l e t s t u f f = v e c 0040200 1 2 \r \t l e t l e n = o r i g 0040220 i n a l l e n \r \r [ \t i f l e 0040240 n l e 0 t h e n b r e a 0040260 k \r \t l e t o p = W i n d o w 0040300 R e a d ( w ) \r \t s w i t 376 001 \0 0040320 y t c h o n o p i n t o [ 0040340 \r \r \t c a s e D S p l i n e F 0040360 o n t M o v e T o : \t \t \t / / M 0040400 o v e T o \r \t \t W i n d o w R e 0040420 a d B l o c k ( w , s t u f f , 0040440 4 ) \r \t \t S C V M o v e T o F ( 0040460 s t u f f , s t u f f + 2 ) \r \t 0040500 \t l e n = l e n - 5 \r \t \t e n d 0040520 c a s e ; \r \t c a s e D S p l 0040540 i n e F o n t D r a w T o : \t \t 0040560 \t / / D r a w T o \r \t \t W i n d 0040600 o w R e a d B l o c k ( w , s t 0040620 u f f , 4 ) \r \t \t S C V D r a w 0040640 T o F ( s t u f f , s t u f f + 0040660 2 ) \r \t \t l e n = l e n - 5 \r \t 0040700 \t e n d c a s e ; \r \t c a s e 0040720 D S 376 001 \0 022 235 p l i n e F o n t 0040740 D r a w C u r v e : \t \t \t / / D 0040760 r a w C u r v e \r \t \t W i n d o 0041000 w R e a d B l o c k ( w , s t u 0041020 f f , 1 2 ) \r \t \t S C V D r a w 0041040 C u r v e ( s t u f f , s t u f 0041060 f + 2 , s t u f f + 4 , s t u f 0041100 f + 6 , \r \t \t \t \t s t u f f + 8 0041120 , s t u f f + 1 0 ) \r \t \t l e n 0041140 = l e n - 1 3 \r \t \t e n d c a s 0041160 e ; \r \t c a s e D S p l i n e 0041200 F o n t E n d O b j e c t s : 0041220 \t \t / / E n d \r \t \t b r e a k \r 0041240 \t \t e n d c a s e \r \t d e f a u 0041260 l t : \t r e s u l t i s 1 0 \t 0041300 \t \t / / I l l e g a l f i l e 0041320 f o r m a t 376 001 \0 - 273 \r \t ] \r 0041340 ] r e p e a t \r \r \t l e t v 0041360 = v e c ( s i z e S C V / 1 0041400 6 ) \r \t S C V E n d O b j e c t 0041420 ( v ) \t \t \t \t / / F i n i s h 0041440 o f f \r \t i f v > > S C V . E 0041460 r r o r t h e n [ \t \t / / E 0041500 r r o r - - r e t u r n c 0041520 o d e \r \t \t \t S C V F l u s h ( 0041540 v ) \r \t \t \t r e s u l t i s v 0041560 > > S C V . E r r o r \r \t \t \t ] 0041600 \r \r / / C o m p u t e o f f s 0041620 e t s ( o x , o y ) , w i d 0041640 t h ( n s ) a n d h e i g 0041660 h t ( n b ) \r \t l e t n s , 0041700 n b = n i l , n i l \r \t l e t 0041720 o x = v > > S C V . S m 376 001 \0 ' 0041740 U i n \r \t t e s t o x g r 0041760 v > > S C V . S m a x t h e n 0042000 [ o x = 0 ; n s = 0 ] o 0042020 r \r \t \t n s = v > > S C V . S m 0042040 a x - o x + 1 \r \t l e t o y = 0042060 v > > S C V . R m i n \r \t t e s 0042100 t o y g r v > > S C V . R 0042120 m a x t h e n [ o y = 0 ; 0042140 n b = 0 ] o r \r \t \t n b = v 0042160 > > S C V . R m a x - o y + 1 \r 0042200 \r \t i f p > > C o n v e r t . 0042220 P r e s s F o n t P a r t t h 0042240 e n \r \t \t [ \r \t \t i f l e n 0042260 n e 0 t h e n \r \t \t \t [ \r \t 0042300 \t \t S C V F l u s h ( v ) \r \t \t 0042320 \t r e s u l t i s 1 1 \r \t \t \t 0042340 ] 376 001 \0 % Q \r \t \t S C V T r a 0042360 n s f o r m F ( s t u f f , s t 0042400 u f f + 2 ) \t / / U s e l a s 0042420 t M O V E T O \r \t \t F S T D P 0042440 ( 8 , l v p c > > C h a r W i 0042460 d t h . W X ) \t / / t o c o 0042500 m p u t e w i d t h s \r \t \t F 0042520 S T D P ( 9 , l v p c > > C h 0042540 a r W i d t h . W Y ) \r \t \t ] \r 0042560 / / S a l t a w a y g o o d 0042600 i e s i n t h e s t r u c 0042620 t u r e \r \t p c > > C h a r W i 0042640 d t h . X L = o x \r \t p c > > C 0042660 h a r W i d t h . Y B = o y \r \t 0042700 p c > > C h a r W i d t h . W = 0042720 n s \r \t p c > > C h a r W i d t 0042740 h . H = n b 376 001 \0 320 363 \r \r / / f 0042760 i g u r e o u t h o w m u 0043000 c h s p a c e n e e d e d : 0043020 i f n o t e n o u g h , 0043040 u s e s p l i n e s \r u 0043060 n l e s s c o n v e r t O r b 0043100 i t i z e d d o n b = ( n b 0043120 + 1 5 ) & # 1 7 7 7 6 0 \r 0043140 l e t b i t s N e e d e d = v 0043160 e c 1 \r \t M u l F u l l ( n s 0043200 , n b , b i t s N e e d e d ) \r 0043220 \t D o u b l e A d d V ( b i t s 0043240 N e e d e d , 1 5 ) \t / / t a k 0043260 e c a r e o f o d d b i 0043300 t l e n g t h s \r \t l e t s 0043320 i z e N e e d e d = D i v F u l 0043340 l ( b i t s N e e d e 376 001 \0 215 210 0043360 d , 1 6 ) + 1 \t / / a d d f u 0043400 d g e f o r f i n a l t e 0043420 m p P B i t s ! 1 \r \t l e t p 0043440 b i t s = F S G e t ( s i z e N 0043460 e e d e d ) \r \r / / N o w d e 0043500 c i d e i f s p l i n e s 0043520 n e e d e d . \r \t t e s t p > 0043540 > C o n v e r t . S p l i n e O 0043560 k & ( ( p b i t s e q 0 ) % 0043600 S p l i n e N e e d e d ( p c ) 0043620 ) t h e n \r \t [ u n l e s s 0043640 p b i t s e q 0 d o F 0043660 S P u t ( p b i t s ) \r \t W 0043700 i n d o w S e t P o s i t i o n 0043720 ( w , o p o s ) \t / / R e s t a 0043740 r t \r \t S C V F l u s h ( v 0043760 376 001 \0 370 233 ) \t \t / / R e l e a s 0044000 e a n y s t o r a g e \r \t 0044020 r e s u l t i s 4 \t / / r e 0044040 t u r n e r r o r , s o t 0044060 h a t c a l l e r w i l l 0044100 c a l l S c a l e A C h a r \r 0044120 \t ] \r o r \r \t [ \t \t \t \t / / C a 0044140 n c o n v e r t O K \r \r / / 0044160 T h e c h a r a c t e r c a 0044200 n b e c o n v e r t e d i 0044220 n t o a b i t m a t r i x 0044240 , a n d s t o r e d i n \r 0044260 / / t h e c h a r a c t e r 0044300 d e f i n i t i o n f i l e 0044320 a s s u c h . \r \r \t l e t 0044340 s l = v e c 2 \r t e s t 0044360 c o n v 376 001 \0 035 l e r t O r b 0044400 i t i z e d t h e n \r \t [ \t 0044420 s l ! 0 = - n b \t / / h e i g h 0044440 t \r \t \t s l ! 1 = n s - 1 \t / / 0044460 w i d t h \r \t \t W i n d o w W r 0044500 i t e B l o c k ( w o , s l , 2 0044520 ) \r \t ] \r \t o r \r \t [ s l 0044540 < < F H E A D . h w = n b r s 0044560 h i f t 4 \r \t \t s l < < F H E 0044600 A D . n s = n s \t \t \t / / M a k 0044620 e u p f o n t h e a d e r 0044640 \r \t \t W i n d o w W r i t e ( w 0044660 o , s l ) \r \t ] \r \r \t i f s 0044700 i z e N e e d e d e q 1 t 0044720 h e n [ F S P u t ( p b i t 0044740 s ) ; r e s u l t i s 0 ] / 0044760 / n u l l c h a r 376 001 \0 023 $ a 0045000 c t e r \r \r \t l e t M a s k s 0045020 = t a b l e [ \r \t \t # 1 7 7 0045040 7 7 7 ; # 0 7 7 7 7 7 ; # 0 0045060 3 7 7 7 7 ; # 0 1 7 7 7 7 ; 0045100 # 0 0 7 7 7 7 ; \r \t \t # 0 0 3 7 0045120 7 7 ; # 0 0 1 7 7 7 ; # 0 0 0045140 0 7 7 7 ; # 0 0 0 3 7 7 ; # 0045160 0 0 0 1 7 7 ; \r \t \t # 0 0 0 0 7 0045200 7 ; # 0 0 0 0 3 7 ; # 0 0 0 0045220 0 1 7 ; # 0 0 0 0 0 7 ; # 0 0045240 0 0 0 0 3 ; \r \t \t # 0 0 0 0 0 1 0045260 ; # 0 0 0 0 0 0 ] \r \r \t l e 0045300 t C y c l e = t a b l e [ 0045320 # 6 0 0 0 0 ; # 1 4 0 1 ] \r \t l 0045340 e t C M a s k s = \r \t t a b l 0045360 e [ \t # 1 7 7 7 7 7 ; # 1 7 376 0045400 001 \0 312 q 7 7 7 6 ; # 1 7 7 7 7 4 0045420 \r \t \t # 1 7 7 7 7 0 ; # 1 7 7 7 0045440 6 0 ; # 1 7 7 7 4 0 \r \t \t # 1 7 0045460 7 7 0 0 ; # 1 7 7 6 0 0 ; # 1 7 0045500 7 4 0 0 \r \t \t # 1 7 7 0 0 0 ; # 0045520 1 7 6 0 0 0 ; # 1 7 4 0 0 0 \r \t 0045540 \t # 1 7 0 0 0 0 ; # 1 6 0 0 0 0 0045560 ; # 1 4 0 0 0 0 \r \t \t # 1 0 0 0 0045600 0 0 ; 0 \r \t ] \r \r \t l 0045620 e t s l b u f = v e c 1 0 0 0045640 \t \t / / F o r m a k i n g u 0045660 p s c a n l i n e s \r \t Z e 0045700 r o ( s l b u f , 1 0 0 ) \r \t \r 0045720 / / P r e p a r e t o c a l 0045740 l S C V R e a d R u n s t o 0045760 o b t a i n a l l r u n s 0046000 u n t 376 001 \0 265 203 i l t h e 0046020 c h a r a c t e r \r / / e x h 0046040 a u s t s . \r \r \t l e t h w = 0046060 ( n b + 1 5 ) / 1 6 \r \t l e t 0046100 o b = 0 \r \t l e t t e m p P B 0046120 i t s = p b i t s \r \t l e t b 0046140 u f = v e c 1 0 0 0 \r \t l e t 0046160 s l = v > > S C V . S m i n \r 0046200 \t v > > S C V . S e n d = s l - 0046220 1 \r [ \t v > > S C V . S b e g i 0046240 n = v > > S C V . S e n d + 1 \t 0046260 / / M o v e r i g h t \r \t v > 0046300 > S C V . S e n d = v > > S C V 0046320 . S m a x \t \t / / O p t i m i s 0046340 t i c \r \t S C V R e a d R u n s 0046360 ( v , b u f , 1 0 0 0 ) \r \t l e 0046400 t n = v > > S C 376 001 \0 _ 362 V . 0046420 I n t C n t \r \t i f n e q 0046440 0 t h e n b r e a k \t \t / / 0046460 N o m o r e i n t e r s e c 0046500 t i o n s \r \t l e t p = v > > 0046520 S C V . I n t P t r \r \r \t f o r 0046540 i = 1 t o n b y 2 d 0046560 o \r \t \t [ \r \t \t w h i l e s l 0046600 n e p ! 0 d o \t / / G o i 0046620 n g t o n e w s c a n l 0046640 i n e . \r \t \t \t [ \r \t \t \t l e t 0046660 l e f t M a s k = C M a s k s 0046700 ! ( 1 6 - o b ) \r \t \t \t l e t 0046720 r i g h t M a s k = n o t l e 0046740 f t M a s k \r \t \t \t f o r j = 0046760 0 t o h w - 1 d o \r \t \t \t 0047000 [ l e t w = C y c l e 376 001 0047020 \0 352 N ( s l b u f ! j , 1 6 - o 0047040 b ) \r \t \t \t t e m p P B i 0047060 t s ! 0 = ( t e m p P B i t s ! 0047100 0 & ( n o t M a s k s ! o b ) 0047120 ) + ( w & r i g h t M a s k ) \r 0047140 \t \t \t t e m p P B i t s ! 0047160 1 = ( t e m p P B i t s ! 1 & ( 0047200 M a s k s ! o b ) ) + ( w & l e 0047220 f t M a s k ) \r \t \t \t t e 0047240 m p P B i t s = t e m p P B i t 0047260 s + 1 \r \t \t \t ] / / e n d 0047300 o f " f o r j " \r \t \t \t o b 0047320 = o b + n b \r \t \t \t t e m p P B 0047340 i t s = t e m p P B i t s - h w 0047360 + o b / 1 6 \r \t \t \t o b = o b & 0047400 # 1 7 \r \t \t \t Z e r o ( s l b u 0047420 f , h 376 001 \0 346 346 w ) \r \t \t \t s l 0047440 = s l + 1 \r \t \t \t ] / / e n d 0047460 o f " w h i l e s l " \r \t 0047500 \t i f p ! 2 n e s l t h 0047520 e n r e s u l t i s 1 2 \r \t 0047540 \t l e t y b = p ! 1 - o y \t \t 0047560 \t / / B o t t o m y \r \t \t l e 0047600 t y t = p ! 3 - o y + ( c o n 0047620 v e r t T h i c k e n ? 1 , 0 0047640 ) \t \t / / T o p y + 1 \r \t \t p 0047660 = p + 4 \t \t \t / / B u m p t o 0047700 n e x t i n t e r s e c t i 0047720 o n \r \r / / T u r n o n b 0047740 i t s f r o m y b t o y 0047760 t - 1 ( i n c l u s i v e ) \r 0050000 \t \t i f y b l s 0 % y 0050020 t g r n b 376 001 \0 p 332 t h e 0050040 n r e s u l t i s 1 3 \r \t \t 0050060 i f y t g e y b t h e n 0050100 \t \t / / O n l y s h o w n o 0050120 n - z e r o r u n s \r \t \t [ \r 0050140 \t \t l e t L e f t M a s k = ( 0050160 M a s k s ! ( y b & # 1 7 ) ) \r 0050200 \t \t l e t R i g h t M a s k = 0050220 n o t ( M a s k s ! ( y t & 0050240 # 1 7 ) ) \r \t \t y b = y b r s 0050260 h i f t 4 \r \t \t l e t w c = 0050300 ( y t r s h i f t 4 ) - y b 0050320 \t / / W o r d c o u n t \r \t \t 0050340 l e t w = s l b u f + y b \t \t 0050360 / / W o r d a d d r e s s \r \t 0050400 \t l e t b w = ( @ w & ( n 0050420 o t L e f t M a s k ) ) 376 001 \0 0050440 T 334 % ( - 1 & L e f t M a s 0050460 k ) \r \t \t f o r i = 0 t o 0050500 w c - 1 d o \r \t \t \t [ w ! i 0050520 = b w ; b w = - 1 ] \r \t \t w 0050540 ! w c = ( w ! w c & ( n o t 0050560 R i g h t M a s k ) ) % ( b w 0050600 & R i g h t M a s k ) \r \t \t 0050620 ] / / e n d o f " i f y 0050640 t g e y b " \r \t \t ] / / e 0050660 n d o f " f o r i " \r \r ] 0050700 r e p e a t \r \r \t / / a n d 0050720 f i n i s h p u t t i n g o 0050740 u t t h e l a s t l i n e 0050760 . . . \r \t l e t l e f t M a s 0051000 k = C M a s k s ! ( 1 6 - o b ) 0051020 \r \t l e t r i g h t M a s k = 0051040 n o 376 001 \0 O 211 t l e f t M a s 0051060 k \r \t f o r j = 0 t o h w 0051100 - 1 d o \r \t [ l e t w = 0051120 C y c l e ( s l b u f ! j , 1 6 0051140 - o b ) \r \t t e m p P B i 0051160 t s ! 0 = ( t e m p P B i t s ! 0051200 0 & ( n o t M a s k s ! o b ) 0051220 ) + ( w & r i g h t M a s k ) \r 0051240 \t t e m p P B i t s ! 1 = 0051260 ( t e m p P B i t s ! 1 & ( M a 0051300 s k s ! o b ) ) + ( w & l e f t 0051320 M a s k ) \r \t t e m p P B 0051340 i t s = t e m p P B i t s + 1 \r 0051360 \t ] \r \t W i n d o w W r i t e 0051400 B l o c k ( w o , p b i t s , s 0051420 i z e N e e d e d ) \t / / L a s 0051440 t l i n e . 376 001 \0 273 ' . . . \r 0051460 \t F S P u t ( p b i t s ) \r \t i 0051500 f s l n e v > > S C V . S 0051520 m a x t h e n r e s u l t i 0051540 s 1 4 \r \t ] / / e n d o f 0051560 d o i n g s c a n c o n v 0051600 e r s i o n \r \r \t r e s u l t i 0051620 s 0 \r ] \r \r / / T h e c h a 0051640 r a c t e r w i l l o c c u 0051660 p y t o o m u c h s p a c 0051700 e i f s c a n - c o n v e r 0051720 t e d a n d \r / / s a v e d 0051740 i n a c h a r a c t e r 0051760 f i l e a s b i t s . W 0052000 e r e t u r n a n e r r o 0052020 r c o d e , a n d \r / / t 0052040 h e c a l l i n g p 376 001 \0 | 0052060 264 r o g r a m w i l l h a v 0052100 e t h e s m a r t s t o 0052120 c a l l S c a l e A C h a r , 0052140 \r / / w h i c h w i l l s 0052160 i m p l y s c a l e t h e 0052200 s p l i n e d e f i n i t i o 0052220 n , \r / / a n d p l a c e 0052240 i t i n t h e c h a r a c 0052260 t e r f i l e . I n a d 0052300 d i t i o n , \r / / t h e C 0052320 h a r W i d t h . H e n t r y 0052340 i s c h a n g e d t o h 0052360 a v e a s p e c i a l c o 0052400 d e t h a t \r / / i n d i c 0052420 a t e s t h i s c h a r a c 0052440 t e r i s d e s c r i b e d 0052460 376 001 \0 322 220 b y s p l i n e s 0052500 , a n d X L a n d Y B \r 0052520 / / h a v e i n t h e m 0052540 t h e f i l e p o s i t i o 0052560 n o f t h e s p l i n e 0052600 e n c o d i n g . \r a n d S c 0052620 a l e A C h a r ( w , w o , p c 0052640 ) = v a l o f \r [ W i 0052660 n d o w G e t P o s i t i o n ( 0052700 w o , l v p c > > C h a r W i 0052720 d t h . X L ) \t / / S a v e p 0052740 o s i n X L , Y B \r p 0052760 c > > C h a r W i d t h . H = H 0053000 S p l i n e C o d e \r l e 0053020 t o u t L e n = 0 \r l e 0053040 t s t u f f = v e c 1 3 \r \r 0053060 \t [ \t l e t 376 001 \0 030 350 o p = W 0053100 i n d o w R e a d ( w ) \r \t \t s 0053120 t u f f ! 0 = o p - 1 \t / / G A 0053140 A A A A A A ! ! ! P r e O b j 0053160 e c t s u s e s d i f f e r 0053200 e n t c o d e s ! ! ! ! \r \t \t 0053220 s w i t c h o n o p i n t o 0053240 \r \t \t [ \r \t \t c a s e D S p l 0053260 i n e F o n t M o v e T o : \r \t 0053300 \t c a s e D S p l i n e F o n 0053320 t D r a w T o : \r \t \t \t W i n d 0053340 o w R e a d B l o c k ( w , s t 0053360 u f f + 1 , 4 ) \r \t \t \t S C V T 0053400 r a n s f o r m F ( s t u f f + 0053420 1 , s t u f f + 3 ) \r \t \t \t s t 0053440 u f f ! 1 = F T R ( 8 ) ; s t u 0053460 f f ! 2 = F T R ( 9 ) 376 001 \0 ; : 0053500 \r \t \t \t W i n d o w W r i t e B 0053520 l o c k ( w o , s t u f f , 3 ) 0053540 \r \t \t \t o u t L e n = o u t L e 0053560 n + 3 \r \t \t \t e n d c a s e \r \t 0053600 \t c a s e D S p l i n e F o n 0053620 t D r a w C u r v e : \r \t \t \t 0053640 W i n d o w R e a d B l o c k ( 0053660 w , s t u f f + 1 , 1 2 ) \r \t \t 0053700 \t f o r p = 1 t o 1 2 b 0053720 y 4 d o \r \t \t \t [ \r \t \t \t 0053740 S C V T r a n s f o r m F ( s t 0053760 u f f + p , s t u f f + p + 2 ) 0054000 \r \t \t \t F S T ( 8 , s t u f f + 0054020 p ) \r \t \t \t F S T ( 9 , s t u f 0054040 f + p + 2 ) \r \t \t \t ] \r \t \t \t W 0054060 i n d o w W r i t e B l o c k ( 0054100 376 001 \0 353 8 w o , s t u f f , 1 3 0054120 ) \r \t \t \t o u t L e n = o u t L 0054140 e n + 1 3 \r \t \t \t e n d c a s e 0054160 \r \t \t c a s e D S p l i n e F 0054200 o n t N e w O b j e c t : \r \t \t 0054220 c a s e D S p l i n e F o n t 0054240 E n d O b j e c t s : \r \t \t \t 0054260 b r e a k / / d o n e \r \t \t ] 0054300 / / e n d o f " s w i t c h 0054320 o n o p " \r \t ] r e p e a t 0054340 \r \t \t p c > > C h a r W i d t h 0054360 . W = o u t L e n \r r e s 0054400 u l t i s 0 / / n o e r r 0054420 o r s \r ] \r \r a n d \r \r / / S 0054440 e t u p t h e S C V t r 0054460 a n s f o r m a t i o n m a t 0054500 r i x f 376 001 \0 254 305 r o m p a 0054520 r a m e t e r s t h a t a r 0054540 e \r / / s u p p l i e d f o 0054560 r c o n v e r t i n g a f 0054600 o n t : \r / / s i z \t \t S i z 0054620 e o f t h e f o n t i n 0054640 m i c a s \r / / r o t a t i 0054660 o n \t R o t a t i o n o f t 0054700 h e f o n t i n m i n u t 0054720 e s \r / / i n c l i n e \t I n 0054740 c l i n e o f t h e f o n 0054760 t i n p e r c e n t \r / / 0055000 r e s x , r e s y \t R e s o l u 0055020 t i o n o f t h e o u t p 0055040 u t d e v i c e \r / / \t \t ( i 0055060 f n o t s u p p l i e d , 0055100 F P A C ' s 3 & 4 376 001 \0 T 371 0055120 a s s u m e d s e t u p ) \r 0055140 \r S e t S C V T r a n s f o r m 0055160 ( s i z , r o t a t i o n , i n 0055200 c l i n e , r e s x , r e s y ; 0055220 n u m a r g s n ) b e \r 0055240 [ \t F L D I ( 5 , 2 5 4 0 ) 0055260 ; \r \t F L D I ( 1 , s i z ) ; 0055300 F L D I ( 2 , s i z ) \r \t i f 0055320 n g r 3 t h e n [ F L 0055340 D I ( 3 , r e s x ) ; F L D I 0055360 ( 4 , r e s y ) ] \r \t F M L ( 0055400 1 , 3 ) ; F M L ( 2 , 4 ) \r \t 0055420 F D V ( 1 , 5 ) ; F D V ( 2 , 0055440 5 ) \t \t / / x a n d y s c 0055460 a l e s . \r \t t e s t r o t a 0055500 t i o n n e 0 t h e n \r 376 0055520 001 \0 z 354 \t \t [ \t \t \t / / G e t 0055540 s i n e a n d c o s i n e \r 0055560 \t \t G e t F l o a t i n g C o s 0055600 ( r o t a t i o n , 3 ) \r \t \t G 0055620 e t F l o a t i n g C o s ( r o 0055640 t a t i o n - 9 0 * 6 0 , 4 ) \r 0055660 \t \t ] \r \t o r \r \t \t [ \r \t \t F 0055700 L D I ( 3 , 1 ) ; F L D I ( 4 0055720 , 0 ) \r \t \t ] \r \t F L D ( 5 , 3 0055740 ) ; F M L ( 5 , 1 ) \t \t / / m 0055760 [ 1 , 1 ] \r \t F L D ( 6 , 4 ) ; 0056000 F M L ( 6 , 1 ) \t \t / / m [ 1 0056020 , 2 ] \r \t F N E G ( 4 ) \r \t F L 0056040 D I ( 7 , i n c l i n e ) ; F L 0056060 D I ( 0 , 1 0 0 ) ; F D V ( 7 , 0056100 0 ) \r \t F M L ( 7 , 3 ) ; F A D 0056120 ( 4 , 7 376 001 \0 310 233 ) ; F M L ( 4 0056140 , 2 ) \t / / m [ 2 , 1 ] \r \t F M 0056160 L ( 3 , 2 ) \t \t \t / / m [ 2 , 2 0056200 ] \r \t S C V M a t r i x ( 5 , 6 0056220 , 4 , 3 ) \r ] \r \r a n d \r \r \f / 0056240 / R e t u r n f l o a t i n g 0056260 c o s i n e i n a c . A 0056300 r g u m e n t i s m i n u t 0056320 e s o f a r c . \r \r G e t F 0056340 l o a t i n g C o s ( m i n , a 0056360 c ) b e [ \r \t l e t v = v 0056400 e c 4 \r \t v ! 1 = 0 \t \t \t / / 0056420 E x p o n e n t \r \t v ! 3 = 0 \t 0056440 \t \t / / L o w m a n t i s s a 0056460 \r \t l e t o n e = t a b l e 0056500 [ 0 ; 0 ; # 1 7 7 7 7 7 ; 0 0056520 ] / / N o r m a 376 001 \0 361 341 l i 0056540 z a t i o n c o n s t a n t \r 0056560 \r \t C o s ( m i n , v , v + 2 ) 0056600 \r / / N o w n o r m a l i z 0056620 e t h e n u m b e r \r \t i f 0056640 v ! 2 t h e n \r \t w 0056660 h i l e ( ( v ! 2 ) & # 1 0 0 0056700 0 0 0 ) e q 0 d o [ v 0056720 ! 2 = v ! 2 l s h i f t 1 ; 0056740 v ! 1 = v ! 1 - 1 ] \r \t F L 0056760 D V ( a c , v ) \r \t F L D V ( 0 0057000 , o n e ) \r \t F D V ( a c , 0 ) 0057020 \r ] \r \r a n d \r \r C o s ( t h e 0057040 t a , l v s i g n , l v m a g ) 0057060 b e [ \r / / C a l c u l a t 0057100 e t h e c o s i n e o f 0057120 t h e g i v e n a n g l 376 001 0057140 \0 264 ] e , a n d r e t u r n 0057160 t h e \r / / m a g n i t u d 0057200 e a s a f r a c t i o n 0057220 o f # 1 7 7 7 7 7 ( l a r g 0057240 e s t n u m b e r ) \r / / A 0057260 l s o r e t u r n s i g n 0057300 ( 0 i f p o s i t i v e , 0057320 - 1 i f n e g a t i v e ) \r 0057340 \r \t i f t h e t a l s 0 0057360 t h e n t h e t a = - t h e t 0057400 a \r \t @ l v s i g n = - ( ( ( t 0057420 h e t a + 9 0 * 6 0 ) / ( 1 8 0 0057440 * 6 0 ) ) & 1 ) \r \t l e t d = 0057460 t h e t a r e m 9 0 * 6 0 \r 0057500 \t i f ( ( t h e t a / ( 9 0 * 0057520 6 0 ) ) & 1 ) n e 0 t h e 0057540 n d 376 001 \0 " \f = 9 0 * 6 0 - d 0057560 \r \t l e t m i n = d r e m 0057600 6 0 \t \t \t / / M i n u t e s p 0057620 a r t \r \t d = d / 6 0 \t \t \t \t / 0057640 / D e g r e e s p a r t \r / / 0057660 N o w d i n r a n g e 0 0057700 - 9 0 d e g r e e s \r \r \t l e 0057720 t r e t r i e v e c o s ( d , 0057740 m i n ) = v a l o f [ \t / / 0057760 0 l e d l e 4 5 \r \t \t l 0060000 e t c o s a r = t a b l e [ 0060020 \r \t \t # 1 7 7 7 7 7 ; \r \t \t # 1 0060040 7 7 7 6 5 ; # 1 7 7 7 2 7 ; 0060060 # 1 7 7 6 4 5 ; # 1 7 7 5 3 7 0060100 ; # 1 7 7 4 0 5 ; \r \t \t # 1 0060120 7 7 2 2 7 ; # 1 7 7 0 2 6 ; 0060140 # 1 7 6 6 0 1 ; 376 001 \0 2 371 # 1 0060160 7 6 3 3 0 ; # 1 7 6 0 3 3 ; 0060200 \r \t \t # 1 7 5 5 1 2 ; # 1 7 5 0060220 1 4 6 ; # 1 7 4 5 5 7 ; # 1 0060240 7 4 1 4 4 ; # 1 7 3 5 0 5 ; 0060260 \r \t \t # 1 7 3 0 2 4 ; # 1 7 2 0060300 3 1 7 ; # 1 7 1 5 6 7 ; # 1 0060320 7 1 0 1 4 ; # 1 7 0 2 1 6 ; 0060340 \r \t \t # 1 6 7 3 7 6 ; # 1 6 6 0060360 5 3 2 ; # 1 6 5 6 4 5 ; # 1 0060400 6 4 7 3 5 ; # 1 6 4 0 0 2 ; 0060420 \r \t \t # 1 6 3 0 2 6 ; # 1 6 2 0060440 0 3 0 ; # 1 6 1 0 0 7 ; # 1 0060460 5 7 7 4 6 ; # 1 5 6 6 6 2 ; 0060500 \r \t \t # 1 5 5 5 5 6 ; # 1 5 4 0060520 4 3 0 ; # 1 5 3 2 6 2 ; # 1 0060540 5 2 0 7 2 ; # 1 5 0 6 6 376 001 \0 0060560 T 006 3 ; \r \t \t # 1 4 7 4 3 2 ; 0060600 # 1 4 6 1 6 2 ; # 1 4 4 6 7 0060620 2 ; # 1 4 3 3 6 2 ; # 1 4 2 0060640 0 3 2 ; \r \t \t # 1 4 0 4 6 3 ; 0060660 # 1 3 7 0 7 5 ; # 1 3 5 4 7 0060700 1 ; # 1 3 4 0 4 5 ; # 1 3 2 0060720 4 0 5 ; \r \t \t # 1 3 0 7 4 3 ; 0060740 \t / / 4 6 d e g r e e s b e 0060760 c a u s e o f i n t e r p o 0061000 l a t i o n \r \t \t ] \r \r \t \t l e 0061020 t a = c o s a r ! d \t \t / / F 0061040 i r s t a n s w e r \r \t \t i f 0061060 m i n n e 0 t h e n \t / 0061100 / M u s t i n t e r p o l a t 0061120 e \r \t \t [ \r \t \t l e t 0061140 b = c o s a r ! ( d + 1 ) \r \t \t 0061160 376 001 \0 n f a = a - M u l D i 0061200 v ( a - b , m i n , 6 0 ) \t / / 0061220 C a r e f u l a b o u t s i 0061240 g n s \r \t \t ] \r \t \t r e s u 0061260 l t i s a \r \t ] \r \r \t t e s t 0061300 d g r 4 5 t h e n \r \t \t 0061320 [ \t \t \t / / U s e h a l f - a 0061340 n g l e f o r m u l a e \r \t \t 0061360 i f ( d & 1 ) n e 0 t h 0061400 e n m i n = m i n + 6 0 / / 0061420 D i v i d e a n g l e b y 0061440 2 \r \t \t l e t a = r e t r i e 0061460 v e c o s ( d r s h i f t 1 0061500 , m i n r s h i f t 1 ) \r \t 0061520 \t a = M u l D i v ( a , a , # 1 0061540 7 7 7 7 7 ) \t / / c o s ^ 2 ( 0061560 t h e t a / 2 376 001 \0 336 315 ) \r \t \t 0061600 a = a - # 1 0 0 0 0 0 \t \t / / 0061620 c o s ^ 2 - 1 / 2 \r \t \t @ l v 0061640 m a g = a l s h i f t 1 \t / 0061660 / 2 c o s ^ 2 - 1 \r \t \t ] \r 0061700 \t o r \t @ l v m a g = r e t r i 0061720 e v e c o s ( d , m i n ) \r \t \r 0061740 ] \r \r \r a n d \r \r / / R e t u r 0061760 n t r u e i f c h a r a c 0062000 t e r d e s c r i b e d b y 0062020 p c > > C h a r W i d t h . . 0062040 . \r / / w i l l b e t o 0062060 o b i g f o r a s c a n 0062100 - c o n v e r t e d f o r m . 0062120 \r \r S p l i n e N e e d e d ( p 0062140 c , b o u n d F a c t o r ; n u 0062160 m a r g s n a ) = 376 \0 255 ! 0062200 3 v a l o f \r [ \t i f n a e 0062220 q 1 t h e n b o u n d F a 0062240 c t o r = 1 0 \r \t l e t n b w 0062260 = ( p c > > C h a r W i d t h . 0062300 H + 1 5 ) / 1 6 \r \t r e s u l t 0062320 i s ( n b w g r 1 0 * b o 0062340 u n d F a c t o r ) % \r \t \t \t 0062360 ( n b w * p c > > C h a r 0062400 W i d t h . W g r 2 0 0 * b 0062420 o u n d F a c t o r ) \r ] \r \r 032 0062440 ( 1 8 0 0 ) \ 8 2 v 1 5 V \r 377 \0 0062460 \0 C u r s o r . b c p l \0 373 225 + 0062500 q \0 \0 \0 376 001 \0 370 277 / / C U 0062520 R S O R \r / / e r 0062540 r o r s - - \r / / \r / / S t 0062560 u f f t o k e e p a d i 0062600 s p l a y g o i n g i n t 0062620 h e c u r s o r s o y o u 0062640 c a n t e l l s o m e t h 0062660 i n g i s \r / / h a p p e n 0062700 i n g . \r / / \r / / C u r s o r 0062720 C h a r ( c ) - - p u t s 0062740 c h a r a c t e r i n u p p 0062760 e r l e f t - h a n d c o r 0063000 n e r \r / / C u r s o r D i g i 0063020 t ( d ) - - p u t s d i g 0063040 i t i n u p p e r r i g h 0063060 t - h a n d c o r n e r \r / / 0063100 o r C u r s o 376 001 \0 005 > r D 0063120 i g i t ( ) - - i n c r e m 0063140 e n t s i t . \r / / C u r s o 0063160 r T o g g l e ( i ) i = 0 , 1 0063200 , 2 , 3 - - t o g g l e s 0063220 o n e o f 4 r e m a i n i 0063240 n g a r e a s \r / / \r \r / / 0063260 o u t g o i n g p r o c e d u 0063300 r e s \r e x t e r n a l \r \t [ \r 0063320 \t C u r s o r C h a r \r \t C u r 0063340 s o r D i g i t \r \t C u r s o r 0063360 T o g g l e \r \t ] \r \r / / o u 0063400 t g o i n g s t a t i c s \r / 0063420 / e x t e r n a l \r / / \t [ \r / 0063440 / \t ] \r / / s t a t i c \r / / \t 0063460 [ \r / / \t ] \r \r / / i n c o m 0063500 i n g p r o c e d u r e s 376 001 0063520 \0 210 211 \r e x t e r n a l \r \t [ \r 0063540 / / O S \r \t Z e r o \r \t ] \r \r / 0063560 / i n c o m i n g s t a t i 0063600 c s \r / / e x t e r n a l \r / / 0063620 \t [ \r / / \t ] \r \r / / i n t e 0063640 r n a l s t a t i c s \r s t a 0063660 t i c \r \t [ \r \t c u r s o r L a 0063700 s t D i g i t \r \t ] \r \r / / F 0063720 i l e - w i d e s t r u c t u 0063740 r e a n d m a n i f e s t 0063760 d e c l a r a t i o n s . \r \r m 0064000 a n i f e s t [ \r \t c u r s o 0064020 r X = # 4 2 6 \r \t c u r s o r Y 0064040 = # 4 2 7 \r \t c u r s o r B i t 0064060 s = # 4 3 1 \r \t ] \r \r / / P r 0064100 o c e d u r e s \r \r \f l e t C 0064120 u r s 376 001 \0 G 240 o r C h a r ( c 0064140 ) b e \r [ \r Z e r o ( c 0064160 u r s o r B i t s , 1 6 ) \r 0064200 @ c u r s o r X = 3 0 3 - 8 0064220 \r @ c u r s o r Y = 4 0 4 0064240 - 8 \r c u r s o r L a s t 0064260 D i g i t = 0 \r \r C u r s 0064300 o r P u t U p ( c , f a l s e 0064320 ) \r ] \r \r a n d C u r s o r D 0064340 i g i t ( d ; n u m a r g s 0064360 n ) b e \r [ \r i f n 0064400 e q 0 t h e n d = c u r s 0064420 o r L a s t D i g i t + 1 \r 0064440 d = d r e m 1 0 \r c 0064460 u r s o r L a s t D i g i t = d 0064500 \r \r C u r s o r P u t U p 0064520 ( d , t r u e 376 001 \0 303 205 ) \r ] 0064540 \r \r a n d C u r s o r T o g g 0064560 l e ( i , n e w x ; n u m a r g 0064600 s n ) b e \r [ \r l e t 0064620 m a s k = ( i & 1 ) n e 0 0064640 ? # 3 7 7 , # 1 7 7 4 0 0 \r 0064660 l e t b a s e = ( ( i 0064700 g r 1 ) ? 1 2 , 8 ) + c u 0064720 r s o r B i t s \r f o r 0064740 i = 0 t o 3 d o b a s e 0064760 ! i = b a s e ! i x o r m a 0065000 s k \r i f n e q 2 0065020 t h e n @ c u r s o r X = n e 0065040 w x \r ] \r \r a n d C u r s o r 0065060 P u t U p ( c , r i g h t ) 0065100 b e \r [ \r l e t i x = s 0065120 e l e c t o n c i n t 376 001 \0 0065140 [ R o \r \t [ \r \t c a s e $ F : 0065160 4 0 \r \t c a s e $ S : 5 * 0065200 4 \r \t c a s e $ C : 4 4 \r \t 0065220 c a s e $ P : 4 8 \r \t c a s 0065240 e $ K : 5 2 \r \t d e f a u l 0065260 t : c * 4 \r \t ] \r \r l e 0065300 t B M = t a b l e [ \r \t # 1 0065320 7 4 ; # 4 2 1 0 4 ; # 4 2 1 0065340 0 4 ; # 4 2 1 7 4 ; \t / / 0 \r 0065360 \t # 2 0 ; # 3 0 0 2 0 ; # 1 0065400 0 0 2 0 ; # 1 0 1 7 4 ; \t / / 0065420 1 \r \t # 1 7 4 ; # 4 2 0 0 4 ; 0065440 # 4 0 2 0 ; # 2 0 1 7 4 ; \t 0065460 / / 2 \r \t # 1 7 4 ; # 2 0 0 4 0065500 ; # 3 6 0 0 4 ; # 2 1 7 4 ; 0065520 \t / / 3 \r \t # 1 0 4 ; # 4 2 1 0065540 0 4 376 001 \0 Q 205 ; # 7 6 0 0 4 ; 0065560 # 2 0 0 4 ; \t / / 4 \r \t # 1 7 0065600 4 ; # 4 0 1 0 0 ; # 7 6 0 0 0065620 4 ; # 2 1 7 4 ; \t / / 5 , S 0065640 \r \t # 1 7 4 ; # 4 0 1 0 0 ; 0065660 # 7 6 1 0 4 ; # 4 2 1 7 4 ; \t 0065700 / / 6 \r \t # 1 7 4 ; # 2 0 0 4 0065720 ; # 4 0 2 0 ; # 2 0 1 0 0 ; 0065740 \t / / 7 \r \t # 1 7 4 ; # 4 2 1 0065760 0 4 ; # 7 6 1 0 4 ; # 4 2 1 0066000 7 4 ; \t / / 8 \r \t # 1 7 4 ; # 0066020 4 2 1 0 4 ; # 7 6 0 0 4 ; # 0066040 2 1 7 4 ; \t / / 9 \r \t # 1 7 4 ; 0066060 # 4 0 1 0 0 ; # 7 4 1 0 0 ; 0066100 # 4 0 1 0 0 ; \t / / F \r \t # 1 0066120 7 4 ; # 4 0 1 0 0 ; # 4 0 1 0066140 0 0 ; # 4 0 376 001 \0 W 356 1 7 4 ; 0066160 \t / / C \r \t # 1 7 4 ; # 4 2 1 0066200 0 4 ; # 7 6 1 0 0 ; # 4 0 1 0066220 0 0 ; \t / / P \r \t # 1 0 4 ; # 0066240 4 4 1 2 0 ; # 6 0 1 2 0 ; # 0066260 4 4 1 0 4 ; \t / / K \r \t ] \r \r 0066300 l e t m a p = B M + i x \r 0066320 l e t m 1 = ( r i g h t 0066340 n e 0 ) ? # 3 7 7 , # 1 0066360 7 7 4 0 0 \r l e t m 2 = 0066400 m 1 x o r - 1 \r \r f o 0066420 r i = 1 t o 7 d o \r \t [ 0066440 \r \t l e t w = m a p ! ( i / 2 0066460 ) \r \t i f ( i & 1 ) n e 0 0066500 t h e n w = w l s h i f t 0066520 8 \r \t i f r i g h t t h e 0066540 n w = w r s h i f t 376 \0 : 231 0066560 $ 8 \r \t ( c u r s o r B i t s 0066600 - 1 ) ! i = ( ( c u r s o r B i 0066620 t s - 1 ) ! i & m 2 ) % ( w 0066640 & m 1 ) \r \t ] \r ] \r \r 377 \0 \0 F i 0066660 l e s . b c p l \0 373 225 + q \0 \0 \0 0066700 376 001 \0 \a 243 / / F i l e s . b c 0066720 p l - F I L E I 0066740 / O \r \r / / l a s t 0066760 m o d i f i e d b y B u t 0067000 t e r f i e l d , A p r i l 0067020 1 8 , 1 9 8 0 6 : 2 0 P 0067040 M \r / / - F i l e V D A , 0067060 s e t f m a p > > F M . f m a 0067100 p f o r e a c h c a l l 0067120 t o L o o k u p F m a p - 0067140 4 / 1 8 \r / / - F i l e V D 0067160 A , u s e L o o k u p F m a 0067200 p t o g e t n o n - c o n 0067220 s e c u t i v e D A - 4 / 0067240 1 8 \r / / - F i l e D o P a 0067260 g e , u s e F i l e V D A 0067300 t o g e 376 001 \0 342 215 t p a g e 0067320 ' s D A - 4 / 1 8 \r / / 0067340 - F i l e V D A , a d d s 0067360 p e c i a l t r e a t m e n t 0067400 f o r B i t s F i l e - 0067420 4 / 1 7 \r / / - F i l e D o 0067440 P a g e , f i l l I n D A c 0067460 h a n g e h a d n o e f f 0067500 e c t , b u t l e f t i n 0067520 - 3 / 2 7 \r / / - F i l 0067540 e D o P a g e , u s e f i l 0067560 l I n D A f o r n o n f i 0067600 r s t D A s - 3 / 2 6 / 8 0067620 0 \r \r / / e r r o r s 4 0 0 0067640 \r / / \r / / D i s k i / o f 0067660 o r p r e s s 3 1 0 0 P R 0067700 E S S p r i n t e 376 001 \0 # 0 r 0067720 \r / / \r / / A " f i l e " i 0067740 s d e s c r i b e d b y a 0067760 s t r u c t u r e . F i l e 0070000 s m u s t b e i n i t i a 0070020 l i z e d b y t h e \r / / 0070040 u s e r , a s t h e s t r 0070060 u c t u r e c o n t a i n s 0070100 d a t a r e q u i r e d f r 0070120 o m a d i r e c t o r y \r / 0070140 / ( s e e P r e s s I n i t 0070160 f o r i n i t i a l i z a t 0070200 i o n ) \r / / \r / / \r / / F i l 0070220 e S t u f f ( f i l e , d p ) \r 0070240 / / \t R e t u r n s i n d p 0070260 ( d o u b l e p r e c i s i 0070300 o n ) t h e f i l e s i 376 0070320 001 \0 326 261 z e , i n w o r d s 0070340 . \r / / \t R e t u r n s a s 0070360 v a l u e t h e p a g e s 0070400 i z e . \r / / \r / / F i l e V D 0070420 A ( f i l e , p a g e ) \r / / \t 0070440 R e t u r n s v i r t u a l 0070460 d i s k a d d r e s s o f 0070500 t h e g i v e n p a g e o 0070520 f t h e f i l e . \r / / \r / 0070540 / F i l e C h a n g e T y p e ( 0070560 f i l e , f i l e t y p e ) \r / 0070600 / \t C h a n g e s f i l e t 0070620 y p e \r / / \r / / F i l e R e a 0070640 d P a g e ( f i l e , p a g e , 0070660 c o r e a d d r e s s [ , c n t 0070700 [ , l v d o n e f l a g ] ] ) \r 0070720 / / \t R 376 001 \0 320 I e a d s a 0070740 n u m b e r o f p a g e s 0070760 f r o m t h e f i l e . 0071000 " P a g e " s t a r t s n u 0071020 m b e r i n g \r / / \t a t 0 . 0071040 C n t i s t h e n u m 0071060 b e r o f p a g e s t o 0071100 r e a d ; d e f a u l t 1 . 0071120 \r / / \t L v d o n e f l a g , 0071140 i f p r o v i d e d , m e a 0071160 n s t h a t t h e r o u t 0071200 i n e i s n o t t o w a 0071220 i t u n t i l \r / / \t t h e 0071240 t r a n s f e r i s c o m p 0071260 l e t e , b u t s h o u l d 0071300 r e t u r n i m m e d i a t 0071320 e l y , a n d 376 001 \0 9 305 s e 0071340 t \r / / \t @ l v d o n e f l a g 0071360 = t r u e w h e n t h e t 0071400 r a n s f e r c o m p l e t e 0071420 s . \r / / \r / / F i l e W r i t 0071440 e P a g e ( f i l e , p a g e , 0071460 c o r e a d d r e s s [ , c n t 0071500 [ , l v d o n e f l a g ] ] ) \r 0071520 / / \t S i m i l a r , b u t 0071540 f o r w r i t i n g p a g e 0071560 s . \r / / \r / / A n o t e a 0071600 b o u t h o w " f i l e s " 0071620 o n t h e M o d e l 3 1 0071640 a r e r e p r e s e n t e d 0071660 : \r / / S i n c e e v e r y 0071700 f i l e t h a t P R E S S 0071720 p r i n t i n g d e a l 376 001 0071740 \0 m 204 s w i t h i s a n 0071760 i n t e g r a l n u m b e r \r 0072000 / / o f p a g e s l o n g 0072020 , w e c o n f o r m t o 0072040 t h e o p e r a t i n g s y 0072060 s t e m c o n v e n t i o n s 0072100 f o r s u c h \r / / f i l 0072120 e s . T h a t i s : \r / / 0072140 \t - - a l e a d e r p a g 0072160 e \r / / \t - - n u s e f u l 0072200 p a g e s \r / / \t - - a f 0072220 i n a l p a g e w i t h t 0072240 h e " n u m b e r o f c h 0072260 a r s " = 0 \r / / T h e t 0072300 a b l e o f d i s k a d d 0072320 r e s s e s r e c o r d e d 0072340 i n 376 001 \0 f ~ t h e F s t 0072360 r u c t u r e i s f o r \r / 0072400 / a l l t h r e e k i n d 0072420 s . H e n c e t h e r e 0072440 a r e + 1 ' s i n v a r i 0072460 o u s p l a c e s . \r \r \r g e 0072500 t " P r e s s P a r a m s . d 0072520 f " \r g e t " P r e s s I n t 0072540 e r n a l s . d f " \r g e t " 0072560 A l t o F i l e S y s . d " \r g 0072600 e t " D i s k s . d " \r g e t 0072620 " I f s I s f . d " \r \r / / 0072640 o u t g o i n g p r o c e d u 0072660 r e s \r e x t e r n a l \r \t [ \r 0072700 \t F i l e R e a d P a g e \r \t F 0072720 i l e W r i t e P a g e \r \t F i 0072740 l e S t u f f \r 376 001 \0 d , \t F i 0072760 l e C h a n g e T y p e \r \t F i 0073000 l e V D A \r \t ] \r \r / / o u t 0073020 g o i n g s t a t i c s \r / / 0073040 e x t e r n a l \r / / \t [ \r / / 0073060 \t ] \r / / s t a t i c \r / / \t [ 0073100 \r / / \t ] \r \r / / i n c o m i 0073120 n g p r o c e d u r e s \r e x 0073140 t e r n a l \r \t [ \r / / M E T E 0073160 R \r \t M e t e r B l o c k \r \r / 0073200 / P R E S S \r \t D b l S h i f t 0073220 \r \t P r e s s E r r o r \r \r / / 0073240 B F S f o r M o d e l 3 1 0073260 \r \t A c t O n D i s k P a g e s 0073300 \r \r / / I f s I s f \r \t L o o k 0073320 u p F m a p \r \t ] \r \r / / i n 0073340 c o m i n g s t a t i c 376 001 \0 0073360 225 Q s \r e x t e r n a l \r \t [ \r 0073400 \t s y s D i s k \r \t t r i d e n 0073420 t V e c \r \t ] \r \r / / i n t e 0073440 r n a l s t a t i c s \r / / s 0073460 t a t i c \r / / \t [ \r / / \t ] \r 0073500 \r / / F i l e - w i d e s t 0073520 r u c t u r e a n d m a n i 0073540 f e s t d e c l a r a t i o n 0073560 s . \r \r \r / / P r o c e d u r 0073600 e s \r \r l e t F i l e S t u f 0073620 f ( f i l e , l e n g t h ; n 0073640 u m a r g s n ) = v a l o f \r 0073660 [ \r i f n n e 1 0073700 t h e n \r [ \r 0073720 l e n g t h ! 0 = 0 \r 0073740 l e n g t h ! 1 = f i l e 0073760 > > 376 001 \0 274 177 F . P a g e c n t 0074000 \r D b l S h i f t ( 0074020 l e n g t h , - f i l e > > F . 0074040 L o g P a g e s i z e ) \r 0074060 ] \r r e s u l t i s 0074100 f i l e > > F . P a g e s i z e 0074120 \r ] \r \r a n d F i l e C h a 0074140 n g e T y p e ( f i l e , t y p 0074160 e ) b e \r [ \r f i l e 0074200 > > F . T y p e = t y p e \r ] 0074220 \r \r / / - - - - - - - - - - - - 0074240 - - - - - - - - - - - - - - - - * 0074340 \r a n d F i l e V D A ( f i l 0074360 e , p a g e 376 001 \0 342 365 ) = 0074400 v a l o f \r / / - - - - - - - - 0074420 - - - - - - - - - - - - - - - - * 0074520 - - - - \r [ \r l e t p a g e C 0074540 o u n t = n i l ; \r t e s t 0074560 f i l e > > F . N a m e e q 0074600 F I L E B i t s \r i f n 0074620 o t p a g e C o u n t = f 0074640 i l e > > F . P a g e c n t ; \r 0074660 i f s o \r [ \r 0074700 l e t d e v i c e 0074720 = f i l e > > F . D e v i c 0074740 e ; \r l e t d i s 0074760 k = ( d e v i c e 376 001 \0 356 0075000 226 g e D I S K T 8 0 ? t r i 0075020 d e n t V e c ! ( d e v i c e 0075040 - 2 ) , s y s D i s k ) ; \r 0075060 i f d i s k e q 0075100 0 t h e n P r e s s E r r 0075120 o r ( 4 0 1 ) ; \r p 0075140 a g e C o u n t = f i l e > 0075160 > F . P a g e c n t l s h i f 0075200 t ( 1 0 - d i s k > > D S 0075220 K . l n P a g e S i z e ) ; \r 0075240 ] \r i f p a g e g 0075260 e p a g e C o u n t t h e n 0075300 P r e s s E r r o r ( 4 0 3 , 0075320 f i l e > > F . N a m e ) ; \r 0075340 l e t f d a = f i l e > > 0075360 F . D A F i r s t ; \r i f f d 0075400 a 376 001 \0 340 & t h e n r e s u 0075420 l t i s f d a + p a g e ; 0075440 \r l e t f m a p = l v f 0075460 i l e > > F . f m a p ; \r f m a 0075500 p > > F M . f m a p = f m a 0075520 p ; / / a s s u r e t h 0075540 a t f m a p i s c u r r e 0075560 n t \r r e s u l t i s L o o k 0075600 u p F m a p ( f m a p , p a g 0075620 e + 1 ) ; \r ] \r \f \r a n d 0075640 F i l e R e a d P a g e ( f i l 0075660 e , p a g e , c o r e a d d r e 0075700 s s , c n t , l v d o n e f l a 0075720 g ; n u m a r g s n ) b e \r 0075740 [ \r i f f i l e > > F 0075760 . T y p e e q F I L E W O 0076000 t h e n r 376 001 \0 031 320 e t u r n 0076020 \t / / N o n e e d t o r e 0076040 a d \r F i l e D o P a g e 0076060 ( f i l e , p a g e , c o r e a 0076100 d d r e s s , c n t , l v d o n 0076120 e f l a g , n , D C r e a d D ) 0076140 \r ] \r \r a n d F i l e W r i 0076160 t e P a g e ( f i l e , p a g e 0076200 , c o r e a d d r e s s , c n t 0076220 , l v d o n e f l a g ; n u m a 0076240 r g s n ) b e \r [ \r 0076260 i f f i l e > > F . T y p e 0076300 e q F I L E R O t h e n P 0076320 r e s s E r r o r ( 4 0 0 ) \r 0076340 F i l e D o P a g e ( f i l 0076360 e , p a g e , c o r e a d d r e 0076400 s s , c n t , l v d o 376 001 \0 324 327 0076420 n e f l a g , n , D C w r i t e 0076440 D ) \r ] \r \r a n d F i l e D 0076460 o P a g e ( f i l e , p a g e , 0076500 c o r e a d d r e s s , c n t , 0076520 l v d o n e f l a g , n , h o w 0076540 ) b e \r [ \r i f n 0076560 l s 4 t h e n c n t = 1 \r 0076600 l e t f l g = n i l \r 0076620 i f n l s 5 t h e n 0076640 l v d o n e f l a g = l v f 0076660 l g \r c o m p i l e i f 0076700 M e t e r S w t h e n \r 0076720 [ \r l e t b = 0076740 v e c ( s i z e F L S t a t 0076760 / 1 6 ) \r b > > F L 0077000 S t a t . F i l e = f i l e > > 0077020 376 001 \0 355 ? F . N a m e \r 0077040 b > > F L S t a t . C n t = 0077060 c n t \r b > > F L S 0077100 t a t . P a g e = p a g e \r 0077120 M e t e r B l o c k ( 0077140 ( ( h o w e q D C r e a d D 0077160 ) ? M E T E R R e a d , M E T 0077200 E R W r i t e ) , \r \t b , s i z 0077220 e F L S t a t / 1 6 ) \r 0077240 ] \r \r \t l e t d e v = f i 0077260 l e > > F . D e v i c e \r 0077300 l e t d i s k = ( d e v g e 0077320 D I S K T 8 0 ) ? ( t r i d 0077340 e n t V e c ! ( d e v - 2 ) ) , 0077360 s y s D i s k \r \t i f d e v 0077400 e q D I S K 3 1 B t h e n 0077420 s y s D 376 001 \0 263 1 i s k > > D 0077440 S K . d r i v e N u m b e r = 1 0077460 \r i f d i s k e q 0 0077500 t h e n P r e s s E r r o r 0077520 ( 4 0 1 ) \r \r / / C h e c k l 0077540 a s t p a g e w i t h i n 0077560 b o u n d s o n f i l e . \r 0077600 l e t p a g e S i z e = 0077620 f i l e > > F . P a g e s i z e 0077640 \r l e t p a g e C n t = 0077660 f i l e > > F . P a g e c n t \r 0077700 i f d e v l s D I S 0077720 K T 8 0 & p a g e S i z e 0077740 e q 1 0 2 4 t h e n \r \t [ \t 0077760 \t \t \t / / S i m u l a t i n g 0100000 1 0 2 4 - w o r d p a g e s 0100020 o n M o d e l 3 376 001 \0 206 261 1 0100040 \r \t p a g e = p a g e * 4 \r \t c 0100060 n t = c n t * 4 \r \t p a g e S i 0100100 z e = 2 5 6 \r \t p a g e C n t = 0100120 p a g e C n t * 4 \r \t ] \r \r / / 0100140 P r e p a r e C A v e c t o 0100160 r j u s t f o r t h o s e 0100200 p a g e s t r a n s f e r r 0100220 e d \r i f c n t g r 0100240 5 0 t h e n P r e s s E r r 0100260 o r ( 4 0 2 ) \r l e t C 0100300 A s = v e c 5 0 \r f o r 0100320 i = 0 t o c n t - 1 d o 0100340 \r \t [ \r \t C A s ! i = c o r e a 0100360 d d r e s s \r \t c o r e a d d r 0100400 e s s = c o r e a d d r e s s + 0100420 p a g e S i z e \r \t ] \r \r / / 376 0100440 001 \0 366 024 P r e p a r e D A s 0100460 v e c t o r j u s t f o r 0100500 t h o s e p a g e s t r a n 0100520 s f e r r e d \r l e t s 0100540 e q D A s = v e c 5 0 ; \r 0100560 s e q D A s ! 0 = F i 0100600 l e V D A ( f i l e , p a g e 0100620 ) ; \r f o r i = 1 0100640 t o c n t - 1 d o s e 0100660 q D A s ! i = f i l l I n D 0100700 A ; \r l e t D A s = 0100720 s e q D A s - p a g e - 0100740 1 ; \r \r p a g e = p a g e 0100760 + 1 \r l e t l a s t p a 0101000 g e = p a g e + c n t - 1 \r 0101020 i f l a s t p a g e g r 0101040 p a g e 376 001 \0 316 9 C n t t h e 0101060 n \r \t \t [ \r \t \t P r e s s E r r 0101100 o r ( 4 0 3 , f i l e > > F . 0101120 N a m e ) \r \t \t l a s t p a g e 0101140 = p a g e C n t \r \t \t ] \r 0101160 A c t O n D i s k P a g e s ( d 0101200 i s k , C A s - p a g e , D A s 0101220 , l v f i l e > > F . f p , p 0101240 a g e , \r \t \t l a s t p a g e , 0101260 h o w , 0 , 0 , 0 , 0 , 0101300 l v F i l e E r r o r ) \r 0101320 @ l v d o n e f l a g = t r 0101340 u e \r s y s D i s k > > D 0101360 S K . d r i v e N u m b e r = 0 0101400 \t \t / / R e t u r n s y s D i 0101420 s k t o o r i g i n a l c 0101440 o n d i t i o n \r 376 \0 ~ , 225 ] 0101460 \r \r a n d F i l e E r r o r ( 0101500 a , b , c ) b e \r [ \r 0101520 s y s D i s k > > D S K . d 0101540 r i v e N u m b e r = 0 \t \t / / 0101560 R e t u r n s y s D i s k t 0101600 o o r i g i n a l c o n d i 0101620 t i o n \r P r e s s E r r 0101640 o r ( 4 0 4 ) \r ] \r \r 377 \0 \0 F 0101660 o n t P a s s 1 . b c p l \0 373 230 0101700 v ] 025 \0 \0 376 001 \0 T 037 / / F o n 0101720 t P a s s 1 . b c p l \r \r / / 0101740 m o d i f i e d b y R a m s 0101760 h a w , J a n u a r y 1 9 0102000 , 1 9 8 2 4 : 1 8 P M 0102020 \r / / - a d d e d F o n t 0102040 P i c k y M a t c h s w i t c 0102060 h ; i f t r u e , m e a 0102100 n s t o S w a t i f a n 0102120 y \r / / f o n t r e q u 0102140 e s t c a n ' t b e " p e 0102160 r f e c t l y " m a t c h e d 0102200 . \r / / - a l s o a d j u 0102220 s t e d f o n t m a t c h 0102240 a l g o r i t h m s o t h a 0102260 t o f f - b y - o n e - m i c 0102300 a \r / / b u g 376 001 \0 r N s 0102320 c a n ' t m a k e s p l i 0102340 n e s t a k e o v e r f r 0102360 o m r a s t e r s \r \r / / m 0102400 o d i f i e d b y R a m s h 0102420 a w , J a n u a r y 1 8 , 0102440 1 9 8 1 5 : 2 6 P M \r 0102460 / / - a d j u s t e d f o 0102500 n t m a t c h a l g o r i t 0102520 h m s o t h a t c h a r s 0102540 w i l l o n l y t a k e 0102560 \r / / p r e c e d e n c e 0102600 o v e r s p l i n e s i f 0102620 t h e y a r e v e r y n 0102640 e a r l y a p e r f e c t 0102660 m a t c h . \r \r / / m o d i f 0102700 i e d b y R a m s h a w , 376 0102720 001 \0 202 277 J a n u a r y 9 , 0102740 1 9 8 1 1 0 : 2 3 P M 0102760 \r / / - c h a n g e d c o 0103000 d e s o t h a t i c c i 0103020 n d e x z e r o i s n o w 0103040 o n l y u s e d f o r d 0103060 u m m i e s , \r / / ( w h 0103100 a t e v e r t h e y a r e ! 0103120 ) . I n d i c e s f o r 0103140 r e a l c h a r a c t e r s 0103160 a r e a l l o c a t e d \r / / 0103200 s t a r t i n g a t 1 0103220 , a n d a d u m m y r a 0103240 s t e r p o i n t e r i s 0103260 o u t p u t f o r i n d e x 0103300 0 . \r \r / / m o d i f i e d 0103320 b y 376 001 \0 257 031 B u t t e r f 0103340 i e l d , O c t o b e r 1 3 0103360 , 1 9 8 0 1 1 : 1 8 A M 0103400 \r / / - R e s o l u t i o n 0103420 B , R e s o l u t i o n S , 0103440 1 X i n s t e a d o f 1 0 0103460 X - 1 0 / 1 3 / 8 0 \r \r / / 0103500 e r r o r s 6 0 0 \r / / 0103520 \r / / R o u t i n e s f o r 0103540 p r e p a r i n g t h e t w 0103560 o f o n t s f o r t h e 0103600 3 1 0 0 P R E S S p r i n t 0103620 e r . \r / / \r / / F o n t s 0103640 P a s s ( w p , w s , w g , n u 0103660 m r e c s ) \r / / i s c a l 0103700 l e d t o p r e p a r e f 0103720 o n t s . \r / / 376 001 \0 236 \v w p 0103740 = w i n d o w o n P R E 0103760 S S f i l e , p o s i t i o 0104000 n e d t o r e a d F o n t 0104020 P a r t . \r / / w s = w 0104040 i n d o w o n s c r a t c h 0104060 f i l e , p o s i t i o n e 0104100 d a t b e g i n n i n g . \r 0104120 / / w g = w i n d o w o 0104140 n G O D f i l e ( G r a n 0104160 d O l d D i c t i o n a r y 0104200 ) \r / / n u m r e c s = # 0104220 r e c o r d s i n p r e s 0104240 s f o n t p a r t . \r / / N 0104260 B - - r e s o l u t i o n s 0104300 n e e d t o b e s e t 0104320 b y s o m e o n e ! ! ! ! 376 001 0104340 \0 207 374 \r \r g e t " P r e s s P 0104360 a r a m s . d f " \r g e t " P 0104400 r e s s I n t e r n a l s . d f 0104420 " \r g e t " I x . d f s " \r g 0104440 e t " F o n t P a s s . d f " 0104460 \r \r \r / / o u t g o i n g p 0104500 r o c e d u r e s \r e x t e r n 0104520 a l \r \t [ \r \t F o n t s P a s s 0104540 \r \t ] \r \r / / o u t g o i n g 0104560 s t a t i c s \r e x t e r n a 0104600 l \r \t [ \r \t w s \t \t \t / / W i n 0104620 d o w o n s c r a t c h f 0104640 i l e \r \t w f d i r \t \t \t / / W 0104660 i n d o w o n G O D \r \t S e 0104700 t T a b l e \r \t I C C t o t \r \t 0104720 ] \r s t a t i c \r \t [ \r \t w s \r 0104740 \t w f 376 001 \0 030 261 d i r \r \t S e t 0104760 T a b l e \r \t I C C t o t \r \t ] 0105000 \r \r / / i n c o m i n g p r 0105020 o c e d u r e s \r e x t e r n a 0105040 l \r \t [ \r / / P R E S S \r \t P r 0105060 e s s E r r o r \r \t F S G e t X 0105100 \r \t F S P u t \r \t G e t T i m e 0105120 \r \r / / P R E S S M L \r \t M u l 0105140 D i v \r \t D o u b l e A d d ; 0105160 D o u b l e S u b ; D o u b l 0105200 e C o p \r \r / / F r o m F O N 0105220 T P A S S 2 . c \r \t P r i n t F 0105240 o n t s \r \t C o n v e r t F o n 0105260 t P a r t s \r \t C o n v e r t F 0105300 o n t s \r \t L o o p F o n t s \r 0105320 \t L o o p F o n t P a r t s \r \t 0105340 D P A D i \r \t S 376 001 \0 u 335 e t P 0105360 o s R e l a t i v e \r \t R e a d 0105400 I X \r \t R e l e a s e F o n t C 0105420 o r e \r \r / / O S \r \t M o v e B 0105440 l o c k ; S e t B l o c k ; 0105460 Z e r o \r \r / / W I N D O W \r \t 0105500 W i n d o w I n i t \r \t W i n d 0105520 o w C l o s e \r \t W i n d o w S 0105540 e t P o s i t i o n \r \t W i n d 0105560 o w G e t P o s i t i o n \r \t W 0105600 i n d o w R e a d B l o c k \r \t 0105620 W i n d o w W r i t e B l o c k 0105640 \r \t W i n d o w R e a d \r \t W i 0105660 n d o w W r i t e \r \t W i n d o 0105700 w C o p y \r \r / / M E T E R \r \t 0105720 M e t e r B l o c k \r \t M e t e 0105740 r T i m e \r \r / / C U R S 376 001 \0 0105760 220 k O R \r \t C u r s o r C h a r 0106000 \r \t C u r s o r D i g i t \r \t C 0106020 u r s o r T o g g l e \r \t ] \r \r 0106040 / / i n c o m i n g s t a t 0106060 i c s \r e x t e r n a l \r \t [ \r 0106100 \t R e s o l u t i o n S \r \t R e 0106120 s o l u t i o n B \r \t p o r t r 0106140 a i t \t \t / / T r u e i f p 0106160 r i n t e r M o d e = 3 ; e l 0106200 s e p r i n t e r M o d e = 8 0106220 \r \t R e p o r t \r \t F o n t P i 0106240 c k y M a t c h \t \t / / T r u e 0106260 = > S w a t o n a n y 0106300 n o n - p e r f e c t f o n t 0106320 m a t c h \r \t ] \r \r / / i n 0106340 t e r n a l s t a t i c s \r s 0106360 t a 376 001 \0 R 320 t i c \r \t [ \r \t w 0106400 p \r \t ] \r \r / / F i l e - w i 0106420 d e s t r u c t u r e a n d 0106440 m a n i f e s t d e c l a r 0106460 a t i o n s . \r \r s t r u c t u 0106500 r e S T R [ \r \t l e n g t h 0106520 b y t e \r \t c h a r ^ 1 , 2 5 5 0106540 b y t e \r \t ] \r \r \r \f / / P 0106560 r o c e d u r e s \r \r l e t \r \r 0106600 F o n t s P a s s ( w w p , w w 0106620 s , w g , n u m r e c s ) b e 0106640 [ \r \r \t c o m p i l e i f R 0106660 e p o r t S w t h e n [ G 0106700 e t T i m e ( l v R e p o r t 0106720 > > R E P . F o n t T i m e ) 0106740 ] \r \t l e t F P S t a t s = v 0106760 e c s i z e 376 001 \0 # @ F P S 0107000 t a t / 1 6 \r \t c o m p i l e i 0107020 f M e t e r S w t h e n [ 0107040 F P S t a t s > > F P S t a t 0107060 . T i m e I n = M e t e r T i m 0107100 e ( ) ] \r \t C u r s o r C h a 0107120 r ( $ F ) \t \t / / F o n t s p 0107140 a s s \r \r \t w p = w w p ; w s 0107160 = w w s ; w f d i r = w g \t / 0107200 / S a v e w i n d o w s i n 0107220 s t a t i c s . \r \t W i n d o 0107240 w W r i t e B l o c k ( w s , 0 0107260 , 6 ) \t \t / / S a v e s p o t 0107300 f o r 3 n u m b e r s . . 0107320 . \r \t l e t s t 1 = v e c 6 0107340 5 \r \t S e t T a b l e = s t 1 \t 0107360 \t \t / / M a i n f o n 376 001 \0 2 0107400 274 t - s e t t a b l e . \r \t Z 0107420 e r o ( s t 1 , 6 5 ) \t \t \t / / 0107440 0 - 6 4 ( ! ! ! ! ! ! ) \r 0107460 \r \t R e a d P r e s s F o n t P 0107500 a r t ( n u m r e c s ) \r \r \t R 0107520 e a d C h a r a c t e r D i c t 0107540 i o n a r y ( w f d i r ) \r \t I 0107560 C C t o t = A s s i g n I C C s 0107600 ( ) \r \r \t C o n v e r t F o n t 0107620 P a r t s ( w p ) \r \t C o n v e 0107640 r t F o n t s ( ) \r \r \t A s s e 0107660 m b l e W i d t h s ( ) \r \t W r 0107700 i t e D i r e c t o r i e s ( ) 0107720 \r \t R e l e a s e F o n t C o r 0107740 e ( ) \r \t c o m p i l e i f M 0107760 e t e r S w t h e n \r \t 0110000 [ 376 001 \0 P 235 \r \t F P S t a 0110020 t s > > F P S t a t . T i m e O 0110040 u t = M e t e r T i m e ( ) \r \t 0110060 F P S t a t s > > F P S t 0110100 a t . I C C t o t a l = I C C t 0110120 o t \r \t M e t e r B l o c 0110140 k ( M E T E R F o n t P a s s , 0110160 F P S t a t s , s i z e F P S 0110200 t a t / 1 6 ) \r \t ] \r \t c 0110220 o m p i l e i f R e p o r t S 0110240 w t h e n [ G e t T i m e 0110260 ( l v R e p o r t > > R E P . 0110300 F o n t T i m e ) ] \r ] \r \r a 0110320 n d \r \r \f / / R e a d t h e 0110340 P R E S S f o n t p a r t 0110360 a n d b u i l d a n i n t 0110400 e r n a l 376 001 \0 Q 310 d e s c r 0110420 i p t i o n o f a l l \r / / 0110440 f o n t p a r t r e q u e 0110460 s t s ( F P R E Q ) o r " 0110500 f o n t p a r t c h a r a c 0110520 t e r s " ( C R E Q ) . \r \r R 0110540 e a d P r e s s F o n t P a r t 0110560 ( n u m r e c s ) b e [ \r \t 0110600 l e t F o n t P a r t P o s = 0110620 v e c 1 \t \t / / C u r r e n t 0110640 f o n t p a r t p o s i t 0110660 i o n . \r \t W i n d o w G e t P 0110700 o s i t i o n ( w p , F o n t P 0110720 a r t P o s ) \r \t l e t A l l 0110740 o w e d L e n g t h = v e c 1 0110760 \t \t / / M a x i m u m f o n t 0111000 p a r t l e n g t 376 001 \0 244 247 0111020 h . \r \t A l l o w e d L e n g t 0111040 h ! 0 = 0 ; A l l o w e d L e 0111060 n g t h ! 1 = n u m r e c s * 2 0111100 5 6 \r \t l e t B r e a k F o n 0111120 t = f a l s e \t \t / / F l a g 0111140 w h e n a p p e n d i n g b 0111160 r e a k f o n t . \r \r [ \t \t \t 0111200 \t \t / / L o o p r e a d i n g 0111220 f o n t p a r t s . . \r \t C 0111240 u r s o r T o g g l e ( 0 ) \r \t 0111260 l e t f = v e c ( s i z e 0111300 P R E S S F E / 1 6 ) \t / / S p 0111320 o t t o r e a d f o n t 0111340 e n t r y . \r \t W i n d o w S e 0111360 t P o s i t i o n ( w p , F o n 0111400 t P a r t P o s ) \r \t l e t l 0111420 376 001 \0 217 344 e n = W i n d o w R e 0111440 a d ( w p ) \r \t l e t d l e n 0111460 = v e c 1 \r \t d l e n ! 0 = 0 0111500 ; d l e n ! 1 = l e n \r \t D o 0111520 u b l e A d d ( F o n t P a r t 0111540 P o s , d l e n ) \t \t / / U p d 0111560 a t e n e x t p l a c e t 0111600 o l o o k \r \t D o u b l e S u 0111620 b ( A l l o w e d L e n g t h , 0111640 d l e n ) \r \t i f A l l o w e 0111660 d L e n g t h ! 0 l s 0 t 0111700 h e n \r \t \t [ \t \t \t / / W e h 0111720 a v e o v e r r u n o u r 0111740 b o u n d s . \r \t \t P r e s s E 0111760 r r o r ( 6 0 0 ) \t \t / / T h e 0112000 s i m p l e s t e r r o r 0112020 t h e r e 376 001 \0 \r 237 i s . . \r 0112040 \t \t l e n = 0 \t \t \t / / G e t 0112060 o u t . . . \r \t \t ] \r \r \t t e s 0112100 t l e n e q 0 t h e n \r 0112120 \t \t [ \t \t \t / / L a s t e n t 0112140 r y - - g e t b r e a k 0112160 f o n t \r \t \t B r e a k F o n t 0112200 = t r u e \r \t \t f = t a b l e 0112220 [ \t \t / / T h i s i s a d 0112240 u m m y f o n t . . . \r \t \t 0112260 6 4 * 2 5 6 + 0 ; \r \t \t 0 0112300 * 2 5 6 + 1 2 7 ; \r \t \t 9 * 0112320 2 5 6 + $ B ; \t \t / / F a m i l 0112340 y n a m e \r \t \t $ R * 2 5 0112360 6 + $ E ; \r \t \t $ A * 2 5 6 0112400 + $ K ; \r \t \t $ F * 2 5 6 + 0112420 $ O ; \r \t \t $ N 376 001 \0 324 t * 0112440 2 5 6 + $ T ; \r \t \t 0 ; 0 ; 0112460 0 ; 0 ; 0 ; \r \t \t 0 * 2 5 6 0112500 + 0 ; \t \t / / F a c e = M R R \r 0112520 \t \t 1 0 ; 0 \t \t \t / / 1 0 0112540 P o i n t , n o r o t a t i 0112560 o n . \r \t \t ] \r \t \t ] \r \t o 0112600 r \r \t \t [ \t \t \t / / R e a d ; 0112620 a s s u m e m o s t c o m m 0112640 o n t h i n g \r \t \t W i n d o 0112660 w R e a d B l o c k ( w p , f , 0112700 s i z e P R E S S F E / 1 6 ) 0112720 \r \t \t ] \r \r \t c o m p i l e i f 0112740 R e p o r t S w t h e n [ 0112760 R e p o r t > > R E P . F o n 0113000 t s U s e d = R e p o r t > > R 0113020 E P . F o n t s U s e d + 1 376 0113040 001 \0 315 326 ] \r \r \t l e t a = f > 0113060 > P R E S S F E . f a m l y \t \t 0113100 / / G e t f i r s t w o r d 0113120 o f f a m i l y . \r \t i f 0113140 ( a r s h i f t 8 ) g r 0113160 1 9 t h e n \r \t \t [ \t \t \t / / 0113200 I l l e g a l l e n g t h \r \t 0113220 \t P r e s s E r r o r ( 6 0 1 ) 0113240 \t \t / / D u m p o u t a n 0113260 e r r o r m e s s a g e . \r \t 0113300 \t l o o p \t \t \t / / a n d g o 0113320 o n . \r \t \t ] \r \t l e t S e 0113340 t = f > > P R E S S F E . s e t 0113360 \r \t i f ( S e t g r 6 3 ) 0113400 & ( B r e a k F o n t e q 0113420 0 ) t h e n \r \t \t [ \t \t \t / 0113440 / I l l 376 001 \0 322 215 e g a l f o 0113460 n t s e t . \r \t \t P r e s s E 0113500 r r o r ( 6 0 2 ) \t \t / / G i v 0113520 e h i m a m e s s a g e . 0113540 \r \t \t l o o p \r \t \t ] \t \t \t / / 0113560 A n d g o a f t e r n e x 0113600 t f o n t e n t r y . \r \t l 0113620 e t F o n t = f > > P R E S S 0113640 F E . f o n t \r \t i f F o n t 0113660 g r 1 5 t h e n \r \t \t [ \t 0113700 \t \t / / I l l e g a l f o n t 0113720 n u m b e r . \r \t \t P r e s s 0113740 E r r o r ( 6 0 3 ) \r \t \t l o o 0113760 p \r \t \t ] \r \r \t l e t g = n i 0114000 l \r \t t e s t a e q 0 t 0114020 h e n \r \t \t [ \t \t \t / / F o n t 0114040 P a r t C h a r a 376 001 \0 231 234 c t 0114060 e r \r \t \t g = F S G e t X ( s i 0114100 z e C R E Q / 1 6 ) \r \t \t Z e 0114120 r o ( g , ( s i z e C R E Q / 0114140 1 6 ) ) \r \t \t g > > C R E Q . t 0114160 y p e = F o n t P a r t C h a r 0114200 a c t e r \r \t \t l e t f p = v 0114220 e c 1 \r \t \t D o u b l e C o p 0114240 ( f p , F o n t P a r t P o s ) 0114260 \r \t \t D o u b l e S u b ( f p , 0114300 d l e n ) \r \t \t D o u b l e A d 0114320 d ( f p , t a b l e [ 0 ; 3 0114340 ] ) \r \t \t D o u b l e C o p ( 0114360 l v g > > C R E Q . p o s , f 0114400 p ) \r \t \t g > > C R E Q . l e n 0114420 = l e n - 3 \r \t \t f > > P R E S 0114440 S F E . n = f > > P R E S S 376 001 0114460 \0 205 205 F E . m \r \t \t ] \r \t o r \r 0114500 \t \t [ \t \t \t / / S t a n d a r d 0114520 . \r \t \t g = F S G e t X ( s i z 0114540 e F P R E Q / 1 6 ) \t / / B 0114560 l o c k t o r e m e m b e r 0114600 r e q u e s t . \r \t \t Z e r o 0114620 ( g , ( s i z e F P R E Q / 1 0114640 6 ) ) \t / / Z e r o i t ! \r \t 0114660 \t g > > F P R E Q . t y p e = S 0114700 t a n d a r d \r \t \t M o v e B l 0114720 o c k ( l v g > > F P R E Q . 0114740 r f a m l y , l v f > > P R 0114760 E S S F E . f a m l y , s i z 0115000 e F P R E Q . r f a m l y / 1 0115020 6 ) \r \t \t g > > F P R E Q . r f 0115040 a c e s o u r c e = f > > P R E 0115060 S S F 376 001 \0 h 367 E . f a c e s o 0115100 u r c e \r \t \t l e t s = f > > 0115120 P R E S S F E . s i z \r \t \t g > 0115140 > F P R E Q . r s i z = ( ( s 0115160 l s 0 ) ? - s , M u l D i v 0115200 ( s , 6 3 5 , 1 8 ) ) \r \t \t g > 0115220 > F P R E Q . r r o t a t i o n 0115240 = f > > P R E S S F E . r o t a 0115260 t i o n + ( p o r t r a i t ? 0115300 9 0 * 6 0 , 0 ) \r \t \t ] \r \t g > 0115320 > F P R E Q . r m n = f > > P R 0115340 E S S F E . m n \r \r \r / / N o w 0115360 p u t t h i s R E Q o n 0115400 t h e c o r r e c t l i s 0115420 t f o r t h i s s e t , f 0115440 o n t \r \t l e t r = S e t T a 0115460 b l e ! S e t \r 376 001 \0 256 031 \t i f 0115500 r e q 0 t h e n \r \t \t [ 0115520 \r \t \t r = F S G e t X ( s i z e 0115540 S E T / 1 6 ) \r \t \t Z e r o ( 0115560 r , ( s i z e S E T / 1 6 ) ) 0115600 \r \t \t S e t T a b l e ! S e t = 0115620 r \r \t \t ] \r \t l e t f = r > > 0115640 S E T . f o n t ^ F o n t \r \t i 0115660 f f e q 0 t h e n \r \t \t 0115700 [ \r \t \t f = F S G e t X ( s i z 0115720 e F O N T / 1 6 ) \r \t \t Z e r 0115740 o ( f , ( s i z e F O N T / 1 0115760 6 ) ) \r \t \t f > > F O N T . b c 0116000 = 2 5 5 \r \t \t f > > F O N T . f 0116020 o n t = F o n t \r \t \t f > > F O 0116040 N T . s e t = S e t \r \t \t r > > 0116060 S E T . f o n t ^ F o n t 376 001 \0 0116100 325 x = f \r \t \t ] \r / / f - > 0116120 " f o n t " h e a d e r f 0116140 o r t h i s f o n t s e t 0116160 . \r \t l e t m = g > > F P R E 0116200 Q . r m \r \t l e t n = g > > F 0116220 P R E Q . r n \r \t l e t p = l 0116240 v f > > F O N T . s e g m e n 0116260 t s \t / / H e a d e r f o r 0116300 p i e c e s o f f o n t s . 0116320 \r \r [ \t i f @ p e q 0 t 0116340 h e n b r e a k \t \t / / L o o 0116360 k f o r c o r r e c t p o 0116400 s i t i o n \r \t l e t t = @ p 0116420 \r \t i f n l s t > > F P R 0116440 E Q . r m t h e n b r e a k 0116460 / / g o o d p l a c e f o 0116500 r 376 001 \0 345 201 i t . \r \t t e s t 0116520 n l e t > > F P R E Q . r 0116540 n \r \t i f s o \t [ \t \t / / W e 0116560 a r e i n s e r t i n g o n 0116600 e t h a t o v e r l a p s \r 0116620 \t \t \t \t / / t . T w o c a 0116640 s e s : ( 1 ) o u r s e x 0116660 t e n d s t o l e f t \r \t \t 0116700 \t \t / / o f t , a n d t 0116720 i s p a r e d d o w n , o 0116740 r ( 2 ) o u r s \r \t \t \t \t / 0116760 / l i e s e n t i r e l y i 0117000 n t , a n d t i s s p 0117020 l i t . \r \t \t i f m g r t 0117040 > > F P R E Q . r m t h e n \r 0117060 \t \t \t [ \r \t \t \t l e t n t = F 0117100 S G e t X ( s 376 001 \0 377 270 i z e 0117120 F P R E Q / 1 6 ) \r \t \t \t M o v 0117140 e B l o c k ( n t , t , ( s i z 0117160 e F P R E Q / 1 6 ) ) \r \t \t \t 0117200 n t > > F P R E Q . r n = m - 1 0117220 \r \t \t \t @ n t = @ p \r \t \t \t @ p 0117240 = n t \r \t \t \t p = n t \r \t \t \t ] 0117260 \r \t \t t > > F P R E Q . r m = n 0117300 + 1 \r \t \t i f t > > F P R E Q 0117320 . r m g r t > > F P R E Q . 0117340 r n t h e n \r \t \t \t [ \t \t / / 0117360 D e l e t e t e n t i r e l 0117400 y ! \r \t \t \t @ p = @ t \r \t \t \t F 0117420 S P u t ( t ) \r \t \t \t ] \r \t \t b 0117440 r e a k \t \t \t / / R e a d y t 0117460 o p u t i t i n . \r \t \t ] 0117500 \r \t i f n o t \t [ \t \t \t 376 001 \0 224 0117520 ( / / W e e n d b e y o n d 0117540 t . B u t w e m a y \r \t 0117560 \t \t \t \t / / h a v e t o p a 0117600 r e i t d o w n . \r \t \t t e 0117620 s t m l e t > > F P R E Q 0117640 . r m t h e n \r \t \t \t [ \t \t / 0117660 / D e l e t e t e n t i r e 0117700 l y \r \t \t \t @ p = @ t \r \t \t \t F 0117720 S P u t ( t ) \r \t \t \t ] o r \r 0117740 \t \t t e s t m l e t > > F 0117760 P R E Q . r n t h e n \r \t \t \t 0120000 [ \r \t \t \t t > > F P R E Q . r n 0120020 = m - 1 \r \t \t \t p = t \t \t / / M 0120040 o v e r i g h t \r \t \t \t ] \r \t 0120060 \t o r p = t \r \t \t ] \r ] r e 0120100 p e a t \r \r \t @ g = @ p ; @ p 0120120 = 376 001 \0 8 033 g \t \t \t / / L i n k 0120140 i t i n . \r ] r e p e a t 0120160 u n t i l B r e a k F o n t \t 0120200 \t \t / / R e a d F o n t p a 0120220 r t \r \r ] \r \r a n d \r \r \f / / R 0120240 e a d t h e d i r e c t o r 0120260 y f i l e a n d f i n d 0120300 t h e b e s t m a t c h w 0120320 i t h e a c h f o n t \r / / 0120340 p a r t r e q u e s t . \r \r 0120360 R e a d C h a r a c t e r D i c 0120400 t i o n a r y ( w f d i r ) b 0120420 e [ \r \r / / N o w r e a d 0120440 t h e d i r e c t o r y f r 0120460 o m t h e m i g h t y f i 0120500 l e , a n d p i e c e i t 0120520 a l l t 376 001 \0 333 311 o g e t h 0120540 e r . \r \t l e t p F o n t = v 0120560 e c 3 \r \t l e t s n = 0 \r \t 0120600 l e t i x = v e c I X L M a 0120620 x \r \r [ \t C u r s o r T o g g l 0120640 e ( 1 ) \r \t R e a d I X ( w f d 0120660 i r , i x ) \t \t / / R e a d a 0120700 n e n t r y . \r \t s n = s n + 0120720 1 \r \t s w i t c h o n i x > > 0120740 I X . T y p e i n t o \r \t [ \r 0120760 \t c a s e I X T y p e E n d : 0121000 \t b r e a k \t \t / / D o n e . \r 0121020 \r \t c a s e I X T y p e N a m 0121040 e : \r \t \t [ \t \t \t / / D i s t r 0121060 i b u t e t h e n a m e . \r 0121100 \t \t @ p F o n t = 0 \t \t / / I n 0121120 i t i a l i z e l o 376 001 \0 325 272 0121140 o p e r \r \t \t w h i l e L o o 0121160 p F o n t P a r t s ( p F o n t 0121200 ) d o \r \t \t \t [ \t \t / / S e e 0121220 i f n a m e m a t c h e s 0121240 . \r \t \t \t l e t p = p F o n t 0121260 ! 0 \r \t \t \t i f p > > F P R E 0121300 Q . t y p e n e F o n t P a 0121320 r t C h a r a c t e r & \r \t \t 0121340 \t C o m S t r ( l v p > > 0121360 F P R E Q . r f a m l y , l v 0121400 i x > > I X N . N a m e ) t h 0121420 e n \r \t \t \t \t [ \r \t \t \t \t p > > 0121440 F P R E Q . n a m e d = t r u e 0121460 \r \t \t \t \t p > > F P R E Q . r f 0121500 a m = i x > > I X N . C o d e \r 0121520 \t \t \t \t ] \r \t \t \t ] \r \t \t ] \r \t 0121540 376 001 \0 + l \t e n d c a s e \r \t c 0121560 a s e I X T y p e M u l t i C 0121600 h a r s : \t / / r e f o r m a t 0121620 t o l o o k l i k e O r 0121640 b i t C h a r s \r \t \t [ \r \t \t i 0121660 x > > I X . T y p e = I X T y p 0121700 e O r b i t C h a r s \r \t \t l e 0121720 t r x = i x > > I X M . r e s 0121740 o l u t i o n x \r \t \t l e t r 0121760 y = i x > > I X M . r e s o l u 0122000 t i o n y \r \t \t M o v e B l o c 0122020 k ( l v i x > > I X . s a , l 0122040 v i x > > I X M . s e g s ^ 1 0122060 . s a , 4 ) \t / / m o v e s a 0122100 , l e n \r \t \t i x > > I X . r e 0122120 s o l u t i o n x = r x \r \t \t i 0122140 x > > I X 376 001 \0 034 ] . r e s o l 0122160 u t i o n y = r y \r \t \t ] \r \t \t 0122200 / / e n d c a s e i n t e n t 0122220 i o n a l l y o m i t t e d \r 0122240 \t c a s e I X T y p e C h a r 0122260 s : / / e r r o r m e s s a 0122300 g e s o m e d a y ? ? ? \r \t 0122320 c a s e I X T y p e O r b i t 0122340 C h a r s : \r \t c a s e I X T 0122360 y p e S p l i n e s : \r \t \t [ \t 0122400 \t \t / / S e e i f w e a r 0122420 e a g o o d m a t c h . \r 0122440 \t \t @ p F o n t = 0 \t \t / / I n 0122460 i t i a l i z e l o o p e r \r 0122500 \t \t w h i l e L o o p F o n t 0122520 P a r t s ( p F o n t ) d o \r 0122540 \t \t \t [ \r \t \t \t l e 376 001 \0 270 t 0122560 p = p F o n t ! 0 \r \t \t \t i f 0122600 p > > F P R E Q . t y p e n 0122620 e F o n t P a r t C h a r a c 0122640 t e r t h e n \r \t \t \t [ \r \t \t 0122660 \t l e t s c o r e = M a t c h 0122700 E n t r i e s ( i x , p ) / / 0122720 C o m p u t e s i m i l a r i 0122740 t y \r \t \t \t i f s c o r e g 0122760 r p > > F P R E Q . s c o r e 0123000 t h e n \r \t \t \t \t [ \r \t \t \t \t 0123020 p > > F P R E Q . s c o r e = s 0123040 c o r e \r \t \t \t \t p > > F P R E 0123060 Q . t y p e = i x > > I X . T y 0123100 p e \r \t \t \t \t / / C o p y c u 0123120 r r e n t b e s t m a t c h 0123140 ! \r \t \t \t \t M o v e B l o c k 376 0123160 001 \0 270 = ( l v p > > F P R E Q 0123200 . f a m f a c e , l v i x > > 0123220 I X . f a m f a c e , \r \t \t \t \t 0123240 ( s i z e I X - o f f s 0123260 e t I X . f a m f a c e ) / 1 0123300 6 ) \r \t \t \t \t p > > F P R E Q . 0123320 s n = s n \r \t \t \t \t ] \r \t \t \t ] 0123340 \r \t \t \t ] \r \t \t ] \r \t \t e n d c 0123360 a s e \r \t d e f a u l t : P r 0123400 e s s E r r o r ( 6 0 4 ) \r \t ] 0123420 \r ] r e p e a t \t \t \t \t / / R 0123440 e a d I X u n t i l I X T y 0123460 p e E n d \r \r i f F o n t P i 0123500 c k y M a t c h t h e n \r \t [ 0123520 \r \t @ p F o n t = 0 / / i n 0123540 i t i a l i z e l o o p e r \r 0123560 \t w h i 376 001 \0 030 322 l e L o o p 0123600 F o n t P a r t s ( p F o n t ) 0123620 d o \r \t \t [ \r \t \t l e t p = 0123640 p F o n t ! 0 \r \t \t i f p > > 0123660 F P R E Q . t y p e n e F o 0123700 n t P a r t C h a r a c t e r 0123720 & \r \t \t p F o n t ! 2 l e 0123740 6 3 & / / d o n ' t 0123760 w o r r y a b o u t t h e 0124000 B r e a k F o n t \r \t \t p 0124020 > > F P R E Q . s c o r e l s 0124040 1 1 8 / / a s p l i n 0124060 e m a t c h c o u n t s 1 0124100 1 8 \r \t \t t h e n P r e s s 0124120 E r r o r ( 6 0 5 , l v p > 0124140 > F P R E Q . r f a m l y , \r \t 0124160 \t \t p > > F P R E 376 001 \0 j 223 Q . 0124200 r f a c e , \r \t \t \t p > > F P R 0124220 E Q . r s i z , \r \t \t \t p > > F 0124240 P R E Q . r r o t a t i o n - ( 0124260 p o r t r a i t ? 9 0 * 6 0 0124300 , 0 ) ) \r \t \t ] \r \t ] \r ] \r \r a 0124320 n d \r \r / / C o m p u t e a 0124340 m a t c h s c o r e b e t w 0124360 e e n a n i x e n t r y 0124400 r e a d f r o m a d i c t 0124420 i o n a r y f i l e \r / / a 0124440 n d a f o n t p i e c e 0124460 r e q u e s t . M a x i m u m 0124500 s c o r e , a p e r f e c 0124520 t m a t c h o f r a s t e 0124540 r s , \r / / i s 1 2 0 . 0124560 A p e r f e c t m a t c 376 001 0124600 \0 B g h b y s p l i n e s 0124620 i s 1 1 8 , s o t h a t 0124640 r a s t e r s w i l l t a k 0124660 e \r / / p r e c e d e n c e 0124700 e v e n i f s o m e o n e 0124720 i s o f f b y a m i c a 0124740 o r t w o . \r / / W A R 0124760 N I N G : T h e c o n s t 0125000 a n t 1 1 8 a p p e a r s 0125020 n e a r t h e e n d o f 0125040 t h e p r e d e d i n g \r / / 0125060 p r o c e d u r e ! \r / / 0125100 R o t a t i o n = 6 4 ; S i z 0125120 e = 3 2 ; F a m i l y = 1 6 ; 0125140 F a c e = 8 \r \r M a t c h E n 0125160 t r i e s ( i x , p ) = v a 0125200 l o f 376 001 \0 004 9 [ \r \t l e t 0125220 s c o r e = n i l \r \t t e s t 0125240 ( i x > > I X . T y p e e q 0125260 I X T y p e C h a r s ) % ( i x 0125300 > > I X . T y p e e q I X T 0125320 y p e O r b i t C h a r s ) t 0125340 h e n \r \t \t [ \r \t \t l e t f o 0125360 n t S i z = \r \t \t M u l D i 0125400 v ( i x > > I X . r e s o l u t 0125420 i o n x , i x > > I X . s i z 0125440 , 1 0 * R e s o l u t i o n S 0125460 ) \r \t \t l e t r e q S i z = 0125500 p > > F P R E Q . r s i z ; \r 0125520 \t \t l e t d i f = ( f o n t S 0125540 i z - r e q S i z ) / / n u m 0125560 b e r o f m i c a s o f 0125600 d i f f e r e n 376 001 \0 256 \0 c e \r 0125620 \t \t i f d i f l s 0 t h 0125640 e n d i f = - d i f \r \t \t / / 0125660 m a x a l l o w a b l e e r 0125700 r o r i s a b o u t 1 0 % 0125720 m o r e o r l e s s t h 0125740 a n r e q u e s t \r \t \t / / s 0125760 p l i n e s i z e m a t c h 0126000 i s 1 6 , s o t o t a l 0126020 d i f f a l l o w e d i s 0126040 2 0 % \r \t \t d i f = M u l D i 0126060 v ( d i f , 1 5 0 , r e q S 0126100 i z ) \r \t \t i f d i f g r 0126120 3 2 t h e n d i f = 3 2 \r \t 0126140 \t s c o r e = 3 2 - d i f \r \t \t 0126160 i f i x > > I X . r o t a t i 0126200 o n e q p > > F P R E 376 001 \0 0126220 r 222 Q . r r o t a t i o n t h 0126240 e n s c o r e = s c o r e + 6 0126260 4 \r \t \t ] \r \t o r \r \t \t [ \r \t \t 0126300 / / L y l e R a m s h a w : 0126320 S p l i n e s s h o u l d 0126340 b e u s e d i n s t e a d 0126360 o f \r \t \t / / c h a r s u n 0126400 l e s s t h e c h a r s a 0126420 r e a n e x c e l l e n t 0126440 m a t c h . \r \t \t s c o r e = 9 0126460 4 \t / / R o t a t i o n O K , 0126500 s i z e m a t c h = 3 0 = 3 0126520 2 - 2 \r \t \t ] \r \t i f i x > > 0126540 I X . f a c e e q p > > F P 0126560 R E Q . r f a c e t h e n s 0126600 c o r e = s c o r e + 8 \r \t i f 0126620 p 376 001 \0 036 277 > > F P R E Q . n 0126640 a m e d n e 0 & p > > F 0126660 P R E Q . r f a m e q i x > 0126700 > I X . f a m t h e n \r \t \t s 0126720 c o r e = s c o r e + 1 6 \r \t r 0126740 e s u l t i s s c o r e \r ] \r 0126760 \r a n d \r \r \f / / A s s i g n 0127000 I C C a d d r e s s e s . \r / 0127020 / F i r s t , u p d a t e b 0127040 c , e c f o r e a c h f o 0127060 n t . I f t h e r e i s 0127100 o n l y o n e F P R E Q 0127120 f o r a \r / / f o n t , a 0127140 n d i f i t i s o f t 0127160 y p e I X T y p e C h a r s , 0127200 m a r k t h e F O N T a 0127220 s v e r b a 376 001 \0 265 201 t i m \r 0127240 / / ( i . e . c a n j u s 0127260 t p o i n t a t t h i n g 0127300 s f o r t h i s f o n t ) 0127320 . \r / / T h e n , a s s i g 0127340 n I C C ' s a n d p u t 0127360 i n v e r b a t i m f o n t 0127400 s t h e c o r r e s p o n d 0127420 i n g \r / / d i s k a d d r 0127440 e s s , o r m a r k i t 0127460 a s " s a m e a s s o m e 0127500 o t h e r f o n t " . \r \r A 0127520 s s i g n I C C s ( ) = v a l 0127540 o f [ \r \t l e t p F o n t = 0127560 v e c 3 \r \t @ p F o n t = 0 \r 0127600 \t w h i l e L o o p F o n t P 0127620 a r t s ( p F o n t ) 376 001 \0 H 0127640 370 d o \r \t \t [ \r \t \t l e t f = 0127660 p F o n t ! 1 \r \t \t l e t p = 0127700 p F o n t ! 0 \r \t \t l e t s o 0127720 u r c e = p > > F P R E Q . r s 0127740 o u r c e \r \t \t l e t b c = s 0127760 o u r c e \r \t \t l e t e c = s 0130000 o u r c e + p > > F P R E Q . r 0130020 n - p > > F P R E Q . r m \r / / 0130040 b c , e c i n a d d r e s s 0130060 s p a c e o f a v a i l a 0130100 b l e f o n t . \r \t \t i f p 0130120 > > F P R E Q . t y p e n e 0130140 F o n t P a r t C h a r a c t e 0130160 r t h e n \r \t \t \t [ \r \t \t \t i 0130200 f b c l s p > > F P R E Q 0130220 . b c t h e n b c = p > > F 0130240 P 376 001 \0 357 R E Q . b c \r \t \t \t 0130260 i f e c g r p > > F P R E 0130300 Q . e c t h e n e c = p > > 0130320 F P R E Q . e c \r \t \t \t i f f 0130340 > > F O N T . s e g m e n t s 0130360 e q p & p > > F P R E Q . 0130400 n e x t e q 0 t h e n \r \t 0130420 \t \t \t f > > F O N T . s h a r a 0130440 b l e = t r u e \r \t \t \t ] \r \t \t 0130460 l e t o f f = p > > F P R E Q 0130500 . r m - s o u r c e \r \t \t p > > 0130520 F P R E Q . r s o u r c e = b c 0130540 \t / / N e w s t a r t i n g 0130560 s p o t . \r \t \t b c = o f f + b 0130600 c \r \t \t e c = o f f + e c \r / / 0130620 b c , e c i n a d d r e s s 0130640 s p a c e 376 001 \0 264 324 o f r 0130660 e q u e s t \r \t \t i f b c l 0130700 s f > > F O N T . b c t h e 0130720 n f > > F O N T . b c = b c \r 0130740 \t \t i f e c g r f > > F O 0130760 N T . e c t h e n f > > F O 0131000 N T . e c = e c \r \t \t p > > F P 0131020 R E Q . r m = b c \r \t \t p > > F 0131040 P R E Q . r n = e c \r \t \t ] \r \t 0131060 l e t n u m f o n t s = 0 \r \t 0131100 l e t I C C = 1 \t / / s t a r 0131120 t i n d i c e s f o r r e 0131140 a l c h a r s a t o n e ! 0131160 \r \t @ p F o n t = 0 \r \t w h i l 0131200 e L o o p F o n t s ( p F o n 0131220 t ) d o \r \t \t [ \r \t \t l e t 0131240 f = p F o n t ! 1 \t \t 376 001 \0 < 244 0131260 / / F o n t p o i n t e r \r \t 0131300 \t l e t f o u n d = f a l s e 0131320 \r \t \t i f f > > F O N T . s h 0131340 a r a b l e t h e n \r \t \t \t [ 0131360 \t \t / / S e e i f t h e r e 0131400 i s a n o t h e r e q u a 0131420 l . \r \t \t \t l e t p p F o n t 0131440 = v e c 3 \r \t \t \t @ p p F o n 0131460 t = 0 \r \t \t \t w h i l e L o o 0131500 p F o n t s ( p p F o n t ) d 0131520 o \r \t \t \t [ \r \t \t \t l e t p f 0131540 = p p F o n t ! 1 \r \t \t \t i f 0131560 p f e q f t h e n b r e 0131600 a k \t / / N o n e f o u n d 0131620 y e t \r \t \t \t i f p f > > F O 0131640 N T . s h a r a b l e t h e n 0131660 376 001 \0 330 b \r \t \t \t [ \r \t \t \t l e 0131700 t p p f = p f > > F O N T . s 0131720 e g m e n t s \t / / t h i s r 0131740 e q u e s t \r \t \t \t l e t p p 0131760 = f > > F O N T . s e g m e n t 0132000 s \t / / l a t e r o n e . \r \t 0132020 \t \t i f p p f > > F P R E Q . 0132040 s n e q p p > > F P R E Q . 0132060 s n & \r \t \t \t p p f > > F 0132100 P R E Q . r s i z e q p p > 0132120 > F P R E Q . r s i z & \r \t \t 0132140 \t p p f > > F P R E Q . r r 0132160 o t a t i o n e q p p > > F 0132200 P R E Q . r r o t a t i o n t 0132220 h e n \r \t \t \t [ \r \t \t \t \t 0132240 f > > F O N T . W T P o s . F i 0132260 l e = F P 376 001 \0 262 d O S D N E \r 0132300 \t \t \t \t f > > F O N T . A u x S 0132320 e t = p f > > F O N T . s e t \r 0132340 \t \t \t \t f > > F O N T . A u x F 0132360 o n t = p f > > F O N T . f o n 0132400 t \r \t \t \t \t f > > F O N T . i n 0132420 d i r e c t = t r u e \r \t \t \t \t 0132440 f o u n d = t r u e \r \t \t \t 0132460 \t b r e a k \r \t \t \t ] \r 0132500 \t \t \t ] \r \t \t \t ] \r \t \t \t ] \r \t 0132520 \t u n l e s s f o u n d t h 0132540 e n \r \t \t \t [ \t \t / / A s s i g 0132560 n I C C ' s \r \t \t \t f > > F O 0132600 N T . I C C P o s . F i l e = F 0132620 P O S D N E \r \t \t \t f > > F O N 0132640 T . I C C B a s e = I C C \r \t \t 0132660 \t I C C = I C C + f 376 001 \0 271 247 > 0132700 > F O N T . e c - f > > F O N T 0132720 . b c + 1 \r \t \t \t ] \r \t \t ] \r 0132740 r e s u l t i s I C C \r ] 0132760 \r \r a n d \r \r \f / / A s s e m b 0133000 l e w i d t h s o n a f 0133020 o n t - b y - f o n t b a s i 0133040 s i f n e e d e d . \r \t \r A 0133060 s s e m b l e W i d t h s ( ) 0133100 b e [ \r \t l e t p F o n t = 0133120 v e c 3 \r \t @ p F o n t = 0 \r 0133140 \t w h i l e L o o p F o n t s 0133160 ( p F o n t ) d o \r \t \t [ \r \t 0133200 \t C u r s o r T o g g l e ( 0 ) 0133220 \r \t \t l e t f = p F o n t ! 1 0133240 \r \t \t l e t p = p F o n t ! 0 0133260 \r \t \t l e t f p = v e c 1 376 0133300 001 \0 K 270 ; l e t f i l e = n 0133320 i l \r \t \t i f f > > F O N T . 0133340 i n d i r e c t e q 0 t h 0133360 e n \r \t \t [ \r \t \t t e s t f > 0133400 > F O N T . s h a r a b l e t 0133420 h e n \r \t \t \t [ \r \t \t \t D o u b 0133440 l e C o p ( f p , l v p > > F 0133460 P R E Q . s a ) \r \t \t \t l e t 0133500 r c = p > > F P R E Q . r s o u 0133520 r c e - p > > F P R E Q . b c \r 0133540 \t \t \t D P A D i ( f p , r c * C 0133560 h a r W i d t h s i z e ) \r \t \t 0133600 \t D o u b l e C o p ( l v f > 0133620 > F O N T . W T P o s , f p ) \r 0133640 \t \t \t f i l e = ( p > > F P R E 0133660 Q . t y p e e q C o n v e r 0133700 t e d ) 376 001 \0 e 364 ? \r \t \t \t 0133720 F P O S S c r a t c h , F P O 0133740 S G o d \r \t \t \t ] \r \t \t o r \r \t 0133760 \t \t [ \r \t \t \t l e t n c = f > 0134000 > F O N T . e c - f > > F O N T 0134020 . b c + 1 \r \t \t \t l e t C W T 0134040 = F S G e t X ( n c * C h a r W 0134060 i d t h s i z e ) \r \t \t \t S e t 0134100 B l o c k ( C W T , H N o n E x 0134120 C o d e , n c * C h a r W i d t 0134140 h s i z e ) \r \t \t \t W i n d o w 0134160 G e t P o s i t i o n ( w s , l 0134200 v f > > F O N T . W T P o s ) 0134220 \r \t \t \t w h i l e p d o \r \t 0134240 \t \t \t [ \r \t \t \t \t l e t t = p 0134260 > > F P R E Q . t y p e \r \t \t \t 0134300 \t t e s t t n 376 001 \0 E 003 e 0134320 F o n t P a r t C h a r a c t e 0134340 r t h e n \r \t \t \t \t [ \r \t \t \t 0134360 \t f i l e = ( ( t e q I X T 0134400 y p e C h a r s ) % ( t e q 0134420 I X T y p e O r b i t C h a r s 0134440 ) ) ? w f d i r , w s \r \t \t \t 0134460 \t D o u b l e C o p ( f p , l v 0134500 p > > F P R E Q . s a ) \r \t \t 0134520 \t \t l e t r c = p > > F P R E 0134540 Q . r s o u r c e - p > > F P R 0134560 E Q . b c \r \t \t \t \t l e t n c 0134600 = p > > F P R E Q . r n - p > > 0134620 F P R E Q . r n + 1 \r \t \t \t \t D 0134640 P A D i ( f p , r c * C h a r W 0134660 i d t h s i z e ) \r \t \t \t \t W i 0134700 n d o w S e t P o s i t i o 376 001 0134720 \0 261 036 n ( f i l e , f p ) \r \t \t 0134740 \t \t l e t o c = p > > F P R E 0134760 Q . r m - f > > F O N T . b c \r 0135000 \t \t \t \t W i n d o w R e a d B l 0135020 o c k ( f i l e , C W T + o c * 0135040 C h a r W i d t h s i z e , \r \t 0135060 \t \t \t \t n c * C h a r W i d t h 0135100 s i z e ) \r \t \t \t \t ] \r \t \t \t \t 0135120 o r \r \t \t \t \t M o v e B l o c k 0135140 ( C W T + C h a r W i d t h s i 0135160 z e * ( p > > F P R E Q . r m - 0135200 f > > F O N T . b c ) , \r \t \t \t 0135220 \t \t l v p > > C R E Q . w i d 0135240 t h s , C h a r W i d t h s i z 0135260 e ) \r \t \t \t \t p = p > > F P R E 0135300 Q . n e x t \r \t \t \t \t ] \r \t \t \t 0135320 W i n 376 001 \0 254 267 d o w S e t P o 0135340 s i t i o n ( w s , l v f > > 0135360 F O N T . W T P o s ) \r \t \t \t W 0135400 i n d o w W r i t e B l o c k ( 0135420 w s , C W T , n c * C h a r W i 0135440 d t h s i z e ) \r \t \t \t f i l e 0135460 = F P O S S c r a t c h \r \t \t \t 0135500 ] \r \t \t f > > F O N T . W T P o 0135520 s . F i l e = f i l e \r \t \t ] \r 0135540 \t \t ] \r ] \r \r a n d \r \r \f / / W 0135560 r i t e d i r e c t o r i e s 0135600 ! ! ! ! ! \r \r W r i t e D i r e 0135620 c t o r i e s ( ) b e [ \r \t 0135640 l e t F S p o s = v e c 1 \r 0135660 \t l e t C D p o s = v e c 1 0135700 \r \t l e t p F o n t = v e c 0135720 3 \r \r / / W r i 376 001 \0 005 370 t e 0135740 F S d i r e c t o r y . \r \t W 0135760 i n d o w G e t P o s i t i o n 0136000 ( w s , F S p o s ) \r \t @ p F o 0136020 n t = 0 \r \t w h i l e L o o p 0136040 F o n t s ( p F o n t ) d o \r 0136060 \t \t [ \r \t \t C u r s o r T o g g 0136100 l e ( 1 ) \r \t \t l e t f = p F 0136120 o n t ! 1 \r \t \t W i n d o w W r 0136140 i t e B l o c k ( w s , l v f 0136160 > > F O N T . f s , s i z e F 0136200 D E S / 1 6 ) \r \t \t ] \r \r / / W 0136220 r i t e C D d i r e c t o r 0136240 y . \r \t W i n d o w G e t P o s 0136260 i t i o n ( w s , C D p o s ) \r 0136300 \t W i n d o w W r i t e B l o c 0136320 k ( w s , t a b l e [ 376 001 \0 0136340 < n 0 ; 0 ] , 2 ) / / p o 0136360 i n t e r f o r d u m m y 0136400 i n d e x \r \t l e t c p = v e 0136420 c 1 \r \t W i n d o w G e t P o 0136440 s i t i o n ( w s , c p ) \t / / 0136460 A c c o u n t c u r r e n t 0136500 p o s i t i o n . \r \t @ p F o n 0136520 t = 0 \r \t w h i l e L o o p F 0136540 o n t s ( p F o n t ) d o \r \t 0136560 \t [ \r \t \t C u r s o r T o g g l 0136600 e ( 1 ) \r \t \t l e t f = p F o 0136620 n t ! 1 \r \t \t i f f > > F O N 0136640 T . i n d i r e c t e q 0 0136660 t h e n \r \t \t [ \r \t \t l e t f 0136700 p = v e c 1 \r \t \t l e t C D 0136720 = v e c 5 1 2 \r \t \t S e t B l 0136740 o c 376 001 \0 ^ 350 k ( C D , - 1 , 5 0136760 1 2 ) \r \t \t l e t p = p F o n 0137000 t ! 0 \r \t \t w h i l e p d o 0137020 \r \t \t \t [ \r \t \t \t l e t t = p 0137040 > > F P R E Q . t y p e \r \t \t \t 0137060 t e s t t n e F o n t P a 0137100 r t C h a r a c t e r t h e n 0137120 \r \t \t \t [ \r \t \t \t c o m p i l e 0137140 i f R e p o r t S w t h e n 0137160 \r \t \t \t [ \r \t \t \t l e t f 0137200 r = R e p o r t > > R E P . F o 0137220 n t s R e c o r d e d \r \t \t \t 0137240 i f f r n e n R e p o r t 0137260 F o n t s t h e n \r \t \t \t 0137300 [ \r \t \t \t l e t q = ( l v 0137320 R e p o r t > > R E P . f o n 0137340 t s ) + ( s i 376 001 \0 = 333 z e R 0137360 E P F o n t / 1 6 ) * f r \r \t \t 0137400 \t f r = f r + 1 \r \t \t \t 0137420 R e p o r t > > R E P . F o n t 0137440 s R e c o r d e d = f r \r \t \t \t 0137460 q > > R E P F o n t . f a m 0137500 = p > > F P R E Q . r f a m \r \t 0137520 \t \t q > > R E P F o n t . f 0137540 a c e = p > > F P R E Q . r f a 0137560 c e \r \t \t \t q > > R E P F o 0137600 n t . s i z = p > > F P R E Q . 0137620 r s i z \r \t \t \t q > > R E P 0137640 F o n t . u s e d = p > > F P R 0137660 E Q . f a m \r \t \t \t ] \r \t \t 0137700 \t ] \r \t \t \t l e t f i l e = 0137720 ( ( t e q I X T y p e C h a 0137740 r s ) % ( t e q I X 376 001 \0 263 0137760 353 T y p e O r b i t C h a r s ) 0140000 ) ? w f d i r , w s \r \t \t \t l 0140020 e t o f f = v e c 1 \r \t \t \t 0140040 D o u b l e C o p ( o f f , l v 0140060 p > > F P R E Q . s a ) \r \t \t 0140100 \t l e t r c = p > > F P R E Q 0140120 . r s o u r c e - p > > F P R E 0140140 Q . b c \r \t \t \t l e t n c = p 0140160 > > F P R E Q . r n - p > > F P 0140200 R E Q . r m + 1 \r \t \t \t l e t 0140220 n a c = p > > F P R E Q . e c - 0140240 p > > F P R E Q . b c + 1 \r \t \t 0140260 \t D P A D i ( o f f , C h a r W 0140300 i d t h s i z e * n a c ) \t / / 0140320 O f f = b e g o f C D \r \t \t 0140340 \t D o u b l e C o p ( f p , o f 0140360 f 376 001 \0 \t 273 ) \r \t \t \t D P A D i 0140400 ( f p , r c * 2 ) \r \t \t \t W i n 0140420 d o w S e t P o s i t i o n ( f 0140440 i l e , f p ) \r \t \t \t l e t o 0140460 c = p > > F P R E Q . r m - f > 0140500 > F O N T . b c \r \t \t \t W i n d 0140520 o w R e a d B l o c k ( f i l e 0140540 , C D + o c * 2 , n c * 2 ) \r \t 0140560 \t \t i f ( ( t e q I X T y 0140600 p e C h a r s ) % ( t e q I 0140620 X T y p e O r b i t C h a r s ) 0140640 ) t h e n \r \t \t \t [ \t \t \t 0140660 \t / / R e - l o c a t e a d d 0140700 r e s s e s . \r \t \t \t f o r 0140720 i = 0 t o n c - 1 d o \r 0140740 \t \t \t \t [ \r \t \t \t \t l e t p = 0140760 C D + ( o c 376 001 \0 245 , + i ) * 2 0141000 \r \t \t \t \t i f p ! 0 n e - 0141020 1 t h e n \r \t \t \t \t [ \r 0141040 \t \t \t \t D o u b l e A d d 0141060 ( p , o f f ) \r \t \t \t \t p 0141100 > > F P O S . F i l e = F P O S 0141120 G o d \r \t \t \t \t ] \r \t \t \t 0141140 \t ] \r \t \t \t ] \r \t \t \t ] \r 0141160 \t \t \t o r \r \t \t \t [ \t / / F o n 0141200 t P a r t C h a r \r \t \t \t D o u 0141220 b l e C o p ( C D + p > > F P R 0141240 E Q . r m * 2 , l v p > > C R 0141260 E Q . p o s ) \r \t \t \t ] \r \t \t \t 0141300 p = p > > F P R E Q . n e x t \r 0141320 \t \t \t ] \r \t \t l e t n c = f > 0141340 > F O N T . e c - f > > F O N T 0141360 . b c + 1 \r \t \t W i n 376 001 \0 302 c 0141400 d o w S e t P o s i t i o n ( w 0141420 s , c p ) \r \t \t W i n d o w W r 0141440 i t e B l o c k ( w s , C D , n 0141460 c * 2 ) \r \t \t W i n d o w G e t 0141500 P o s i t i o n ( w s , c p ) \r 0141520