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