%! %%Pages: (atend) %%DocumentFonts: (atend) %%EndComments % % Frame Maker PostScript Prolog 1.11, for use with Maker 1.11 % Copyright (c) 1986,87 by Frame Technology, Inc. All rights reserved. % % Known Problems: % Due to bugs in Transcript, the 'PS-Adobe-' is omitted from line 1 /FMversion (1.11) def /FrameDict 120 dict def % The readline in 23.0 doesn't recognize cr's as nl's on AppleTalk FrameDict /tmprangecheck errordict /rangecheck get put errordict /rangecheck {FrameDict /bug true put} put FrameDict /bug false put mark % Some PS machines read past the CR, so keep the following 3 lines together! currentfile 5 string readline 00 0000000000 cleartomark errordict /rangecheck FrameDict /tmprangecheck get put FrameDict /bug get { /readline { /gstring exch def /gfile exch def /gindex 0 def { gfile read pop dup 10 eq {exit} if dup 13 eq {exit} if gstring exch gindex exch put /gindex gindex 1 add def } loop pop gstring 0 gindex getinterval true } def } if /FMVERSION { FMversion ne { /Times-Roman findfont 18 scalefont setfont 100 100 moveto (Maker version does not match postscript_prolog!) dup = show showpage } if } def /FMLOCAL { FrameDict begin 0 def end } def /landscape FMLOCAL /docheight FMLOCAL /docwidth FMLOCAL /yscale FMLOCAL /xscale FMLOCAL /orgxfer FMLOCAL /orgproc FMLOCAL /organgle FMLOCAL /orgfreq FMLOCAL /FMDOCUMENT { /#copies exch def FrameDict begin 0 ne /landscape exch def /docheight exch def /docwidth exch def /yscale exch def /xscale exch def currenttransfer cvlit /orgxfer exch def currentscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def end } def /pagesave FMLOCAL /orgmatrix FMLOCAL /FMBEGINPAGE { FrameDict begin /pagesave save def 2 setlinecap xscale yscale scale landscape { 90 rotate 0 docheight neg translate } if /orgmatrix matrix def gsave } def /FMENDPAGE { grestore pagesave restore end showpage } def /fontname FMLOCAL /fontscale FMLOCAL /fontnum FMLOCAL /fontdict FMLOCAL /FMDEFINEFONT { FrameDict begin /fontname exch def /fontscale exch def /fontnum exch def /fontdict fontname findfont fontscale scalefont def fontdict /Encoding get StandardEncoding eq { fontdict DiacriticEncode /fontdict exch def } { fontdict NonDiacriticEncode /fontdict exch def } ifelse FMfonts fontnum fontnum fontdict definefont put end } def /FMLINEWIDTHS { FrameDict begin dup array /FMlinewidths exch def 1 sub -1 0 {exch FMlinewidths 3 1 roll lnormalize put} for end } def FrameDict begin /savematrix { orgmatrix currentmatrix pop } bind def /restorematrix { orgmatrix setmatrix } bind def /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul exch dup mul add sqrt def /max {2 copy lt {exch} if pop} bind def /min {2 copy gt {exch} if pop} bind def /DiacriticEncoding [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /.notdef /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef /yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown /exclamdown /logicalnot /.notdef /florin /.notdef /.notdef /guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron ] def /FMfonts 255 array def /basefontdict FMLOCAL /newfontdict FMLOCAL /DiacriticEncode { /basefontdict exch def /newfontdict basefontdict maxlength dict def basefontdict {exch dup /FID ne {dup /Encoding eq {exch pop DiacriticEncoding} {exch} ifelse newfontdict 3 1 roll put } {pop pop} ifelse } forall newfontdict } bind def /NonDiacriticEncode { /basefontdict exch def /newfontdict basefontdict maxlength dict def basefontdict {exch dup /FID ne {exch newfontdict 3 1 roll put} {pop pop} ifelse } forall newfontdict } bind def /freq FMLOCAL /bwidth FMLOCAL /bpside FMLOCAL /bstring FMLOCAL /onbits FMLOCAL /offbits FMLOCAL /xindex FMLOCAL /yindex FMLOCAL /x FMLOCAL /y FMLOCAL /setpattern { /freq exch def /bwidth exch def /bpside exch def /bstring exch def /onbits 0 def /offbits 0 def freq 0 {/y exch def /x exch def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer offbits offbits onbits add div setgray } bind def /grayness { setgray orgxfer cvx settransfer orgfreq organgle orgproc cvx setscreen } bind def /normalize { transform cvi exch cvi exch itransform } bind def /dnormalize { dtransform cvi exch cvi exch idtransform } bind def /lnormalize { 0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop } bind def /fillprocs [{0.00 grayness} {0.10 grayness} {0.30 grayness} {0.50 grayness} {0.70 grayness} {0.90 grayness} {0.97 grayness} {1.00 grayness} {<0F1E3C78F0E1C387> 8 1 dpi 16 div setpattern} {<0F87C3E1F0783C1E> 8 1 dpi 16 div setpattern} { 8 1 dpi 16 div setpattern} { 8 1 dpi 16 div setpattern} {<8142241818244281> 8 1 dpi 16 div setpattern} {<03060C183060C081> 8 1 dpi 16 div setpattern} {<8040201008040201> 8 1 dpi 16 div setpattern} {} {1.00 grayness} {0.90 grayness} {0.70 grayness} {0.50 grayness} {0.30 grayness} {0.10 grayness} {0.03 grayness} {0.00 grayness} { 8 1 dpi 16 div setpattern} { 8 1 dpi 16 div setpattern} {<3333333333333333> 8 1 dpi 16 div setpattern} {<0000FFFF0000FFFF> 8 1 dpi 16 div setpattern} {<7EBDDBE7E7DBBD7E> 8 1 dpi 16 div setpattern} { 8 1 dpi 16 div setpattern} {<7FBFDFEFF7FBFDFE> 8 1 dpi 16 div setpattern} {} ] def /H { FMlinewidths exch get setlinewidth } bind def /X { fillprocs exch get exec } bind def /V { gsave eofill grestore } bind def /N { gsave stroke grestore } bind def /M {moveto} bind def /E {lineto} bind def /D {curveto} bind def /O {closepath} bind def /n FMLOCAL /L { /n exch def newpath normalize moveto 2 1 n {pop normalize lineto} for } bind def /Y { L closepath } bind def /K { /n exch def newpath moveto 3 1 n {pop curveto} for } bind def /J { /n exch def newpath moveto 1 1 n {pop curveto} for } bind def /x1 FMLOCAL /x2 FMLOCAL /y1 FMLOCAL /y2 FMLOCAL /R { /y2 exch def /x2 exch def /y1 exch def /x1 exch def x1 y1 x2 y1 x2 y2 x1 y2 4 Y } bind def /C { grestore gsave R clip } bind def /U { grestore gsave } bind def /F { FMfonts exch get setfont } bind def /T { moveto show } bind def /P { moveto 0 32 3 2 roll widthshow } bind def /S { moveto 0 exch ashow } bind def /B { moveto 0 32 4 2 roll 0 exch awidthshow } bind def /Q { moveto gsave show grestore } bind def /x FMLOCAL /y FMLOCAL /dx FMLOCAL /dy FMLOCAL /dl FMLOCAL /t FMLOCAL /t2 FMLOCAL /Cos FMLOCAL /Sin FMLOCAL /r FMLOCAL /W { dnormalize /dy exch def /dx exch def normalize /y exch def /x exch def /dl dx dx mul dy dy mul add sqrt def dl 0.0 gt { /t currentlinewidth def savematrix /Cos dx dl div def /Sin dy dl div def /r [Cos Sin Sin neg Cos 0.0 0.0] def /t2 t 2.5 mul 3.5 max def newpath x y translate r concat 0.0 0.0 moveto dl t 2.7 mul sub 0.0 rlineto stroke restorematrix x dx add y dy add translate r concat t 0.67 mul setlinewidth t 1.61 mul neg 0.0 translate 0.0 0.0 moveto t2 1.7 mul neg t2 2.0 div moveto 0.0 0.0 lineto t2 1.7 mul neg t2 2.0 div neg lineto stroke t setlinewidth restorematrix } if } bind def /G { gsave newpath normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath eofill grestore } bind def /x FMLOCAL /y FMLOCAL /w FMLOCAL /h FMLOCAL /xx FMLOCAL /yy FMLOCAL /ww FMLOCAL /hh FMLOCAL /A { /y exch def /x exch def /h exch def /w exch def x y normalize /yy exch def /xx exch def w h dnormalize /hh exch def /ww exch def ww abs hh abs xx ww add yy hh sub gsave savematrix newpath translate scale 0.0 0.0 1.0 5 3 roll arc 0 setlinecap restorematrix stroke grestore } bind def /FMsaveobject FMLOCAL /FMoptop FMLOCAL /FMdicttop FMLOCAL /BEGINPRINTCODE { /FMdicttop countdictstack 1 add def /FMoptop count 6 sub def /FMsaveobject save def userdict begin /showpage {} def newpath translate 0.0 0.0 moveto } bind def /ENDPRINTCODE { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMsaveobject restore } bind def /gn { 0 { 46 mul cf read pop 32 sub dup 46 lt {exit} if 46 sub add } loop add } bind def /str FMLOCAL /cfs { /str sl string def 0 1 sl 1 sub {str exch val put} for str def } bind def /ic [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx} {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx} {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh} {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh} {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl} {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl} {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl} {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl} ] def /sl FMLOCAL /val FMLOCAL /ws FMLOCAL /im FMLOCAL /bs FMLOCAL /cs FMLOCAL /len FMLOCAL /pos FMLOCAL /ms { /sl exch def /val 255 def /ws cfs /im cfs /val 0 def /bs cfs /cs cfs } bind def 400 ms /ip { is 0 cf cs readline pop { ic exch get exec add } forall pop } bind def /wh { /len exch def /pos exch def ws 0 len getinterval im pos len getinterval copy pop pos len } bind def /bl { /len exch def /pos exch def bs 0 len getinterval im pos len getinterval copy pop pos len } bind def /s1 1 string def /fl { /len exch def /pos exch def /val cf s1 readhexstring pop 0 get def pos 1 pos len add 1 sub {im exch val put} for pos len } bind def /hx { 3 copy getinterval cf exch readhexstring pop pop } bind def /h FMLOCAL /w FMLOCAL /lb FMLOCAL /bitmapsave FMLOCAL /is FMLOCAL /cf FMLOCAL /BEGINBITMAP { gsave translate scale /h exch def /w exch def /lb w 7 add 8 idiv def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h 1 [w 0 0 h neg 0 h] {ip} image bitmapsave restore grestore } bind def /ENDBITMAP { } bind def end %%EndProlog %%BeginSetup (1.11) FMVERSION 1. 1. 468. 684. 0 1 FMDOCUMENT 0 10. /Times-Roman FMDEFINEFONT 1 10. /Times-Italic FMDEFINEFONT 2 12. /Times-Bold FMDEFINEFONT 3 10. /Times-Bold FMDEFINEFONT 4 10. /Courier-Bold FMDEFINEFONT 5 10. /Courier FMDEFINEFONT 6 12. /Times-Roman FMDEFINEFONT 7 12. /Times-BoldItalic FMDEFINEFONT 8 14. /Times-Bold FMDEFINEFONT 9 10. /Courier-Oblique FMDEFINEFONT 10 10. /Times-BoldItalic FMDEFINEFONT 11 18. /Times-Bold FMDEFINEFONT 12 10. /Helvetica-Bold FMDEFINEFONT 0.5 1. 3. 4. 4 FMLINEWIDTHS %%EndSetup %%Page: "157" 1 FMBEGINPAGE 0 F 0 X (157) 410. 648. T 2.34 (between the server. In most environments, the performance is very good, so ) 43. 623. P 1 F 2.34 (ched) 376.84 623. P 0 F 2.34 ( works) 395.72 623. P 2.42 (very well. If ) 43. 611. P 1 F 2.42 (ched) 101.9 611. P 0 F 2.42 ( is run at some distance from the server, with low speed communica-) 120.78 611. P 2.3 (tion lines or network gateways in the way, it will perform poorly. On the other hand, a) 43. 599. P 2.59 (bigger investment in server-side code could have been made, but it probably would not) 43. 587. P (perform as well as the C implementation.) 43. 575. T 2 F (8.10) 43. 544. T (Typeahead.) 92. 544. T 0 F 2.26 (No computer is ever fast enough. Given an editor that is doing complicated real-) 74. 524. P 2.29 (time animation of the typesetting of a document, in complicated situations it is probably) 43. 512. P 1.56 (going to be possible to type faster than the editor can echo, if it is echoing each character) 43. 500. P 2.04 (as it receives it. This is the well-known typeahead problem. If implemented properly, the) 43. 488. P 2.33 (model/view/controller paradigm has the advantage that the typeahead problem disappears.) 43. 476. P 2.29 (The key factor is that the connection between the model and the controller is decoupled) 43. 464. P 2.73 (from the connection between the model and the view. When the model is updated, the) 43. 452. P (view is not necessarily updated. The controlling loop of ) 43. 440. T 1 F (ched) 268.53 440. T 0 F ( looks like this:) 287.41 440. T 3 F 1.92 (1.) 74. 417. P 0 F 1.92 ( While there are user keystrokes in the input queue, process them. These update) 81.5 417. P (the model only.) 74. 405. T 3 F (2.) 74. 382. T 0 F ( Invoke the view to update the screen according to the new state of the model.) 81.5 382. T 3 F (3.) 74. 359. T 0 F ( Wait for the input queue to become non-empty) 81.5 359. T 3 F (4.) 74. 336. T 0 F ( Go back to step ) 81.5 336. T 3 F (1) 148.99 336. T 0 F (.) 153.99 336. T 1.53 (Input events are being batched together. If the user manages to type faster than the) 74. 314. P 1.89 (system can echo, then it will just start echoing more keystrokes at once, quickly catching) 43. 302. P (up.) 43. 290. T 2 F (8.11) 43. 259. T (How to get Ched) 92. 259. T 1 F 4.38 (Ched) 74. 239. P 0 F 4.38 ( can be obtained by sending electronic mail to \322) 95.11 239. P 1 F 4.38 (news-archive@sun.com) 325.35 239. P 0 F 4.38 (") 420.92 239. P 3.02 (\050from the ARPAnet\051 or \322) 43. 227. P 1 F 3.02 (sun!news-archive\323) 155.06 227. P 0 F 3.02 ( from usenet. The subject field of the mes-) 231.16 227. P 1.67 (sage you send should be \322) 43. 215. P 1 F 1.67 (send ched\323) 155.51 215. P 0 F 1.67 (. An automated mail handling program will send the) 202.46 215. P 2.95 (source file to you by return mail. The ) 43. 203. P 1 F 2.95 (news-archive) 218.48 203. P 0 F 2.95 ( is a collection of generally useful) 271.8 203. P 3.02 (NeWS documents and sample programs. A subject line of \322) 43. 191. P 1 F 3.02 (help) 309.06 191. P 0 F 3.02 (\323 will return to you a) 326.28 191. P (description of the archive and how to get information from it.) 43. 179. T FMENDPAGE %%Page: "156" 2 FMBEGINPAGE 0 F 0 X (156) 410. 648. T (ed. ) 43. 623. T 1 F (ched) 57.44 623. T 0 F ( does the following:) 76.32 623. T 1.76 (It overrides) 74. 601. P 1 F 1.76 ( /) 121.58 601. P 1.76 (FixFrame) 128.62 601. P 0 F 1.76 ( with a procedure that send a message to the client side. So) 168.61 601. P 2.64 (when damage occurs, nothing else happens immediately. In particular, the record) 74. 589. P 1.79 (that NeWS keeps of what region has been damaged is untouched. If more damage) 74. 577. P 3.19 (occurs before the application side gets around to dealing with the first damage) 74. 565. P (request, the two damages will get merged and the application will see them as one.) 74. 553. T 1.44 (When the client side of ) 74. 531. P 1 F 1.44 (ched) 176.47 531. P 0 F 1.44 ( receives one of these messages, it replies with a mes-) 195.35 531. P 4.44 (sage that contains a \322start redraw\323 request, the PostScript code necessary to) 74. 519. P 1.9 (redraw the window, and an \322end redraw\323 request. Start and end redraw are essen-) 74. 507. P 2.41 (tially the same as ) 74. 495. P 1 F 2.41 (/FixFrame) 155.3 495. P 0 F 2.41 ( broken in half: the part before) 198.07 495. P 1 F 2.41 ( /PaintClient) 334.71 495. P 0 F 2.41 ( and the) 388.52 495. P (part following.) 74. 483. T 2 F (8.9) 43. 452. T (Selections) 92. 452. T 0 F 1.46 (When many people first see NeWS they are seduced by the fact that they can send) 74. 432. P 3. (code down to the server. For performance, they try to avoid client/server messages by) 43. 420. P 2.25 (putting as much code as possible in the server. Sometimes this is reasonable, and some-) 43. 408. P 2.42 (times it not. The decision needs about client/server distribution of code should be based) 43. 396. P (on whether the programming environment in the server is appropriate.) 43. 384. T 1.88 (In the case of ) 74. 362. P 1 F 1.88 (ched) 137.62 362. P 0 F 1.88 (, it has a quite elaborate database describing the document and) 156.5 362. P 1.61 (its formatting properties. This database has to be accessed very rapidly using quite sophis-) 43. 350. P 2.68 (ticated algorithms. The PostScript languageis not a very good language for this kind of) 43. 338. P 2.23 (processing, C is far better. So almost all of ) 43. 326. P 1 F 2.23 (ched) 236.07 326. P 0 F 2.23 ( is written in C, with only a thin layer) 254.95 326. P (being written using PostScript code.) 43. 314. T 2.5 (An example of a situation in ) 74. 292. P 1 F 2.5 (ched) 205.07 292. P 0 F 2.5 ( where this tradeoff between C and PostScript) 223.95 292. P 1.57 (is hard to make is in the code that handles selections. From the users point of view, mak-) 43. 280. P 1.64 (ing a selection progresses through three stages: 1\051 The user positions the mouse at on end) 43. 268. P 1.29 (of the selection and presses down on the mouse button. The caret appears as a vertical line) 43. 256. P 2.31 (at the division between two characters nearest the mouse. 2\051 The user moves the mouse) 43. 244. P 2.07 (with the button down to extend the selection. As the mouse is being moved, the caret is) 43. 232. P 2.23 (echoed as a line that underlines the characters between the start of the selection and the) 43. 220. P 2.93 (position of the mouse. 3\051 Finally the user lifts his finger off the mouse button, which) 43. 208. P (defines the end of the selection.) 43. 196. T 2.63 (The middle phase is difficult because the echoing of the underline that indicates) 74. 174. P 2.49 (the extent of the selection depends critically on the text that is selected: it is always at) 43. 162. P 1.77 (the baseline of the text and ends at the boundary between two characters. This involves a) 43. 150. P 2. (fairly expensive calculation that uses the document database. There are two choices: send) 43. 138. P 1.34 (messages back and forth between the client and the server each time the mouse moves and) 43. 126. P 2.06 (let the client side deal with the update, or download enough code so that the server side) 43. 114. P 1.84 (can deal with it. In) 43. 102. P 1 F 1.84 ( ched) 125.06 102. P 0 F 1.84 ( the first choice was taken. This choice makes the server side of) 148.28 102. P 3.73 (the application quite small and puts the responsibility for efficient calculation on the) 43. 90. P 2.14 (client side. Performance of ) 43. 78. P 1 F 2.14 (ched) 161.81 78. P 0 F 2.14 ( depends heavily on the performance of message passing) 180.69 78. P FMENDPAGE %%Page: "155" 3 FMBEGINPAGE 0 F 0 X (155) 410. 648. T 2 F (8.7) 43. 621. T (Input Events With ) 92. 621. T (Names.) 190.35 621. T 0 F (The input loop in ) 74. 601. T 1 F (ched ) 145.67 601. T 0 F (is as follows:) 167.05 601. T 4 F ( {) 79. 583. T (clear awaitevent begin) 99. 583. T (ClientCanvas setcanvas) 99. 572. T ({ Name type /integertype eq) 99. 561. T ({ 2 tagprint WindowID typedprint Name typedprint }) 118. 550. T ({ KeyActions Name get cvx exec } ifelse) 118. 539. T (} stopped) 99. 528. T (end) 99. 517. T ( } loop) 79. 506. T 0 F 1.78 (Whenever an event is received, its ) 74. 490. P 3 F 1.78 (/Name) 224.37 490. P 0 F 1.78 ( field is inspected. If it contains an inte-) 252.14 490. P 1.77 (ger, then it is just a simple keystroke, and a message containing the integer is sent to the) 43. 478. P 2.06 (client. Otherwise, the name is looked up in the ) 43. 465. P 3 F 2.06 (KeyActions) 250.13 465. P 0 F 2.06 ( dictionary and whatever val-) 299.57 465. P 2.84 (ue is found will be executed.) 43. 452. P 5 F 2.84 ( ) 172.17 452. P 0 F 2.84 (The ) 181.01 452. P 3 F 2.84 (KeyActions) 201.9 452. P 0 F 2.84 ( dictionary contains a set of procedures) 251.34 452. P 2.72 (whose names match the names of special events generated by NeWS. The ) 43. 440. P 1 F 2.72 (stopped ) 374.22 440. P 0 F 2.72 (and) 410.55 440. P 1 F 2.2 (clear) 43. 428. P 0 F 2.2 ( values in the input loop above are used here as guards and cleanup in the case of) 63.55 428. P (missing ) 43. 416. T 1 F (KeyActions) 76.62 416. T 0 F (. ) 122.17 416. T 1.94 (For instance ) 74. 393. P 3 F 1.94 (/LeftMouseButton) 129.54 393. P 0 F 1.94 ( is defined as a procedure that sends a message to) 207.87 393. P 1.99 (the application saying that the left mouse button has gone up or down, depending on the) 43. 381. P 3 F 1.65 (/Action) 43. 368. P 0 F 1.65 ( field. Besides sending the message to the application, the procedure either enables) 74.11 368. P 2.74 (or disables the catching of ) 43. 355. P 3 F 2.74 (/MouseDragged) 164.18 355. P 0 F 2.74 ( events, depending on whether the button is) 231.95 355. P 2.15 (going down or going up. This sequence avoids the overhead of dealing with drag events) 43. 343. P 2.79 (when no button is pressed. Also, since this enabling happens in the NeWS server, and) 43. 331. P 1.68 (with the scheduling guarantees given by NeWS, the downstroke and enable happen ) 43. 319. P 1 F 1.68 (atomi-) 398.88 319. P 2.33 (cally) 43. 307. P 0 F 2.33 (: there is no chance that an up event can happen in the meantime, which might be) 62.44 307. P (missed and cause the system to get stuck receiving drag events.) 43. 295. T 2 F (8.8) 43. 264. T (Responding to ) 92. 264. T (Damage.) 168.68 264. T 0 F 1.58 (In the previous examples given in this book, the execution of most graphics opera-) 74. 244. P 1.79 (tions has been triggered by the invocation of the ) 43. 232. P 1 F 1.79 (/PaintClient ) 254.37 232. P 0 F 1.79 (method in the window. The) 307.56 232. P 2.57 (typical simple application defines this method as a procedure that draws the entire con-) 43. 220. P 1.83 (tents of the window. When the window gets damaged, a ) 43. 207. P 3 F 1.83 (/Damaged ) 287.88 207. P 0 F 1.83 (event generated. This) 335.54 207. P 1.8 (event is caught by a handler that invokes the ) 43. 193. P 1 F 1.8 (/FixFrame) 239.42 193. P 6 F 1.8 ( ) 282.19 193. P 0 F 1.8 (method. ) 286.99 193. P 1 F 1.8 (/FixFrame ) 323.79 193. P 0 F 1.8 (sets the clip-) 370.85 193. P 2.51 (ping to the damaged region, repaints the frame, calls ) 43. 181. P 1 F 2.51 (/PaintClient) 278.02 181. P 0 F 2.51 (, and finally resets the) 326.92 181. P (clipping.) 43. 169. T 3.63 (In ) 74. 147. P 1 F 3.63 (ched) 88.46 147. P 0 F 3.63 (, there isn\325t enough information on the NeWS side for) 107.34 147. P 1 F 3.63 ( /PaintClient) 356.06 147. P 0 F 3.63 ( to) 411.09 147. P 1.3 (repair the display. It needs to send a message to the client asking it to send over the repair) 43. 135. P 1.74 (code. It would be incorrect to have ) 43. 123. P 1 F 1.74 (/) 196.82 123. P 1.74 (PaintClient ) 199.6 123. P 0 F 1.74 (send the message since it is called in the) 249.97 123. P 2.37 (midst of the damage repair context established by) 43. 111. P 1 F 2.37 ( /FixFrame.) 258.18 111. P 0 F 2.37 ( The repair cannot actually) 308.32 111. P 2.02 (be started until the client gets the message and sends the code to handle it. Another rea-) 43. 99. P 2.82 (son that it cannot be started yet is that requests in flight from the client to the server) 43. 87. P 1.74 (have to be executed since they were generated without knowledge that a repair was need-) 43. 75. P FMENDPAGE %%Page: "154" 4 FMBEGINPAGE 0 F 0 X (154) 410. 648. T 43. 42. 434. 630. R 7 X V 1 F 0 X 4.79 (ps_getint) 74. 623. P 0 F 4.79 ( is the last important function which is used by ) 110.67 623. P 1 F 4.79 (ft_create) 348.02 623. P 0 F 4.79 (. It simply) 383.57 623. P 2.04 (receives a fixed point number from the server. It has only a return result, with no body of) 43. 611. P (PostScript code to be sent to NeWS and no tag to wait for in return.) 43. 599. T 4 F (cdef ps_getint\050fixed x\051 => \050x\051) 79. 581. T 2 F (8.5) 43. 555. T (Use of ) 92. 555. T 7 F (user tokens) 126.66 555. T 8 F (.) 183. 555. T 0 F 2.25 (In the previous section on fonts, there was a small piece of magic left unexplained) 74. 535. P 4.54 (that involved the ) 43. 522. P 3 F 4.54 (setfileinputtoken) 126.33 522. P 0 F 4.54 ( NeWS primitive. This primitive makes use of the) 198. 522. P 2.92 (NeWS user defined token facility. Chapter 7 discussed tokens briefly, and how CPS and) 43. 510. P 3.77 (Compressed PostScript make use of tokens in order to compress data for transmission.) 43. 498. P 1.02 (NeWS has a mechanism, supported by ) 43. 486. P 1 F 1.02 (cps) 206.03 486. P 0 F 1.02 (, where a client program and the server can cooper-) 219.36 486. P 2.2 (atively agree on the definition of a user token. This allows for efficient protocol definition) 43. 474. P 2.22 (for a specific application. The NeWS reference manual gives more detail about tokens and) 43. 462. P (their definition, but we discuss them briefly here.) 43. 450. T 1.59 (There is an array of PostScript objects associated with each input stream. The NeWS) 74. 428. P 3.91 (protocol and ) 43. 416. P 1 F 3.91 (cps) 103.58 416. P 0 F 3.91 ( have facilities that allow references to these objects to be efficiently) 116.91 416. P 1.77 (encoded in the stream that flows from the application to NeWS. These references are repre-) 43. 404. P 2.3 (sented by indexes into this array. ) 43. 391. P 3 F 2.3 (setfileinputtoken ) 190.92 391. P 0 F 2.3 (puts a PostScript object, in this case a) 267.38 391. P 1.63 (font, into this array. ) 43. 379. P 1 F 1.63 (cps ) 131.18 379. P 0 F 1.63 (encodes a reference to this object when the parameter type ) 148.64 379. P 1 F 1.63 (token) 401.53 379. P 0 F 1.63 ( is) 423.19 379. P (used:) 43. 367. T 4 F (cdef ps_do_usefont\050token font\051 font setfont) 79. 349. T 0 F 2.82 (This is called by the C program passing the same index to) 74. 334. P 1 F 2.82 ( ps_do_usefont ) 336.38 334. P 0 F 2.82 (as was) 404.8 334. P 2.09 (passed to ) 43. 321. P 3 F 2.09 (setfileinputtoken) 86.61 321. P 0 F 2.09 (. This is the index that is in the font structure. The global vari-) 158.28 321. P 2.96 (able ) 43. 309. P 1 F 2.96 (ps_next_user_token) 65.12 309. P 0 F 2.96 (, which is referenced in ) 144.55 309. P 1 F 2.96 (ft_create) 255.43 309. P 0 F 2.96 (, simply keeps track of the next) 290.98 309. P (available slot in the array.) 43. 297. T 2 F (8.6) 43. 266. T (Debug Initialization.) 92. 266. T 0 F 2.18 (Almost all of the interface-code fragments defined in the ) 74. 246. P 1 F 2.18 (ched cps ) 323.31 246. P 0 F 2.18 (specification file) 364.88 246. P 1.8 (are quite simple. One, however, is not. It is the piece that initializes the environment in the) 43. 234. P 2.98 (server. It contains the definitions of procedures that create windows, define fonts, handle) 43. 222. P 1.58 (input events, and an assortment of other things. These definitions are is kept in a file that is) 43. 210. P (separate from the ) 43. 198. T 1 F (cps) 114.92 198. T 0 F ( specification file. In the specification file, the following lines appear:) 128.25 198. T 4 F (cdef ps_startup\050\051) 79. 180. T (#ifdef DEBUG) 79. 169. T (\050/home/norquay/jag/ched/ched.ps\051 run) 99. 158. T (#else) 79. 147. T (#include "ched.ps") 79. 136. T (#endif) 79. 125. T 0 F 3.78 (The initialization file is dynamically loaded from the file) 74. 110. P 1 F 3.78 ( ched.ps) 331.41 110. P 0 F 3.78 ( when ) 367.95 110. P 1 F 3.78 (ched) 402.17 110. P 0 F 3.78 ( is) 421.05 110. P 1.66 (being debugged. Once ) 43. 98. P 1 F 1.66 (ched) 140.19 98. P 0 F 1.66 ( is stable and not being debugged, the initialization code is stati-) 159.07 98. P 3.74 (cally compiled into ) 43. 86. P 1 F 3.74 (ched) 133.93 86. P 0 F 3.74 (. This has the advantage when debugging that ched.ps can be) 152.81 86. P 2.05 (altered, and the new version tested, without recompiling ) 43. 74. P 1 F 2.05 (ched) 286.57 74. P 0 F 2.05 (. Once the debugging cycle is) 305.45 74. P 1.96 (finished, there is one less file to be bundled into the release and potentially installed incor-) 43. 62. P (rectly.) 43. 50. T FMENDPAGE %%Page: "153" 5 FMBEGINPAGE 0 F 0 X (153) 410. 648. T 4 F ( int length,) 79. 623. T ( bbheight,) 79. 612. T ( descent;) 79. 601. T ( for \050f = fontroot; f; f = f->next\051) 79. 590. T (if \050f->size == size && f->name[0] == name[0]) 99. 579. T (&& f->name[1] == name[1]) 171. 569. T (&& strcmp\050name, f->name\051 == 0\051) 118. 558. T ( return f;) 99. 547. T ( index = ps_next_user_token++;) 79. 536. T ( ps_defstr\050name, size, index, &length, &bbheight, ) 79. 525. T (&descent\051;) 171. 515. T ( f = \050struct font *\051 malloc\050sizeof\050struct font\051 +) 79. 504. T (\050length >> 1\051 * sizeof f->width[0] + strlen\050name\051\051;) 99. 493. T ( f->next = fontroot;) 79. 482. T ( fontroot = f;) 79. 471. T ( f->size = size;) 79. 460. T ( f->fontindex = index;) 79. 449. T ( f->nchars = length >> 1;) 79. 438. T ( f->name = \050char *\051 &f->width[f->nchars];) 79. 427. T ( f->bbheight = bbheight;) 79. 416. T ( f->descent = descent < 0 ? -descent : descent;) 79. 405. T ( strcpy\050f->name, name\051;) 79. 394. T ( for \050index = f->nchars; --index >= 0;\051) 79. 383. T (ps_getint\050&f->width[index]\051;) 99. 372. T ( return f;}) 79. 361. T 1 F 2.22 (Ps_defstr ) 74. 346. P 0 F 2.22 (looks up the font and scales it, and passes the scaled font and the font) 116.5 346. P 2.32 (index, to a PostScript function called ) 43. 334. P 1 F 2.32 (DFS) 207.16 334. P 0 F 2.32 (. ) 225.49 334. P 1 F 2.32 (DFS) 232.8 334. P 0 F 2.32 ( returns the height, descent, and number) 251.13 334. P (of characters in the font.) 43. 322. T 4 F (cdef ps_defstr\050string name, size, index,) 79. 304. T (length, bbheight, descent\051) 118. 293. T (=> DEFSTR_TAG \050bbheight, descent, length\051) 99. 282. T (name findfont size scalefont dup index DFS) 118. 271. T 0 F 2.23 (When ) 74. 245. P 1 F 2.23 (DFS) 102.61 245. P 0 F 2.23 ( is called, the index is on the top of the stack, and two copies of the) 120.94 245. P 2.26 (font lie below the index. ) 43. 232. P 1 F 2.26 (DFS ) 154.29 232. P 0 F 2.26 (first execute) 177.38 232. P 5 F 2.26 (s) 228.79 232. P 3 F 2.26 ( setfileinputtoken ) 234.79 232. P 0 F 2.26 (which defines the font as) 315.98 232. P 2.16 (a user defined token, making use of the index. \050User defined tokens and how they work) 43. 220. P 2.15 (will be discussed in the folowing section\051. It then proceeds to send back the information) 43. 208. P (needed by) 43. 196. T 1 F ( ft_create) 83.82 196. T 0 F (.) 121.87 196. T 4 F (/DFS {) 79. 178. T ( setfileinputtoken) 79. 167. T ( DEFSTR_TAG tagprint) 79. 156. T ( begin) 79. 145. T (currentdict dup fontheight typedprint) 99. 134. T (fontdescent typedprint) 99. 123. T (WidthArray dup length typedprint) 99. 112. T (aload length 2 div { pop typedprint } repeat) 99. 101. T ( end) 79. 90. T (} def) 79. 79. T FMENDPAGE %%Page: "152" 6 FMBEGINPAGE 0 F 0 X (152) 410. 648. T 2 F (8.4) 43. 621. T (Font Information.) 92. 621. T 1 F 1.92 (Ched ) 74. 601. P 0 F 1.92 (frequently needs to measure the width of strings of text. It could do this by) 99.53 601. P 2.91 (sending the strings over to the server and asking the server to measure them, but that) 43. 589. P 1.76 (would incur massive message transmission penalties. Instead, it asks the server for a table) 43. 577. P (of widths for each font that it\325s using, and uses that table locally.) 43. 565. T 2.57 (First, we look at the straightforward C language declaration of the font structure) 74. 543. P 2.19 (used by ) 43. 531. P 1 F 2.19 (ched) 80.71 531. P 0 F 2.19 (. It contains the name of the font \050e.g. \322) 99.59 531. P 1 F 2.19 (Times-Roman) 276.51 531. P 0 F 2.19 (\323\051, its point size \050) 332.06 531. P 1 F 2.19 (line) 409.99 531. P 2.56 (12) 43. 519. P 0 F 2.56 (\051, the height of the bounding box of all the characters, the depth of descenders from) 53. 519. P 2.7 (the baseline, the number of characters, an \322index\323 for the font, and the actual array of) 43. 507. P 1.97 (widths. The ) 43. 495. P 1 F 1.97 (index) 96.66 495. P 0 F 1.97 ( of the font is a NeWS identifier that refers to the PostScript font. The) 118.32 495. P (overall font structure follows.) 43. 483. T 4 F (struct font {) 50. 463. T ( struct font *next;) 50. 446. T 9 F (/* Fonts are in a linked list */) 205. 446. T 4 F ( char *name;) 50. 429. T 9 F (/*Family name */) 205. 429. T 4 F ( char size;) 50. 412. T 9 F (/*size in points */) 205. 412. T 4 F ( char bbheight;) 50. 395. T 9 F (/*Height from highest ascender to ) 205. 395. T (lowest descender */) 205. 384. T 4 F ( char descent;) 50. 367. T 9 F (/*distance from lowest descender ) 205. 367. T (to baseline */) 205. 356. T 4 F ( unsigned short nchars,) 50. 339. T 9 F (/*The number of characters in the ) 205. 339. T (font */) 205. 328. T 4 F ( fontindex;) 50. 311. T 9 F (/*The magic token by which the ) 205. 311. T (server knows this font */) 205. 300. T 4 F ( fixed width[256];) 50. 283. T 9 F (/*The array of widths */) 205. 283. T 4 F (};) 50. 266. T 0 F 2.01 (This structure is used by the C function ) 74. 225. P 1 F 2.01 (ft_create) 250.1 225. P 0 F 2.01 ( that takes a font name and size) 285.65 225. P 3.92 (and returns an associated font structure. ) 43. 213. P 1 F 3.92 (ft_create) 227.87 213. P 0 F 3.92 ( first checks if that font is already) 263.42 213. P 4.71 (known, and if so, returns the known font structure. If the font is unknown, then) 43. 201. P 1 F 3.04 (ft_create) 43. 189. P 0 F 3.04 ( sends a message to the NeWS procedure \050) 78.55 189. P 1 F 3.04 (ps_defstr) 273.39 189. P 0 F 3.04 (\051 that requests information) 310.06 189. P 2.33 (about the font. Once ) 43. 177. P 1 F 2.33 (ft_create) 136.47 177. P 0 F 2.33 ( has got the basic information, it allocates a font structure) 172.02 177. P 2.45 (and fills it in. ) 43. 165. P 1 F 2.45 (Ps_defstr ) 108.64 165. P 0 F 2.45 (follows its return results by a stream of widths. This stream is) 151.38 165. P (picked up one-by-one and stuffed into the array using) 43. 153. T 1 F ( ps_getint) 257.4 153. T 0 F (. ) 296.57 153. T 4 F (struct font *) 79. 135. T (ft_create\050name, size\051) 79. 124. T ( char *name;) 79. 113. T ({) 79. 102. T ( register struct font *f;) 79. 91. T ( register index;) 79. 80. T FMENDPAGE %%Page: "151" 7 FMBEGINPAGE 0 F 0 X (151) 410. 648. T 2 F (8.3) 43. 621. T (Displaying the Document.) 92. 621. T 0 F 1.85 (In PostScript, as in all other languages, the execution speed of a program is very) 74. 601. P 2.15 (closely related to how well it is written. Therefore ) 43. 589. P 1 F 2.15 (ched) 265.11 589. P 0 F 2.15 ( pays quite a bit of attention to) 283.99 589. P 2.96 (writing clean code to send to NeWS. Developers who write applications that generate) 43. 577. P 2.39 (PostScript, either for a printer or NeWS, are often seduced by PostScript\325s programma-) 43. 565. P 2.39 (bility. In particular, there is a tendency to download procedure definitions that define a) 43. 553. P 1.86 (graphics model that is more familiar than the graphics model of the PostScript language.) 43. 541. P 1.65 (This extensive downloading of code can incur extra overhead in the NeWS server, where) 43. 529. P 2.27 (operations are more expensive than they are in the application. The PostScript language) 43. 517. P 4.54 (is, after all, an interpreted language. If, instead of substituting another model, the) 43. 505. P 2.3 (PostScript language graphics model is used directly for the application, the performance) 43. 493. P (benefits are large. Once again, this rule holds for both NeWS and PostScript printers.) 43. 481. T 3.27 (C) 74. 459. P 1 F 3.27 (hed) 80.67 459. P 0 F 3.27 ( uses the basic PostScript operators wherever possible, and it attempts to) 95.11 459. P 2.52 (generate the most efficient code possible. For displaying documents, ) 43. 447. P 1 F 2.52 (ched) 342.63 447. P 0 F 2.52 ( actually only) 361.51 447. P (generates five PostScript fragments:) 43. 435. T (x y ) 79. 414. T 3 F (moveto) 94. 414. T 0 F (Sets the current position to ) 205. 414. T 1 F (x,y) 314.72 414. T 0 F (.) 326.1 414. T (f ) 79. 396. T 3 F (setfont) 84.83 396. T 0 F (Sets the current font to ) 205. 396. T 1 F (f) 298.6 396. T 0 F (.) 301.38 396. T (s ) 79. 378. T 3 F (show) 85.39 378. T 0 F (Draws string ) 205. 378. T 1 F (s) 258.88 378. T 0 F (.) 262.77 378. T (x 0 32 s) 79. 360. T 3 F ( ) 110.39 360. T (widthshow) 112.89 360. T 5 F ( ) 159.01 360. T 0 F (Draws string ) 205. 360. T 1 F (s) 258.88 360. T 0 F ( with ) 262.77 360. T 1 F (x) 285.55 360. T 0 F ( added to the width ) 289.99 360. T (of every space. Widthshow is used on ) 205. 349. T (lines that are right justified, show is used ) 205. 338. T (on those that are not.) 205. 327. T (w h x y ) 79. 309. T 3 F (ERS) 111.22 309. T 0 F (Erase a rectangle starting at ) 205. 309. T 1 F (x,y) 318.02 309. T 0 F ( whose ) 329.4 309. T (size is ) 205. 298. T 1 F (w,h) 232.22 298. T 0 F (. This is the only PostScript ) 246.39 298. T (procedure call ever generated during docu-) 205. 287. T (ment display.) 205. 276. T 2.23 (With these five operators, ) 74. 257. P 1 F 2.23 (ched) 188.73 257. P 0 F 2.23 ( is able to do everything it needs in displaying a) 207.61 257. P 3.3 (document. It is very careful to only invoke ) 43. 244. P 3 F 3.3 (setfont) 242.4 244. P 0 F 3.3 ( if the font is really changing. It) 271.28 244. P 3.29 (only invokes ) 43. 231. P 3 F 3.29 (ERS) 103.47 231. P 0 F 3.29 ( if the rectangle really needs erasing. And it attempts to draw the) 122.92 231. P 2.24 (longest strings possible. One easy way to sacrifice a lot of performance is to use ) 43. 218. P 3 F 2.24 (show) 399.32 218. P 0 F 2.59 (for each word, and to call) 43. 205. P 3 F 2.59 ( moveto) 158.16 205. P 0 F 2.59 ( to reposition at the beginning of each word. When) 194.35 205. P 1.67 (there is a sequence of words with equal spacing between them, it is far more efficient to) 43. 193. P 1.67 (call ) 43. 180. P 3 F 1.67 (moveto ) 61.61 180. P 0 F 1.67 (once, and ) 96.87 180. P 3 F 1.67 (widthshow ) 141.02 180. P 0 F 1.67 (once. ) 191.31 180. P 1 F 1.67 (Ched) 216.86 180. P 0 F 1.67 ( takes advantage of the fact that it is using) 237.97 180. P 1.96 (fixed point numbers: it can specify a width to ) 43. 167. P 3 F 1.96 (widthshow ) 244.8 167. P 0 F 1.96 (that is a fractional number of) 295.38 167. P 3.65 (pixels. NeWS will use this and distribute the error amongst the spaces between the) 43. 155. P 2.24 (words such that some of the spaces are one pixel wider than others. Because of this, a) 43. 143. P 2.44 (line of right justified text with no font or baseline changes is drawn using exactly one) 43. 131. P 3 F (moveto) 43. 118. T 0 F ( and exactly one ) 74.1 118. T 3 F (widthshow) 141.86 118. T 0 F (.) 187.98 118. T FMENDPAGE %%Page: "150" 8 FMBEGINPAGE 0 F 0 X (150) 410. 648. T (altered document.) 43. 623. T 2 F (8.2) 43. 592. T (Fixed Point Arithmetic.) 92. 592. T 0 F 3.74 (Internally,) 74. 570. P 6 F 3.74 ( ) 115.38 570. P 1 F 3.74 (ched) 122.12 570. P 6 F 3.74 ( ) 141. 570. P 0 F 3.74 (does all of its computations in units of points \050approximately) 147.74 570. P 1.38 (1/72 of an inch\051. Besides being a generally convenient unit for use in documents, it is also) 43. 558. P 2.55 (the default unit in PostScript. But points are not sufficiently accurate for general use: a) 43. 546. P 1.81 (finer precision is needed. ) 43. 534. P 1 F 1.81 (Ched) 153.28 534. P 0 F 1.81 ( uses fixed point numbers, with 16 bits of fractional preci-) 174.39 534. P 2.91 (sion, and 16 bits of integer precision, including sign. This fits in very well with most) 43. 522. P 1.53 (modern computer architectures that have standardized on 32 bit words. Here are the decla-) 43. 510. P (rations necessary for dealing with these fixed point numbers:) 43. 498. T 4 F (typedef long fixed;) 50. 478. T 5 F (/*32 bit fixed point number with ) 205. 478. T (16 bits of fraction */) 205. 467. T 4 F (#define fixedi\050i\051 \050fixed\051\050\050i\051*\0501<<16\051\051) 50. 450. T 5 F (/*convert int to fixed */) 205. 433. T 4 F (#define floorfr\050fr\051 \050\050fr\051>>16\051) 50. 416. T 5 F (/*convert fixed to int by flooring ) 205. 399. T (*/) 205. 388. T 4 F (#define floatfr\050f\051 \050\050double\051f/\0501<<16\051\051) 50. 371. T 5 F (/* convert fixed to float */) 205. 354. T 4 F (#define FIXED_HUGE 0x7FFFFFFF) 50. 337. T 5 F (/*the largest possible fixed point ) 205. 320. T (value */) 205. 309. T 0 F 3.2 (These definitions provide the basic tools for declaring fixed point numbers and) 74. 290. P 2.76 (converting between them, integers, and floating point numbers. One fixed point number) 43. 278. P 1.73 (may be added to another by using standard integer addition, and one can be multiplied or) 43. 266. P 2.11 (divided by an integer by using the integer operation. Unfortunately, multiplying or divid-) 43. 254. P 2.31 (ing one fixed point number by another is more complicated, but ) 43. 242. P 1 F 2.31 (ched) 326.16 242. P 0 F 2.31 ( never needs these) 345.04 242. P (operations. ) 43. 230. T 2.14 (A very significant advantage to using this form of fixed point number is that ) 74. 208. P 1 F 2.14 (cps) 411.67 208. P 0 F 1.91 (has special facilities for them. ) 43. 196. P 1 F 1.91 (Cps) 174.74 196. P 0 F 1.91 ( understands the ) 190.3 196. P 5 F 1.91 (fixed) 263.51 196. P 0 F 1.91 ( declaration and can efficiently) 293.51 196. P 2.33 (ship numbers to and from the server in this format. For example, the following declara-) 43. 184. P (tion appears in ched.cps.) 43. 172. T 4 F (cdef ps_frmoveto\050fixed x, fixed y\051 x y moveto) 79. 154. T 0 F 3.51 (Then the call ) 74. 138. P 5 F 3.51 (\322) 139.23 138. P 4 F 3.51 (ps_frmoveto\050fixedi\0501\051/2,fixedi\0501\051/2) 145.23 138. P 3 F 3.51 (\051) 355.23 138. P 0 F 3.51 (\323 generates the) 358.56 138. P 2.56 (PostScript fragment ) 43. 126. P 5 F 2.56 (\322) 130.34 126. P 4 F 2.56 (0.5 0.5 moveto) 136.34 126. P 0 F 2.56 (\323. This is especially efficient since the NeWS) 225.46 126. P (server internally uses fixed point numbers wherever possible, to avoid floating point.) 43. 114. T FMENDPAGE %%Page: "149" 9 FMBEGINPAGE 0 F 0 X (149) 410. 648. T (\245) 65. 623. T (Responding to damage.) 78. 623. T (\245) 65. 601. T (Selections.) 78. 601. T (\245) 65. 579. T (Typeahead.) 78. 579. T 1 F 2.7 (Ched) 74. 558. P 0 F 2.7 ( uses a number of real-time layout algorithms, which will not be described) 95.11 558. P 1.87 (in detail in this chapter. Interested developers should obtain the ) 43. 546. P 1 F 1.87 (Ched ) 317.46 546. P 0 F 1.87 (application in order) 342.94 546. P (to get more information from the source code. ) 43. 534. T 2 F (8.1) 43. 503. T (General Structure) 92. 503. T 1 F 5.82 (Ched) 74. 483. P 0 F 5.82 ( follows the Smalltalk ) 95.11 483. P 5.82 (model/view/controller paradigm that is used in) 208.96 483. P 1.76 (Smalltalk. There are two key data structures, and three key segments of the program. The) 43. 471. P 2.79 (first data structure is the ) 43. 459. P 1 F 2.79 (document) 156.08 459. P 0 F 2.79 (. It represents the actual text of the document being) 194.96 459. P 1.55 (edited. It has a number of subsidiary data structures that contain the characters in the doc-) 43. 447. P 5.36 (ument, the formatting information, a set of markers that indicate portions of the) 43. 435. P 2.07 (document, and a list of the views on the document. There are a set of routines that deal) 43. 423. P 3.04 (with these structures. These structures and procedures form the ) 43. 411. P 1 F 3.04 (model) 325.33 411. P 0 F 3.04 ( portion of ) 349.77 411. P 1 F 3.04 (ched) 403.62 411. P 0 F 3.04 (.) 422.5 411. P 3.1 (The next data structure is the ) 43. 399. P 1 F 3.1 (view) 179.93 399. P 0 F 3.1 (. It contains the actual visible representation of the) 198.26 399. P 2.35 (document. It is what maps the document onto the screen, and hence is the part of ) 43. 387. P 1 F 2.35 (ched) 406.12 387. P 0 F 2.57 (most closely connected to NeWS. This, and its subsidiary data structures form the ) 43. 375. P 1 F 2.57 (view) 406.66 375. P 0 F 2.04 (component of the paradigm. These two are glued together by the ) 43. 363. P 1 F 2.04 (controller) 326.48 363. P 0 F 2.04 ( that provides) 366.48 363. P 3.38 (the user interface. The Figure 8.2 shows how these parts relate to each other and to) 43. 351. P (NeWS.) 43. 337. T 43. 72. 425. 630. C U 0 F 0 X 5.04 (A piece of PostScript code that was downloaded by ) 74. 144. P 1 F 5.04 (ched) 327.95 144. P 0 F 5.04 ( to NeWS reads) 346.83 144. P 2.59 (keystrokes and mouse events and sends these off to the controller portion of ) 43. 132. P 1 F 2.59 (ched) 382.97 132. P 0 F 2.59 (. The) 401.85 132. P 1.64 (controller decides what to do with the character and updates the model in response. When) 43. 120. P 2.68 (the model is updated, information is fed back to the view to tell it that something has) 43. 108. P 3.55 (changed. Periodically, the view uses the updated information from the model to send) 43. 96. P 3.13 (PostScript graphics operators to NeWS that draw the new visible representation of the) 43. 84. P 42. 163. 427. 334. C 42. 163. 427. 334. R 7 X V 1 H 0 X 90. 90.1 -79.5 56. 317. 313. A 90. 180.1 79.5 56. 158. 313. A 180. 270.1 79.5 -56. 158. 201. A 270. 0.1 -79.5 -56. 317. 201. A 0. 90. -79.5 56. 317. 313. A 0 F 2.84 (Model updates) 303. 305. P 1.07 (Keystrokes and) 303. 201. P 1.73 (Mouse events) 303. 186. P 1.74 (Graphics operations) 55. 201. P 1.77 (New model data for) 55. 305. P 2.63 (reformatting the screen) 55. 290. P (image) 55. 275. T 156. 274. 160. 267. 165. 274. 3 Y V 0 H N 265. 309. 274. 313. 274. 306. 3 Y V N 314. 246. 319. 240. 310. 240. 3 Y V N 210. 204. 201. 208. 201. 201. 3 Y V N 126. 246. 181. 268. R 7 X V 0 X N 210. 192. 265. 214. R 7 X V 0 X N 289. 246. 344. 268. R 7 X V 0 X N 210. 300. 265. 322. R 7 X V 0 X N 2.39 (Model ) 222. 307. P (View) 142. 253. T (Controller) 293. 253. T (NeWS) 224. 199. T 3 F (Figure 8.2) 44. 174. T (The flow of information amongst the various parts of ) 98. 174. T 10 F (ched) 326.6 174. T U FMENDPAGE %%Page: "148" 10 FMBEGINPAGE 0 F 0 X (148) 410. 648. T 240 168 184. 129. 237. 501. %%BeginBinary: 4961 BEGINBITMAP j >#Z" 783F;FE#z" 701B;FBFA#T)U" 67CBE3F9E7FFFFFFFE7FFE#t)v 4EE2EEE6ECE6EEEEEEEE6EEE#T(V" 1FE3F7FBEFFFFFFFFEFE5 >5F83FFBFFFBFFFBFFFBFFFAF28A3CA0DB38E8DBFFFBFFFBFFFBFFFBFFFBE"U)U" 7FEEDB6DB5EDADAD6DFE#d)d# 6EEE6CC64C6CEC4C6CEC6EEE#T)U" 07F7DDB75D1BE95D7D6BFE#t)u" 0BF3FB59A2DB73E0DB6B53FBFA#T)U" 0FE73E51C78BEDE79BB7FE#z"v 26CE0EEE6EE#Z"U" 701F0AFFE#F" 783F9F#j# 7FFE:7FFE#Z# 6EEE:6EEE#J# 7FFE:7FFE#J# 7BFA:7BFA#J# 7FFE:7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7%8$9'<#8" FEFFC07FCFFA4EE7FE7FFFF3BCCDE7FE%9$9#8#<& 6EEEFFDBEFFF6FF7FFFBFEEFF7FF6EEE&?"9"8"<# 7FFEFFFBFFF7F6BF7FFE#85 7BFA:89338FE3436CE1FCD3C7E11E7FC320333F09999C7F89C7FF7BFA#85 7FFE:DB6D6FED9B6EDBFB6DB7F76DBFB3B6DB7FB6DB6B7F6DB7FF7FFE#8&8"9&8$9# 6EEECA713FEDBBFC6C3F9BB6DAD309FF6EEE#8$9#9$8&9# 7FFEEAEDCFC7FB6DFFE3FFB6D77E7F7FFE:$9":&8# E5ED6FEF6CDFB3B6DCE73395 8F1EDF21FE3100463FC84CBF8263F81184DFFC9EF88FF90CB#S"S"S# 6EEEDDFD6EEE#G"># 7FFEFB7FFE#>">"># 7BFAE3F37BFA#>">"># 7FFEFFFF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7"<"9%8"9"8#8" FEFCFCF3FFFDCFF3FE67FE#<"9%8"9"8& 6EEEFEFEFBFFFFEFFBFF77FF6EEE#F"?# 7FFE6F7FFE58# :7BFAFFF03133FF9A78FFE0624E3BCFF9A7FE03CFFC4938F3FFF37BFA58# :7FFEFFEDB66DFF6DB6FFDB6DB6DBB7FDDBFF6DB7FEDADB6DFFED7FFE#8%9"8":(8# 6EEEA6E1FF8D4D8787FE531B61FFF16EEE)8#8":(8# 7FFEFFE3AEEFFF6DC75DBFBFFF56DB6FFFED7FFE9$:#8":& F7CEE6EF9D9B9BFF2EDB6695 8F1DC71FF90997FE3B89231C7F889FF84C7FF6F28F17FF223&P&T' 6EEEFFEEDF22400000077FFFFFFF6EEE#8";&>#9# 7FFEBFDD7FFFFFFFFEFF7FFE&;"B":# 7BFAFFF13FE2FF7BFA&;#F# 7FFEFFFFFFFFFF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7"8"=$?#9" FEF7F3FFF33FE7FE#8"=$?#8# 6EEEFFFBFFFBBFF76EEE#@"B"8# 7FFEDB777FFE5 >7BFAFFD26693C64CF892699F80F3F8F34CF04CCCCE3FE69E3E11E7FF7BFA5 >7FFEFFEDB76DB5ADFDB5B36FDB6DFB6D9B6D9B6DB5BFDB6DBF76DBFF7FFE#:)8(9% 6EEE9C29FCA4370FDB61BB6DBB6984FFE3C3FF6EEE#:)9'9% 7FFEE5EBFEADF77FDB6F63BB6BBF3FDBDFFF7FFE<)9&:" B4D3FE5CD737DB6677BB7399BFCD95 8C482248E37FEDE238FE131F8F31CF11CF7C46FE4265F8263#P"T&Q# 6EEEF7EEFFFFFFEF6EEE#;"C"<# 7FFEEFDF7FFE#;"?"9"<# 7BFACFF1FF7BFA#;"?"@# 7FFEFFFF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7%9$;"8#:"9" FEFFCFE703FF9F9FF03FE7FE&9$;"8#:"8# 6EEEFFE7CFB9FFDFDFFB9FF76EEE#<#9"<":"8# 7FFEBDFDFEDF777FFE38+ 7BFAFFEBAE693CFFB9C8478FF3242099C79F9C893299FE11E7FF7BFA#85 7FFE:ADB6DB7F83B5DB6FEDB6DB36DB6FFFF83B5B6D36FF76DBFF7FFE-9*8% 6EEEFFED6DB6D87FB7C5DB3F78DB0FFFFBD84A7170C3FF6EEE#:'8%8%8% 7FFEDBFFBBB5DBCFC776DB7FDBEAED77DFFF7FFE9'8"8"8"8( EEEDB6D9BFBD6FEF3799A5ED737F76CD95 8C6C6624C7F1CCA091FF3CB2239478BFFF03C6DF238FF8263#W"X# 6EEEDD6EEE#J# 7FFE:7FFE#B"C# 7BFAE37BFA#B"C# 7FFEFF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7&9";%8"8#9" FEFFEFE79FF3FEFFFE00BFFE7FFE'9">"8"8"9# 6EEEFFFFF7DFFBDAFFFF6EEE#E#;' 7FFEFFDEFB7FF7FF7FFE19, 7BFAFFCE71C79412679B7F49CCFF134E3CFF391263F01E61FF7BFA19, 7FFEFFEDB6DB69B6DB6AFFB6EDFECDB6DB7FB6B6DBFB6DB7FF7FFE+8$:, 6EEEFFEE36DB0B94DB79E9FE6DD87FB894CFFB6E37FF6EEE+8$:, 7FFEFFEDB6DB7BD5DB7AEBFF8DDBFFB6D5F3FB6DB7FF7FFE<+9& 33CBDB6B7FB6F3FECDB7D9BFB6CBDB9.8* EE51C781DBE79B3F1277FE33128C4C7FB95BC7FC2659%S%8%Q# 6EEEFFEFF7FFFFFFFFFFFFBF6EEE%>"="=# 7FFEFFAFEFFE7FFE%>">"<# 7BFAFF9FCF7F7BFA%>"=#<# 7FFEFFFFFFFFFF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7*9":$:"9" FEFFCFBFFFFE7FFFF9E7CFFF3FE7FE(8"9":$:"8# 6EEEFFEFFFFFFFFDF7EFFFBFF76EEE#8$<#8"="8# 7FFEF7FFFBB7FEDF777FFE5 >7BFAFFE3219FF01E7F9DC8931F01E43F3C84E3BF8F224CA67E11E7FF7BFA5 >7FFEFFEDB76FFB6DBF6DB5B6DFB6DAFEDB5B6DFFB6D6DB4DBF76DBFF7FFE#9/8* 6EEE0FFB6C3F7DC4A67FB6E2FEFC5BED129C5C3F76C3FF6EEE#9-:* 7FFE7FFB6DFF7DB6AF9FB6DAFEFBFABB5DFF76DFFF7FFE;)9$8' 37FB6CDF6DB65EDFDB5B6D697B5CDF76CD95 8E3198BFC263F98CADE3FC2653F3CA4C4BF8F1B7C8E3F8263'X"S# 6EEEFFFFFFFBBF6EEE#9"C"># 7FFEF77F7FFE#9"C"># 7BFAFFFF7BFA#J# 7FFE:7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7&8$8$8%8":" FEFFEFF7F93EFF3FCFFFCFFE7FFFF9EFFE'8$8$8"8"8"9# 6EEEFFFFFFFDBFFFBFEFFFEFFFF7FF6EEE#F"?# 7FFEFB7FFE5 >7BFAFFC9264C79FF8CA63FFCA78FFE23253FF01E7FE284A4CE64E3FF7BFA5 >7FFEFFEDB76DB6FFB6CDBFFB5B6FFDADB6DFFB6DBFF736DB6DB6DBFF7FFE#:"8$8#9%9% 6EEEB0DDBFFCFCED6C3FF776CFFF6EEE#:":"8#9#;% 7FFEB7FBFF2D6DFFF3FF7FFE<#<#9#;" B37FFDAD6CDFDB95 8EE579478FF8C0E5FFC8997FC44C84FFC263FF63909067947&Z# 6EEEFFEFF776EEE&J# 7FFEFFAFD777FFE&J# 7BFAFF9FCF77BFA&J# 7FFEFFFFFF77FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7&:"8$9$:"8" FEFFCFFFFCE717FF9F9FF3EFE7FE':'9$:% 6EEEFFEFFFFEF7FFFEE7FFDFDFFBFFF7FF6EEE#="9"9"@# 7FFEF7F7DF7FFE5 >7BFAFFE3CA78E6989E6131FFFF3F3FC79F8679DBF8CE3E66681E77FF7BFA,82 7FFEFFEDB5B6DB366DB6D68EDFDB6FDDB6D7FB6DBF6DB36DB7FF7FFE#8(8"8"8, 6EEEC5B6C3736E36F6E60FCFFB6CFF4DB76E37FF6EEE#8'8#8"8, 7FFEB5B6DF7C6DB6FEF67FD7FB6F3F5DB76DB7FF7FFE<#8"8"8"8& CD76D66637DBFB6DBF9D95 8E3C89962302659225FFE8F3F898FE679D9F1047FBE631E43#Z& 6EEE77FFFFF6EEE#J# 7FFE:7FFE#J#8# 7BFA6FE3F7BFA#J#8# 7FFE6FFFF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7"J" FE;FE#j# 6EEE:6EEE"Z" 7F ENDBITMAP %%EndBinary 240 168 184. 129. 47. 501. %%BeginBinary: 4950 BEGINBITMAP j >#Z" 783F;FE#z" 701B;FBFA#T)U" 67CBE3F9E7FFFFFFFE7FFE#t)v 4EE2EEE6ECE6EEEEEEEE6EEE#T(V" 1FE3F7FBEFFFFFFFFEFE5 >5F83FFBFFFBFFFBFFFBFFFAF28A3CA0DB38E8DBFFFBFFFBFFFBFFFBFFFBE"U)U" 7FEEDB6DB5EDADAD6DFE#d)d# 6EEE6CC64C6CEC4C6CEC6EEE#T)U" 07F7DDB75D1BE95D7D6BFE#t)u" 0BF3FB59A2DB73E0DB6B53FBFA#T)U" 0FE73E51C78BEDE79BB7FE#z"v 26CE0EEE6EE#Z"U" 701F0AFFE#F" 783F9F#j# 7FFE:7FFE#Z# 6EEE:6EEE#J# 7FFE:7FFE#J# 7BFA:7BFA#J# 7FFE:7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7%8$9'<#8" FEFFC07FCFFA4EE7FE7FFFF3BCCDE7FE%9$9#8#<& 6EEEFFDBEFFF6FF7FFFBFEEFF7FF6EEE&?"9"8"<# 7FFEFFFBFFF7F6BF7FFE#85 7BFA:89338FE3436CE1FCD3C7E11E7FC320333F09999C7F89C7FF7BFA#85 7FFE:DB6D6FED9B6EDBFB6DB7F76DBFB3B6DB7FB6DB6B7F6DB7FF7FFE#8&8"9&8$9# 6EEECA713FEDBBFC6C3F9BB6DAD309FF6EEE#8$9#9$8&9# 7FFEEAEDCFC7FB6DFFE3FFB6D77E7F7FFE:$9":&8# E5ED6FEF6CDFB3B6DCE73395 8F1EDF21FE3100463FC84CBF8263F81184DFFC9EF88FF90CB#S"S"S# 6EEEDDFD6EEE#G"># 7FFEFB7FFE#>">"># 7BFAE3F37BFA#>">"># 7FFE7FFF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7"<"9%8"9"8#8" FEFCFCF3FFFDCFF3FE67FE#<"9%8"9"8& 6EEEFEFEFBFFFFEFFBFF77FF6EEE#F"?# 7FFE6F7FFE58# :7BFAFFF03133FF9A78FF60624E3BCFF9A7FE03CFFC4938F3FFF37BFA58# :7FFEFFEDB66DFF6DB6FF5B6DB6DBB7FDDBFF6DB7FEDADB6DFFED7FFE#8%9"8":(8# 6EEEA6E1FF8D4D8787FE531B61FFF16EEE)8#8":(8# 7FFEFFE3AEEFFF6D475DBFBFFF56DB6FFFED7FFE9$:#8":& F7CEE66F9D9B9BFF2EDB6695 8F1DC71FF90997F63B89231C7F889FF84C7FF6F28F17FF223&P#W' 6EEEFFEEDF5DBF7FFFFFFF6EEE#8"<"A#9# 7FFEBF7FFEFF7FFE&;"B":# 7BFAFFF13F62FF7BFA&;#F# 7FFEFFFFFF7FFF7FFE#>"G# 6EEEFF6EEE#J# 7FFE:7FFE7"J" BE;BE7"8"=$?#9" FEF7F3FFF33FE7FE#8"=$?#8# 6EEEFFFBFFFBBFF76EEE#@"B"8# 7FFEDB777FFE5 >7BFAFFD26693C64CF892699F80F3F8F34CF04CCCCE3FE69E3E11E7FF7BFA5 >7FFEFFEDB76DB5ADFDB5B36FDB6DFB6D9B6D9B6DB5BFDB6DBF76DBFF7FFE#:)8(9% 6EEE9C29FCA4370FDB61BB6DBB6984FFE3C3FF6EEE#:)9'9% 7FFEE5EBFEADF77FDB6F63BB6BBF3FDBDFFF7FFE<)9&:" B4D3FE5CD737DB6677BB7399BFCD95 8C482248E37FEDE238FE131F8F31CF11CF7C46FE4265F8263#P"T&Q# 6EEEF7EEFFFFFFEF6EEE#;"C"<# 7FFEEFDF7FFE#;"?"9"<# 7BFACFF1FF7BFA#;"?"@# 7FFEFFFF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7%9$;"8#:"9" FEFFCFE703FF9F9FF03FE7FE&9$;"8#:"8# 6EEEFFE7CFB9FFDFDFFB9FF76EEE#<#9"<":"8# 7FFEBDFDFEDF777FFE38+ 7BFAFFEBAE693CFFB9C8478FF3242099C79F9C893299FE11E7FF7BFA#85 7FFE:ADB6DB7F83B5DB6FEDB6DB36DB6FFFF83B5B6D36FF76DBFF7FFE-9*8% 6EEEFFED6DB6D87FB7C5DB3F78DB0FFFFBD84A7170C3FF6EEE#:'8%8%8% 7FFEDBFFBBB5DBCFC776DB7FDBEAED77DFFF7FFE9'8"8"8"8( EEEDB6D9BFBD6FEF3799A5ED737F76CD95 8C6C6624C7F1CCA091FF3CB2239478BFFF03C6DF238FF8263#W"X# 6EEEDD6EEE#J# 7FFE:7FFE#B"C# 7BFAE37BFA#B"C# 7FFEFF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7&9";%8"8#9" FEFFEFE79FF3FEFFFE00BFFE7FFE'9">"8"8"9# 6EEEFFFFF7DFFBDAFFFF6EEE#E#;' 7FFEFFDEFB7FF7FF7FFE19, 7BFAFFCE71C79412679B7F49CCFF134E3CFF391263F01E61FF7BFA19, 7FFEFFEDB6DB69B6DB6AFFB6EDFECDB6DB7FB6B6DBFB6DB7FF7FFE+8$:, 6EEEFFEE36DB0B94DB79E9FE6DD87FB894CFFB6E37FF6EEE+8$:, 7FFEFFEDB6DB7BD5DB7AEBFF8DDBFFB6D5F3FB6DB7FF7FFE<+9& 33CBDB6B7FB6F3FECDB7D9BFB6CBDB9.8* EE51C781DBE79B3F1277FE33128C4C7FB95BC7FC2659%S%8%Q# 6EEEFFEFF7FFFFFFFFFFFFBF6EEE%>"="=# 7FFEFFAFEFFE7FFE%>">"<# 7BFAFF9FCF7F7BFA%>"=#<# 7FFEFFFFFFFFFF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7*9":$:"9" FEFFCFBFFFFE7FFFF9E7CFFF3FE7FE(8"9":$:"8# 6EEEFFEFFFFFFFFDF7EFFFBFF76EEE#8$<#8"="8# 7FFEF7FFFBB7FEDF777FFE5 >7BFAFFE3219FF01E7F9DC8931F01E43F3C84E3BF8F224CA67E11E7FF7BFA5 >7FFEFFEDB76FFB6DBF6DB5B6DFB6DAFEDB5B6DFFB6D6DB4DBF76DBFF7FFE#9/8* 6EEE0FFB6C3F7DC4A67FB6E2FEFC5BED129C5C3F76C3FF6EEE#9-:* 7FFE7FFB6DFF7DB6AF9FB6DAFEFBFABB5DFF76DFFF7FFE;)9$8' 37FB6CDF6DB65EDFDB5B6D697B5CDF76CD95 8E3198BFC263F98CADE3FC2653F3CA4C4BF8F1B7C8E3F8263'X"S# 6EEEFFFFFFFBBF6EEE#9"C"># 7FFEF77F7FFE#9"C"># 7BFAFFFF7BFA#J# 7FFE:7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7&8$8$8%8":" FEFFEFF7F93EFF3FCFFFCFFE7FFFF9EFFE'8$8$8"8"8"9# 6EEEFFFFFFFDBFFFBFEFFFEFFFF7FF6EEE#F"?# 7FFEFB7FFE5 >7BFAFFC9264C79FF8CA63FFCA78FFE23253FF01E7FE284A4CE64E3FF7BFA5 >7FFEFFEDB76DB6FFB6CDBFFB5B6FFDADB6DFFB6DBFF736DB6DB6DBFF7FFE#:"8$8#9%9% 6EEEB0DDBFFCFCED6C3FF776CFFF6EEE#:":"8#9#;% 7FFEB7FBFF2D6DFFF3FF7FFE<#<#9#;" B37FFDAD6CDFDB95 8EE579478FF8C0E5FFC8997FC44C84FFC263FF63909067947&Z# 6EEEFFEFF776EEE&J# 7FFEFFAFD777FFE&J# 7BFAFF9FCF77BFA&J# 7FFEFFFFFF77FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7&:"8$9$:"8" FEFFCFFFFCE717FF9F9FF3EFE7FE':'9$:% 6EEEFFEFFFFEF7FFFEE7FFDFDFFBFFF7FF6EEE#="9"9"@# 7FFEF7F7DF7FFE5 >7BFAFFE3CA78E6989E6131FFFF3F3FC79F8679DBF8CE3E66681E77FF7BFA,82 7FFEFFEDB5B6DB366DB6D68EDFDB6FDDB6D7FB6DBF6DB36DB7FF7FFE#8(8"8"8, 6EEEC5B6C3736E36F6E60FCFFB6CFF4DB76E37FF6EEE#8'8#8"8, 7FFEB5B6DF7C6DB6FEF67FD7FB6F3F5DB76DB7FF7FFE<#8"8"8"8& CD76D66637DBFB6DBF9D95 8E3C89962302659225FFE8F3F898FE679D9F1047FBE631E43#Z& 6EEE77FFFFF6EEE#J# 7FFE:7FFE#J#8# 7BFA6FE3F7BFA#J#8# 7FFE6FFFF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7"J" FE;FE#j# 6EEE:6EEE"Z" 7F ENDBITMAP %%EndBinary 249. 355. 410. 498. R 7 X V 0 X 3.32 (The current position, or ) 249. 491. P 1 F 3.32 (dot) 359.2 491. P 0 F 3.32 ( as it is) 371.98 491. P 2.35 (referred to in some other editors, has) 249. 479. P 3.16 (a width in addition to a position. If) 249. 467. P 2.05 (the width is zero, then it is displayed) 249. 455. P 2.92 (as a vertical line, as in the previous) 249. 443. P 1.98 (screen. In this screen, an entire word,) 249. 431. P 6.86 (\322gymble\323 has been selected. This) 249. 419. P 3.87 (was done by pressing down on the) 249. 407. P 3.15 (left mouse button between the space) 249. 395. P 2.07 (and the \322g\323, and sweeping the mouse) 249. 383. P (right.) 249. 371. T 58. 387. 219. 498. R 7 X V 0 X 1.62 (When ) 58. 491. P 1 F 1.62 (ched) 86. 491. P 0 F 1.62 ( is started it creates a win-) 104.88 491. P 2.34 (dow and displays the document in it.) 58. 479. P 3.04 (It automatically breaks lines between) 58. 467. P 4.15 (words to put as many words on a) 58. 455. P 5.6 (line as possible, without extending) 58. 443. P 9.63 (beyond the right margin. ) 58. 431. P 1 F 9.63 (Ched) 197.89 431. P 0 F 2.26 (enlarges the spaces between words in) 58. 419. P 2.57 (order to align the right edge of each) 58. 407. P (line.) 58. 395. T 240 168 184. 131. 47. 229. %%BeginBinary: 4918 BEGINBITMAP j >#Z" 783F;FE#z" 701B;FBFA#T)U" 67CBE3F9E7FFFFFFFE7FFE#t)v 4EE2EEE6ECE6EEEEEEEE6EEE#T(V" 1FE3F7FBEFFFFFFFFEFE5 >5F83FFBFFFBFFFBFFFBFFFAF28A3CA0DB38E8DBFFFBFFFBFFFBFFFBFFFBE"U)U" 7FEEDB6DB5EDADAD6DFE#d)d# 6EEE6CC64C6CEC4C6CEC6EEE#T)U" 07F7DDB75D1BE95D7D6BFE#t)u" 0BF3FB59A2DB73E0DB6B53FBFA#T)U" 0FE73E51C78BEDE79BB7FE#z"v 26CE0EEE6EE#Z"U" 701F0AFFE#F" 783F9F#j# 7FFE:7FFE#Z# 6EEE:6EEE#J# 7FFE:7FFE#J# 7BFA:7BFA#J# 7FFE:7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7%8$9'<#8" FEFFC07FCFFA4EE7FE7FFFF3BCCDE7FE%9$9#8#<& 6EEEFFDBEFFF6FF7FFFBFEEFF7FF6EEE&?"9"8"<# 7FFEFFFBFFF7F6BF7FFE#85 7BFA:89338FE3436CE1FCD3C7E11E7FC320333F09999C7F89C7FF7BFA#85 7FFE:DB6D6FED9B6EDBFB6DB7F76DBFB3B6DB7FB6DB6B7F6DB7FF7FFE#8&8"9&8$9# 6EEECA713FEDBBFC6C3F9BB6DAD309FF6EEE#8$9#9$8&9# 7FFEEAEDCFC7FB6DFFE3FFB6D77E7F7FFE:$9":&8# E5ED6FEF6CDFB3B6DCE73395 8F1EDF21FE3100463FC84CBF8263F81184DFFC9EF88FF90CB#S"S"S# 6EEEDDFD6EEE#G"># 7FFEFB7FFE#>">"># 7BFAE3F37BFA#>">"># 7FFEF7FF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7"<"8$9"8%;" FEE7EFFFF3E7F27FFFDFFE#<"8$9"8"8":# 6EEEF7FFFFFBF7FBFF6EEE#A"D# 7FFEDB7FFE5 >7BFAFFF03133FE53C7F12FCA7F80F3F89271E7FF9B7F499A4F1933FF7BFA5 >7FFEFFEDB66DFDADB7FB67EDBFDB6DFDB5B6DBFF6B7FB6DDB6D6B7FF7FFE#8(9(:& 6EEEA6E1FE2DB7F94761FCA636C3FF8B70A7FF6EEE,9(9' 7FFEFFE3AEEFFDADB7FD576FFEADB6DFFF6BB797AFFF7FFE9$9#9&;$ F7CEE6FCB766FE5DB6CDB6D34F95 8F1DC71FE44CBFDB7C09FE131FEDE51E2FF903F12089238DF&P"R"R8# 6EEEFFEEDFF7FE6EEE#8"C"=% 7FFEBFFDBFFF7FFE&C"=% 7BFAFFF13FFF3FFF7BFA&J% 7FFEFFFFFF5FFFF7FFE#>"G# 6EEEFF6EEE#J# 7FFE:7FFE7"J" BE;BE7";$?':" FEE7FFF39FF9FFFE7F3FFE#;$?'9# 6EEEF7FFFBDFFDFFFF3E7F6EEE#;"B"=# 7FFE77ED7FFE5 >7BFAFFC4994CFE11E7F8F34CF04CCCCE3FF94F1FC079FF5D6693E7FF7BFA58' 67FFEFFEDB69B7F76DBFB6D9B6D9B6DB5BFF6B6DFEDB65B6DDBFF7FFE'8"8(9$8% 6EEEFFE530B8C3BB6DBB6984FFF8B0FF6BC3FF6EEE*9'9":% 7FFEFFF577BBFF76DF63BB6BBF3FF6B7DFFF7FFE9'9&:$8" F2F339BF76CD77BB7399BFB37F77CD95 8F6F81C7F8263F8F31CF11CF7C46FF9132FF098FE362624E3#U&V# 6EEEEEFFFFFFEF6EEE#D"A# 7FFEDF7FFE#@"9"A# 7BFAF1FF7BFA#@"E# 7FFEFF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7&<";#;"9" FEFFC0FFE7F3E07FE7FE'<";#;"8# 6EEEFFEE7FF7FBF73FF76EEE':">";"8# 7FFEFFEF7F77DFBF777FFE/;, 7BFAFFEE7211E3FFFE64860998F339126533FFFE11E7FF7BFA/:- 7FFEFFE0ED76DBFFFDB6DDB36B6DF076B6DA6DFFFF76DBFF7FFE(:$:&9% 6EEEFFEDF176CFB78B61F7B094E2E1C3FF6EEE(9%;%9% 7FFEFFEEED76F3DC776B6FB7D5DAEFDFFF7FFE9%9%;%9" EF6D76DBDEF76B66334BDAE6CD9-9&8# C7328247FFFE79662390F17FE078DBE4718263#S&9P8& 6EEEFDDFFFFFFFFFFFFF6EEE#J# 7FFE:7FFE#>#F# 7BFAFE3F7BFA#>#F# 7FFEFFFF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7&9";%8"8#9" FEFFEFE79FF3FEFFFE00BFFE7FFE'9">"8"8"9# 6EEEFFFFF7DFFBDAFFFF6EEE#E#;' 7FFEFFDEFB7FF7FF7FFE19, 7BFAFFCE71C79412679B7F49CCFF134E3CFF391263F01E61FF7BFA19, 7FFEFFEDB6DB69B6DB6AFFB6EDFECDB6DB7FB6B6DBFB6DB7FF7FFE+8$:, 6EEEFFEE36DB0B94DB79E9FE6DD87FB894CFFB6E37FF6EEE+8$:, 7FFEFFEDB6DB7BD5DB7AEBFF8DDBFFB6D5F3FB6DB7FF7FFE<+9& 33CBDB6B7FB6F3FECDB7D9BFB6CBDB9.8* EE51C781DBE79B3F1277FE33128C4C7FB95BC7FC2659%S%8%Q# 6EEEFFEFF7FFFFFFFFFFFFBF6EEE%>"="=# 7FFEFFAFEFFE7FFE%>">"<# 7BFAFF9FCF7F7BFA%>"=#<# 7FFEFFFFFFFFFF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7*9":$:"9" FEFFCFBFFFFE7FFFF9E7CFFF3FE7FE(8"9":$:"8# 6EEEFFEFFFFFFFFDF7EFFFBFF76EEE#8$<#8"="8# 7FFEF7FFFBB7FEDF777FFE5 >7BFAFFE3219FF01E7F9DC8931F01E43F3C84E3BF8F224CA67E11E7FF7BFA5 >7FFEFFEDB76FFB6DBF6DB5B6DFB6DAFEDB5B6DFFB6D6DB4DBF76DBFF7FFE#9/8* 6EEE0FFB6C3F7DC4A67FB6E2FEFC5BED129C5C3F76C3FF6EEE#9-:* 7FFE7FFB6DFF7DB6AF9FB6DAFEFBFABB5DFF76DFFF7FFE;)9$8' 37FB6CDF6DB65EDFDB5B6D697B5CDF76CD95 8E3198BFC263F98CADE3FC2653F3CA4C4BF8F1B7C8E3F8263'X"S# 6EEEFFFFFFFBBF6EEE#9"C"># 7FFEF77F7FFE#9"C"># 7BFAFFFF7BFA#J# 7FFE:7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7&8$8$8%8":" FEFFEFF7F93EFF3FCFFFCFFE7FFFF9EFFE'8$8$8"8"8"9# 6EEEFFFFFFFDBFFFBFEFFFEFFFF7FF6EEE#F"?# 7FFEFB7FFE5 >7BFAFFC9264C79FF8CA63FFCA78FFE23253FF01E7FE284A4CE64E3FF7BFA5 >7FFEFFEDB76DB6FFB6CDBFFB5B6FFDADB6DFFB6DBFF736DB6DB6DBFF7FFE#:"8$8#9%9% 6EEEB0DDBFFCFCED6C3FF776CFFF6EEE#:":"8#9#;% 7FFEB7FBFF2D6DFFF3FF7FFE<#<#9#;" B37FFDAD6CDFDB95 8EE579478FF8C0E5FFC8997FC44C84FFC263FF63909067947&Z# 6EEEFFEFF776EEE&J# 7FFEFFAFD777FFE&J# 7BFAFF9FCF77BFA&J# 7FFEFFFFFF77FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7&:"8$9$:"8" FEFFCFFFFCE717FF9F9FF3EFE7FE':'9$:% 6EEEFFEFFFFEF7FFFEE7FFDFDFFBFFF7FF6EEE#="9"9"@# 7FFEF7F7DF7FFE5 >7BFAFFE3CA78E6989E6131FFFF3F3FC79F8679DBF8CE3E66681E77FF7BFA,82 7FFEFFEDB5B6DB366DB6D68EDFDB6FDDB6D7FB6DBF6DB36DB7FF7FFE#8(8"8"8, 6EEEC5B6C3736E36F6E60FCFFB6CFF4DB76E37FF6EEE#8'8#8"8, 7FFEB5B6DF7C6DB6FEF67FD7FB6F3F5DB76DB7FF7FFE<#8"8"8"8& CD76D66637DBFB6DBF9D95 8E3C89962302659225FFE8F3F898FE679D9F1047FBE631E43#Z& 6EEE77FFFFF6EEE#J# 7FFE:7FFE#J#8# 7BFA6FE3F7BFA#J#8# 7FFE6FFFF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7"J" FE;FE#j# 6EEE:6EEE"Z" 7F ENDBITMAP %%EndBinary 240 168 184. 131. 237. 229. %%BeginBinary: 4939 BEGINBITMAP j >#Z" 783F;FE#z" 701B;FBFA#T)U" 67CBE3F9E7FFFFFFFE7FFE#t)v 4EE2EEE6ECE6EEEEEEEE6EEE#T(V" 1FE3F7FBEFFFFFFFFEFE5 >5F83FFBFFFBFFFBFFFBFFFAF28A3CA0DB38E8DBFFFBFFFBFFFBFFFBFFFBE"U)U" 7FEEDB6DB5EDADAD6DFE#d)d# 6EEE6CC64C6CEC4C6CEC6EEE#T)U" 07F7DDB75D1BE95D7D6BFE#t)u" 0BF3FB59A2DB73E0DB6B53FBFA#T)U" 0FE73E51C78BEDE79BB7FE#z"v 26CE0EEE6EE#Z"U" 701F0AFFE#F" 783F9F#j# 7FFE:7FFE#Z# 6EEE:6EEE#J# 7FFE:7FFE#J# 7BFA:7BFA#J# 7FFE:7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7%8$9'<#8" FEFFC07FCFFA4EE7FE7FFFF3BCCDE7FE%9$9#8#<& 6EEEFFDBEFFF6FF7FFFBFEEFF7FF6EEE&?"9"8"<# 7FFEFFFBFFF7F6BF7FFE#85 7BFA:89338FE3436CE1FCD3C7E11E7FC320333F09999C7F89C7FF7BFA#85 7FFE:DB6D6FED9B6EDBFB6DB7F76DBFB3B6DB7FB6DB6B7F6DB7FF7FFE#8&8"9&8$9# 6EEECA713FEDBBFC6C3F9BB6DAD309FF6EEE#8$9#9$8&9# 7FFEEAEDCFC7FB6DFFE3FFB6D77E7F7FFE:$9":&8# E5ED6FEF6CDFB3B6DCE73395 8F1EDF21FE3100463FC84CBF8263F81184DFFC9EF88FF90CB#S"S"S# 6EEEDDFD6EEE#G"># 7FFEFB7FFE#>">"># 7BFAE3F37BFA#>"9":"># 7FFEFFF7FF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7"<"9%8"9"8#8" FEFCCF27F7FBCFE7FE67FE#<"9%8"9"8& 6EEEFEEFB7F7FFEFF7FF77FF6EEE#E"@# 7FFEFE7FFE58# :7BFAFFF03133FFCA78FF89338E3797F34FFC23CFF89331E7FFF37BFA58# :7FFEFFEDB66DFFB5B6FFDB6D6DB767FBB7FEEDB7FDB6D6DBFFED7FFE#8%8#8":(8# 6EEEA6E1FFC5CA710787FCA716C3FFF16EEE)8#8":(8# 7FFEFFE3AEEFFFB5EAED77BFFEAED6DFFFED7FFE9$:"9":& F7CEE6E53F9BFE5ED6CD95 8F1DC71FFC8997FEDF2964387F113FF04C7FEDF21E37FF223&T"T' 6EEEFFEEDFF77FFFFFFF6EEE#8"H#9# 7FFEBFFEFF7FFE&H":# 7BFAFFF13FFF7BFA&J# 7FFEFFFFFF77FFE#B"C# 6EEEFF6EEE#J# 7FFE:7FFE7"J" BE;BE7"8"=$?#9" FEF7F3FFF33FE7FE#8"=$?#8# 6EEEFFFBFFFBBFF76EEE#@"B"8# 7FFEDB777FFE5 >7BFAFFD26693C64CF892699F80F3F8F34CF04CCCCE3FE69E3E11E7FF7BFA5 >7FFEFFEDB76DB5ADFDB5B36FDB6DFB6D9B6D9B6DB5BFDB6DBF76DBFF7FFE#:)8(9% 6EEE9C29FCA4370FDB61BB6DBB6984FFE3C3FF6EEE#:)9'9% 7FFEE5EBFEADF77FDB6F63BB6BBF3FDBDFFF7FFE<)9&:" B4D3FE5CD737DB6677BB7399BFCD95 8C482248E37FEDE238FE131F8F31CF11CF7C46FE4265F8263#P"T&Q# 6EEEF7EEFFFFFFEF6EEE#;"C"<# 7FFEEFDF7FFE#;"?"9"<# 7BFACFF1FF7BFA#;"?"@# 7FFEFFFF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7%9$;"8#:"9" FEFFCFE703FF9F9FF03FE7FE&9$;"8#:"8# 6EEEFFE7CFB9FFDFDFFB9FF76EEE#<#9"<":"8# 7FFEBDFDFEDF777FFE38+ 7BFAFFEBAE693CFFB9C8478FF3242099C79F9C893299FE11E7FF7BFA#85 7FFE:ADB6DB7F83B5DB6FEDB6DB36DB6FFFF83B5B6D36FF76DBFF7FFE-9*8% 6EEEFFED6DB6D87FB7C5DB3F78DB0FFFFBD84A7170C3FF6EEE#:'8%8%8% 7FFEDBFFBBB5DBCFC776DB7FDBEAED77DFFF7FFE9'8"8"8"8( EEEDB6D9BFBD6FEF3799A5ED737F76CD95 8C6C6624C7F1CCA091FF3CB2239478BFFF03C6DF238FF8263#W"X# 6EEEDD6EEE#J# 7FFE:7FFE#B"C# 7BFAE37BFA#B"C# 7FFEFF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7&9";%8"8#9" FEFFEFE79FF3FEFFFE00BFFE7FFE'9">"8"8"9# 6EEEFFFFF7DFFBDAFFFF6EEE#E#;' 7FFEFFDEFB7FF7FF7FFE19, 7BFAFFCE71C79412679B7F49CCFF134E3CFF391263F01E61FF7BFA19, 7FFEFFEDB6DB69B6DB6AFFB6EDFECDB6DB7FB6B6DBFB6DB7FF7FFE+8$:, 6EEEFFEE36DB0B94DB79E9FE6DD87FB894CFFB6E37FF6EEE+8$:, 7FFEFFEDB6DB7BD5DB7AEBFF8DDBFFB6D5F3FB6DB7FF7FFE<+9& 33CBDB6B7FB6F3FECDB7D9BFB6CBDB9.8* EE51C781DBE79B3F1277FE33128C4C7FB95BC7FC2659%S%8%Q# 6EEEFFEFF7FFFFFFFFFFFFBF6EEE%>"="=# 7FFEFFAFEFFE7FFE%>">"<# 7BFAFF9FCF7F7BFA%>"=#<# 7FFEFFFFFFFFFF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7*9":$:"9" FEFFCFBFFFFE7FFFF9E7CFFF3FE7FE(8"9":$:"8# 6EEEFFEFFFFFFFFDF7EFFFBFF76EEE#8$<#8"="8# 7FFEF7FFFBB7FEDF777FFE5 >7BFAFFE3219FF01E7F9DC8931F01E43F3C84E3BF8F224CA67E11E7FF7BFA5 >7FFEFFEDB76FFB6DBF6DB5B6DFB6DAFEDB5B6DFFB6D6DB4DBF76DBFF7FFE#9/8* 6EEE0FFB6C3F7DC4A67FB6E2FEFC5BED129C5C3F76C3FF6EEE#9-:* 7FFE7FFB6DFF7DB6AF9FB6DAFEFBFABB5DFF76DFFF7FFE;)9$8' 37FB6CDF6DB65EDFDB5B6D697B5CDF76CD95 8E3198BFC263F98CADE3FC2653F3CA4C4BF8F1B7C8E3F8263'X"S# 6EEEFFFFFFFBBF6EEE#9"C"># 7FFEF77F7FFE#9"C"># 7BFAFFFF7BFA#J# 7FFE:7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7&8$8$8%8":" FEFFEFF7F93EFF3FCFFFCFFE7FFFF9EFFE'8$8$8"8"8"9# 6EEEFFFFFFFDBFFFBFEFFFEFFFF7FF6EEE#F"?# 7FFEFB7FFE5 >7BFAFFC9264C79FF8CA63FFCA78FFE23253FF01E7FE284A4CE64E3FF7BFA5 >7FFEFFEDB76DB6FFB6CDBFFB5B6FFDADB6DFFB6DBFF736DB6DB6DBFF7FFE#:"8$8#9%9% 6EEEB0DDBFFCFCED6C3FF776CFFF6EEE#:":"8#9#;% 7FFEB7FBFF2D6DFFF3FF7FFE<#<#9#;" B37FFDAD6CDFDB95 8EE579478FF8C0E5FFC8997FC44C84FFC263FF63909067947&Z# 6EEEFFEFF776EEE&J# 7FFEFFAFD777FFE&J# 7BFAFF9FCF77BFA&J# 7FFEFFFFFF77FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7&:"8$9$:"8" FEFFCFFFFCE717FF9F9FF3EFE7FE':'9$:% 6EEEFFEFFFFEF7FFFEE7FFDFDFFBFFF7FF6EEE#="9"9"@# 7FFEF7F7DF7FFE5 >7BFAFFE3CA78E6989E6131FFFF3F3FC79F8679DBF8CE3E66681E77FF7BFA,82 7FFEFFEDB5B6DB366DB6D68EDFDB6FDDB6D7FB6DBF6DB36DB7FF7FFE#8(8"8"8, 6EEEC5B6C3736E36F6E60FCFFB6CFF4DB76E37FF6EEE#8'8#8"8, 7FFEB5B6DF7C6DB6FEF67FD7FB6F3F5DB76DB7FF7FFE<#8"8"8"8& CD76D66637DBFB6DBF9D95 8E3C89962302659225FFE8F3F898FE679D9F1047FBE631E43#Z& 6EEE77FFFFF6EEE#J# 7FFE:7FFE#J#8# 7BFA6FE3F7BFA#J#8# 7FFE6FFFF7FFE#J# 6EEE:6EEE#J# 7FFE:7FFE7"J" BE;BE7"J" FE;FE#j# 6EEE:6EEE"Z" 7F ENDBITMAP %%EndBinary 249. 102. 409. 221. R 7 X V 0 X 4.91 (The rest of the word \322waddle\323 is) 249. 214. P 3.3 (typed and, as it is typed, the docu-) 249. 202. P 4.31 (ment is continuously reformatted to) 249. 190. P 3.41 (look as it would if it were printed.) 249. 178. P 1 F 3.24 (Ched) 249. 166. P 0 F 3.24 ( is engaged in a dialogue with) 270.11 166. P 1.68 (NeWS, continuously receiving charac-) 249. 154. P 7.02 (ters, updating internal data struc-) 249. 142. P 6.6 (tures, and sending descriptions to) 249. 130. P (NeWS of the reformatted image.) 249. 118. T 59. 111. 220. 221. R 7 X V 0 X 2.82 (After the word \322gymble\323 was select-) 59. 214. P 5.26 (ed, a single \322w\323 was typed. This) 59. 202. P 4.37 (caused \322gymble\323 to be deleted and) 59. 190. P 6.65 (\322w\323 inserted in its place. Notice) 59. 178. P 2.37 (that the document has been reformat-) 59. 166. P 4.71 (ted so that the right edges remain) 59. 154. P 2.49 (aligned and there are as many words) 59. 142. P (as possible on each line.) 59. 130. T 46. 42. 422. 87. R 7 X V 3 F 0 X (Figure 8.1) 46. 79. T (An example showing ched in action.) 100. 79. T FMENDPAGE %%Page: "147" 11 FMBEGINPAGE 0 F 0 X (147) 410. 648. T 11 F (8.) 43. 616. T (A Tour Through a ) 79. 616. T (NeWS Application) 79. 597. T 1 F (\322All craftsmen share a knowledge. They have held) 79. 435. T ( Reality down fluttering to a bench\323) 56. 423. T 12 F (Victoria Sackville-West) 194. 404. T 0 F 1.66 (This chapter reviews a relatively large NeWS application and explains some of the) 74. 378. P 2.25 (ways that it uses NeWS to advantage. The application is ) 43. 366. P 1 F 2.25 (ched) 292.93 366. P 0 F 2.25 (, a ) 311.81 366. P 1 F 2.25 (ch) 328.24 366. P 0 F 2.25 (eap ) 337.68 366. P 1 F 2.25 (ed) 356.31 366. P 0 F 2.25 (itor built as a) 365.75 366. P 1.56 (demonstration of how to build a ) 43. 354. P 1.56 (WYSIWYG editor in NeWS. The source for this applica-) 182.88 354. P 1.54 (tion is in the public domain and available from Sun Microsystems. The last section in this) 43. 342. P (chapter explains how to obtain the ) 43. 330. T 1 F (ched) 182.98 330. T 0 F ( program.) 201.86 330. T 2.96 ( ) 74. 308. P 1 F 2.96 (Ched) 79.46 308. P 0 F 2.96 ( is a fairly simple WYSIWYG \050what you see is what you get\051 editor. It) 100.57 308. P 3.26 (implements automatic line breaking, left- and right- margin justification, and selections) 43. 296. P 1.55 (using the mouse. In Figure 8.1 is a set of snapshots of ) 43. 284. P 1 F 1.55 (ched) 278.79 284. P 0 F 1.55 ( being run, along with a com-) 297.67 284. P (mentary on what is happening at each step.) 43. 272. T 2.09 (This chapter begins with a section on the general structure of ) 74. 250. P 1 F 2.09 (ched) 343.33 250. P 0 F 2.09 (. This segment) 362.21 250. P 2.41 (is followed by a series of sections on various key points in the implementation of ) 43. 238. P 1 F 2.41 (ched) 406.11 238. P 0 F (that are relevant to its use of NeWS. The points to be covered are:) 43. 226. T (\245) 65. 203. T (Fixed point arithmetic.) 78. 203. T (\245) 65. 181. T (How ) 78. 181. T 1 F (ched) 99.94 181. T 0 F ( uses NeWS to display the document.) 118.82 181. T (\245) 65. 159. T (Font information.) 78. 159. T (\245) 65. 137. T (Use of ) 78. 137. T 1 F (usertokens) 106.88 137. T 0 F (.) 149.65 137. T (\245) 65. 115. T (Debug initialization.) 78. 115. T (\245) 65. 93. T (Input events with names.) 78. 93. T FMENDPAGE %%Trailer %%Pages: 11 1 %%DocumentFonts: Times-Roman %%+ Times-Italic %%+ Times-Bold %%+ Courier-Bold %%+ Courier %%+ Times-BoldItalic %%+ Courier-Oblique %%+ Helvetica-Bold