$ 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