%!PS-Adobe-2.0 %%Creator: dvips, version 5.41 (C) 1986-90 Radical Eye Software %%Title: cool.dvi %%Pages: 80 1 %%BoundingBox: 0 0 612 792 %%DocumentFonts: Times-Roman Times-Italic Times-Bold Courier %%EndComments %%BeginProcSet: tex.pro /TeXDict 200 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{ isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale Resolution VResolution vsize neg mul TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get round 5 exch put setmatrix}B /@letter{/vsize 10 N}B /@landscape{/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{ /vsize 15.5531 N}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 N}B /@manualfeed{ statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /df{/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /df-tail{/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar {CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /E{pop nn dup definefont setfont}B /ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ ch-data dup length 1 sub get}B /ctr 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put }if put /ctr ctr 1 add N}B /I{cc 1 add D}B /#h 29.7 72 mul 2.54 div def /#w 21 72 mul 2.54 div def /#x 36 def /#pw #w #x 8 add sub def /#ph #h #x 8 add sub def /places[[0 #h 2 div #x 2 div sub][#w 2 div #x 2 div sub #h 2 div #x 2 div sub][0 0][#w 2 div #x 2 div sub 0]]def /multi-bop{userdict /bop-hook known{ bop-hook}if /SI save N places exch 1 sub 4 mod get aload pop translate 0.5 0.5 scale 0 0 moveto gsave 1 setlinewidth 0 setgray #x #x moveto #pw 0 rlineto 0 #ph rlineto #pw neg 0 rlineto closepath stroke grestore @rigin 0 0 moveto}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0 moveto}B /eop{ clear SI restore showpage userdict /eop-hook known{eop-hook}if}B /multi-eop{ clear SI restore userdict /eop-hook known{eop-hook}if}B /@start{userdict /start-hook known{start-hook}if /VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for}B /p /show load N /RMat[1 0 0 -1 0 0]N /BDot 260 string N /v{/ruley X /rulex X V}B /V{gsave TR -.1 -.1 TR 1 ruley scale rulex 1 false RMat{BDot}imagemask grestore}B /a{moveto}B /delta 0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{ 1 M}B /i{2 M}B /j{3 M}B /k{4 M}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w }B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /w{0 rmoveto}B /x{0 S rmoveto} B /y{3 2 roll p a}B /bos{/SS save N}B /eos{clear SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro TeXDict begin /rf{655360 div mul Resolution mul 7227 div /PixPerEm X findfont dup length 1 add dict /nn X{1 index /FID ne{nn 3 1 roll put}{pop pop}ifelse} forall 256 dict begin nn /Encoding get 0 1 255{2 copy get 3 index 2 index get 1000 mul PixPerEm div N pop}for pop pop nn /Metrics currentdict put end /fontname X /nn dup nn definefont[PixPerEm 0 0 PixPerEm neg 0 0]makefont N fontname{/foo setfont}2 array copy cvx N fontname load 0 nn put}B /ObliqueSlant{dup sin S cos div neg}B /SlantFont{/foo X[1 0 foo 1 0 0] TransFont}B /ExtendFont{/foo X 3 2 roll[S{foo div}forall]3 1 roll[foo 0 0 1 0 0]TransFont}B /TransFont{S findfont S makefont dup length dict /nn X{1 index /FID ne{nn 3 1 roll put}{pop pop}ifelse}forall dup nn definefont pop}B end %%EndProcSet %%BeginProcSet: special.pro TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N /vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP false N /BBcalc false N /p 3 def}B /@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{ @scaleunit div /vsc X}B /@hsize{/hs X /CLIP true N}B /@vsize{/vs X /CLIP true N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{10 div /rwi X} B /@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X /BBcalc true N}B /magscale true def end /@MacSetUp{userdict /md known{userdict /md get type /dicttype eq{md begin /letter{}N /note{}N /legal{}N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{ itransform moveto}}{transform{itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{ PaintBlack}if}N /txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if} ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp{pop pop showpage pm restore}N end}if} if}N /normalscale{Resolution 72 div VResolution 72 div neg scale magscale{ DVImag dup scale}if}N /psfts{S 65536 div N}N /startTexFig{/psf$SavedState save N userdict maxlength dict begin /magscale false def normalscale currentpoint TR /psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts /psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR /showpage{}N /erasepage{}N /copypage{}N @MacSetUp}N /doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict begin /SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults}B /@setspecial{CLIP{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}{initclip}ifelse ho vo TR hsc vsc scale ang rotate BBcalc{rwi urx llx sub div dup scale llx neg lly neg TR}if /showpage{}N /erasepage{}N /copypage{}N newpath}B /@endspecial{grestore clear SpecialSave restore end}B /@defspecial{SDict begin}B /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{/SaveX currentpoint /SaveY X N 1 setlinecap newpath}B /st{stroke SaveX SaveY moveto}B /fil{fill SaveX SaveY moveto}B /ellipse{/endangle X /startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}B end %%EndProcSet TeXDict begin @defspecial /@scaleunit 1 def @fedspecial end TeXDict begin 1000 300 300 @start /Fa [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 20 20 20 20 20 20 20 20 20 20 20 20 0 0 0 20 20 20 20 0 20 20 20 20 20 20 20 0 0 20 0 20 20 20 20 20 20 20 20 0 20 20 0 20 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 0 0 0 0 20 20 0 20 0 0 0 0 0 0 0 0 0 20 0 0 20 20 0 20 0 0 0 0 ] /Courier 1000 524288 rf /Fb [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 30 30 30 30 30 30 30 30 30 30 30 30 0 0 0 30 30 30 30 0 30 30 30 30 30 30 30 0 0 30 0 30 30 30 30 30 30 30 30 0 30 30 0 30 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0 0 0 0 30 30 0 30 0 0 0 0 0 0 0 0 0 30 0 0 30 30 0 30 0 0 0 0 ] /Courier 1000 786432 rf /Fc [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 22 22 22 22 22 22 22 22 22 22 22 22 0 0 0 22 22 22 22 0 22 22 22 22 22 22 22 0 0 22 0 22 22 22 22 22 22 22 22 0 22 22 0 22 22 22 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 0 0 0 0 22 22 0 22 0 0 0 0 0 0 0 0 0 22 0 0 22 22 0 22 0 0 0 0 ] /Courier 1000 589824 rf /Fd [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 12 15 19 19 31 29 12 12 12 19 21 9 12 9 10 19 19 19 19 19 19 19 19 19 19 10 10 21 21 21 17 34 27 25 25 27 23 21 27 27 12 15 27 23 33 27 27 21 27 25 21 23 27 27 35 27 27 23 12 10 12 18 19 12 17 19 17 19 17 12 19 19 10 10 19 10 29 19 19 19 19 12 15 10 19 19 27 19 19 17 18 7 18 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 19 19 6 19 19 19 19 7 17 19 12 12 21 21 0 19 19 19 9 0 17 13 12 17 17 19 37 37 0 17 0 12 12 12 12 12 12 12 12 0 12 12 0 12 12 12 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 0 10 0 0 0 0 23 27 33 12 0 0 0 0 0 25 0 0 0 10 0 0 10 19 27 19 0 0 0 0 ] /Times-Roman 1000 589824 rf /Fe [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 8 10 12 12 21 19 8 8 8 12 14 6 8 6 7 12 12 12 12 12 12 12 12 12 12 7 7 14 14 14 11 23 18 17 17 18 15 14 18 18 8 10 18 15 22 18 18 14 18 17 14 15 18 18 24 18 18 15 8 7 8 12 12 8 11 12 11 12 11 8 12 12 7 7 12 7 19 12 12 12 12 8 10 7 12 12 18 12 12 11 12 5 12 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 12 12 4 12 12 12 12 4 11 12 8 8 14 14 0 12 12 12 6 0 11 9 8 11 11 12 25 25 0 11 0 8 8 8 8 8 8 8 8 0 8 8 0 8 8 8 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 0 7 0 0 0 0 15 18 22 8 0 0 0 0 0 17 0 0 0 7 0 0 7 12 18 12 0 0 0 0 ] /Times-Roman 1000 393216 rf /Ff [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 11 14 17 17 28 26 11 11 11 17 19 8 11 8 9 17 17 17 17 17 17 17 17 17 17 9 9 19 19 19 15 31 24 22 22 24 20 18 24 24 11 13 24 20 30 24 24 18 24 22 18 20 24 24 31 24 24 20 11 9 11 16 17 11 15 17 15 17 15 11 17 17 9 9 17 9 26 17 17 17 17 11 13 9 17 17 24 17 17 15 16 7 16 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 17 17 6 17 17 17 17 6 15 17 11 11 18 18 0 17 17 17 8 0 15 12 11 15 15 17 33 33 0 15 0 11 11 11 11 11 11 11 11 0 11 11 0 11 11 11 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0 9 0 0 0 0 20 24 30 10 0 0 0 0 0 22 0 0 0 9 0 0 9 17 24 17 0 0 0 0 ] /Times-Roman 1000 524288 rf /Fg [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 17 28 25 25 50 41 17 17 17 25 28 12 17 12 14 25 25 25 25 25 25 25 25 25 25 17 17 28 28 28 25 46 36 33 36 36 33 30 39 39 19 25 39 33 47 36 39 30 39 36 28 33 36 36 50 36 36 33 17 14 17 29 25 17 25 28 22 28 22 17 25 28 14 17 28 14 41 28 25 28 28 22 19 17 28 25 36 25 25 22 20 11 20 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 25 25 8 25 25 25 25 14 25 25 17 17 28 28 0 25 25 25 12 0 27 17 17 25 25 25 50 50 0 25 0 17 17 17 17 17 17 17 17 0 17 17 0 17 17 17 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50 0 15 0 0 0 0 33 39 50 16 0 0 0 0 0 36 0 0 0 14 0 0 14 25 36 28 0 0 0 0 ] /Times-Bold 1000 786432 rf /Fh 1 16 df<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003C0 10127D9317>15 D E /Fi [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 27 27 27 27 27 27 27 27 27 27 27 27 0 0 0 27 27 27 27 0 27 27 27 27 27 27 27 0 0 27 0 27 27 27 27 27 27 27 27 0 27 27 0 27 27 27 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 0 0 0 0 27 27 0 27 0 0 0 0 0 0 0 0 0 27 0 0 27 27 0 27 0 0 0 0 ] /Courier 1000 720896 rf /Fj 1 59 df<70F8F8F87005057C84 0D>58 D E /Fk [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 15 25 23 23 46 38 15 15 15 23 26 11 15 11 13 23 23 23 23 23 23 23 23 23 23 15 15 26 26 26 23 42 33 30 33 33 30 28 36 36 18 23 36 30 43 33 36 28 36 33 25 30 33 33 46 33 33 30 15 13 15 27 23 15 23 25 20 25 20 15 23 25 13 15 25 13 38 25 23 25 25 20 18 15 25 23 33 23 23 20 18 10 18 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 23 23 8 23 23 23 23 13 23 23 15 15 25 25 0 23 23 23 11 0 25 16 15 23 23 23 46 46 0 23 0 15 15 15 15 15 15 15 15 0 15 15 0 15 15 15 46 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 46 0 14 0 0 0 0 30 36 46 15 0 0 0 0 0 33 0 0 0 13 0 0 13 23 33 25 0 0 0 0 ] /Times-Bold 1000 720896 rf /Fl [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 19 32 29 29 58 48 19 19 19 29 33 15 19 15 16 29 29 29 29 29 29 29 29 29 29 19 19 33 33 33 29 54 42 39 42 42 39 36 45 45 23 29 45 39 55 42 45 36 45 42 32 39 42 42 58 42 42 39 19 16 19 34 29 19 29 32 26 32 26 19 29 32 16 19 32 16 48 32 29 32 32 26 23 19 32 29 42 29 29 26 23 13 23 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 29 29 10 29 29 29 29 16 29 29 19 19 32 32 0 29 29 29 15 0 31 20 19 29 29 29 58 58 0 29 0 19 19 19 19 19 19 19 19 0 19 19 0 19 19 19 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 58 0 17 0 0 0 0 39 45 58 19 0 0 0 0 0 42 0 0 0 16 0 0 16 29 42 32 0 0 0 0 ] /Times-Bold 1000 917504 rf /Fm [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 15 19 23 23 38 36 15 15 15 23 31 11 15 11 13 23 23 23 23 23 23 23 23 23 23 15 15 31 31 31 23 42 28 28 30 33 28 28 33 33 15 20 30 25 38 30 33 28 33 28 23 25 33 28 38 28 25 25 18 13 18 19 23 15 23 23 20 23 20 13 23 23 13 13 20 13 33 23 23 23 23 18 18 13 23 20 30 20 20 18 18 13 18 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 23 23 8 23 23 23 23 10 25 23 15 15 23 23 0 23 23 23 11 0 24 16 15 25 25 23 41 46 0 23 0 15 15 15 15 15 15 15 15 0 15 15 0 15 15 15 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 0 13 0 0 0 0 25 33 43 14 0 0 0 0 0 30 0 0 0 13 0 0 13 23 30 23 0 0 0 0 ] /Times-Italic 1000 720896 rf /Fn [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 15 19 23 23 38 36 15 15 15 23 26 11 15 11 13 23 23 23 23 23 23 23 23 23 23 13 13 26 26 26 20 42 33 30 30 33 28 25 33 33 15 18 33 28 41 33 33 25 33 30 25 28 33 33 43 33 33 28 15 13 15 21 23 15 20 23 20 23 20 15 23 23 13 13 23 13 36 23 23 23 23 15 18 13 23 23 33 23 23 20 22 9 22 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 23 23 8 23 23 23 23 8 20 23 15 15 25 25 0 23 23 23 11 0 21 16 15 20 20 23 46 46 0 20 0 15 15 15 15 15 15 15 15 0 15 15 0 15 15 15 46 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 0 13 0 0 0 0 28 33 41 14 0 0 0 0 0 30 0 0 0 13 0 0 13 23 33 23 0 0 0 0 ] /Times-Roman 1000 720896 rf /Fo [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 17 20 25 25 41 39 17 17 17 25 28 12 17 12 14 25 25 25 25 25 25 25 25 25 25 14 14 28 28 28 22 46 36 33 33 36 30 28 36 36 17 19 36 30 44 36 36 28 36 33 28 30 36 36 47 36 36 30 17 14 17 23 25 17 22 25 22 25 22 17 25 25 14 14 25 14 39 25 25 25 25 17 19 14 25 25 36 25 25 22 24 10 24 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 25 25 8 25 25 25 25 9 22 25 17 17 28 28 0 25 25 25 12 0 23 17 17 22 22 25 50 50 0 22 0 17 17 17 17 17 17 17 17 0 17 17 0 17 17 17 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44 0 14 0 0 0 0 30 36 44 15 0 0 0 0 0 33 0 0 0 14 0 0 14 25 36 25 0 0 0 0 ] /Times-Roman 1000 786432 rf /Fp 7 117 df<00000060000000C0000001800000070000000E0000001C0000003800000070 000000F0000000E0000001C000000380000007800000070000000E0000001E0000001C0000003C 0000007800000078000000F0000000F0000001E0000001E0000003C0000003C0000003C0000007 800000078000000F8000000F0000000F0000001F0000001E0000001E0000001E0000003E000000 3C0000003C0000003C0000007C0000007C00000078000000780000007800000078000000780000 0078000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000700000007000 0000700000007000000078000000780000003800000038000000380000003C0000001C0000001C 0000000E0000000E000000070000000300000001800000018000001B4978B51D>40 D<000030000000180000000C0000000E0000000600000007000000030000000380000003800000 03C0000001C0000001C0000001C0000001E0000001E0000001E0000000E0000000E0000000E000 0000E0000000E0000000E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0 000001E0000003E0000003C0000003C0000003C0000003C0000007C00000078000000780000007 8000000F8000000F0000000F0000001F0000001E0000001E0000003E0000003C0000003C000000 7800000078000000F0000000F0000000E0000001E0000001C0000003C000000380000007800000 0F0000000E0000001C0000003C0000003800000070000000E0000001C000000180000003000000 060000000C0000001800000070000000E00000001B497FB51D>I<000FFFFFFE0000000FFFFFFF 800000007F000FE00000007E0003F00000007E0000F80000007E0000FC0000007E00007C000000 FC00003E000000FC00003E000000FC00003F000000FC00001F000001F800001F000001F800001F 800001F800001F800001F800001F800003F000001F800003F000001F800003F000001F800003F0 00001F800007E000003F800007E000003F800007E000003F800007E000003F80000FC000003F00 000FC000007F00000FC000007F00000FC000007F00001F8000007E00001F800000FE00001F8000 00FE00001F800000FC00003F000001FC00003F000001F800003F000001F800003F000003F00000 7E000003E000007E000007E000007E00000FC000007E00000F800000FC00001F800000FC00003F 000000FC00007E000000FC0000FC000001F80001F0000001F80003E0000001F8000FC0000003F8 007F000000FFFFFFFC000000FFFFFFE000000031317BB036>68 D<0007E000001FF1C0003C3BE0 00F01FE001E00FE003E00FC007C007C0078007C00F8007C01F800F801F000F803F000F803F000F 807E001F007E001F007E001F007E001F00FC003E00FC003E00FC003E00FC003E04FC007C0CFC00 7C0C78007C0C7800FC187C01FC183C03FC183C077C301E1E3C600FF81FC003E007801E1F799E25 >97 D<000000F8000001FE0000038F0000071F00000F3F00001F3F00001E3E00001E1C00003E00 00003E0000003E0000007C0000007C0000007C0000007C0000007C000000F8000000F8000000F8 00007FFFF0007FFFF00000F8000001F0000001F0000001F0000001F0000001F0000003E0000003 E0000003E0000003E0000003E0000007C0000007C0000007C0000007C0000007C000000F800000 0F8000000F8000000F8000000F8000001F0000001F0000001F0000001F0000001F0000003E0000 003E0000003E0000003E0000003C0000007C0000007C00000078000000780000387800007CF000 00FCF00000FCE00000F9C00000F18000007F0000003E000000204081B116>102 D<03C03F000FF0FF801C79C1C0187B81E0307F03E0307E07E0607C07E0607C07C0607C0380C0F8 0000C0F8000000F8000000F8000001F0000001F0000001F0000001F0000003E0000003E0000003 E0000003E0000007C0000007C0000007C0000007C000000F8000000F8000000F8000000F800000 0F0000000E0000001B1F7A9E1E>114 D<000E00001E00003E00003E00003E00003E00007C0000 7C00007C00007C0000F80000F80000F800FFFFC0FFFFC001F00001F00001F00003E00003E00003 E00003E00007C00007C00007C00007C0000F80000F80000F80000F80001F00001F00001F00001F 00803E01803E01803E03003E03003E06003E06003E0C001E38000FF00003C000122C79AB18> 116 D E /Fq [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 23 29 35 35 59 55 23 23 23 35 40 18 23 18 20 35 35 35 35 35 35 35 35 35 35 20 20 40 40 40 31 65 51 47 47 51 43 39 51 51 23 27 51 43 63 51 51 39 51 47 39 43 51 51 67 51 51 43 23 20 23 33 35 23 31 35 31 35 31 23 35 35 20 20 35 20 55 35 35 35 35 23 27 20 35 35 51 35 35 31 34 14 34 38 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 35 35 12 35 35 35 35 13 31 35 23 23 39 39 0 35 35 35 18 0 32 25 23 31 31 35 71 71 0 31 0 23 23 23 23 23 23 23 23 0 23 23 0 23 23 23 71 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 19 0 0 0 0 43 51 63 22 0 0 0 0 0 47 0 0 0 20 0 0 20 35 51 35 0 0 0 0 ] /Times-Roman 1000 1114112 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 300 TeXDict begin %%EndSetup %%Page: 1 1 bop 400 627 a @beginspecial 0.700000 @hscale 0.700000 @vscale @setspecial%!PS-HyperNeWS drawing- %%Creator:arthur %%Title:HyperNeWS drawing. %%BoundingBox:0 0 414.1 173.118 %%TemplateBox:0 0 414.1 173.118 %%EndComments % "@(#)drawlib.ps 3.1 3/19/90 Arthur van Hoff (Turing Institute)"; % -- drawlib.ps -- Header file for PostScript drawings. /SC {dup type /arraytype eq {aload pop setrgbcolor} {setgray} ifelse} def /MX {1 0 0 1} def /CT {curveto} def /CP {closepath} def /LT {lineto} def /PT {moveto} def /PC {{lineto} stopped {moveto} if} def /LN {0 0 PT LT} def /LC {0 0 PC LT} def /FL {SC fill} def /ST {SC setlinewidth stroke} def /FS {gsave FL grestore ST} def /CM {matrix currentmatrix exch concat} def /SM {setmatrix} def /BO {gsave newpath concat} def /EO {grestore} def /SG {gsave SC eofill grestore ST} def /FG {SC eofill} def /AR { % c s a x y -- newpath matrix currentmatrix 5 1 roll newpath translate rotate 0 0 moveto 0 0 3 -1 roll -20 20 arc 0 0 lineto setmatrix FL } def /DA { % x y -- matrix currentmatrix 3 1 roll scale 0 1 1 -90 0 arc setmatrix } def /DR { % w h -- 0 0 moveto exch dup 0 lineto 1 index lineto 0 exch lineto closepath } def /DO { % w h -- matrix currentmatrix 3 1 roll scale 1 0.5 moveto 0.5 0.5 translate 0 0 0.5 0 360 arc closepath setmatrix } def /RR { % w h c -- 10 dict begin 2 index abs 2 index abs dup 2 index lt {exch pop} {pop} ifelse 2 div dup 2 index lt {exch pop} {pop} ifelse /c exch def /h exch def /w exch def c 0 moveto mark w 0 w h c arcto w h 0 h c arcto 0 h 0 0 c arcto 0 0 w 0 c arcto cleartomark closepath end } def /DP { % d1 d2 w h -- matrix currentmatrix 5 1 roll scale 0.5 0.5 moveto 0.5 0.5 0.5 5 -2 roll arc 0.5 0.5 lineto setmatrix } def /SF { % text col fontsize font -- text width findfont exch scalefont setfont SC 1 1 index {stringwidth pop abs 2 copy lt {exch} if pop} forall } def /TS { % width w h -- exch 2 index div exch scale } def /TL { % text w h lh -- 5 dict begin /h exch def 0 exch moveto pop {gsave show grestore 0 h rmoveto} forall end } def /TR { % text w h bh -- 5 dict begin /h exch def moveto { gsave dup stringwidth pop neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /TC { % text w h bh -- 5 dict begin /h exch def exch 2 div exch moveto { gsave dup stringwidth pop 2 div neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /IR { % w h DR gsave 1 setgray fill grestore 0 setgray stroke } def /IC { % str w h -- scale LoadImage imagecanvas } def /IM { % ... -- /pstr exch string def 0 exch translate scale {} settransfer 0 0 3 -1 roll 0 0 6 array astore {currentfile pstr readhexstring pop} image } def /EPSdict 10 dict begin /initmatrix { #Matrisk# setmatrix } def /initgraphics { systemdict /initgraphics get exec #Matrisk# setmatrix } def /showpage {} def currentdict end def /BEPS { save 5 1 roll EPSdict begin gsave scale translate matrix currentmatrix /#Matrisk# exch def systemdict /initgraphics get exec #Matrisk# setmatrix 500 dict begin } def /EEPS { end grestore end restore } def gsave initclip 1.010 1.066 scale [1 0 0 1 0 4 ] BO [(COOL)] [0 0 0] 128 /Helvetica-BoldOblique SF 404 1 TS 28.4 -130 TC EO [1 0 0 1 6 0 ] BO [(COOL)] [1 1 1] 128 /Helvetica-BoldOblique SF 404 1 TS 28.4 -130 TC EO grestore @endspecial eop %%Page: 2 2 bop 483 378 a Fq(Cool)18 b(Design)g(Specification)h Fp(\(Dr)l(aft\))783 530 y Fo(Arthur)11 b(A.)i(van)f(Hoff)774 588 y(The)h(Turing)f(Institute)873 689 y(June)h(1991)964 2828 y Fn(2)p eop %%Page: 3 3 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fl(Summary)0 299 y Fn(Cool)c(is)h(an)f(interactive)h(UI)g(development)e(environment)h (based)g(on)h(TNT)f(and)h(HyperNeWS.)h(It)e(is)g(used)h(to)f(interactively)0 355 y(design)13 b(and)g(test)g(OpenLook)g(applications)f(in)h(the)g(TNT)g (environment.)k(It)c(will)g(implement)e(most)i(of)g(the)g(UI)h(design)0 412 y(features)e(as)f(proposed)g(in)g(the)g(HyperNeWS)i(2.0)e(design)g (documents.)71 468 y(The)18 b(aim)g(of)h(this)e(document)h(is)g(to)g (establish)f(a)i(TNT)f(platform)g(for)g(Cool)h(which)f(implements)e(most)i (of)g(the)0 524 y(proposed)c(HyperNeWS)i(2.0)e(features.)23 b(The)15 b(TNT)f(API)h(remains)g(the)f(same)h(except)g(for)g(some)f (enhancements)g(and)0 581 y(extensions)c(which)i(are)g(essential)f(steps)g (towards)g(a)h(completely)e(interactive)i(Cool)f(system.)h(This)e(platform)h (will)g(later)0 637 y(be)h(the)f(basis)f(for)i(a)g(full)f(Cool)g (implementation)e(with)i(all)g(the)g(bells)g(and)g(whistles)f(of)h (HyperNeWS.)964 2828 y(3)p eop %%Page: 4 4 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fl(Contents)0 299 y Fk(1)45 b(Introduction)1612 b(8)68 355 y Fn(1.1)49 b(Cool)11 b(is)g(easy)g(to)g(use)26 b Fj(:)c(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)64 b Fn(8)68 412 y(1.2)49 b(Cool)11 b(components)f(are)i(upwardly)f(mobile)f Fj(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:) f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)64 b Fn(9)68 468 y(1.3)49 b(Cool)11 b(Application)f(structure)22 b Fj(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(10)68 524 y(1.4)49 b(Cool)11 b(Component)f(structure)25 b Fj(:)d(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(10)0 627 y Fk(2)k(Container)13 b(hierarchy)1437 b(12)68 683 y Fn(2.1)49 b(Parent)12 b(scope)30 b Fj(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:) g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(14)68 739 y(2.2)49 b(Addressing)10 b(objects)19 b Fj(:)j(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(17)68 796 y(2.3)49 b(Send)29 b Fj(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(19)68 852 y(2.4)49 b(Client)11 b(communication)29 b Fj(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(20)0 954 y Fk(3)k(Resources)1639 b(23)0 1057 y(4)45 b(Classes)1693 b(24)68 1113 y Fn(4.1)49 b(Resource)12 b(classes)24 b Fj(:)f(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(24)68 1170 y(4.2)49 b(Script)11 b(classes)k Fj(:)22 b(:)g(:)h(:)f(:)g(:) h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(25)0 1272 y Fk(5)k(Persistence)1619 b(27)68 1328 y Fn(5.1)49 b(Persistent)11 b(states)41 b Fj(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(27)68 1385 y(5.2)49 b(Creating)11 b(new)h(UI)f(components)43 b Fj(:)22 b(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)41 b Fn(28)68 1441 y(5.3)49 b(Persistent)11 b(variables)j Fj(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)41 b Fn(28)68 1497 y(5.4)49 b(Cloning)43 b Fj(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(29)68 1554 y(5.5)49 b(Renewing)41 b Fj(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)41 b Fn(29)68 1610 y(5.6)49 b(Saving)29 b Fj(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(29)68 1667 y(5.7)49 b(Loading)38 b Fj(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(30)0 1769 y Fk(6)k(Conclusions)1600 b(31)68 1825 y Fn(6.1)49 b(Remaining)10 b(problems)21 b Fj(:)h(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)41 b Fn(31)68 1882 y(6.2)49 b(Future)11 b(plans)35 b Fj(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)41 b Fn(33)0 1984 y Fk(A)35 b(Parent)13 b(scope)f(implementation)g(notes)1155 b(35)68 2040 y Fn(A.1)39 b(HyperNeWS)12 b(2.0)28 b Fj(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(35)68 2097 y(A.2)e(Local)11 b(dicts)g(first)g(in)f Fi(ParentDi)q(ctA)q(rr)q(ay)40 b Fj(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)41 b Fn(35)68 2153 y(A.3)e(Local)11 b(dicts)g(below)g(class)g(dicts)f(in)h Fi(ParentDi)q(ctA)q(rr)q(ay)16 b Fj(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)41 b Fn(36)68 2210 y(A.4)e(Recursive)12 b(send)19 b Fj(:)j(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)41 b Fn(36)68 2266 y(A.5)e(Dynamic)10 b(lookup)26 b Fj(:)d(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)41 b Fn(36)68 2323 y(A.6)e(Dynamic)10 b(lookup)h(with)f(local)h(dicts) 19 b Fj(:)j(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(37)68 2379 y(A.7)e(Dynamic)10 b(distribution)i Fj(:)22 b(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(37)68 2436 y(A.8)e(Shared)12 b(arrays)h Fj(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(37)68 2492 y(A.9)e(Shared)12 b(nested)f(arrays)26 b Fj(:)c(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(38)964 2828 y(4)p eop %%Page: 5 5 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fk(B)38 b(TNT)13 b(extensions)1530 b(39)68 252 y Fn(B.1)42 b(Container)11 b(hierarchy)40 b Fj(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)41 b Fn(39)68 308 y(B.2)h(Scoped)11 b(variable)h(management)42 b Fj(:)22 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(42)68 364 y(B.3)h(Scoped)11 b(variables)22 b Fj(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(43)68 421 y(B.4)h(Naming)10 b(objects)44 b Fj(:)23 b(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(45)68 477 y(B.5)h(Addressing)10 b(objects)19 b Fj(:)j(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(47)68 534 y(B.6)h(Sending)11 b(messages)34 b Fj(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(49)68 590 y(B.7)h(Delivering)10 b(messages)24 b Fj(:)e(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(50)68 647 y(B.8)h(Error)11 b(handling)29 b Fj(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(51)68 703 y(B.9)h(Message)11 b(logging)20 b Fj(:)j(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)41 b Fn(52)68 760 y(B.10)19 b(Control)10 b(actions)17 b Fj(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(53)68 816 y(B.11)19 b(Resource)12 b(manager)30 b Fj(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)41 b Fn(54)68 873 y(B.12)19 b(Auto)10 b(dictionaries)16 b Fj(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)41 b Fn(55)68 929 y(B.13)19 b(Plug-in)10 b(classes)25 b Fj(:)d(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)41 b Fn(56)68 985 y(B.14)19 b(Shared)12 b(classes)32 b Fj(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)41 b Fn(57)68 1042 y(B.15)19 b(Creating)11 b(default)g (components)16 b Fj(:)23 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:) g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:) 41 b Fn(58)68 1098 y(B.16)19 b(Persistent)11 b(variables)j Fj(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)41 b Fn(60)68 1155 y(B.17)19 b(Cloning)10 b(components)23 b Fj(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(63)68 1211 y(B.18)19 b(Renewing)11 b(components)20 b Fj(:)j(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(65)68 1268 y(B.19)19 b(Saving)11 b(components)43 b Fj(:)22 b(:)h(:)f(:)g(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(67)68 1324 y(B.20)19 b(Loading)10 b(components)18 b Fj(:)k(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(70)0 1426 y Fk(C)35 b(Examples)1646 b(72)68 1483 y Fn(C.1)42 b(Scoped)11 b(variables)22 b Fj(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)41 b Fn(72)68 1539 y(C.2)h(Scripts)29 b Fj(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(73)68 1596 y(C.3)h(Send)29 b Fj(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(74)68 1652 y(C.4)h(Buttons)10 b(demo)42 b Fj(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)41 b Fn(75)68 1709 y(C.5)h(Scrollbar)11 b(demo)17 b Fj(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)41 b Fn(76)68 1765 y(C.6)h(Newdefault)11 b(demo)42 b Fj(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)41 b Fn(78)68 1822 y(C.7)h(Clone)11 b(demo)40 b Fj(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)41 b Fn(79)68 1878 y(C.8)h(Save)12 b(and)f(load)g(demo)34 b Fj(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)41 b Fn(80)964 2828 y(5)p eop %%Page: 6 6 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fl(List)j(of)h(Figures)68 299 y Fn(1)83 b(A)11 b(Cool)g(drawing)g(tool)26 b Fj(:)c(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)64 b Fn(7)68 355 y(2)83 b(An)11 b(upwardly)g(mobile)f(UI)h(component)34 b Fj(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)64 b Fn(9)68 412 y(3)83 b(The)11 b(Canvas)h(container)f(hierarchy)h(of)f(the)h(drawing)f (tool)26 b Fj(:)c(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)41 b Fn(12)68 468 y(4)83 b(The)11 b(logical)g(container)g (hierarchy)h(of)f(the)g(drawing)h(tool)36 b Fj(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(13)68 524 y(5)83 b(An)11 b(example)g(of)g(a)h(scoped)f(font)54 b Fj(:)22 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(15)68 581 y(6)83 b(The)11 b(resulting)f(UI)i(with)e(the)i(scoped)f(font) 36 b Fj(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(15)68 637 y(7)83 b(The)11 b(logical)g(container)g(hierarchy)h(with)e(names)35 b Fj(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(17)68 694 y(8)83 b(Sending)11 b(a)g(message)g(through)g(the)g(logical)g(container)g(hierarchy)42 b Fj(:)22 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(19)68 750 y(9)83 b(A)11 b(message)g(intercepted)g(by)g(a)h(client)f (program)46 b Fj(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(21)68 807 y(10)60 b(Obtaining)10 b(a)h(resource)h(from)g(a)f(remote)g(client)29 b Fj(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(23)68 863 y(11)60 b(A)11 b(class)g(manager)31 b Fj(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(24)68 920 y(12)60 b(An)11 b(example)g(of)g(script)g(classes)58 b Fj(:)22 b(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(26)68 976 y(13)60 b(TNT)11 b(component)f(states)22 b Fj(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)41 b Fn(27)68 1033 y(14)60 b(UI)11 b(component)f(states)h (in)g(Cool)58 b Fj(:)22 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)41 b Fn(27)964 2828 y(6)p eop %%Page: 7 7 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)399 1786 y @beginspecial 0.500000 @hscale 0.500000 @vscale @setspecial%!PS-HyperNeWS drawing- %%Creator:arthur %%Title:HyperNeWS drawing. %%BoundingBox:0 0 580.75 421.07 %%TemplateBox:0 0 580.75 421.07 %%EndComments % "@(#)drawlib.ps 3.1 3/19/90 Arthur van Hoff (Turing Institute)"; % -- drawlib.ps -- Header file for PostScript drawings. /SC {dup type /arraytype eq {aload pop setrgbcolor} {setgray} ifelse} def /MX {1 0 0 1} def /CT {curveto} def /CP {closepath} def /LT {lineto} def /PT {moveto} def /PC {{lineto} stopped {moveto} if} def /LN {0 0 PT LT} def /LC {0 0 PC LT} def /FL {SC fill} def /ST {SC setlinewidth stroke} def /FS {gsave FL grestore ST} def /CM {matrix currentmatrix exch concat} def /SM {setmatrix} def /BO {gsave newpath concat} def /EO {grestore} def /SG {gsave SC eofill grestore ST} def /FG {SC eofill} def /AR { % c s a x y -- newpath matrix currentmatrix 5 1 roll newpath translate rotate 0 0 moveto 0 0 3 -1 roll -20 20 arc 0 0 lineto setmatrix FL } def /DA { % x y -- matrix currentmatrix 3 1 roll scale 0 1 1 -90 0 arc setmatrix } def /DR { % w h -- 0 0 moveto exch dup 0 lineto 1 index lineto 0 exch lineto closepath } def /DO { % w h -- matrix currentmatrix 3 1 roll scale 1 0.5 moveto 0.5 0.5 translate 0 0 0.5 0 360 arc closepath setmatrix } def /RR { % w h c -- 10 dict begin 2 index abs 2 index abs dup 2 index lt {exch pop} {pop} ifelse 2 div dup 2 index lt {exch pop} {pop} ifelse /c exch def /h exch def /w exch def c 0 moveto mark w 0 w h c arcto w h 0 h c arcto 0 h 0 0 c arcto 0 0 w 0 c arcto cleartomark closepath end } def /DP { % d1 d2 w h -- matrix currentmatrix 5 1 roll scale 0.5 0.5 moveto 0.5 0.5 0.5 5 -2 roll arc 0.5 0.5 lineto setmatrix } def /SF { % text col fontsize font -- text width findfont exch scalefont setfont SC 1 1 index {stringwidth pop abs 2 copy lt {exch} if pop} forall } def /TS { % width w h -- exch 2 index div exch scale } def /TL { % text w h lh -- 5 dict begin /h exch def 0 exch moveto pop {gsave show grestore 0 h rmoveto} forall end } def /TR { % text w h bh -- 5 dict begin /h exch def moveto { gsave dup stringwidth pop neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /TC { % text w h bh -- 5 dict begin /h exch def exch 2 div exch moveto { gsave dup stringwidth pop 2 div neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /IR { % w h DR gsave 1 setgray fill grestore 0 setgray stroke } def /IC { % str w h -- scale LoadImage imagecanvas } def /IM { % ... -- /pstr exch string def 0 exch translate scale {} settransfer 0 0 3 -1 roll 0 0 6 array astore {currentfile pstr readhexstring pop} image } def /EPSdict 10 dict begin /initmatrix { #Matrisk# setmatrix } def /initgraphics { systemdict /initgraphics get exec #Matrisk# setmatrix } def /showpage {} def currentdict end def /BEPS { save 5 1 roll EPSdict begin gsave scale translate matrix currentmatrix /#Matrisk# exch def systemdict /initgraphics get exec #Matrisk# setmatrix 500 dict begin } def /EEPS { end grestore end restore } def gsave initclip 1.010 1.066 scale [1 0 0 1 1 2 ] BO [1 0 0 1 0 0 ] BO 571 390 DR 1 [0 0 0] [0.9 0.9 0.9] FS EO EO [1 0 0 1 326 311 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 76 31 DR grestore -0 -0 1 1 BEPS gsave gsave 0 0 translate newpath 0 0 moveto 0 30 rlineto 75 0 rlineto 0 -30 rlineto closepath 0.800 0.800 0.800 setrgbcolor fill 0 0 moveto 0 30 rlineto 75 0 rlineto 0 -30 rlineto closepath 2 2 moveto 0 26 rlineto 71 0 rlineto 0 -26 rlineto closepath 1 1 1 setrgbcolor eofill newpath 4 4 moveto -4 -4 rlineto -2 -2 rlineto 0 34 rlineto 79 0 rlineto -2 -2 rlineto -4 -4 rlineto closepath clip newpath 0 0 moveto 0 30 rlineto 75 0 rlineto 0 -30 rlineto closepath 2 2 moveto 0 26 rlineto 71 0 rlineto 0 -26 rlineto closepath 0.500 0.500 0.500 setrgbcolor eofill grestore gsave 0 0 0 setrgbcolor (Helvetica-Bold)cvn findfont [ 18 0 0 18 0 0 ] makefont setfont 13.488 11.000 moveto (Black)show grestore grestore EEPS EO [1 0 0 1 401 311 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 76 31 DR grestore -0 -0 1 1 BEPS gsave gsave 0 0 translate newpath 0 0 moveto 0 30 rlineto 75 0 rlineto 0 -30 rlineto closepath 0.900 0.900 0.900 setrgbcolor fill 0 0 moveto 0 30 rlineto 75 0 rlineto 0 -30 rlineto closepath 2 2 moveto 0 26 rlineto 71 0 rlineto 0 -26 rlineto closepath 0.500 0.500 0.500 setrgbcolor eofill newpath 4 4 moveto -4 -4 rlineto -2 -2 rlineto 0 34 rlineto 79 0 rlineto -2 -2 rlineto -4 -4 rlineto closepath clip newpath 0 0 moveto 0 30 rlineto 75 0 rlineto 0 -30 rlineto closepath 2 2 moveto 0 26 rlineto 71 0 rlineto 0 -26 rlineto closepath 1 1 1 setrgbcolor eofill grestore gsave 0 0 0 setrgbcolor (Helvetica-Bold)cvn findfont [ 18 0 0 18 0 0 ] makefont setfont 13.002 11.000 moveto (White)show grestore grestore EEPS EO [1 0 0 1 186 356 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 181 31 DR grestore -0 -0 1 1 BEPS gsave gsave (Helvetica-Bold)cvn findfont [ 18 0 0 18 0 0 ] makefont setfont newpath 0 0 moveto 0 30 rlineto 180 0 rlineto 0 -30 rlineto closepath clip newpath 0 0 0 setrgbcolor 4 6 moveto 0 20 rlineto 176 0 rlineto 0 -20 rlineto closepath clip newpath 0 0 0 setrgbcolor 4 11.000 moveto 0 0 rmoveto gsave (Cool Drawing Tool)show grestore grestore grestore EEPS EO [1 0 0 1 11 346 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 546 16 DR grestore -0 -0 1 1 BEPS gsave gsave newpath 0 5.500 moveto 0 4 rlineto 545 0 rlineto 0 -4 rlineto closepath 0.500 0.500 0.500 setrgbcolor fill gsave 0 5.500 translate 2 2 moveto 0 0 lineto 0 4 rlineto 545 0 rlineto -2 -2 rlineto closepath 1 1 1 setrgbcolor fill grestore grestore grestore EEPS EO [1 0 0 1 536 21 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 21 276 DR grestore -0 -0 1 1 BEPS gsave gsave 0 0 moveto 0 275 rlineto 20 0 rlineto 0 -275 rlineto closepath 0.900 0.900 0.900 setrgbcolor fill 8 12.000 moveto 0 251.000 rlineto 4 0 rlineto 0 -251.000 rlineto closepath 0.800 0.800 0.800 setrgbcolor fill grestore gsave 0 0 translate newpath 0 0 moveto 0 8.000 rlineto 20 0 rlineto 0 -8.000 rlineto closepath 0.900 0.900 0.900 setrgbcolor fill 0 0 moveto 0 8.000 rlineto 20 0 rlineto 0 -8.000 rlineto closepath 2 2 moveto 0 4.000 rlineto 16 0 rlineto 0 -4.000 rlineto closepath 0.500 0.500 0.500 setrgbcolor eofill newpath 4 4 moveto -4 -4 rlineto -2 -2 rlineto 0 12.000 rlineto 24 0 rlineto -2 -2 rlineto -4 -4 rlineto closepath clip newpath 0 0 moveto 0 8.000 rlineto 20 0 rlineto 0 -8.000 rlineto closepath 2 2 moveto 0 4.000 rlineto 16 0 rlineto 0 -4.000 rlineto closepath 1 1 1 setrgbcolor eofill grestore gsave 0 267.000 translate newpath 0 0 moveto 0 8.000 rlineto 20 0 rlineto 0 -8.000 rlineto closepath 0.900 0.900 0.900 setrgbcolor fill 0 0 moveto 0 8.000 rlineto 20 0 rlineto 0 -8.000 rlineto closepath 2 2 moveto 0 4.000 rlineto 16 0 rlineto 0 -4.000 rlineto closepath 0.500 0.500 0.500 setrgbcolor eofill newpath 4 4 moveto -4 -4 rlineto -2 -2 rlineto 0 12.000 rlineto 24 0 rlineto -2 -2 rlineto -4 -4 rlineto closepath clip newpath 0 0 moveto 0 8.000 rlineto 20 0 rlineto 0 -8.000 rlineto closepath 2 2 moveto 0 4.000 rlineto 16 0 rlineto 0 -4.000 rlineto closepath 1 1 1 setrgbcolor eofill grestore gsave 0 168.308 translate gsave 0 0 translate newpath 0 0 moveto 0 47.999 rlineto 20 0 rlineto 0 -47.999 rlineto closepath 0.900 0.900 0.900 setrgbcolor fill 0 0 moveto 0 47.999 rlineto 20 0 rlineto 0 -47.999 rlineto closepath 2 2 moveto 0 43.999 rlineto 16 0 rlineto 0 -43.999 rlineto closepath 0.500 0.500 0.500 setrgbcolor eofill newpath 4 4 moveto -4 -4 rlineto -2 -2 rlineto 0 51.999 rlineto 24 0 rlineto -2 -2 rlineto -4 -4 rlineto closepath clip newpath 0 0 moveto 0 47.999 rlineto 20 0 rlineto 0 -47.999 rlineto closepath 2 2 moveto 0 43.999 rlineto 16 0 rlineto 0 -43.999 rlineto closepath 1 1 1 setrgbcolor eofill grestore 2 16.000 moveto 0 2 rlineto 16 0 rlineto 0 -2 rlineto closepath 0.500 0.500 0.500 setrgbcolor fill 2 31.000 moveto 0 2 rlineto 16 0 rlineto 0 -2 rlineto closepath 1 1 1 setrgbcolor fill gsave 4 4 translate 12 8.000 scale 0 1 translate 1 -1 scale 0 0 moveto 0 0.200 lineto 0.500 1 lineto 1 0.200 lineto 1 0 lineto closepath 0.500 0.500 0.500 setrgbcolor fill grestore gsave 4 35.999 translate 12 8.000 scale 0 0 moveto 0 0.200 lineto 0.500 1 lineto 1 0.200 lineto 1 0 lineto closepath 0.500 0.500 0.500 setrgbcolor fill grestore grestore grestore EEPS EO [1 0 0 1 21 311 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 101 31 DR grestore -0 -0 1 1 BEPS gsave gsave 0 0 translate newpath matrix currentmatrix 0 0 translate 15 0 moveto 100 0 100 30 15 arcto pop pop pop pop 100 30 0 30 15 arcto pop pop pop pop 0 30 0 0 15 arcto pop pop pop pop 0 0 100 0 15 arcto pop pop pop pop closepath setmatrix 0.900 0.900 0.900 setrgbcolor fill matrix currentmatrix 0 0 translate 15 0 moveto 100 0 100 30 15 arcto pop pop pop pop 100 30 0 30 15 arcto pop pop pop pop 0 30 0 0 15 arcto pop pop pop pop 0 0 100 0 15 arcto pop pop pop pop closepath setmatrix matrix currentmatrix 2 2 translate 13 0 moveto 96 0 96 26 13 arcto pop pop pop pop 96 26 0 26 13 arcto pop pop pop pop 0 26 0 0 13 arcto pop pop pop pop 0 0 96 0 13 arcto pop pop pop pop closepath setmatrix 0.500 0.500 0.500 setrgbcolor eofill newpath 15 15 moveto -15 -15 rlineto -2 -2 rlineto 0 34 rlineto 104 0 rlineto -2 -2 rlineto -15 -15 rlineto closepath clip newpath matrix currentmatrix 0 0 translate 15 0 moveto 100 0 100 30 15 arcto pop pop pop pop 100 30 0 30 15 arcto pop pop pop pop 0 30 0 0 15 arcto pop pop pop pop 0 0 100 0 15 arcto pop pop pop pop closepath setmatrix matrix currentmatrix 2 2 translate 13 0 moveto 96 0 96 26 13 arcto pop pop pop pop 96 26 0 26 13 arcto pop pop pop pop 0 26 0 0 13 arcto pop pop pop pop 0 0 96 0 13 arcto pop pop pop pop closepath setmatrix 1 1 1 setrgbcolor eofill grestore gsave 0 0 0 setrgbcolor (Helvetica-Bold)cvn findfont [ 18 0 0 18 0 0 ] makefont setfont 15 11.000 moveto (File)show gsave 73 9 translate 12 12 scale newpath 0.200 0.850 moveto 0.850 0.850 lineto 0.500 0.200 lineto closepath 0.800 0.800 0.800 setrgbcolor fill 0 1 moveto 1 1 lineto 1 0.900 lineto 0.550 0 lineto 0.450 0 lineto 0 0.900 lineto closepath 0.200 0.850 moveto 0.850 0.850 lineto 0.500 0.200 lineto closepath 0.500 0.500 0.500 setrgbcolor eofill 0.550 0 moveto 0.450 0 lineto 0.450 0.100 lineto 0.850 0.850 lineto 1 0.850 lineto closepath 1 1 1 setrgbcolor fill grestore grestore grestore EEPS EO [1 0 0 1 21 361 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 26 26 DR grestore -0 -0 1 1 BEPS gsave gsave 0 0 translate newpath matrix currentmatrix 0 0 translate 6.250 0 moveto 25 0 25 25 6.250 arcto pop pop pop pop 25 25 0 25 6.250 arcto pop pop pop pop 0 25 0 0 6.250 arcto pop pop pop pop 0 0 25 0 6.250 arcto pop pop pop pop closepath setmatrix 0.900 0.900 0.900 setrgbcolor fill matrix currentmatrix 0 0 translate 6.250 0 moveto 25 0 25 25 6.250 arcto pop pop pop pop 25 25 0 25 6.250 arcto pop pop pop pop 0 25 0 0 6.250 arcto pop pop pop pop 0 0 25 0 6.250 arcto pop pop pop pop closepath setmatrix matrix currentmatrix 2 2 translate 4.250 0 moveto 21 0 21 21 4.250 arcto pop pop pop pop 21 21 0 21 4.250 arcto pop pop pop pop 0 21 0 0 4.250 arcto pop pop pop pop 0 0 21 0 4.250 arcto pop pop pop pop closepath setmatrix 0.500 0.500 0.500 setrgbcolor eofill newpath 6.250 6.250 moveto -6.250 -6.250 rlineto -2 -2 rlineto 0 29 rlineto 29 0 rlineto -2 -2 rlineto -6.250 -6.250 rlineto closepath clip newpath matrix currentmatrix 0 0 translate 6.250 0 moveto 25 0 25 25 6.250 arcto pop pop pop pop 25 25 0 25 6.250 arcto pop pop pop pop 0 25 0 0 6.250 arcto pop pop pop pop 0 0 25 0 6.250 arcto pop pop pop pop closepath setmatrix matrix currentmatrix 2 2 translate 4.250 0 moveto 21 0 21 21 4.250 arcto pop pop pop pop 21 21 0 21 4.250 arcto pop pop pop pop 0 21 0 0 4.250 arcto pop pop pop pop 0 0 21 0 4.250 arcto pop pop pop pop closepath setmatrix 1 1 1 setrgbcolor eofill grestore gsave gsave 6.500 6.500 translate 12 12 scale newpath 0.200 0.850 moveto 0.850 0.850 lineto 0.500 0.200 lineto closepath 0.800 0.800 0.800 setrgbcolor fill 0 1 moveto 1 1 lineto 1 0.900 lineto 0.550 0 lineto 0.450 0 lineto 0 0.900 lineto closepath 0.200 0.850 moveto 0.850 0.850 lineto 0.500 0.200 lineto closepath 0.500 0.500 0.500 setrgbcolor eofill 0.550 0 moveto 0.450 0 lineto 0.450 0.100 lineto 0.850 0.850 lineto 1 0.850 lineto closepath 1 1 1 setrgbcolor fill grestore grestore grestore EEPS EO [1 0 0 1 11 11 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 1 16 DR grestore -0 -0 1 1 BEPS EEPS EO [1 0 0 1 0 0 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 26 26 DR grestore -0 -0 1 1 BEPS gsave gsave 0 1 moveto 0 24 rlineto 24 0 rlineto 0 -24 rlineto closepath clip newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat 0 0 moveto 0 18 rlineto 18 0 rlineto 0 -18 rlineto closepath setmatrix newpath 0 2 translate gsave newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat newpath matrix currentmatrix [ 1 0 0 1 2 16 ] concat 0 0 moveto 0 -14 lineto 6 -14 lineto 6 0 lineto closepath gsave 0.900 0.900 0.900 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 8 8 ] concat 0 0 moveto 0 -6 lineto 8 -6 lineto 8 0 lineto closepath gsave 0.900 0.900 0.900 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 6 8 ] concat 0 0 moveto 0 -6 lineto 6 -6 lineto 6 0 lineto closepath gsave 0.900 0.900 0.900 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 12 8 ] concat 0 0 moveto -4 0 lineto setmatrix newpath matrix currentmatrix [ 1 0 0 1 0 18 ] concat 0 0 moveto 0 -18 lineto 2 -18 lineto 2 0 lineto closepath gsave 0.010 1 0.010 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 8 18 ] concat 0 0 moveto 0 -10 lineto 2 -10 lineto 2 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 16 10 ] concat 0 0 moveto 0 -8 lineto 2 -8 lineto 2 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 0 2 ] concat 0 0 moveto 0 -2 lineto 18 -2 lineto 18 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 2 18 ] concat 0 0 moveto 0 -2 lineto 8 -2 lineto 8 0 lineto closepath gsave 0.010 1 0.010 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 2 18 ] concat 0 0 moveto 0 -2 lineto 2 -2 lineto 2 0 lineto closepath gsave 0.960 1 0 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 0 18 ] concat 0 0 moveto 6 0 lineto setmatrix newpath matrix currentmatrix [ 1 0 0 1 10 10 ] concat 0 0 moveto 0 -2 lineto 8 -2 lineto 8 0 lineto closepath gsave 0.010 1 0.010 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 16 2 ] concat 0 0 moveto 0 -2 lineto 2 -2 lineto 2 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix setmatrix grestore grestore grestore EEPS EO [1 0 0 1 554 0 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 21 21 DR grestore -0 -0 1 1 BEPS gsave gsave 0 1 moveto 0 19 rlineto 19 0 rlineto 0 -19 rlineto closepath clip newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat 0 0 moveto 0 18 rlineto 18 0 rlineto 0 -18 rlineto closepath setmatrix newpath 0 2 translate gsave newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat newpath matrix currentmatrix [ 1 0 0 1 10 16 ] concat 0 0 moveto 0 -14 lineto 6 -14 lineto 6 0 lineto closepath gsave 0.900 0.900 0.900 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 2 8 ] concat 0 0 moveto 0 -6 lineto 8 -6 lineto 8 0 lineto closepath gsave 0.900 0.900 0.900 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 16 16 ] concat 0 0 moveto 0 -14 lineto 2 -14 lineto 2 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 8 18 ] concat 0 0 moveto 0 -10 lineto 2 -10 lineto 2 0 lineto closepath gsave 0.010 1 0.010 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 0 10 ] concat 0 0 moveto 0 -10 lineto 2 -10 lineto 2 0 lineto closepath gsave 0.060 0.990 0.750 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 2 2 ] concat 0 0 moveto 0 -2 lineto 16 -2 lineto 16 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 10 18 ] concat 0 0 moveto 0 -2 lineto 8 -2 lineto 8 0 lineto closepath gsave 0.010 1 0.010 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 2 10 ] concat 0 0 moveto 0 -2 lineto 8 -2 lineto 8 0 lineto closepath gsave 0.010 1 0.010 setrgbcolor fill grestore setmatrix setmatrix grestore grestore grestore EEPS EO [1 0 0 1 0 374 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 26 21 DR grestore -0 -0 1 1 BEPS gsave gsave 0 1 moveto 0 19 rlineto 24 0 rlineto 0 -19 rlineto closepath clip newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat 0 0 moveto 0 18 rlineto 18 0 rlineto 0 -18 rlineto closepath setmatrix newpath 0 2 translate gsave newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat newpath matrix currentmatrix [ 1 0 0 1 2 16 ] concat 0 0 moveto 0 -14 lineto 6 -14 lineto 6 0 lineto closepath gsave 0.900 0.900 0.900 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 8 16 ] concat 0 0 moveto 0 -6 lineto 8 -6 lineto 8 0 lineto closepath gsave 0.900 0.900 0.900 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 12 8 ] concat 0 0 moveto -4 0 lineto setmatrix newpath matrix currentmatrix [ 1 0 0 1 8 8 ] concat 0 0 moveto 0 -6 lineto 2 -6 lineto 2 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 0 16 ] concat 0 0 moveto 0 -16 lineto 2 -16 lineto 2 0 lineto closepath gsave 1 1 1 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 16 16 ] concat 0 0 moveto 0 -6 lineto 2 -6 lineto 2 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 0 18 ] concat 0 0 moveto 0 -2 lineto 18 -2 lineto 18 0 lineto closepath gsave 1 1 1 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 2 2 ] concat 0 0 moveto 0 -2 lineto 8 -2 lineto 8 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 8 10 ] concat 0 0 moveto 0 -2 lineto 10 -2 lineto 10 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix setmatrix grestore grestore grestore EEPS EO [1 0 0 1 554 374 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 21 21 DR grestore -0 -0 1 1 BEPS gsave gsave 0 1 moveto 0 19 rlineto 19 0 rlineto 0 -19 rlineto closepath clip newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat 0 0 moveto 0 18 rlineto 18 0 rlineto 0 -18 rlineto closepath setmatrix newpath 0 2 translate gsave newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat newpath matrix currentmatrix [ 1 0 0 1 10 16 ] concat 0 0 moveto 0 -14 lineto 6 -14 lineto 6 0 lineto closepath gsave 0.900 0.900 0.900 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 2 16 ] concat 0 0 moveto 0 -6 lineto 8 -6 lineto 8 0 lineto closepath gsave 0.900 0.900 0.900 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 6 8 ] concat 0 0 moveto -4 0 lineto setmatrix newpath matrix currentmatrix [ 1 0 0 1 0 16 ] concat 0 0 moveto 0 -8 lineto 2 -8 lineto 2 0 lineto closepath gsave 1 1 1 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 16 16 ] concat 0 0 moveto 0 -16 lineto 2 -16 lineto 2 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 8 8 ] concat 0 0 moveto 0 -8 lineto 2 -8 lineto 2 0 lineto closepath gsave 1 1 1 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 0 18 ] concat 0 0 moveto 0 -2 lineto 18 -2 lineto 18 0 lineto closepath gsave 1 1 1 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 10 2 ] concat 0 0 moveto 0 -2 lineto 8 -2 lineto 8 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 2 10 ] concat 0 0 moveto 0 -2 lineto 8 -2 lineto 8 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix setmatrix grestore grestore grestore EEPS EO [1 0 0 1 16 21 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 516 276 DR grestore -0 -0 1 1 BEPS gsave gsave gsave 1 1 1 setrgbcolor matrix currentmatrix 0 1 translate 0 0 moveto 514 0 514 274 0 arcto pop pop pop pop 514 274 0 274 0 arcto pop pop pop pop 0 274 0 0 0 arcto pop pop pop pop 0 0 514 0 0 arcto pop pop pop pop closepath setmatrix gsave fill grestore 0 0 0 setrgbcolor gsave stroke grestore clip newpath (Helvetica)cvn findfont [ 18 0 0 18 0 0 ] makefont setfont 257.500 132.500 moveto 0 0 rmoveto ()show grestore grestore grestore EEPS EO [1 0 0 1 166 91 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 176 126 DR grestore -0 -0 1 1 BEPS gsave gsave 0 1 moveto 0 124 rlineto 174 0 rlineto 0 -124 rlineto closepath clip newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat 0 0 moveto 0 120 rlineto 172 0 rlineto 0 -120 rlineto closepath setmatrix newpath 0 2 translate gsave newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat newpath matrix currentmatrix [ 1 0 0 1 0 72 ] concat 0 0 moveto 0 -72 lineto 128 -72 lineto 128 0 lineto closepath gsave 1 1 1 setrgbcolor fill grestore gsave 0 0 0 setrgbcolor stroke grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 88 116 ] concat matrix currentmatrix 80 -80 scale 1 0.500 moveto 0.500 0.500 translate 0 0 0.500 0 360 arc setmatrix closepath gsave 0 0 0 setrgbcolor fill grestore gsave 0 0 0 setrgbcolor stroke grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 84 120 ] concat 0 0 moveto 0 -8 lineto 8 -8 lineto 8 0 lineto closepath gsave 0 0 0 setrgbcolor fill grestore gsave 0 0 0 setrgbcolor stroke grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 164 120 ] concat 0 0 moveto 0 -8 lineto 8 -8 lineto 8 0 lineto closepath gsave 0 0 0 setrgbcolor fill grestore gsave 0 0 0 setrgbcolor stroke grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 164 40 ] concat 0 0 moveto 0 -8 lineto 8 -8 lineto 8 0 lineto closepath gsave 0 0 0 setrgbcolor fill grestore gsave 0 0 0 setrgbcolor stroke grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 84 40 ] concat 0 0 moveto 0 -8 lineto 8 -8 lineto 8 0 lineto closepath gsave 0 0 0 setrgbcolor fill grestore gsave 0 0 0 setrgbcolor stroke grestore setmatrix setmatrix grestore grestore grestore EEPS EO [1 0 0 1 136 311 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 101 31 DR grestore -0 -0 1 1 BEPS gsave gsave 0 0 translate newpath matrix currentmatrix 0 0 translate 15 0 moveto 100 0 100 30 15 arcto pop pop pop pop 100 30 0 30 15 arcto pop pop pop pop 0 30 0 0 15 arcto pop pop pop pop 0 0 100 0 15 arcto pop pop pop pop closepath setmatrix 0.900 0.900 0.900 setrgbcolor fill matrix currentmatrix 0 0 translate 15 0 moveto 100 0 100 30 15 arcto pop pop pop pop 100 30 0 30 15 arcto pop pop pop pop 0 30 0 0 15 arcto pop pop pop pop 0 0 100 0 15 arcto pop pop pop pop closepath setmatrix matrix currentmatrix 2 2 translate 13 0 moveto 96 0 96 26 13 arcto pop pop pop pop 96 26 0 26 13 arcto pop pop pop pop 0 26 0 0 13 arcto pop pop pop pop 0 0 96 0 13 arcto pop pop pop pop closepath setmatrix 0.500 0.500 0.500 setrgbcolor eofill newpath 15 15 moveto -15 -15 rlineto -2 -2 rlineto 0 34 rlineto 104 0 rlineto -2 -2 rlineto -15 -15 rlineto closepath clip newpath matrix currentmatrix 0 0 translate 15 0 moveto 100 0 100 30 15 arcto pop pop pop pop 100 30 0 30 15 arcto pop pop pop pop 0 30 0 0 15 arcto pop pop pop pop 0 0 100 0 15 arcto pop pop pop pop closepath setmatrix matrix currentmatrix 2 2 translate 13 0 moveto 96 0 96 26 13 arcto pop pop pop pop 96 26 0 26 13 arcto pop pop pop pop 0 26 0 0 13 arcto pop pop pop pop 0 0 96 0 13 arcto pop pop pop pop closepath setmatrix 1 1 1 setrgbcolor eofill grestore gsave 0 0 0 setrgbcolor (Helvetica-Bold)cvn findfont [ 18 0 0 18 0 0 ] makefont setfont 15 11.000 moveto (Edit)show gsave 73 9 translate 12 12 scale newpath 0.200 0.850 moveto 0.850 0.850 lineto 0.500 0.200 lineto closepath 0.800 0.800 0.800 setrgbcolor fill 0 1 moveto 1 1 lineto 1 0.900 lineto 0.550 0 lineto 0.450 0 lineto 0 0.900 lineto closepath 0.200 0.850 moveto 0.850 0.850 lineto 0.500 0.200 lineto closepath 0.500 0.500 0.500 setrgbcolor eofill 0.550 0 moveto 0.450 0 lineto 0.450 0.100 lineto 0.850 0.850 lineto 1 0.850 lineto closepath 1 1 1 setrgbcolor fill grestore grestore grestore EEPS EO grestore @endspecial 692 1884 a Fn(Figure)h(1:)f(A)g(Cool)g(drawing)g(tool)964 2828 y(7)p eop %%Page: 8 8 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fl(1)58 b(Introduction)0 299 y Fn(The)12 b(HyperNeWS)g(2.0)g(project)f(has)g(been)h (successful)f(in)g(providing)f(us)h(with)g(a)h(pool)f(of)g(ideas)h(which)f (can)h(be)f(used)g(in)0 355 y(Cool.)j(The)e(demonstrator)f(implementation)f (was)i(completely)f(separate)i(from)e(TNT,)i(which)e(makes)h(it)g (unacceptable)0 412 y(as)e(a)g(valid)g(starting)f(point)f(for)j(Cool.)g (There)f(would)g(be)g(too)f(much)g(duplication)g(of)h(effort)g(and)g(the)g (maintenance)g(would)0 468 y(be)i(a)f(nightmare.)71 524 y(So,)h(a)g(way)f (must)g(be)g(found)g(in)g(which)g(Cool)h(can)g(be)f(firmly)g(embedded)g(in)g (the)h(TNT)f(environment.)g(Cool)g(should)0 581 y(be)g(an)f(enhanced)h (version)f(of)g(TNT.)h(A)f(better)h(name)f(should)f(be)i Fm(TNT++)p Fn(.)h(However)f(TNT)f(is)g(a)h(UI)g(toolkit)d(while)i(Cool)0 637 y(is)h(an)h(interactive)f(UI)h(development)e(environment.)h(This)g(means) g(that)g(the)h(two)f(will)f(never)i(be)g(the)g(same.)g(Some)f(level)0 694 y(of)g(compatibility)e(must)i(be)g(achieved,)h(here)g(are)g(some)f (guidelines:)68 788 y Fh(\017)23 b Fn(The)10 b(existing)f(TNT-API)h(must)f (remain)h(the)g(same)g(both)g(syntactically)f(and)h(semantically.)g(It)g(may) g(be)g(extended)114 844 y(but)g(not)h(changed.)68 938 y Fh(\017)23 b Fn(Existing)12 b(TNT)h(applications)g(should)g(not)g(be)h(affected.)20 b(In)14 b(the)g(worst)f(case)i(there)f(should)e(be)i(a)h(well)e(defined)114 994 y(upgrade)e(path)g(for)h(existing)e(TNT)h(applications)68 1088 y Fh(\017)23 b Fn(The)12 b(performance)i(of)e(TNT)h(should)e(not)h(be)h (seriously)e(affected)j(by)e(the)g(introduction)f(of)i(new)g(Cool)f (features.)114 1145 y(However,)e(we)g(must)e(be)i(prepared)g(to)f(accept)h(a) g(small)e(penalty)h(in)g(performance)h(in)f(exchange)h(for)f(the)h(increased) 114 1201 y(functionality.)0 1295 y(I)h(will)f(discuss)g(the)h(Cool)g (implementation)d(of)j(some)g(of)g(the)f(HyperNeWS)i(2.0)f(features.)h(From)f (the)g(HyperNeWS)h(2.0)0 1351 y(project)f(we)h(know)f(that)g(TNT)g(lacks)g (some)g(features)h(which)f(are)h(essential)f(to)g(the)g(implementation)e(of)i (Cool:)68 1445 y Fh(\017)23 b Fm(Parent)10 b(scope)i Fn(A)f(mechanism)g(in)f (which)h(properties)g(are)i(inherited)d(along)h(the)g(container)h(hierarchy.) 68 1539 y Fh(\017)23 b Fm(Persistence)11 b Fn(Because)h(of)g(the)f (interactive)g(nature)h(of)g(Cool)f(applications)f(it)h(becomes)g(necessary)h (to)f(be)h(able)f(to)114 1595 y(save)g(and)h(restore)f(UIs)h(and)f(UI)g (components.)68 1689 y Fh(\017)23 b Fm(Classing)9 b(mechanism)h Fn(Some)h(extensions)f(to)g(the)h(TNT)f(classing)g(mechanism)g(are)i (required)e(when)h(persistence)114 1746 y(is)j(introduced.)24 b(In)15 b(HyperNeWS)h(2.0)g(two)f(new)g(flavors)g(of)h(classes)f(were)h (introduced)f Fm(plug-in)f Fn(classes)h(and)114 1802 y Fm(shared)10 b Fn(classes.)0 1896 y(In)j(this)g(document)f(I)i(will)e(discuss)g(the)i (incorporation)e(of)h(these)h(features)f(into)g(the)g(TNT)g(system)f(making)h (it)f(a)i(better)0 1952 y(starting)i(point)g(for)i(Cool.)29 b(All)16 b(proposed)h(source)g(code)g(changes)h(relate)f(to)g(version)f(2.0)i (of)f(TNT)g(running)f(under)0 2009 y(OpenWindows)e(version)h(2.0.)23 b(The)15 b(source)h(code)f(fragments)g(should)f(be)h(seen)g(as)h(proposed)e (changes)i(and)f(are)h(not)0 2065 y(intended)f(as)h(final)g(implementations.) 23 b(Most)15 b(changes)h(are)h(made)f(using)f Fi(/installm)q(et)q(hod)20 b Fn(calls.)25 b(I)16 b(chose)g(to)0 2122 y(use)c(this)g(very)g(inelegant)g (technique)g(because)g(it)g(can)h(be)f(used)g(to)g(override)h(existing)e(TNT) h(methods)f(without)g(having)0 2178 y(to)j(modify)f(the)i(TNT)f(source.)21 b(In)14 b(real)h(life)g(some)e(of)i(the)f(changes)h(will)e(be)i(made)f(in)g (the)g(TNT)h(source)f(while)g(other)0 2235 y(changes)d(can)h(be)g(put)f(into) f(mixin)g(classes)h(which)g(are)h(mixed)f(in)g(with)g(TNT)g(classes.)0 2359 y Fg(1.1)50 b(Cool)12 b(is)h(easy)g(to)f(use)0 2446 y Fn(A)f(lot)f(of)h(the)g(features)h(discussed)e(here)h(require)h(the)f (introduction)e(of)i(programming)e(tools)h(and)h(mechanisms.)g(Unlike)0 2503 y(TNT)19 b(there)g(needs)f(to)h(be)g(only)f(a)h(small)e(published)h(API) h(for)g(Cool)g(since)f(most)g(of)h(the)f(Cool)h(facilities)f(are)i(not)0 2559 y(programmed.)26 b(An)16 b(interactive)g(system)f(has)h(the)g(advantage) h(that)f(the)g(most)f(complex)g(operations)h(are)h(performed)0 2616 y(though)10 b(tools)h(with)f(a)i(well)f(defined)g(user)h(interface.)h (These)e(tools)f(hide)i(the)f(underlying)f(complexity)g(of)i(the)f(software)0 2672 y(and)g(they)g(require)g(far)h(less)e(documentation.)h(Some)g(examples)f (of)h(these)g(tools)f(are:)i Fm(drawingtool)p Fn(,)e Fm(property)g(browser)p Fn(,)964 2828 y(8)p eop %%Page: 9 9 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)551 834 y @beginspecial 0.400000 @hscale 0.400000 @vscale @setspecial%!PS-HyperNeWS drawing- %%Creator:arthur %%Title:HyperNeWS drawing. %%BoundingBox:0 0 541.36 434.928 %%TemplateBox:0 0 541.36 434.928 %%EndComments % "@(#)drawlib.ps 3.1 3/19/90 Arthur van Hoff (Turing Institute)"; % -- drawlib.ps -- Header file for PostScript drawings. /SC {dup type /arraytype eq {aload pop setrgbcolor} {setgray} ifelse} def /MX {1 0 0 1} def /CT {curveto} def /CP {closepath} def /LT {lineto} def /PT {moveto} def /PC {{lineto} stopped {moveto} if} def /LN {0 0 PT LT} def /LC {0 0 PC LT} def /FL {SC fill} def /ST {SC setlinewidth stroke} def /FS {gsave FL grestore ST} def /CM {matrix currentmatrix exch concat} def /SM {setmatrix} def /BO {gsave newpath concat} def /EO {grestore} def /SG {gsave SC eofill grestore ST} def /FG {SC eofill} def /AR { % c s a x y -- newpath matrix currentmatrix 5 1 roll newpath translate rotate 0 0 moveto 0 0 3 -1 roll -20 20 arc 0 0 lineto setmatrix FL } def /DA { % x y -- matrix currentmatrix 3 1 roll scale 0 1 1 -90 0 arc setmatrix } def /DR { % w h -- 0 0 moveto exch dup 0 lineto 1 index lineto 0 exch lineto closepath } def /DO { % w h -- matrix currentmatrix 3 1 roll scale 1 0.5 moveto 0.5 0.5 translate 0 0 0.5 0 360 arc closepath setmatrix } def /RR { % w h c -- 10 dict begin 2 index abs 2 index abs dup 2 index lt {exch pop} {pop} ifelse 2 div dup 2 index lt {exch pop} {pop} ifelse /c exch def /h exch def /w exch def c 0 moveto mark w 0 w h c arcto w h 0 h c arcto 0 h 0 0 c arcto 0 0 w 0 c arcto cleartomark closepath end } def /DP { % d1 d2 w h -- matrix currentmatrix 5 1 roll scale 0.5 0.5 moveto 0.5 0.5 0.5 5 -2 roll arc 0.5 0.5 lineto setmatrix } def /SF { % text col fontsize font -- text width findfont exch scalefont setfont SC 1 1 index {stringwidth pop abs 2 copy lt {exch} if pop} forall } def /TS { % width w h -- exch 2 index div exch scale } def /TL { % text w h lh -- 5 dict begin /h exch def 0 exch moveto pop {gsave show grestore 0 h rmoveto} forall end } def /TR { % text w h bh -- 5 dict begin /h exch def moveto { gsave dup stringwidth pop neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /TC { % text w h bh -- 5 dict begin /h exch def exch 2 div exch moveto { gsave dup stringwidth pop 2 div neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /IR { % w h DR gsave 1 setgray fill grestore 0 setgray stroke } def /IC { % str w h -- scale LoadImage imagecanvas } def /IM { % ... -- /pstr exch string def 0 exch translate scale {} settransfer 0 0 3 -1 roll 0 0 6 array astore {currentfile pstr readhexstring pop} image } def /EPSdict 10 dict begin /initmatrix { #Matrisk# setmatrix } def /initgraphics { systemdict /initgraphics get exec #Matrisk# setmatrix } def /showpage {} def currentdict end def /BEPS { save 5 1 roll EPSdict begin gsave scale translate matrix currentmatrix /#Matrisk# exch def systemdict /initgraphics get exec #Matrisk# setmatrix 500 dict begin } def /EEPS { end grestore end restore } def gsave initclip 1.010 1.066 scale [1 0 0 1 184 272 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 86 31 DR grestore -0 -0 1 1 BEPS gsave gsave 0 0 translate newpath matrix currentmatrix 0 0 translate 15 0 moveto 85 0 85 30 15 arcto pop pop pop pop 85 30 0 30 15 arcto pop pop pop pop 0 30 0 0 15 arcto pop pop pop pop 0 0 85 0 15 arcto pop pop pop pop closepath setmatrix 0.900 0.900 0.900 setrgbcolor fill matrix currentmatrix 0 0 translate 15 0 moveto 85 0 85 30 15 arcto pop pop pop pop 85 30 0 30 15 arcto pop pop pop pop 0 30 0 0 15 arcto pop pop pop pop 0 0 85 0 15 arcto pop pop pop pop closepath setmatrix matrix currentmatrix 2 2 translate 13 0 moveto 81 0 81 26 13 arcto pop pop pop pop 81 26 0 26 13 arcto pop pop pop pop 0 26 0 0 13 arcto pop pop pop pop 0 0 81 0 13 arcto pop pop pop pop closepath setmatrix 0.500 0.500 0.500 setrgbcolor eofill newpath 15 15 moveto -15 -15 rlineto -2 -2 rlineto 0 34 rlineto 89 0 rlineto -2 -2 rlineto -15 -15 rlineto closepath clip newpath matrix currentmatrix 0 0 translate 15 0 moveto 85 0 85 30 15 arcto pop pop pop pop 85 30 0 30 15 arcto pop pop pop pop 0 30 0 0 15 arcto pop pop pop pop 0 0 85 0 15 arcto pop pop pop pop closepath setmatrix matrix currentmatrix 2 2 translate 13 0 moveto 81 0 81 26 13 arcto pop pop pop pop 81 26 0 26 13 arcto pop pop pop pop 0 26 0 0 13 arcto pop pop pop pop 0 0 81 0 13 arcto pop pop pop pop closepath setmatrix 1 1 1 setrgbcolor eofill grestore gsave 0 0 0 setrgbcolor (Helvetica-Bold)cvn findfont [ 18 0 0 18 0 0 ] makefont setfont 13.511 11.000 moveto (Button)show grestore grestore EEPS EO [1 0 0 1 104 352 ] BO 240 -120 DR 1 [0 0 0] ST EO [1 0 0 1 104 120 ] BO 240 -120 DR 1 [0 0 0] ST EO [1 0 0 1 224 384 ] BO 0 -80 LN 1 [0 0 0] ST [0 0 0] 12 90 0 -80 AR EO [1 0 0 1 212 386.400 ] BO [(new)] [0 0 0] 13.9999 /Times-Roman SF 23.3235 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 380 294.400 ] BO [(load)] [0 0 0] 13.9999 /Times-Roman SF 24.1077 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 472 370.400 ] BO [(email)] [0 0 0] 13.9999 /Times-Roman SF 31.1076 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 380 258.400 ] BO [(save)] [0 0 0] 13.9999 /Times-Roman SF 24.8773 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 48 278.400 ] BO [(clear)] [0 0 0] 13.9999 /Times-Roman SF 27.2011 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 344 186.400 ] BO [(copy)] [0 0 0] 13.9999 /Times-Roman SF 27.2157 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 344 138.400 ] BO [(paste)] [0 0 0] 13.9999 /Times-Roman SF 28.7693 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 112 322.400 ] BO [(Application-#1)] [0 0 0] 13.9999 /Helvetica SF 88.7031 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 112 90.400 ] BO [(Application-#2)] [0 0 0] 13.9999 /Helvetica SF 88.7031 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 456 162.400 ] BO [(clipboard)] [0 0 0] 13.9999 /Helvetica-Oblique SF 56.7975 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 464 282.400 ] BO [(file)] [0 0 0] 13.9999 /Helvetica-Oblique SF 17.8916 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 440 312 ] BO 96 -40 16 RR 1 [0 0 0] ST EO [1 0 0 1 440 192 ] BO 96 -40 16 RR 1 [0 0 0] ST EO [1 0 0 1 280 280 ] BO 152 0 LN 1 [0 0 0] ST [0 0 0] 12 180 152 0 AR EO [1 0 0 1 280 296 ] BO 152 0 LN 1 [0 0 0] ST [0 0 0] 12 0 0 0 AR EO [1 0 0 1 304 184 ] BO -72 80 DA 1 [0 0 0] ST EO [1 0 0 1 304 184 ] BO 128 0 LN 1 [0 0 0] ST [0 0 0] 12 180 128 0 AR EO [1 0 0 1 432 160 ] BO -136 0 LN 1 [0 0 0] ST EO [1 0 0 1 296 160 ] BO -64 -88 DA 1 [0 0 0] ST [0 0 0] 12 90 -64 -88 AR EO [1 0 0 1 8 296 ] BO 0 -24 LN 2 [0 0 0] ST EO [1 0 0 1 0 288 ] BO 16 0 LN 2 [0 0 0] ST EO [1 0 0 1 24 280 ] BO 152 0 LN 1 [0 0 0] ST [0 0 0] 12 0 0 0 AR EO [1 0 0 1 192 64 ] BO 88 -32 32 RR 1 [0 0 0] ST EO [1 0 0 1 480 320 ] BO 0 48 LN 1 [0 0 0] ST [0 0 0] 12 270 0 48 AR EO [1 0 0 1 496 320 ] BO 0 48 LN 1 [0 0 0] ST [0 0 0] 12 90 0 0 AR EO [1 0 0 1 208 33.600 ] BO [(Button)] [0 0 0] 17.9999 /Helvetica-BoldOblique SF 57.9771 1 TS 6.39998 -19.9999 TL EO grestore @endspecial 555 932 a Fn(Figure)g(2:)g(An)g(upwardly)g(mobile)g(UI)g(component)0 1065 y Fm(resource)20 b(browser)p Fn(,)j Fm(class)d(browser)p Fn(,)i Fm(object)e(warehouse)p Fn(,)j Fm(script)c(editor)p Fn(,)k Fm(structure)c(editor)p Fn(,)j Fm(message)e(monitor)p Fn(,)0 1122 y Fm(debugger)11 b Fn(etc.)71 1178 y(It)i(is)h(only)f(when)h(the) f(Cool)h(user)g(wants)f(to)h(create)h(new)f(UI)g(components)e(or)i(when)g(he) g(actually)f(wants)h(to)f(write)0 1235 y(applications)g(that)g(he)i(will)e (use)h(the)g(programming)f(environment)f(provided)i(by)g(Cool)g(One)g(of)g (the)g(aims)f(of)i(Cool)f(is)0 1291 y(to)g(lessen)g(the)g(need)g(for)h (programming)e(experience.)21 b(This)13 b(makes)h(the)h(system)e(accessible)h (to)g(many)g(more)g(people.)0 1348 y(Making)c(the)i(system)e(easier)i(to)f (use)g(and)g(to)g(program)g(is)g(achieved)h(as)g(follows:)68 1441 y Fh(\017)23 b Fm(Interactive)16 b(UI)g(design)p Fn(.)26 b(This)15 b(of)i(course)f(is)g(the)g(major)g(achievement)g(of)g(Cool.)26 b(It)17 b(allows)e(the)h(interactive)114 1497 y(creating)11 b(and)g(modification)f(of)i(OpenLook)e(compatible)h(UIs)g(without)f(any)h (programming)f(knowledge.)68 1591 y Fh(\017)23 b Fm(Increased)11 b(component)g(reusability)p Fn(.)h(It)f(will)g(be)h(very)g(easy)f(to)h(copy)f (and)h(paste)f(components)g(and)g(even)h(whole)114 1647 y(applications)h (around.)22 b(Each)15 b(of)g(these)f(components)g(may)g(have)h(a)h(very)e (complex)h(internal)f(structure)g(which)114 1703 y(requires)d(external)h (clients.)f(This)f(complexity)g(remains)h(hidden)g(from)g(the)g(user.)68 1797 y Fh(\017)23 b Fm(Scripting)11 b(using)h(P)-9 b(d)k(B)p Fn(.)13 b(The)g(introduction)e(of)i(a)g(high)f(level)g(scripting)g(language)h (will)f(lower)g(the)h(threshold)f(for)114 1853 y(first)f(time)f(user)i(to)f (attempt)f(programming)g(in)h(the)g(Cool)g(environment.)68 1947 y Fh(\017)23 b Fm(Simple)10 b(structure)p Fn(.)h(A)h(simple)e(container) h(hierarchy)h(together)f(with)g(the)g Fi(Send)i Fn(primitive)d(for)i (communication)114 2003 y(guarantee)g(an)f(easy)h(to)f(understand)f (programming)g(environment)h(for)g(the)g(user.)68 2097 y Fh(\017)23 b Fm(High)10 b(level)i(tools)p Fn(.)e(The)i(introduction)d(of)j(tools)e(such) h(as)g(the)g(property)g(browser)h(and)f(the)g(script)g(editor)g(etc.)h(will) 114 2153 y(lower)f(the)g(threshold)g(for)g(users)h(to)e(modify)h(and)g (program)g(the)g(system.)0 2278 y Fg(1.2)50 b(Cool)12 b(components)g(are)h (upwardly)e(mobile)0 2365 y Fn(In)k(an)g(interactive)f(system)g(UI)g (components)g(will)g(be)g(much)g(more)h(mobile)f(that)g(the)g(current)h(TNT)g (components.)20 b(It)0 2421 y(will)11 b(be)h(possible)e(to)h(cut)h(and)g (paste)f(components)g(across)h(window)f(and)g(application)g(boundaries.)h (Also)f(components)0 2478 y(stored)j(in)f(files)h(may)g(be)g(moved)g(around)g (in)f(the)h(file)g(system)g(or)g(even)g(across)g(the)g(network.)20 b(Ways)14 b(must)f(be)h(found)0 2534 y(in)j(which)g(the)g(Cool)g(system)f (can)h(guarantee)h(that)f(components)f(and)h(application)f(can)h(function)g (in)g(this)f(dynamic)0 2591 y(environment.)71 2647 y(Components)f(must)h(be)h (flexible)f(enough)h(to)f(adapt)h(to)f(new)h(environments.)27 b(One)17 b(of)g(the)g(mechanism)e(which)0 2704 y(makes)c(this)f(possible)g (is)h(called)h Fm(parent)e(scoping)h Fn(\(see)h(Section)f(2.1\).)h(It)f (allows)g(components)f(to)h(use)g(values)g(exported)964 2828 y(9)p eop %%Page: 10 10 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fn(by)f(their)g(parent)h (containers.)g(For)g(example)f(a)h(button)e(which)h(is)g(copied)g(from)g(a)h (2D)f(black)g(and)h(white)f(application)f(and)0 252 y(which)k(is)g(pasted)g (into)f(a)i(3D)f(pale-green)h(window)f(should)f(appear)i(in)f(the)g (appropriate)h(colors)f(using)f(the)h(same)g(font)0 308 y(as)e(the)h(other)f (buttons)f(in)h(the)g(window.)71 364 y(Not)17 b(only)g(should)g(a)h(UI)g (component)f(be)h(able)g(to)f(adapt)h(to)f(its)g(environment)g(but)g(it)g (also)h(should)f(be)h(able)f(to)0 421 y(communicate)11 b(with)h(its)g(new)g (parents.)j(This)c(requires)i(the)f(implementation)e(of)j(a)f Fi(send)i Fn(primitive)d(which)h(is)g(able)g(to)0 477 y(address)g(objects)f (symbolically)f(\(see)j(Section)f(2.2\))g(and)g(which)g(can)g(send)g (messages)f(along)h(the)g(container)g(hierarchy)0 534 y(\(see)g(Section)f (2.3\).)71 590 y(Application)16 b(boundaries)h(vanish)f(once)i(individual)e (UI)i(components)e(can)i(have)f(client)g(programs)g(associated)0 647 y(with)e(them)f(\(see)i(Section)f(2.4\).)24 b(Copying)15 b(and)g(pasting)g(components)f(now)h(means)g(incorporating)f(complex)h (client)0 703 y(software)e(into)f(your)g(application)g(at)h(no)f(extra)h (cost.)i(There)f(is)e(great)h(potential)e(for)i(a)g(share-ware)h(community)d (based)0 760 y(on)g(sharing)g(UI)h(components)e(instead)g(of)i(complete)f (UIs)930 743 y Ff(1)948 760 y Fn(.)71 816 y(Another)i(advantage)g(is)g(that)g (these)h(component)e(applications)g(are)j(much)e(easier)h(to)f(reuse)h (because)g(they)f(have)h(a)0 873 y(well)e(defined)g(interface)h(with)e(the)h (outside)f(world)h(\(see)h(Section)f(2.3\).)j(It)d(will)f(be)h(much)g(easier) h(to)e(copy,)i(modify)e(and)0 929 y(reuse)h(complex)e(components)h(such)g(as) g(drawing)g(surfaces,)i(editors)d(etc.)71 985 y(A)k(good)f(example)h(are)h (the)f Fi(Jot)h Fn(text)f(objects.)19 b(Currently)14 b(there)g(is)g(no)g (common)f Fi(Jot)i Fn(server)g(and)f(every)g(TNT)0 1042 y(client)g(must)f (implement)g(a)i(rather)g(complex)f(interface.)21 b(In)15 b(Cool)f(the)g Fi(Jot)i Fn(text)e(objects)g(will)f(use)i(a)g(common)e Fi(Jot)0 1098 y Fn(server.)21 b(This)13 b(means)h(that)g(there)h(is)e(no)h(longer)g(a) h(need)f(to)g(program)g(each)h(of)f(them.)20 b(The)14 b(user)g(can)h(copy)f (and)g(paste)0 1155 y(these)f(objects)h(around)f(without)f(having)h(to)g (worry)h(about)f(the)h(internal)f(complexity)f(of)i(them.)j(He)d(will)f(use)g (just)g(use)0 1211 y(the)e(simple)f(programming)g(interface)j(or)e(he)h(may)f (decided)g(just)f(to)h(modify)g(the)g(object)g(through)f(its)h(property)g (editor.)0 1333 y Fg(1.3)50 b(Cool)12 b(Application)f(structure)0 1420 y Fn(Cool)17 b(will)f(make)h(it)g(possible)f(to)h(interactively)f (design)g(OpenLook)h(UIs)g(and)g(UI)h(components.)27 b(The)18 b(design)e(and)0 1476 y(prototype)9 b(of)h(HyperNeWS)h(2.0)f(proved)g(that)f (this)g(can)h(be)g(done)g(effectively)g(in)g(a)g(direct)g(manipulation)e (environment.)0 1533 y(The)k(interactive)g(design)f(process)i(is)e(quite)h (separate)g(from)g(the)g(application)f(and)h(it)g(therefore)h(becomes)f (necessary)g(to)0 1589 y(store)i(the)g(UI)g(components)f(separate)i(from)f (the)g(application)f(source)i(code.)20 b(Currently)14 b(a)h(TNT)f (application)f(has)h(the)0 1646 y(following)c(structure)349 1629 y Ff(2)367 1646 y Fn(:)57 1724 y(1.)23 b(Define)11 b(new)h(classes)f (using)f(sub)h(classing.)57 1812 y(2.)23 b(Create,)13 b(modify)d(and)h (initialize)g(UI)g(components.)57 1900 y(3.)23 b(Interaction)11 b(and)g(client)g(communication.)0 1978 y(The)f(first)g(two)f(steps)h(which)f (define,)i(create)g(and)f(initialize)f(UI)h(components)f(must)g(be)h (formalized)g(so)f(that)h(they)f(can)i(be)0 2035 y(separated)f(from)g(the)f (application)g(source)h(code)g(to)f(allow)g(interactive)h(design)f(and)h (editing.)g(The)f(resulting)g(application)0 2091 y(structure)i(will)g(be:)57 2170 y(1.)23 b(Locate)11 b(and)h(connect)f(to)g(already)h(existing)e(UI)h (components)57 2258 y(2.)23 b(Interaction)11 b(and)g(client)g(communication.) 0 2379 y Fg(1.4)50 b(Cool)12 b(Component)g(structure)0 2466 y Fn(Lets)k(define)g(what)f(constitutes)f(a)j(UI)f(component)f(once)h(it)f (is)g(no)h(longer)f(part)h(of)g(the)g(application)f(source)h(code)g(as)0 2523 y(was)d(proposed)g(in)g(the)g(previous)f(section.)17 b(Currently)d(a)f (TNT)g(UI)h(component)e(can)i(be)f(created)h(using)e(the)h(following)0 2579 y(programming)d(techniques:)p 0 2614 780 2 v 53 2641 a Fe(1)67 2657 y Fd(This)f(is)g(similar)h(to)g(the)f(HyperCard)f(system)g (where)h(external)g(resources)e(have)h(become)f(the)i(commodity)g(of)g (trade.)53 2688 y Fe(2)67 2704 y Fd(This)g(may)g(vary)f(between)g (application)h(and)f(must)h(be)g(seen)e(as)i(an)f(abstraction.)952 2828 y Fn(10)p eop %%Page: 11 11 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)57 195 y Fn(1.)23 b(Create)12 b(new)g(UI)f(component)g(classes)g(using)f(subclassing)g(using)h Fi(classbegin)k Fn(and)c Fi(classend)p Fn(.)57 289 y(2.)23 b(Install)10 b(new)i(methods)e(in)h(UI)g(component)g(instances)g(using)f Fi(/installme)q(th)q(od)p Fn(.)57 383 y(3.)23 b(Modify)10 b(parameters)i(of)f (UI)h(component)e(instances)h(through)f(the)i(API)g(or)f(directly.)0 477 y(Each)20 b(of)g(these)g(must)e(be)i(represented)g(in)g(Cool.)36 b(Additionally)18 b(they)i(must)e(be)i(structure)g(so)f(that)g(they)h(can)g (be)0 533 y(manipulated)10 b(and)i(edited)f(interactively)f(separate)i(from)f (the)h(application.)57 627 y(1.)23 b Fm(Creating)10 b(new)i(UI)g(component)f (classes)g(using)f(subclassing)114 683 y Fn(In)k(HyperNeWS)i(2.0)e(the)h (concept)f(of)h Fm(plug-in)e Fn(classes)i(was)f(introduced)g(to)g(allow)g (dynamic)g(subclassing)f(in)114 740 y(order)f(to)g(create)h(new)f(UI)h (components.)g(In)f(Cool)g(these)g(will)f(be)i(called)f Fm(resource)g Fn(classes)g(\(see)h(Section)f(3)g(and)114 796 y(Section)k(4.1\).)26 b(The)16 b(resource)h(manager)f(is)g(used)f(to)h(load)g(sub)f(classes)h(when) g(required.)26 b(These)16 b(classes)g(are)114 853 y(stored)11 b(in)g(files)g(separate)h(from)f(the)g(UI)h(and)f(are)h(loaded)f(when)h (required.)57 946 y(2.)23 b Fm(Install)10 b(new)i(methods)e(in)h(UI)h (component)f(instances)114 1003 y Fn(It)i(is)h(important)e(that)i(small)f (modifications)f(to)h(UI)h(components)f(can)h(be)g(made)g(easily.)19 b(In)14 b(TNT)g(this)f(is)g(done)114 1059 y(using)e Fi(installm)q(eth)q(od)q Fn(,)16 b(Cool)d(uses)g(scripts.)i(A)e(script)f(is)h(the)f(source)h(text)g (of)g(the)f(modification)g(in)g(either)114 1116 y(PostScript)j(or)h(P)-9 b(d)k(B.)17 b(The)f(HyperNeWS)h(2.0)e(concept)h(of)g Fm(shared)g Fn(class)f(was)h(introduced)f(to)h(allow)f(efficient)114 1172 y(scripting)10 b(\(see)i(Section)f(4.2\).)h(In)g(Cool)f(there)h(are)g(called) f(these)h Fm(script)e Fn(classes.)57 1266 y(3.)23 b Fm(Modifying)10 b(parameters)g(of)h(UI)h(component)e(instances)114 1323 y Fn(It)23 b(must)e(be)j(possible)d(to)i(modify)f(TNT)h(component)f(parameters)h(either) g(through)f(direct)h(manipulation)114 1379 y(or)c(through)g(dialogs.)34 b(The)20 b(results)e(of)i(these)f(modifications)f(must)g(be)h(persistent)g (which)g(means)g(that)g(UI)114 1435 y(components)8 b(must)g(be)i(savable)g (and)f(reloadable)h(after)g(they)f(have)h(been)g(modified)f(by)g(the)g(user)h (\(see)g(Section)g(5\).)952 2828 y(11)p eop %%Page: 12 12 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)385 1220 y @beginspecial 0.400000 @hscale 0.400000 @vscale @setspecial%!PS-HyperNeWS drawing- %%Creator:arthur %%Title:HyperNeWS drawing. %%BoundingBox:0 0 743.36 682.24 %%TemplateBox:0 0 743.36 682.24 %%EndComments % "@(#)drawlib.ps 3.1 3/19/90 Arthur van Hoff (Turing Institute)"; % -- drawlib.ps -- Header file for PostScript drawings. /SC {dup type /arraytype eq {aload pop setrgbcolor} {setgray} ifelse} def /MX {1 0 0 1} def /CT {curveto} def /CP {closepath} def /LT {lineto} def /PT {moveto} def /PC {{lineto} stopped {moveto} if} def /LN {0 0 PT LT} def /LC {0 0 PC LT} def /FL {SC fill} def /ST {SC setlinewidth stroke} def /FS {gsave FL grestore ST} def /CM {matrix currentmatrix exch concat} def /SM {setmatrix} def /BO {gsave newpath concat} def /EO {grestore} def /SG {gsave SC eofill grestore ST} def /FG {SC eofill} def /AR { % c s a x y -- newpath matrix currentmatrix 5 1 roll newpath translate rotate 0 0 moveto 0 0 3 -1 roll -20 20 arc 0 0 lineto setmatrix FL } def /DA { % x y -- matrix currentmatrix 3 1 roll scale 0 1 1 -90 0 arc setmatrix } def /DR { % w h -- 0 0 moveto exch dup 0 lineto 1 index lineto 0 exch lineto closepath } def /DO { % w h -- matrix currentmatrix 3 1 roll scale 1 0.5 moveto 0.5 0.5 translate 0 0 0.5 0 360 arc closepath setmatrix } def /RR { % w h c -- 10 dict begin 2 index abs 2 index abs dup 2 index lt {exch pop} {pop} ifelse 2 div dup 2 index lt {exch pop} {pop} ifelse /c exch def /h exch def /w exch def c 0 moveto mark w 0 w h c arcto w h 0 h c arcto 0 h 0 0 c arcto 0 0 w 0 c arcto cleartomark closepath end } def /DP { % d1 d2 w h -- matrix currentmatrix 5 1 roll scale 0.5 0.5 moveto 0.5 0.5 0.5 5 -2 roll arc 0.5 0.5 lineto setmatrix } def /SF { % text col fontsize font -- text width findfont exch scalefont setfont SC 1 1 index {stringwidth pop abs 2 copy lt {exch} if pop} forall } def /TS { % width w h -- exch 2 index div exch scale } def /TL { % text w h lh -- 5 dict begin /h exch def 0 exch moveto pop {gsave show grestore 0 h rmoveto} forall end } def /TR { % text w h bh -- 5 dict begin /h exch def moveto { gsave dup stringwidth pop neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /TC { % text w h bh -- 5 dict begin /h exch def exch 2 div exch moveto { gsave dup stringwidth pop 2 div neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /IR { % w h DR gsave 1 setgray fill grestore 0 setgray stroke } def /IC { % str w h -- scale LoadImage imagecanvas } def /IM { % ... -- /pstr exch string def 0 exch translate scale {} settransfer 0 0 3 -1 roll 0 0 6 array astore {currentfile pstr readhexstring pop} image } def /EPSdict 10 dict begin /initmatrix { #Matrisk# setmatrix } def /initgraphics { systemdict /initgraphics get exec #Matrisk# setmatrix } def /showpage {} def currentdict end def /BEPS { save 5 1 roll EPSdict begin gsave scale translate matrix currentmatrix /#Matrisk# exch def systemdict /initgraphics get exec #Matrisk# setmatrix 500 dict begin } def /EEPS { end grestore end restore } def gsave initclip 1.010 1.066 scale [1 0 0 1 192 384 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 0 224 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 288 64 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 384 384 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 384 544 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 384 640 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 480 64 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 576 384 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 384 224 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 192 224 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 432 480 ] BO -160 -96 LN 1 [0 0 0] ST EO [1 0 0 1 272 320 ] BO 0 -96 LN 1 [0 0 0] ST EO [1 0 0 1 464 480 ] BO 0 -96 LN 1 [0 0 0] ST EO [1 0 0 1 304 320 ] BO 160 -96 LN 1 [0 0 0] ST EO [1 0 0 1 80 224 ] BO 160 96 LN 1 [0 0 0] ST EO [1 0 0 1 368 64 ] BO 64 96 LN 1 [0 0 0] ST EO [1 0 0 1 560 64 ] BO -64 96 LN 1 [0 0 0] ST EO [1 0 0 1 656 384 ] BO -160 96 LN 1 [0 0 0] ST EO [1 0 0 1 320 26.400 ] BO [(ClassMenuButtons)] [0 0 0] 13.9999 /Times-Roman SF 106.567 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 528 26.400 ] BO [(ClassSettings)] [0 0 0] 13.9999 /Times-Roman SF 75.4591 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 432 346.400 ] BO [(ClassMenu)] [0 0 0] 13.9999 /Times-Roman SF 62.9991 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 624 346.400 ] BO [(ClassMenu)] [0 0 0] 13.9999 /Times-Roman SF 62.9991 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 224 186.400 ] BO [(ClassVScrollbar)] [0 0 0] 13.9999 /Times-Roman SF 91.7686 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 224 346.400 ] BO [(ClassBaseWindow)] [0 0 0] 13.9999 /Times-Roman SF 105.768 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 416 506.400 ] BO [(ClassFramebuffer)] [0 0 0] 13.9999 /Times-Roman SF 100.308 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 416 602.400 ] BO [(ClassFramebuffer)] [0 0 0] 13.9999 /Times-Roman SF 100.308 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 432 186.400 ] BO [(ClassPanel)] [0 0 0] 13.9999 /Times-Roman SF 61.445 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 48 186.400 ] BO [(ClassCanvas)] [0 0 0] 13.9999 /Times-Roman SF 71.5528 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 464 544 ] BO 0 32 LN 1 [0 0 0] ST EO grestore @endspecial 409 1318 a Fn(Figure)h(3:)f(The)g(Canvas)h(container)g(hierarchy)f(of)h(the)f (drawing)g(tool)0 1453 y Fl(2)58 b(Container)16 b(hierarchy)0 1556 y Fn(The)f(container)f(hierarchy)i(of)e(TNT)h(is)f(based)h(on)f(the)h (canvas)g(hierarchy.)22 b(Each)15 b(component)f(has)g(a)h Fi(Parent)i Fn(field)0 1613 y(which)c(points)f(to)h(the)g(component's)g(parent)g(canvas.) 18 b(This)13 b(2)g(dimensional)f(type)h(of)g(containment)f(is)h(similar)g(to) g(that)0 1669 y(required)f(by)f(Cool)g(however)g(there)h(are)g(examples)f (where)h(logical)f(containment)f(is)h(more)g(desirable.)71 1726 y(For)g(example,)g(in)f(TNT)g(all)h(windows)e(have)i(the)g(framebuffer)h (as)e(their)h(parent)g(container.)g(It)g(is)f(desirable)g(that)h(sub)0 1782 y(windows)g(\(such)g(as)h(notice)f(popups\))g(inherit)g(from)h(their)f (super)h(window)f(and)g(not)h(from)f(the)h(framebuffer.)h(The)f(same)0 1838 y(is)j(true)g(for)h(menus,)f(property)g(windows)g(and)g(help)g(windows.) 22 b(They)15 b(should)f(inherit)h(from)g(their)g(invoker)f(and)i(not)0 1895 y(from)c(the)g(framebuffer)h(directly.)g(In)f(this)f(way)h(each)h (application)e(may)h(specify)g(a)g(style)f(which)h(varies)g(in)g(some)f(ways) 0 1951 y(from)j(the)h(overall)f(style,)h(this)e(helps)h(the)g(user)h(to)f (identify)f(the)i(windows)e(and)h(other)h(components)e(belonging)g(to)h(an)0 2008 y(application.)71 2064 y(A)22 b(logical)f(container)h(hierarchy)g(can)h (be)f(achieved)g(by)g(adding)f(a)h(new)g(field)g(to)f(each)i(component)e (called)0 2121 y Fi(@parent)189 2104 y Ff(3)210 2121 y Fn(.)27 b(It)16 b(points)f(to)g(the)h(logical)g(parent)g(container.)26 b(Also,)17 b(each)g(component)e(has)i(a)f(list)f(of)h(members)g(\(the)0 2177 y Fi(/Members)g Fn(instance)c(variable\).)k(The)c(following)f(methods)h (are)h(added)g(to)f Fi(ClassDrawa)q(bl)q(e)k Fn(to)c(manipulate)f(the)0 2234 y(container)g(hierarchy)h(\(see)g(also)f(Appendix)g(B.1\):)68 2327 y Fh(\017)23 b Fi(/@parent)112 b(\045)28 b(--)g(containe)q(r)i (\(Variabl)q(e\))114 2384 y Fn(The)11 b(logical)g(parent)g(container)h(of)f (an)h(object.)68 2478 y Fh(\017)23 b Fi(/Members)112 b(\045)28 b(--)g([member.)q(..])j(\(Variable)q(\))114 2534 y Fn(A)11 b(variable)h(containing)e(an)h(array)h(of)g(all)f(the)g(members)g(of)g(this)g (object.)p 0 2575 780 2 v 53 2602 a Fe(3)67 2618 y Fd(The)d(`)p Fc(@)p Fd(')i(character)e(indicates)g(that)g(the)h(variable)f(contains)f(an)h (object)h(and)e(it)j(may)e(be)g(used)f(as)h(a)h(symbolic)f(address.)f(See)h (also)g(Section)g(2.2.)952 2828 y Fn(12)p eop %%Page: 13 13 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)465 1988 y @beginspecial 0.400000 @hscale 0.400000 @vscale @setspecial%!PS-HyperNeWS drawing- %%Creator:arthur %%Title:HyperNeWS drawing. %%BoundingBox:0 0 646.4 784.576 %%TemplateBox:0 0 646.4 784.576 %%EndComments % "@(#)drawlib.ps 3.1 3/19/90 Arthur van Hoff (Turing Institute)"; % -- drawlib.ps -- Header file for PostScript drawings. /SC {dup type /arraytype eq {aload pop setrgbcolor} {setgray} ifelse} def /MX {1 0 0 1} def /CT {curveto} def /CP {closepath} def /LT {lineto} def /PT {moveto} def /PC {{lineto} stopped {moveto} if} def /LN {0 0 PT LT} def /LC {0 0 PC LT} def /FL {SC fill} def /ST {SC setlinewidth stroke} def /FS {gsave FL grestore ST} def /CM {matrix currentmatrix exch concat} def /SM {setmatrix} def /BO {gsave newpath concat} def /EO {grestore} def /SG {gsave SC eofill grestore ST} def /FG {SC eofill} def /AR { % c s a x y -- newpath matrix currentmatrix 5 1 roll newpath translate rotate 0 0 moveto 0 0 3 -1 roll -20 20 arc 0 0 lineto setmatrix FL } def /DA { % x y -- matrix currentmatrix 3 1 roll scale 0 1 1 -90 0 arc setmatrix } def /DR { % w h -- 0 0 moveto exch dup 0 lineto 1 index lineto 0 exch lineto closepath } def /DO { % w h -- matrix currentmatrix 3 1 roll scale 1 0.5 moveto 0.5 0.5 translate 0 0 0.5 0 360 arc closepath setmatrix } def /RR { % w h c -- 10 dict begin 2 index abs 2 index abs dup 2 index lt {exch pop} {pop} ifelse 2 div dup 2 index lt {exch pop} {pop} ifelse /c exch def /h exch def /w exch def c 0 moveto mark w 0 w h c arcto w h 0 h c arcto 0 h 0 0 c arcto 0 0 w 0 c arcto cleartomark closepath end } def /DP { % d1 d2 w h -- matrix currentmatrix 5 1 roll scale 0.5 0.5 moveto 0.5 0.5 0.5 5 -2 roll arc 0.5 0.5 lineto setmatrix } def /SF { % text col fontsize font -- text width findfont exch scalefont setfont SC 1 1 index {stringwidth pop abs 2 copy lt {exch} if pop} forall } def /TS { % width w h -- exch 2 index div exch scale } def /TL { % text w h lh -- 5 dict begin /h exch def 0 exch moveto pop {gsave show grestore 0 h rmoveto} forall end } def /TR { % text w h bh -- 5 dict begin /h exch def moveto { gsave dup stringwidth pop neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /TC { % text w h bh -- 5 dict begin /h exch def exch 2 div exch moveto { gsave dup stringwidth pop 2 div neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /IR { % w h DR gsave 1 setgray fill grestore 0 setgray stroke } def /IC { % str w h -- scale LoadImage imagecanvas } def /IM { % ... -- /pstr exch string def 0 exch translate scale {} settransfer 0 0 3 -1 roll 0 0 6 array astore {currentfile pstr readhexstring pop} image } def /EPSdict 10 dict begin /initmatrix { #Matrisk# setmatrix } def /initgraphics { systemdict /initgraphics get exec #Matrisk# setmatrix } def /showpage {} def currentdict end def /BEPS { save 5 1 roll EPSdict begin gsave scale translate matrix currentmatrix /#Matrisk# exch def systemdict /initgraphics get exec #Matrisk# setmatrix 500 dict begin } def /EEPS { end grestore end restore } def gsave initclip 1.010 1.066 scale [1 0 0 1 192 544 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 0 384 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 288 224 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 192 64 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 192 640 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 192 736 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 480 224 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 384 64 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 384 384 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 192 384 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 272 576 ] BO 0 -32 LN 1 [0 0 0] ST EO [1 0 0 1 272 480 ] BO 0 -96 LN 1 [0 0 0] ST EO [1 0 0 1 304 480 ] BO 160 -96 LN 1 [0 0 0] ST EO [1 0 0 1 80 384 ] BO 160 96 LN 1 [0 0 0] ST EO [1 0 0 1 368 224 ] BO 64 96 LN 1 [0 0 0] ST EO [1 0 0 1 272 64 ] BO 64 96 LN 1 [0 0 0] ST EO [1 0 0 1 560 224 ] BO -64 96 LN 1 [0 0 0] ST EO [1 0 0 1 464 64 ] BO -64 96 LN 1 [0 0 0] ST EO [1 0 0 1 320 186.400 ] BO [(ClassMenuButtons)] [0 0 0] 13.9999 /Times-Roman SF 106.567 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 528 186.400 ] BO [(ClassSettings)] [0 0 0] 13.9999 /Times-Roman SF 75.4591 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 240 26.400 ] BO [(ClassMenu)] [0 0 0] 13.9999 /Times-Roman SF 62.9991 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 432 26.400 ] BO [(ClassMenu)] [0 0 0] 13.9999 /Times-Roman SF 62.9991 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 224 346.400 ] BO [(ClassVScrollbar)] [0 0 0] 13.9999 /Times-Roman SF 91.7686 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 224 506.400 ] BO [(ClassBaseWindow)] [0 0 0] 13.9999 /Times-Roman SF 105.768 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 224 602.400 ] BO [(ClassFramebuffer)] [0 0 0] 13.9999 /Times-Roman SF 100.308 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 224 698.400 ] BO [(ClassFramebuffer)] [0 0 0] 13.9999 /Times-Roman SF 100.308 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 432 346.400 ] BO [(ClassPanel)] [0 0 0] 13.9999 /Times-Roman SF 61.445 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 48 346.400 ] BO [(ClassCanvas)] [0 0 0] 13.9999 /Times-Roman SF 71.5528 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 272 640 ] BO 0 32 LN 1 [0 0 0] ST EO grestore @endspecial 414 2086 a Fn(Figure)h(4:)f(The)g(logical)g(container)h(hierarchy)f(of)h(the)f (drawing)g(tool)952 2828 y(13)p eop %%Page: 14 14 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)68 195 y Fh(\017)23 b Fi(/setcontai)q(ner)113 b(\045)28 b(container)q(|n)q(ull)j(--)114 252 y Fn(Set)7 b(the)g(logical)g(container)g(of)g(a)g(an)g(object.)h(It)f (will)g(invalidate)g(the)g(object)g(usi)o(ng)g Fi(/invalidatecontain)q(er)q Fn(.)68 345 y Fh(\017)23 b Fi(/container)113 b(\045)28 b(--)g(container)q(|n) q(ull)114 402 y Fn(Get)11 b(the)g(logical)g(container)g(of)h(an)f(object.)68 496 y Fh(\017)23 b Fi(/invalidat)q(eco)q(nt)q(ain)q(er)168 b(\045)28 b(--)114 552 y Fn(Invalidate)13 b(this)g(container)h(and)g(all)g (the)g(members)f(it)h(contains.)k(This)c(method)f(will)g(enumerate)h(all)g (members)114 609 y(and)9 b(send)g(an)h Fi(/invalidat)q(eco)q(nt)q(ain)q(er)j Fn(message)c(to)g(them.)i(It)e(must)f(be)i(called)f(when)g(an)h(object)f (changes)114 665 y(a)i(value)h(which)f(is)g(accessible)g(by)g(its)g(members.) 68 759 y Fh(\017)23 b Fi(/members)167 b(\045)28 b(--)g(arrayofme)q(mb)q(ers) 114 815 y Fn(Return)11 b(an)h(array)g(of)g(all)f(the)g(members)g(of)g(this)f (object.)0 909 y(Note)19 b(that)h(the)f Fi(/setconta)q(ine)q(r)k Fn(method)18 b(invalidates)h(the)g(object)h(and)f(its)g(members.)36 b(This)19 b(is)g(required)g(to)0 966 y(propagate)c(the)f(fact)i(that)e(new)h (data)f(is)h(now)f(accessible)h(by)f(the)h(members)f(of)h(the)f(container.)22 b(The)15 b(members)f(get)h(a)0 1022 y(chance)g(to)e(reinitialize)g(their)g (internal)h(data.)19 b(The)13 b Fi(/setcont)q(ain)q(er)k Fn(method)c(must)g (be)h(called)f(when)h(the)g(logical)0 1078 y(container)d(hierarchy)h(is)f (changed.)h(This)f(occurs)g(in)g(TNT)g(in)g(the)g(following)f(ways:)68 1172 y Fh(\017)23 b Fn(The)11 b Fi(/reparent)k Fn(method)10 b(of)i(a)g(canvas)f(or)h(a)f(region)g(is)g(called.)68 1266 y Fh(\017)23 b Fn(A)12 b(window's)g(subwindow)f(status)h(changes)g(because)i Fi(/addsubwin)q(dow)i Fn(or)d Fi(/removesu)q(bwi)q(nd)q(ow)j Fn(was)114 1323 y(called.)68 1416 y Fh(\017)23 b Fn(The)11 b(basewindow)g(of)g(a)h(notice)f(is)g(changed)g(using)g Fi(/setbasewi)q(ndo)q (w)p Fn(.)68 1510 y Fh(\017)23 b Fn(The)11 b(invoker)g(of)g(a)h(menu)f(is)g (set)g(using)f Fi(/setinvo)q(ker)1054 1494 y Ff(4)1075 1510 y Fn(.)0 1604 y(As)h(a)h(result)f(some)g(extra)g(work)g(has)h(to)f(be)g(done) g(every)h(time)f(the)g(container)g(hierarchy)h(is)f(changed.)71 1660 y(The)j(references)i(to)e(parents)g(and)g(members)g(must)f(be)h (softened)g(so)g(that)g(the)g(objects)f(are)i(destroyed)f(when)g(they)0 1717 y(become)k(obsolete.)30 b(There)18 b(is)g(no)f(noticeable)h(performance) g(penalty)f(except)h(for)g(the)g(fact)g(that)g(objects)f(are)h(now)0 1773 y(invalidated)10 b(more)i(often)f(than)g(before.)0 1898 y Fg(2.1)50 b(Parent)12 b(scope)0 1985 y Fn(In)19 b(HyperNeWS)g(2.0)g(the)g (implementation)d(of)j(parent-scope)g(was)g(proposed.)33 b(This)18 b(is)g(a)h(mechanism)f(whereby)0 2042 y(values)12 b(of)g(variables)g(are)h (inherited)f(along)g(the)g(container)g(hierarchy.)j(This)c(should)h(be)g (implemented)f(to)g(achieve)i(the)0 2098 y(following)d(goals:)68 2192 y Fh(\017)23 b Fn(Inheritance)15 b(along)f(the)h(container)g(hierarchy.) 23 b(This)14 b(type)h(of)g(inheritance)g(is)f(quite)h(intuitive)e(and)i(is)f (easy)h(to)114 2248 y(maintain.)68 2342 y Fh(\017)23 b Fn(Increased)15 b(component)f(mobility.)k(When)d(a)g(component)e(is)h(placed)h(in)f(a)h(gray) f(background)g(it)g(should)g(adopt)114 2399 y(the)d(correct)h(colors)f(to)g (achieve)h(the)f(3D)g(effect.)68 2492 y Fh(\017)23 b Fn(Intuitive)14 b(property)h(value)g(management.)24 b(Changing)15 b(the)g(colors)g(of)h(a)f (window)g(changes)g(the)h(colors)f(of)g(the)114 2549 y(objects)10 b(inside)h(the)g(window)g(too.)p 0 2589 780 2 v 53 2617 a Fe(4)67 2633 y Fd(This)e(causes)d(a)j(bug)f(since)f(menus)h(are)g(displayed)f(before) i(their)g(invoker)f(is)h(set.)g(Any)f(visual)h(changes)d(will)k(not)f(have)e (effect)i(until)g(the)g(menu)0 2679 y(is)g(show)f(again)h(in)g(the)g(same)f (context.)952 2828 y Fn(14)p eop %%Page: 15 15 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)465 1443 y @beginspecial 0.400000 @hscale 0.400000 @vscale @setspecial%!PS-HyperNeWS drawing- %%Creator:arthur %%Title:HyperNeWS drawing. %%BoundingBox:0 0 646.4 784.576 %%TemplateBox:0 0 646.4 784.576 %%EndComments % "@(#)drawlib.ps 3.1 3/19/90 Arthur van Hoff (Turing Institute)"; % -- drawlib.ps -- Header file for PostScript drawings. /SC {dup type /arraytype eq {aload pop setrgbcolor} {setgray} ifelse} def /MX {1 0 0 1} def /CT {curveto} def /CP {closepath} def /LT {lineto} def /PT {moveto} def /PC {{lineto} stopped {moveto} if} def /LN {0 0 PT LT} def /LC {0 0 PC LT} def /FL {SC fill} def /ST {SC setlinewidth stroke} def /FS {gsave FL grestore ST} def /CM {matrix currentmatrix exch concat} def /SM {setmatrix} def /BO {gsave newpath concat} def /EO {grestore} def /SG {gsave SC eofill grestore ST} def /FG {SC eofill} def /AR { % c s a x y -- newpath matrix currentmatrix 5 1 roll newpath translate rotate 0 0 moveto 0 0 3 -1 roll -20 20 arc 0 0 lineto setmatrix FL } def /DA { % x y -- matrix currentmatrix 3 1 roll scale 0 1 1 -90 0 arc setmatrix } def /DR { % w h -- 0 0 moveto exch dup 0 lineto 1 index lineto 0 exch lineto closepath } def /DO { % w h -- matrix currentmatrix 3 1 roll scale 1 0.5 moveto 0.5 0.5 translate 0 0 0.5 0 360 arc closepath setmatrix } def /RR { % w h c -- 10 dict begin 2 index abs 2 index abs dup 2 index lt {exch pop} {pop} ifelse 2 div dup 2 index lt {exch pop} {pop} ifelse /c exch def /h exch def /w exch def c 0 moveto mark w 0 w h c arcto w h 0 h c arcto 0 h 0 0 c arcto 0 0 w 0 c arcto cleartomark closepath end } def /DP { % d1 d2 w h -- matrix currentmatrix 5 1 roll scale 0.5 0.5 moveto 0.5 0.5 0.5 5 -2 roll arc 0.5 0.5 lineto setmatrix } def /SF { % text col fontsize font -- text width findfont exch scalefont setfont SC 1 1 index {stringwidth pop abs 2 copy lt {exch} if pop} forall } def /TS { % width w h -- exch 2 index div exch scale } def /TL { % text w h lh -- 5 dict begin /h exch def 0 exch moveto pop {gsave show grestore 0 h rmoveto} forall end } def /TR { % text w h bh -- 5 dict begin /h exch def moveto { gsave dup stringwidth pop neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /TC { % text w h bh -- 5 dict begin /h exch def exch 2 div exch moveto { gsave dup stringwidth pop 2 div neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /IR { % w h DR gsave 1 setgray fill grestore 0 setgray stroke } def /IC { % str w h -- scale LoadImage imagecanvas } def /IM { % ... -- /pstr exch string def 0 exch translate scale {} settransfer 0 0 3 -1 roll 0 0 6 array astore {currentfile pstr readhexstring pop} image } def /EPSdict 10 dict begin /initmatrix { #Matrisk# setmatrix } def /initgraphics { systemdict /initgraphics get exec #Matrisk# setmatrix } def /showpage {} def currentdict end def /BEPS { save 5 1 roll EPSdict begin gsave scale translate matrix currentmatrix /#Matrisk# exch def systemdict /initgraphics get exec #Matrisk# setmatrix 500 dict begin } def /EEPS { end grestore end restore } def gsave initclip 1.010 1.066 scale [1 0 0 1 192 544 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 0 384 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 288 224 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 192 64 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 192 640 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 192 736 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 480 224 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 384 64 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 384 384 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 192 384 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 272 576 ] BO 0 -32 LN 1 [0 0 0] ST EO [1 0 0 1 272 480 ] BO 0 -96 LN 1 [0 0 0] ST EO [1 0 0 1 304 480 ] BO 160 -96 LN 1 [0 0 0] ST EO [1 0 0 1 80 384 ] BO 160 96 LN 1 [0 0 0] ST EO [1 0 0 1 368 224 ] BO 64 96 LN 1 [0 0 0] ST EO [1 0 0 1 272 64 ] BO 64 96 LN 1 [0 0 0] ST EO [1 0 0 1 560 224 ] BO -64 96 LN 1 [0 0 0] ST EO [1 0 0 1 464 64 ] BO -64 96 LN 1 [0 0 0] ST EO [1 0 0 1 320 186.400 ] BO [(ClassMenuButtons)] [0 0 0] 13.9999 /Times-Roman SF 106.567 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 528 186.400 ] BO [(ClassSettings)] [0 0 0] 13.9999 /Times-Roman SF 75.4591 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 240 26.400 ] BO [(ClassMenu)] [0 0 0] 13.9999 /Times-Roman SF 62.9991 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 432 26.400 ] BO [(ClassMenu)] [0 0 0] 13.9999 /Times-Roman SF 62.9991 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 224 346.400 ] BO [(ClassVScrollbar)] [0 0 0] 13.9999 /Times-Roman SF 91.7686 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 224 506.400 ] BO [(ClassBaseWindow)] [0 0 0] 13.9999 /Times-Roman SF 105.768 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 224 602.400 ] BO [(ClassFramebuffer)] [0 0 0] 13.9999 /Times-Roman SF 100.308 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 224 698.400 ] BO [(ClassFramebuffer)] [0 0 0] 13.9999 /Times-Roman SF 100.308 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 432 346.400 ] BO [(ClassPanel)] [0 0 0] 13.9999 /Times-Roman SF 61.445 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 48 346.400 ] BO [(ClassCanvas)] [0 0 0] 13.9999 /Times-Roman SF 71.5528 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 272 640 ] BO 0 32 LN 1 [0 0 0] ST EO [1 0 0 1 216 682.400 ] BO [(font=Helvetica-Bold)] [0 0 0] 13.9999 /Helvetica-Oblique SF 121.771 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 416 330.400 ] BO [(font=Times-Italic)] [0 0 0] 13.9999 /Helvetica-Oblique SF 103.081 1 TS 5.59998 -15.9999 TL EO grestore @endspecial 617 1541 a Fn(Figure)h(5:)f(An)g(example)g(of)h(a)f(scoped)h(font)399 2533 y @beginspecial 0.500000 @hscale 0.500000 @vscale @setspecial%!PS-HyperNeWS drawing- %%Creator:arthur %%Title:HyperNeWS drawing. %%BoundingBox:0 0 580.75 421.07 %%TemplateBox:0 0 580.75 421.07 %%EndComments % "@(#)drawlib.ps 3.1 3/19/90 Arthur van Hoff (Turing Institute)"; % -- drawlib.ps -- Header file for PostScript drawings. /SC {dup type /arraytype eq {aload pop setrgbcolor} {setgray} ifelse} def /MX {1 0 0 1} def /CT {curveto} def /CP {closepath} def /LT {lineto} def /PT {moveto} def /PC {{lineto} stopped {moveto} if} def /LN {0 0 PT LT} def /LC {0 0 PC LT} def /FL {SC fill} def /ST {SC setlinewidth stroke} def /FS {gsave FL grestore ST} def /CM {matrix currentmatrix exch concat} def /SM {setmatrix} def /BO {gsave newpath concat} def /EO {grestore} def /SG {gsave SC eofill grestore ST} def /FG {SC eofill} def /AR { % c s a x y -- newpath matrix currentmatrix 5 1 roll newpath translate rotate 0 0 moveto 0 0 3 -1 roll -20 20 arc 0 0 lineto setmatrix FL } def /DA { % x y -- matrix currentmatrix 3 1 roll scale 0 1 1 -90 0 arc setmatrix } def /DR { % w h -- 0 0 moveto exch dup 0 lineto 1 index lineto 0 exch lineto closepath } def /DO { % w h -- matrix currentmatrix 3 1 roll scale 1 0.5 moveto 0.5 0.5 translate 0 0 0.5 0 360 arc closepath setmatrix } def /RR { % w h c -- 10 dict begin 2 index abs 2 index abs dup 2 index lt {exch pop} {pop} ifelse 2 div dup 2 index lt {exch pop} {pop} ifelse /c exch def /h exch def /w exch def c 0 moveto mark w 0 w h c arcto w h 0 h c arcto 0 h 0 0 c arcto 0 0 w 0 c arcto cleartomark closepath end } def /DP { % d1 d2 w h -- matrix currentmatrix 5 1 roll scale 0.5 0.5 moveto 0.5 0.5 0.5 5 -2 roll arc 0.5 0.5 lineto setmatrix } def /SF { % text col fontsize font -- text width findfont exch scalefont setfont SC 1 1 index {stringwidth pop abs 2 copy lt {exch} if pop} forall } def /TS { % width w h -- exch 2 index div exch scale } def /TL { % text w h lh -- 5 dict begin /h exch def 0 exch moveto pop {gsave show grestore 0 h rmoveto} forall end } def /TR { % text w h bh -- 5 dict begin /h exch def moveto { gsave dup stringwidth pop neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /TC { % text w h bh -- 5 dict begin /h exch def exch 2 div exch moveto { gsave dup stringwidth pop 2 div neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /IR { % w h DR gsave 1 setgray fill grestore 0 setgray stroke } def /IC { % str w h -- scale LoadImage imagecanvas } def /IM { % ... -- /pstr exch string def 0 exch translate scale {} settransfer 0 0 3 -1 roll 0 0 6 array astore {currentfile pstr readhexstring pop} image } def /EPSdict 10 dict begin /initmatrix { #Matrisk# setmatrix } def /initgraphics { systemdict /initgraphics get exec #Matrisk# setmatrix } def /showpage {} def currentdict end def /BEPS { save 5 1 roll EPSdict begin gsave scale translate matrix currentmatrix /#Matrisk# exch def systemdict /initgraphics get exec #Matrisk# setmatrix 500 dict begin } def /EEPS { end grestore end restore } def gsave initclip 1.010 1.066 scale [1 0 0 1 1 2 ] BO [1 0 0 1 0 0 ] BO 571 390 DR 1 [0 0 0] [0.9 0.9 0.9] FS EO EO [1 0 0 1 326 311 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 76 31 DR grestore -0 -0 1 1 BEPS gsave gsave 0 0 translate newpath 0 0 moveto 0 30 rlineto 75 0 rlineto 0 -30 rlineto closepath 0.800 0.800 0.800 setrgbcolor fill 0 0 moveto 0 30 rlineto 75 0 rlineto 0 -30 rlineto closepath 2 2 moveto 0 26 rlineto 71 0 rlineto 0 -26 rlineto closepath 1 1 1 setrgbcolor eofill newpath 4 4 moveto -4 -4 rlineto -2 -2 rlineto 0 34 rlineto 79 0 rlineto -2 -2 rlineto -4 -4 rlineto closepath clip newpath 0 0 moveto 0 30 rlineto 75 0 rlineto 0 -30 rlineto closepath 2 2 moveto 0 26 rlineto 71 0 rlineto 0 -26 rlineto closepath 0.500 0.500 0.500 setrgbcolor eofill grestore gsave 0 0 0 setrgbcolor (Times-BoldItalic)cvn findfont [ 18 0 0 18 0 0 ] makefont setfont 15.999 10.000 moveto (Black)show grestore grestore EEPS EO [1 0 0 1 401 311 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 76 31 DR grestore -0 -0 1 1 BEPS gsave gsave 0 0 translate newpath 0 0 moveto 0 30 rlineto 75 0 rlineto 0 -30 rlineto closepath 0.900 0.900 0.900 setrgbcolor fill 0 0 moveto 0 30 rlineto 75 0 rlineto 0 -30 rlineto closepath 2 2 moveto 0 26 rlineto 71 0 rlineto 0 -26 rlineto closepath 0.500 0.500 0.500 setrgbcolor eofill newpath 4 4 moveto -4 -4 rlineto -2 -2 rlineto 0 34 rlineto 79 0 rlineto -2 -2 rlineto -4 -4 rlineto closepath clip newpath 0 0 moveto 0 30 rlineto 75 0 rlineto 0 -30 rlineto closepath 2 2 moveto 0 26 rlineto 71 0 rlineto 0 -26 rlineto closepath 1 1 1 setrgbcolor eofill grestore gsave 0 0 0 setrgbcolor (Times-BoldItalic)cvn findfont [ 18 0 0 18 0 0 ] makefont setfont 15.495 10.000 moveto (White)show grestore grestore EEPS EO [1 0 0 1 186 356 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 181 31 DR grestore -0 -0 1 1 BEPS gsave gsave (Helvetica-Bold)cvn findfont [ 18 0 0 18 0 0 ] makefont setfont newpath 0 0 moveto 0 30 rlineto 180 0 rlineto 0 -30 rlineto closepath clip newpath 0 0 0 setrgbcolor 4 6 moveto 0 20 rlineto 176 0 rlineto 0 -20 rlineto closepath clip newpath 0 0 0 setrgbcolor 4 11.000 moveto 0 0 rmoveto gsave (Cool Drawing Tool)show grestore grestore grestore EEPS EO [1 0 0 1 11 346 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 546 16 DR grestore -0 -0 1 1 BEPS gsave gsave newpath 0 5.500 moveto 0 4 rlineto 545 0 rlineto 0 -4 rlineto closepath 0.500 0.500 0.500 setrgbcolor fill gsave 0 5.500 translate 2 2 moveto 0 0 lineto 0 4 rlineto 545 0 rlineto -2 -2 rlineto closepath 1 1 1 setrgbcolor fill grestore grestore grestore EEPS EO [1 0 0 1 536 21 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 21 276 DR grestore -0 -0 1 1 BEPS gsave gsave 0 0 moveto 0 275 rlineto 20 0 rlineto 0 -275 rlineto closepath 0.900 0.900 0.900 setrgbcolor fill 8 12.000 moveto 0 251.000 rlineto 4 0 rlineto 0 -251.000 rlineto closepath 0.800 0.800 0.800 setrgbcolor fill grestore gsave 0 0 translate newpath 0 0 moveto 0 8.000 rlineto 20 0 rlineto 0 -8.000 rlineto closepath 0.900 0.900 0.900 setrgbcolor fill 0 0 moveto 0 8.000 rlineto 20 0 rlineto 0 -8.000 rlineto closepath 2 2 moveto 0 4.000 rlineto 16 0 rlineto 0 -4.000 rlineto closepath 0.500 0.500 0.500 setrgbcolor eofill newpath 4 4 moveto -4 -4 rlineto -2 -2 rlineto 0 12.000 rlineto 24 0 rlineto -2 -2 rlineto -4 -4 rlineto closepath clip newpath 0 0 moveto 0 8.000 rlineto 20 0 rlineto 0 -8.000 rlineto closepath 2 2 moveto 0 4.000 rlineto 16 0 rlineto 0 -4.000 rlineto closepath 1 1 1 setrgbcolor eofill grestore gsave 0 267.000 translate newpath 0 0 moveto 0 8.000 rlineto 20 0 rlineto 0 -8.000 rlineto closepath 0.900 0.900 0.900 setrgbcolor fill 0 0 moveto 0 8.000 rlineto 20 0 rlineto 0 -8.000 rlineto closepath 2 2 moveto 0 4.000 rlineto 16 0 rlineto 0 -4.000 rlineto closepath 0.500 0.500 0.500 setrgbcolor eofill newpath 4 4 moveto -4 -4 rlineto -2 -2 rlineto 0 12.000 rlineto 24 0 rlineto -2 -2 rlineto -4 -4 rlineto closepath clip newpath 0 0 moveto 0 8.000 rlineto 20 0 rlineto 0 -8.000 rlineto closepath 2 2 moveto 0 4.000 rlineto 16 0 rlineto 0 -4.000 rlineto closepath 1 1 1 setrgbcolor eofill grestore gsave 0 168.308 translate gsave 0 0 translate newpath 0 0 moveto 0 47.999 rlineto 20 0 rlineto 0 -47.999 rlineto closepath 0.900 0.900 0.900 setrgbcolor fill 0 0 moveto 0 47.999 rlineto 20 0 rlineto 0 -47.999 rlineto closepath 2 2 moveto 0 43.999 rlineto 16 0 rlineto 0 -43.999 rlineto closepath 0.500 0.500 0.500 setrgbcolor eofill newpath 4 4 moveto -4 -4 rlineto -2 -2 rlineto 0 51.999 rlineto 24 0 rlineto -2 -2 rlineto -4 -4 rlineto closepath clip newpath 0 0 moveto 0 47.999 rlineto 20 0 rlineto 0 -47.999 rlineto closepath 2 2 moveto 0 43.999 rlineto 16 0 rlineto 0 -43.999 rlineto closepath 1 1 1 setrgbcolor eofill grestore 2 16.000 moveto 0 2 rlineto 16 0 rlineto 0 -2 rlineto closepath 0.500 0.500 0.500 setrgbcolor fill 2 31.000 moveto 0 2 rlineto 16 0 rlineto 0 -2 rlineto closepath 1 1 1 setrgbcolor fill gsave 4 4 translate 12 8.000 scale 0 1 translate 1 -1 scale 0 0 moveto 0 0.200 lineto 0.500 1 lineto 1 0.200 lineto 1 0 lineto closepath 0.500 0.500 0.500 setrgbcolor fill grestore gsave 4 35.999 translate 12 8.000 scale 0 0 moveto 0 0.200 lineto 0.500 1 lineto 1 0.200 lineto 1 0 lineto closepath 0.500 0.500 0.500 setrgbcolor fill grestore grestore grestore EEPS EO [1 0 0 1 21 311 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 101 31 DR grestore -0 -0 1 1 BEPS gsave gsave 0 0 translate newpath matrix currentmatrix 0 0 translate 15 0 moveto 100 0 100 30 15 arcto pop pop pop pop 100 30 0 30 15 arcto pop pop pop pop 0 30 0 0 15 arcto pop pop pop pop 0 0 100 0 15 arcto pop pop pop pop closepath setmatrix 0.900 0.900 0.900 setrgbcolor fill matrix currentmatrix 0 0 translate 15 0 moveto 100 0 100 30 15 arcto pop pop pop pop 100 30 0 30 15 arcto pop pop pop pop 0 30 0 0 15 arcto pop pop pop pop 0 0 100 0 15 arcto pop pop pop pop closepath setmatrix matrix currentmatrix 2 2 translate 13 0 moveto 96 0 96 26 13 arcto pop pop pop pop 96 26 0 26 13 arcto pop pop pop pop 0 26 0 0 13 arcto pop pop pop pop 0 0 96 0 13 arcto pop pop pop pop closepath setmatrix 0.500 0.500 0.500 setrgbcolor eofill newpath 15 15 moveto -15 -15 rlineto -2 -2 rlineto 0 34 rlineto 104 0 rlineto -2 -2 rlineto -15 -15 rlineto closepath clip newpath matrix currentmatrix 0 0 translate 15 0 moveto 100 0 100 30 15 arcto pop pop pop pop 100 30 0 30 15 arcto pop pop pop pop 0 30 0 0 15 arcto pop pop pop pop 0 0 100 0 15 arcto pop pop pop pop closepath setmatrix matrix currentmatrix 2 2 translate 13 0 moveto 96 0 96 26 13 arcto pop pop pop pop 96 26 0 26 13 arcto pop pop pop pop 0 26 0 0 13 arcto pop pop pop pop 0 0 96 0 13 arcto pop pop pop pop closepath setmatrix 1 1 1 setrgbcolor eofill grestore gsave 0 0 0 setrgbcolor (Times-BoldItalic)cvn findfont [ 18 0 0 18 0 0 ] makefont setfont 15 10.000 moveto (File)show gsave 73 9 translate 12 12 scale newpath 0.200 0.850 moveto 0.850 0.850 lineto 0.500 0.200 lineto closepath 0.800 0.800 0.800 setrgbcolor fill 0 1 moveto 1 1 lineto 1 0.900 lineto 0.550 0 lineto 0.450 0 lineto 0 0.900 lineto closepath 0.200 0.850 moveto 0.850 0.850 lineto 0.500 0.200 lineto closepath 0.500 0.500 0.500 setrgbcolor eofill 0.550 0 moveto 0.450 0 lineto 0.450 0.100 lineto 0.850 0.850 lineto 1 0.850 lineto closepath 1 1 1 setrgbcolor fill grestore grestore grestore EEPS EO [1 0 0 1 21 361 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 26 26 DR grestore -0 -0 1 1 BEPS gsave gsave 0 0 translate newpath matrix currentmatrix 0 0 translate 6.250 0 moveto 25 0 25 25 6.250 arcto pop pop pop pop 25 25 0 25 6.250 arcto pop pop pop pop 0 25 0 0 6.250 arcto pop pop pop pop 0 0 25 0 6.250 arcto pop pop pop pop closepath setmatrix 0.900 0.900 0.900 setrgbcolor fill matrix currentmatrix 0 0 translate 6.250 0 moveto 25 0 25 25 6.250 arcto pop pop pop pop 25 25 0 25 6.250 arcto pop pop pop pop 0 25 0 0 6.250 arcto pop pop pop pop 0 0 25 0 6.250 arcto pop pop pop pop closepath setmatrix matrix currentmatrix 2 2 translate 4.250 0 moveto 21 0 21 21 4.250 arcto pop pop pop pop 21 21 0 21 4.250 arcto pop pop pop pop 0 21 0 0 4.250 arcto pop pop pop pop 0 0 21 0 4.250 arcto pop pop pop pop closepath setmatrix 0.500 0.500 0.500 setrgbcolor eofill newpath 6.250 6.250 moveto -6.250 -6.250 rlineto -2 -2 rlineto 0 29 rlineto 29 0 rlineto -2 -2 rlineto -6.250 -6.250 rlineto closepath clip newpath matrix currentmatrix 0 0 translate 6.250 0 moveto 25 0 25 25 6.250 arcto pop pop pop pop 25 25 0 25 6.250 arcto pop pop pop pop 0 25 0 0 6.250 arcto pop pop pop pop 0 0 25 0 6.250 arcto pop pop pop pop closepath setmatrix matrix currentmatrix 2 2 translate 4.250 0 moveto 21 0 21 21 4.250 arcto pop pop pop pop 21 21 0 21 4.250 arcto pop pop pop pop 0 21 0 0 4.250 arcto pop pop pop pop 0 0 21 0 4.250 arcto pop pop pop pop closepath setmatrix 1 1 1 setrgbcolor eofill grestore gsave gsave 6.500 6.500 translate 12 12 scale newpath 0.200 0.850 moveto 0.850 0.850 lineto 0.500 0.200 lineto closepath 0.800 0.800 0.800 setrgbcolor fill 0 1 moveto 1 1 lineto 1 0.900 lineto 0.550 0 lineto 0.450 0 lineto 0 0.900 lineto closepath 0.200 0.850 moveto 0.850 0.850 lineto 0.500 0.200 lineto closepath 0.500 0.500 0.500 setrgbcolor eofill 0.550 0 moveto 0.450 0 lineto 0.450 0.100 lineto 0.850 0.850 lineto 1 0.850 lineto closepath 1 1 1 setrgbcolor fill grestore grestore grestore EEPS EO [1 0 0 1 11 11 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 1 16 DR grestore -0 -0 1 1 BEPS EEPS EO [1 0 0 1 0 0 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 26 26 DR grestore -0 -0 1 1 BEPS gsave gsave 0 1 moveto 0 24 rlineto 24 0 rlineto 0 -24 rlineto closepath clip newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat 0 0 moveto 0 18 rlineto 18 0 rlineto 0 -18 rlineto closepath setmatrix newpath 0 2 translate gsave newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat newpath matrix currentmatrix [ 1 0 0 1 2 16 ] concat 0 0 moveto 0 -14 lineto 6 -14 lineto 6 0 lineto closepath gsave 0.900 0.900 0.900 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 8 8 ] concat 0 0 moveto 0 -6 lineto 8 -6 lineto 8 0 lineto closepath gsave 0.900 0.900 0.900 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 6 8 ] concat 0 0 moveto 0 -6 lineto 6 -6 lineto 6 0 lineto closepath gsave 0.900 0.900 0.900 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 12 8 ] concat 0 0 moveto -4 0 lineto setmatrix newpath matrix currentmatrix [ 1 0 0 1 0 18 ] concat 0 0 moveto 0 -18 lineto 2 -18 lineto 2 0 lineto closepath gsave 0.010 1 0.010 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 8 18 ] concat 0 0 moveto 0 -10 lineto 2 -10 lineto 2 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 16 10 ] concat 0 0 moveto 0 -8 lineto 2 -8 lineto 2 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 0 2 ] concat 0 0 moveto 0 -2 lineto 18 -2 lineto 18 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 2 18 ] concat 0 0 moveto 0 -2 lineto 8 -2 lineto 8 0 lineto closepath gsave 0.010 1 0.010 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 2 18 ] concat 0 0 moveto 0 -2 lineto 2 -2 lineto 2 0 lineto closepath gsave 0.960 1 0 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 0 18 ] concat 0 0 moveto 6 0 lineto setmatrix newpath matrix currentmatrix [ 1 0 0 1 10 10 ] concat 0 0 moveto 0 -2 lineto 8 -2 lineto 8 0 lineto closepath gsave 0.010 1 0.010 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 16 2 ] concat 0 0 moveto 0 -2 lineto 2 -2 lineto 2 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix setmatrix grestore grestore grestore EEPS EO [1 0 0 1 554 0 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 21 21 DR grestore -0 -0 1 1 BEPS gsave gsave 0 1 moveto 0 19 rlineto 19 0 rlineto 0 -19 rlineto closepath clip newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat 0 0 moveto 0 18 rlineto 18 0 rlineto 0 -18 rlineto closepath setmatrix newpath 0 2 translate gsave newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat newpath matrix currentmatrix [ 1 0 0 1 10 16 ] concat 0 0 moveto 0 -14 lineto 6 -14 lineto 6 0 lineto closepath gsave 0.900 0.900 0.900 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 2 8 ] concat 0 0 moveto 0 -6 lineto 8 -6 lineto 8 0 lineto closepath gsave 0.900 0.900 0.900 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 16 16 ] concat 0 0 moveto 0 -14 lineto 2 -14 lineto 2 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 8 18 ] concat 0 0 moveto 0 -10 lineto 2 -10 lineto 2 0 lineto closepath gsave 0.010 1 0.010 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 0 10 ] concat 0 0 moveto 0 -10 lineto 2 -10 lineto 2 0 lineto closepath gsave 0.060 0.990 0.750 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 2 2 ] concat 0 0 moveto 0 -2 lineto 16 -2 lineto 16 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 10 18 ] concat 0 0 moveto 0 -2 lineto 8 -2 lineto 8 0 lineto closepath gsave 0.010 1 0.010 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 2 10 ] concat 0 0 moveto 0 -2 lineto 8 -2 lineto 8 0 lineto closepath gsave 0.010 1 0.010 setrgbcolor fill grestore setmatrix setmatrix grestore grestore grestore EEPS EO [1 0 0 1 0 374 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 26 21 DR grestore -0 -0 1 1 BEPS gsave gsave 0 1 moveto 0 19 rlineto 24 0 rlineto 0 -19 rlineto closepath clip newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat 0 0 moveto 0 18 rlineto 18 0 rlineto 0 -18 rlineto closepath setmatrix newpath 0 2 translate gsave newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat newpath matrix currentmatrix [ 1 0 0 1 2 16 ] concat 0 0 moveto 0 -14 lineto 6 -14 lineto 6 0 lineto closepath gsave 0.900 0.900 0.900 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 8 16 ] concat 0 0 moveto 0 -6 lineto 8 -6 lineto 8 0 lineto closepath gsave 0.900 0.900 0.900 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 12 8 ] concat 0 0 moveto -4 0 lineto setmatrix newpath matrix currentmatrix [ 1 0 0 1 8 8 ] concat 0 0 moveto 0 -6 lineto 2 -6 lineto 2 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 0 16 ] concat 0 0 moveto 0 -16 lineto 2 -16 lineto 2 0 lineto closepath gsave 1 1 1 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 16 16 ] concat 0 0 moveto 0 -6 lineto 2 -6 lineto 2 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 0 18 ] concat 0 0 moveto 0 -2 lineto 18 -2 lineto 18 0 lineto closepath gsave 1 1 1 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 2 2 ] concat 0 0 moveto 0 -2 lineto 8 -2 lineto 8 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 8 10 ] concat 0 0 moveto 0 -2 lineto 10 -2 lineto 10 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix setmatrix grestore grestore grestore EEPS EO [1 0 0 1 554 374 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 21 21 DR grestore -0 -0 1 1 BEPS gsave gsave 0 1 moveto 0 19 rlineto 19 0 rlineto 0 -19 rlineto closepath clip newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat 0 0 moveto 0 18 rlineto 18 0 rlineto 0 -18 rlineto closepath setmatrix newpath 0 2 translate gsave newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat newpath matrix currentmatrix [ 1 0 0 1 10 16 ] concat 0 0 moveto 0 -14 lineto 6 -14 lineto 6 0 lineto closepath gsave 0.900 0.900 0.900 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 2 16 ] concat 0 0 moveto 0 -6 lineto 8 -6 lineto 8 0 lineto closepath gsave 0.900 0.900 0.900 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 6 8 ] concat 0 0 moveto -4 0 lineto setmatrix newpath matrix currentmatrix [ 1 0 0 1 0 16 ] concat 0 0 moveto 0 -8 lineto 2 -8 lineto 2 0 lineto closepath gsave 1 1 1 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 16 16 ] concat 0 0 moveto 0 -16 lineto 2 -16 lineto 2 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 8 8 ] concat 0 0 moveto 0 -8 lineto 2 -8 lineto 2 0 lineto closepath gsave 1 1 1 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 0 18 ] concat 0 0 moveto 0 -2 lineto 18 -2 lineto 18 0 lineto closepath gsave 1 1 1 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 10 2 ] concat 0 0 moveto 0 -2 lineto 8 -2 lineto 8 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 2 10 ] concat 0 0 moveto 0 -2 lineto 8 -2 lineto 8 0 lineto closepath gsave 0.500 0.500 0.500 setrgbcolor fill grestore setmatrix setmatrix grestore grestore grestore EEPS EO [1 0 0 1 16 21 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 516 276 DR grestore -0 -0 1 1 BEPS gsave gsave gsave 1 1 1 setrgbcolor matrix currentmatrix 0 1 translate 0 0 moveto 514 0 514 274 0 arcto pop pop pop pop 514 274 0 274 0 arcto pop pop pop pop 0 274 0 0 0 arcto pop pop pop pop 0 0 514 0 0 arcto pop pop pop pop closepath setmatrix gsave fill grestore 0 0 0 setrgbcolor gsave stroke grestore clip newpath (Helvetica)cvn findfont [ 18 0 0 18 0 0 ] makefont setfont 257.500 132.500 moveto 0 0 rmoveto ()show grestore grestore grestore EEPS EO [1 0 0 1 166 91 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 176 126 DR grestore -0 -0 1 1 BEPS gsave gsave 0 1 moveto 0 124 rlineto 174 0 rlineto 0 -124 rlineto closepath clip newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat 0 0 moveto 0 120 rlineto 172 0 rlineto 0 -120 rlineto closepath setmatrix newpath 0 2 translate gsave newpath matrix currentmatrix [ 1 0 0 1 0 0 ] concat newpath matrix currentmatrix [ 1 0 0 1 0 72 ] concat 0 0 moveto 0 -72 lineto 128 -72 lineto 128 0 lineto closepath gsave 1 1 1 setrgbcolor fill grestore gsave 0 0 0 setrgbcolor stroke grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 88 116 ] concat matrix currentmatrix 80 -80 scale 1 0.500 moveto 0.500 0.500 translate 0 0 0.500 0 360 arc setmatrix closepath gsave 0 0 0 setrgbcolor fill grestore gsave 0 0 0 setrgbcolor stroke grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 84 120 ] concat 0 0 moveto 0 -8 lineto 8 -8 lineto 8 0 lineto closepath gsave 0 0 0 setrgbcolor fill grestore gsave 0 0 0 setrgbcolor stroke grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 164 120 ] concat 0 0 moveto 0 -8 lineto 8 -8 lineto 8 0 lineto closepath gsave 0 0 0 setrgbcolor fill grestore gsave 0 0 0 setrgbcolor stroke grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 164 40 ] concat 0 0 moveto 0 -8 lineto 8 -8 lineto 8 0 lineto closepath gsave 0 0 0 setrgbcolor fill grestore gsave 0 0 0 setrgbcolor stroke grestore setmatrix newpath matrix currentmatrix [ 1 0 0 1 84 40 ] concat 0 0 moveto 0 -8 lineto 8 -8 lineto 8 0 lineto closepath gsave 0 0 0 setrgbcolor fill grestore gsave 0 0 0 setrgbcolor stroke grestore setmatrix setmatrix grestore grestore grestore EEPS EO [1 0 0 1 136 311 ] BO %%EPS: arthur, HyperNeWS drawing, -- gsave 101 31 DR grestore -0 -0 1 1 BEPS gsave gsave 0 0 translate newpath matrix currentmatrix 0 0 translate 15 0 moveto 100 0 100 30 15 arcto pop pop pop pop 100 30 0 30 15 arcto pop pop pop pop 0 30 0 0 15 arcto pop pop pop pop 0 0 100 0 15 arcto pop pop pop pop closepath setmatrix 0.900 0.900 0.900 setrgbcolor fill matrix currentmatrix 0 0 translate 15 0 moveto 100 0 100 30 15 arcto pop pop pop pop 100 30 0 30 15 arcto pop pop pop pop 0 30 0 0 15 arcto pop pop pop pop 0 0 100 0 15 arcto pop pop pop pop closepath setmatrix matrix currentmatrix 2 2 translate 13 0 moveto 96 0 96 26 13 arcto pop pop pop pop 96 26 0 26 13 arcto pop pop pop pop 0 26 0 0 13 arcto pop pop pop pop 0 0 96 0 13 arcto pop pop pop pop closepath setmatrix 0.500 0.500 0.500 setrgbcolor eofill newpath 15 15 moveto -15 -15 rlineto -2 -2 rlineto 0 34 rlineto 104 0 rlineto -2 -2 rlineto -15 -15 rlineto closepath clip newpath matrix currentmatrix 0 0 translate 15 0 moveto 100 0 100 30 15 arcto pop pop pop pop 100 30 0 30 15 arcto pop pop pop pop 0 30 0 0 15 arcto pop pop pop pop 0 0 100 0 15 arcto pop pop pop pop closepath setmatrix matrix currentmatrix 2 2 translate 13 0 moveto 96 0 96 26 13 arcto pop pop pop pop 96 26 0 26 13 arcto pop pop pop pop 0 26 0 0 13 arcto pop pop pop pop 0 0 96 0 13 arcto pop pop pop pop closepath setmatrix 1 1 1 setrgbcolor eofill grestore gsave 0 0 0 setrgbcolor (Times-BoldItalic)cvn findfont [ 18 0 0 18 0 0 ] makefont setfont 15 10.000 moveto (Edit)show gsave 73 9 translate 12 12 scale newpath 0.200 0.850 moveto 0.850 0.850 lineto 0.500 0.200 lineto closepath 0.800 0.800 0.800 setrgbcolor fill 0 1 moveto 1 1 lineto 1 0.900 lineto 0.550 0 lineto 0.450 0 lineto 0 0.900 lineto closepath 0.200 0.850 moveto 0.850 0.850 lineto 0.500 0.200 lineto closepath 0.500 0.500 0.500 setrgbcolor eofill 0.550 0 moveto 0.450 0 lineto 0.450 0.100 lineto 0.850 0.850 lineto 1 0.850 lineto closepath 1 1 1 setrgbcolor fill grestore grestore grestore EEPS EO grestore @endspecial 538 2631 a(Figure)g(6:)f(The)g(resulting)f(UI)i(with)f(the)g (scoped)g(font)952 2828 y(15)p eop %%Page: 16 16 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)68 195 y Fh(\017)23 b Fn(Powerful)10 b(implementation)e(tool.)j(Interally)f(there)g(are)h(many)f (situation)f(where)i(scoped)f(variables)g(can)g(be)h(used.)68 288 y Fh(\017)23 b Fn(Support)12 b(persistence.)17 b(Scoped)d(variables)f (fit)f(in)h(well)g(with)f(persistence.)17 b(Most)12 b(scoped)h(variables)g (should)f(be)114 344 y(persistent)e(so)h(that)g(their)g(values)g(are)h(saved) g(with)e(the)i(component.)68 437 y Fh(\017)23 b Fn(Avoid)8 b(class)i(modification.)f(Changing)g(a)h(class)f(variable)h(is)f(fine)g(only) g(if)h(you)f(can)g(enumerate)h(all)f(the)h(instances)114 494 y(of)h(the)g(class)g(which)g(are)i(going)d(to)h(be)h(affected.)71 585 y(Scoped)j(variables)g(are)g(a)g(powerful)g(concept.)22 b(They)15 b(can)h(be)f(used)f(to)h(manage)f(the)h(graphical)g(aspects)g(of)g (a)g(UI)0 642 y(instance,)c(such)f(as)h(colors)f(and)g(fonts)g(but)g(this)g (mechanism)g(can)g(also)h(be)f(used)h(to)f(find)g(elegant)g(solutions)f(to)h (problems)0 698 y(such)j(as)h(visibility,)e(shared)i(menus,)g(notifiers,)g (tracking)f(etc.)19 b(The)13 b(increase)i(mobility)c(of)j(UI)g(components)e (requires)0 754 y(that)f(when)h(a)g(component)f(which)h(is)f(moved)g(to)h(a)g (new)g(context)f(it)g(must)g(be)h(able)g(to)f(adapt)h(to)f(its)h (surroundings)e(e.g.)k(it)0 811 y(must)c(take)i(on)f(the)g(same)g(color,)h (font)f(etc.)h(This)f(is)f(all)i(achieved)f(using)g(parent)g(scope.)71 867 y(TNT)e(modifies)f(class)i(variables)f(to)h(change)f(class)h(defaults.)h (This)e(strategy)g(is)g(rather)h(dangerous)f(in)h(an)f(interactive)0 924 y(system)17 b(such)g(as)h(Cool)f(since)h(it)f(is)g(hard)h(to)f(predict)g (the)h(resulting)e(visual)h(damage)h(of)f(such)h(an)f(action.)31 b(Scoped)0 980 y(variables)10 b(should)g(provide)g(a)g(cleaner)i(and)e(more)g (intuitive)f(way)i(to)f(manipulate)f(defaults)h(and)h(object)f(properties.)h (The)0 1037 y(modification)g(of)h(scoped)h(variables)f(is)g(not)g(addressed)g (here)i(since)e(there)h(will)e(be)i(a)g(Cool)f(scoped)g(variable)h(manager)0 1093 y(which)h(provides)g(high)f(level)h(interactive)h(access)g(to)f(the)g (scoped)g(variables)g(which)g(the)g(user)h(should)e(be)i(allowed)e(to)0 1150 y(change.)71 1206 y(The)21 b(routines)g(that)g(deal)h(with)e(scoped)i (variables)f(should)f(make)i(use)f(of)h(the)f(logical)g(container)h (hierarchy)0 1263 y(as)c(discussed)g(above.)33 b(Several)19 b(possible)e(implementations)f(are)j(discussed)f(in)g(Appendix)f(A)i(none)f (of)g(them)g(are)0 1319 y(completely)12 b(satisfactory.)17 b(Each)c(solution)f(has)h(drawbacks)g(which)g(are)h(unlikely)e(to)g(be)i (resolved.)j(I)c(have)g(chosen)g(to)0 1375 y(implement)e(and)h(test)g(the)h (``Dynamic)f(lookup'')g(solution.)h(This)f(method)g(requires)g(the)h (implementation)d(of)j(a)f(server)0 1432 y(routine)h(which)g(searches)h(the)g (linked)f(list)f(of)i(parent)g(instances)f(for)g(the)h(scoped)f(variable.)19 b(The)13 b(PostScript)h(solution)0 1488 y(\(described)e(in)f(Appendix)f (B.2\))i(is)f(slow)g(but)g(it)f(is)h(fast)h(enough)f(for)g(testing.)71 1545 y(Not)h(using)g(separate)h(localdicts)f(creates)i(the)f(problem)f(of)h (name)f(space)i(clutter.)i(This)c(can)h(be)g(avoided)f(by)h(using)0 1601 y(a)h(naming)e(convention.)17 b(The)d(scoped)f(variable)g(naming)g (convention)f(used)h(here)i(is)d(that)h(all)h(scoped)f(variables)g(must)0 1658 y(start)e(with)g(a)h(special)g(character:)h(a)f(`)p Fi(&)p Fn(')g(for)g(scoped)f(variables,)h(and)g(a)g(`)p Fi(@)p Fn(')g(for)g(scoped)g (names)f(\(see)h(Section)g(2.2\).)h(The)0 1714 y(following)d(operators)h(are) h(provided)f(to)g(implement)f(scoped)h(variables:)g(\(see)h(Appendix)f (B.2\):)68 1806 y Fh(\017)23 b Fi(linkwhere)85 b(\045)28 b(dict)h(linkkey)h (key)f(--)f(dict)h(true)g(|)f(false)114 1862 y Fn(This)9 b(operator)g (searches)i(a)f(linked)f(list)f(of)i(dictionaries)f(which)g(are)h(linked)f (together)h(using)e(the)i Fi(linkkey)i Fn(field)114 1918 y(in)e(each)i (dictionary.)f(If)h Fi(key)h Fn(is)d(found)h(in)g(a)h(dictionary)e(of)h(the)g (linked)g(list)f(then)h(the)g(search)h(is)f(aborted)g(and)g(the)114 1975 y(dictionary)h(and)h Fi(true)h Fn(are)g(returned.)i(If)d(the)g(key)g(is) f(not)h(found)f(or)h(if)g(the)f(search)i(fails)e(otherwise,)i Fi(false)h Fn(is)114 2031 y(returned.)68 2124 y Fh(\017)23 b Fi(linkget)112 b(\045)28 b(dict)h(linkkey)h(key)f(--)f(value)114 2181 y Fn(Lookup)12 b(a)h(variable)h(in)f(a)g(linked)g(list)f(of)h (dictionaries)f(using)g Fi(linkwher)q(e)p Fn(.)20 b(If)14 b(the)f(variable)g (is)g(not)g(found)f(in)114 2237 y(the)f(linked)f(list)h(of)g(dictionaries)g (it)f(is)h(executed)h(in)f(the)g(current)h(context)f(\(the)g(back-stop\).)68 2330 y Fh(\017)23 b Fi(linkknown)58 b(\045)28 b(dict)h(linkkey)h(key)f(--)f (flag)114 2386 y Fn(Return)11 b(true)h(if)f(the)g Fi(key)i Fn(is)e(known)f(in)h(the)h(linked)e(list)g(of)i(dictionaries.)0 2478 y(This)g(implementation)f(provides)h(for)h(a)g(back-stop.)j(This)c(is)g (useful)h(since)f(TNT)h(components)f(often)g(have)h(no)g(parent)0 2534 y(while)d(the)f(UI)i(is)e(being)h(created.)i(In)e(Appendix)f(B.3)i(some) e(of)i(the)e(TNT)h(variables)g(are)h(modified)e(so)h(that)f(they)h(become)0 2591 y(scoped.)17 b(This)12 b(may)h(mean)g(a)g(minor)f(change)i(to)e(the)h (TNT)g(API)h(since)f(some)f(instance)h(variables)g(are)h(now)f(no)f(longer)0 2647 y(variables)f(but)g(instead)g(refer)h(to)f(the)g(corresponding)g(scoped) g(variable.)h(The)f(definition)f(of)i(a)g(scoped)f(variable)g(should)0 2704 y(have)h(the)f(form:)952 2828 y(16)p eop %%Page: 17 17 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)365 1380 y @beginspecial 0.400000 @hscale 0.400000 @vscale @setspecial%!PS-HyperNeWS drawing- %%Creator:arthur %%Title:HyperNeWS drawing. %%BoundingBox:0 0 767.6 784.576 %%TemplateBox:0 0 767.6 784.576 %%EndComments % "@(#)drawlib.ps 3.1 3/19/90 Arthur van Hoff (Turing Institute)"; % -- drawlib.ps -- Header file for PostScript drawings. /SC {dup type /arraytype eq {aload pop setrgbcolor} {setgray} ifelse} def /MX {1 0 0 1} def /CT {curveto} def /CP {closepath} def /LT {lineto} def /PT {moveto} def /PC {{lineto} stopped {moveto} if} def /LN {0 0 PT LT} def /LC {0 0 PC LT} def /FL {SC fill} def /ST {SC setlinewidth stroke} def /FS {gsave FL grestore ST} def /CM {matrix currentmatrix exch concat} def /SM {setmatrix} def /BO {gsave newpath concat} def /EO {grestore} def /SG {gsave SC eofill grestore ST} def /FG {SC eofill} def /AR { % c s a x y -- newpath matrix currentmatrix 5 1 roll newpath translate rotate 0 0 moveto 0 0 3 -1 roll -20 20 arc 0 0 lineto setmatrix FL } def /DA { % x y -- matrix currentmatrix 3 1 roll scale 0 1 1 -90 0 arc setmatrix } def /DR { % w h -- 0 0 moveto exch dup 0 lineto 1 index lineto 0 exch lineto closepath } def /DO { % w h -- matrix currentmatrix 3 1 roll scale 1 0.5 moveto 0.5 0.5 translate 0 0 0.5 0 360 arc closepath setmatrix } def /RR { % w h c -- 10 dict begin 2 index abs 2 index abs dup 2 index lt {exch pop} {pop} ifelse 2 div dup 2 index lt {exch pop} {pop} ifelse /c exch def /h exch def /w exch def c 0 moveto mark w 0 w h c arcto w h 0 h c arcto 0 h 0 0 c arcto 0 0 w 0 c arcto cleartomark closepath end } def /DP { % d1 d2 w h -- matrix currentmatrix 5 1 roll scale 0.5 0.5 moveto 0.5 0.5 0.5 5 -2 roll arc 0.5 0.5 lineto setmatrix } def /SF { % text col fontsize font -- text width findfont exch scalefont setfont SC 1 1 index {stringwidth pop abs 2 copy lt {exch} if pop} forall } def /TS { % width w h -- exch 2 index div exch scale } def /TL { % text w h lh -- 5 dict begin /h exch def 0 exch moveto pop {gsave show grestore 0 h rmoveto} forall end } def /TR { % text w h bh -- 5 dict begin /h exch def moveto { gsave dup stringwidth pop neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /TC { % text w h bh -- 5 dict begin /h exch def exch 2 div exch moveto { gsave dup stringwidth pop 2 div neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /IR { % w h DR gsave 1 setgray fill grestore 0 setgray stroke } def /IC { % str w h -- scale LoadImage imagecanvas } def /IM { % ... -- /pstr exch string def 0 exch translate scale {} settransfer 0 0 3 -1 roll 0 0 6 array astore {currentfile pstr readhexstring pop} image } def /EPSdict 10 dict begin /initmatrix { #Matrisk# setmatrix } def /initgraphics { systemdict /initgraphics get exec #Matrisk# setmatrix } def /showpage {} def currentdict end def /BEPS { save 5 1 roll EPSdict begin gsave scale translate matrix currentmatrix /#Matrisk# exch def systemdict /initgraphics get exec #Matrisk# setmatrix 500 dict begin } def /EEPS { end grestore end restore } def gsave initclip 1.010 1.066 scale [1 0 0 1 312 544 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 120 384 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 408 224 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 312 64 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 312 640 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 312 736 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 600 224 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 504 64 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 504 384 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 312 384 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 392 576 ] BO 0 -32 LN 1 [0 0 0] ST EO [1 0 0 1 392 480 ] BO 0 -96 LN 1 [0 0 0] ST EO [1 0 0 1 424 480 ] BO 160 -96 LN 1 [0 0 0] ST EO [1 0 0 1 200 384 ] BO 160 96 LN 1 [0 0 0] ST EO [1 0 0 1 488 224 ] BO 64 96 LN 1 [0 0 0] ST EO [1 0 0 1 392 64 ] BO 64 96 LN 1 [0 0 0] ST EO [1 0 0 1 680 224 ] BO -64 96 LN 1 [0 0 0] ST EO [1 0 0 1 584 64 ] BO -64 96 LN 1 [0 0 0] ST EO [1 0 0 1 440 186.400 ] BO [(ClassMenuButtons)] [0 0 0] 13.9999 /Times-Roman SF 106.567 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 648 186.400 ] BO [(ClassSettings)] [0 0 0] 13.9999 /Times-Roman SF 75.4591 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 360 26.400 ] BO [(ClassMenu)] [0 0 0] 13.9999 /Times-Roman SF 62.9991 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 552 26.400 ] BO [(ClassMenu)] [0 0 0] 13.9999 /Times-Roman SF 62.9991 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 344 346.400 ] BO [(ClassVScrollbar)] [0 0 0] 13.9999 /Times-Roman SF 91.7686 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 344 506.400 ] BO [(ClassBaseWindow)] [0 0 0] 13.9999 /Times-Roman SF 105.768 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 344 602.400 ] BO [(ClassFramebuffer)] [0 0 0] 13.9999 /Times-Roman SF 100.308 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 344 698.400 ] BO [(ClassFramebuffer)] [0 0 0] 13.9999 /Times-Roman SF 100.308 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 552 346.400 ] BO [(ClassPanel)] [0 0 0] 13.9999 /Times-Roman SF 61.445 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 168 346.400 ] BO [(ClassCanvas)] [0 0 0] 13.9999 /Times-Roman SF 71.5528 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 392 640 ] BO 0 32 LN 1 [0 0 0] ST EO [1 0 0 1 368 682.400 ] BO [(@root)] [0 0 0] 13.9999 /Helvetica-Oblique SF 38.3319 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 344 586.400 ] BO [(@framebuffer-1)] [0 0 0] 13.9999 /Helvetica-Oblique SF 98.2375 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 360 490.400 ] BO [(@drawtool)] [0 0 0] 13.9999 /Helvetica-Oblique SF 67.1154 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 184 330.400 ] BO [(@cv)] [0 0 0] 13.9999 /Helvetica-Oblique SF 28.21 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 368 330.400 ] BO [(@vscroll)] [0 0 0] 13.9999 /Helvetica-Oblique SF 53.8715 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 568 330.400 ] BO [(@pnl)] [0 0 0] 13.9999 /Helvetica-Oblique SF 32.8858 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 456 170.400 ] BO [(@commands)] [0 0 0] 13.9999 /Helvetica-Oblique SF 82.6698 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 656 170.400 ] BO [(@colors)] [0 0 0] 13.9999 /Helvetica-Oblique SF 51.5477 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 360 10.400 ] BO [(@filemenu)] [0 0 0] 13.9999 /Helvetica-Oblique SF 67.1154 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 544 10.400 ] BO [(@editmenu)] [0 0 0] 13.9999 /Helvetica-Oblique SF 71.7917 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 0 202.400 ] BO [([/@root /@framebuffer-1 /@drawtool /@pnl /@commands])] [0 0 0] 13.9999 /Helvetica SF 362.052 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 280 192 ] BO 120 0 LN 1 [0 0 0] ST [0 0 0] 12 180 120 0 AR EO grestore @endspecial 484 1478 a Fn(Figure)h(7:)f(The)g(logical)g(container)g(hierarchy)h(with)f(names) 0 1606 y Fi(/&NrBeeps)31 b(4)d(def)g(\045the)h(backstop)0 1719 y(/NrBeeps)i({)c(\045)h(--)g(n)137 1775 y(self)h(/@parent)i(/&NrBeeps)g (getscope)0 1832 y(})d(def)0 1945 y(/SetNrBee)q(ps)j({)d(\045)f(n)h(--)137 2001 y(/&NrBeeps)j(exch)e(promote)0 2058 y(})f(def)0 2181 y Fg(2.2)50 b(Addressing)12 b(objects)0 2268 y Fn(In)f(an)g(interactive)f (system)g(it)g(is)g(necessary)h(that)f(every)i(UI)f(component)e(can)i(be)g (addressed)g(by)f(a)h(symbolic)e(name.)j(The)0 2324 y(address)g(must)f(have)h (the)g(form)g(of)g(a)h(path)f(name)g(because)g(of)g(the)g(tree)h(structure)f (of)g(the)g(container)g(hierarchy.)i(Such)f(a)0 2381 y(path)d(name)g(can)g (be)h(relative)f(\(not)f(starting)h(at)g(the)g(root\))g(or)g(it)f(can)i(be)f (absolute)f(\(starting)h(at)g(the)g(root\).)h(The)f(component)0 2437 y(addresses)h(can)h(be)g(used)f(in)g(many)g(ways:)68 2523 y Fh(\017)23 b Fn(During)10 b(editing)h(to)g(identify)f(which)h(object)g(is)g (being)g(edited.)68 2613 y Fh(\017)23 b Fn(As)11 b(a)g(target)h(address)f(to) g(send)g(messages)g(to.)68 2704 y Fh(\017)23 b Fn(Components)10 b(which)h(communicate)f(to)h(other)h(UI)f(components.)952 2828 y(17)p eop %%Page: 18 18 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)68 195 y Fh(\017)23 b Fn(Client)11 b(programs)g(which)g(communicate)f(with)h(UI)g(components.)68 284 y Fh(\017)23 b Fn(Identify)11 b(objects)f(uniquely)h(inside)f(debuggers)h (and)h(error)g(handlers.)0 365 y(To)j(implement)f(an)i(addressing)e (mechanism)h(it)g(is)g(necessary)h(that)f(every)h(object)f(is)g(given)g(a)g (name)h(and)f(that)g(these)0 422 y(names)g(are)h(unique)f(within)f(the)h (parent)h(container)f(of)h(the)f(object.)23 b(TNT)15 b(supports)g(two)g (separate)h(mechanisms)e(for)0 478 y(binding)h(a)h(symbolic)f(name)h(to)f(an) i(object.)25 b(The)16 b(first)g(is)g(implemented)e(in)i Fi(ClassObjec)q(t)j Fn(by)d(the)g Fi(/name)i Fn(and)0 535 y Fi(/setname)d Fn(methods.)10 b(The)i(second)f(is)g(the)g(naming)f(of)i Fi(ClassBag)i Fn(clients.)d(The)h Fi(/addclient)j Fn(method)10 b(is)h(used)0 591 y(to)k(define)h(named)g (clients)f(in)g(the)h Fi(ClientDic)q(t)j Fn(instance)c(variable.)26 b(These)16 b(client)f(names)g(are)i(used)f(to)f(address)0 647 y(objects)c(during)f(layout.)71 704 y(Cool)j(must)f(use)i(the)f(first)h (mechanism)e(because)i(the)g(client)f(names)g(already)h(have)g(a)g(well)f (defined)h(meaning)f(for)0 760 y(layout.)e(Cool)g(requires)g(symbolic)e (names)i(which)g(do)f(not)h(necessarily)f(relate)i(to)e(layout.)h(The)g Fi(/setname)k Fn(method)10 b(is)0 817 y(used)h(to)f(assign)h(names)f(to)h (objects)g(when)g(required.)g(It)g(must)f(be)i(changed)f(so)g(that)f(it)h (will)f(not)g(allow)h(duplicate)f(names)0 873 y(within)h(the)h(same)g(parent) g(container.)j(The)d Fi(/setcontai)q(ne)q(r)j Fn(method)c(in)h Fi(ClassDraw)q(abl)q(e)j Fn(must)d(be)g(changed)0 930 y(so)f(that)g(it)f(can) i(generate)g(unique)f(names)g(for)g(unnamed)g(objects)g(and)g(so)g(that)g(it) f(can)i(make)f(sure)h(that)f(duplicate)f(names)0 986 y(don't)j(occur)i(\(see) g(Appendix)e(B.4\).)21 b(The)14 b(following)e(methods)h(are)i(defined)f(in)g Fi(ClassDrawa)q(bl)q(e)j Fn(to)d(implement)0 1043 y(unique)d(symbolic)f (names)h(for)g(objects.)68 1124 y Fh(\017)23 b Fi(/setname)112 b(\045)28 b(name)h(--)114 1180 y Fn(Assign)11 b(a)j(new)f(name)g(to)f(an)h (object.)j(This)c(is)h(only)f(successful)h(if)g(the)f(name)h(is)g(not)f(yet)h (defined)g(in)f(the)h(parent)114 1237 y(container)e(of)g(the)h(object.)f(If)h (the)f(name)g(does)h(not)e(already)i(start)f(with)g(a)g(`)p Fi(@)p Fn(')i(character)f(it)f(will)g(insert)g(one.)68 1326 y Fh(\017)23 b Fi(/setcontai)q(ner)113 b(\045)28 b(container)q(|n)q(ull)j(--) 114 1382 y Fn(Change)14 b(the)f(container)h(of)g(an)f(object.)19 b(Remove)14 b(the)f(name)h(of)f(the)h(object)f(for)h(the)g(old)f(parent)g (container)h(and)114 1438 y(define)h(the)h(name)f(of)h(the)f(object)g(in)g (the)h(new)f(parent)h(container.)24 b(A)15 b(new)h(unique)f(name)g(is)g (assigned)g(to)g(the)114 1495 y(object)c(if)g(the)h(object)f(does)h(not)f (already)h(have)g(a)g(name)f(or)h(when)f(the)h(old)f(name)h(would)e(cause)i (a)g(name)g(clash)f(in)114 1551 y(the)g(new)g(parent)h(container.)0 1633 y(Each)d(name)f(is)g(made)g(a)g(scoped)g(variable)h(in)f(the)g(parent)g (container)g(\(the)h(same)f(technique)g(is)f(used)h(in)g(HyperNeWS)h(2.0\).)0 1689 y(This)15 b(make)i(the)f(lookup)f(of)h(an)g(object)g(name)h(very)f (efficient)g(since)g(it)g(can)h(use)f(the)g(same)g(mechanism)f(as)i(is)e (used)0 1746 y(for)f(scoped)g(variables.)20 b(To)14 b(distinguish)d(object)j (names)g(from)f(other)h(scoped)g(variables)g(they)g(are)h(prefixed)f(with)f (the)0 1802 y(special)h(character)h(`)p Fi(@)p Fn('.)21 b(This)14 b(clearly)g(marks)g(a)g(PostScript)g(name)g(as)g(an)g(address.)20 b(It)14 b(also)g(allows)f(some)h(objects)f(to)0 1858 y(have)h(generic)g (names)f(such)h(as)g Fi(/@parent)p Fn(,)j Fi(/@window)q Fn(,)g Fi(/@canvas)q Fn(,)g Fi(/@inputfo)q(cu)q(s)g Fn(etc.)i(The)13 b(following)0 1915 y(methods)e(are)h(added)g(to)g Fi(ClassDrawa)q(bl)q(e)j Fn(to)c(implement)g(symbolic)f(addressing.)j(The)f(implementation)d(is)j (given)0 1971 y(in)f(Appendix)f(B.5.)68 2053 y Fh(\017)23 b Fi(/findobjec)q(t)85 b(\045)28 b(null|inst)q(anc)q(e|)q(nam)q(e|)q(pat)q(h)j (--)d(instance|n)q(ull)114 2109 y Fn(Find)11 b(an)g(object)g(given)g(its)g (path)g(name.)h Fi(null)h Fn(is)d(returned)i(if)f(the)h(object)f(is)f(not)h (found.)68 2198 y Fh(\017)23 b Fi(/address)85 b(\045)28 b(--)g(path)114 2254 y Fn(Return)11 b(the)h(address)f(of)g(an)h(object)f(\(that)g(is)g(the)g (full)g(path)g(name\).)0 2336 y(Binding)g(an)g(object)g(to)g(an)h(address)f (is)g(done)g(using)f(the)i Fi(/findobject)j Fn(method)c(\(see)h(Appendix)e (B.5\).)j(An)e(address)0 2392 y(can)h(either)f(be)g(a)g(single)g(PostScript)f (name)h(or)h(it)e(is)h(a)g(path)g(\(an)g(array)h(of)g(PostScript)e(names\).)i (The)f(root)g(of)g(the)g(address)0 2448 y(is)g(determined)g(by)g(its)g(first) g(element,)h(consequent)f(elements)g(define)h(which)f(child)g(is)g (addressed.)h(Some)g(examples)f(of)0 2505 y(valid)g(addresses)g(in)g(the)g (UI)h(of)f(Figure)h(7)f(are:)0 2586 y Fi([/@root)30 b(/@framebu)q(ff)q(er-)q (1)h(/@drawtool)q(])0 2643 y([/@drawto)q(ol)g(/@pnl)e(/@color])0 2699 y(/@drawtoo)q(l)952 2828 y Fn(18)p eop %%Page: 19 19 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)446 1380 y @beginspecial 0.400000 @hscale 0.400000 @vscale @setspecial%!PS-HyperNeWS drawing- %%Creator:arthur %%Title:HyperNeWS drawing. %%BoundingBox:0 0 668.62 784.576 %%TemplateBox:0 0 668.62 784.576 %%EndComments % "@(#)drawlib.ps 3.1 3/19/90 Arthur van Hoff (Turing Institute)"; % -- drawlib.ps -- Header file for PostScript drawings. /SC {dup type /arraytype eq {aload pop setrgbcolor} {setgray} ifelse} def /MX {1 0 0 1} def /CT {curveto} def /CP {closepath} def /LT {lineto} def /PT {moveto} def /PC {{lineto} stopped {moveto} if} def /LN {0 0 PT LT} def /LC {0 0 PC LT} def /FL {SC fill} def /ST {SC setlinewidth stroke} def /FS {gsave FL grestore ST} def /CM {matrix currentmatrix exch concat} def /SM {setmatrix} def /BO {gsave newpath concat} def /EO {grestore} def /SG {gsave SC eofill grestore ST} def /FG {SC eofill} def /AR { % c s a x y -- newpath matrix currentmatrix 5 1 roll newpath translate rotate 0 0 moveto 0 0 3 -1 roll -20 20 arc 0 0 lineto setmatrix FL } def /DA { % x y -- matrix currentmatrix 3 1 roll scale 0 1 1 -90 0 arc setmatrix } def /DR { % w h -- 0 0 moveto exch dup 0 lineto 1 index lineto 0 exch lineto closepath } def /DO { % w h -- matrix currentmatrix 3 1 roll scale 1 0.5 moveto 0.5 0.5 translate 0 0 0.5 0 360 arc closepath setmatrix } def /RR { % w h c -- 10 dict begin 2 index abs 2 index abs dup 2 index lt {exch pop} {pop} ifelse 2 div dup 2 index lt {exch pop} {pop} ifelse /c exch def /h exch def /w exch def c 0 moveto mark w 0 w h c arcto w h 0 h c arcto 0 h 0 0 c arcto 0 0 w 0 c arcto cleartomark closepath end } def /DP { % d1 d2 w h -- matrix currentmatrix 5 1 roll scale 0.5 0.5 moveto 0.5 0.5 0.5 5 -2 roll arc 0.5 0.5 lineto setmatrix } def /SF { % text col fontsize font -- text width findfont exch scalefont setfont SC 1 1 index {stringwidth pop abs 2 copy lt {exch} if pop} forall } def /TS { % width w h -- exch 2 index div exch scale } def /TL { % text w h lh -- 5 dict begin /h exch def 0 exch moveto pop {gsave show grestore 0 h rmoveto} forall end } def /TR { % text w h bh -- 5 dict begin /h exch def moveto { gsave dup stringwidth pop neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /TC { % text w h bh -- 5 dict begin /h exch def exch 2 div exch moveto { gsave dup stringwidth pop 2 div neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /IR { % w h DR gsave 1 setgray fill grestore 0 setgray stroke } def /IC { % str w h -- scale LoadImage imagecanvas } def /IM { % ... -- /pstr exch string def 0 exch translate scale {} settransfer 0 0 3 -1 roll 0 0 6 array astore {currentfile pstr readhexstring pop} image } def /EPSdict 10 dict begin /initmatrix { #Matrisk# setmatrix } def /initgraphics { systemdict /initgraphics get exec #Matrisk# setmatrix } def /showpage {} def currentdict end def /BEPS { save 5 1 roll EPSdict begin gsave scale translate matrix currentmatrix /#Matrisk# exch def systemdict /initgraphics get exec #Matrisk# setmatrix 500 dict begin } def /EEPS { end grestore end restore } def gsave initclip 1.010 1.066 scale [1 0 0 1 214 544 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 22 384 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 310 224 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 214 64 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 214 640 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 214 736 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 502 224 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 406 64 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 406 384 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 214 384 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 294 576 ] BO 0 -32 LN 1 [0 0 0] ST EO [1 0 0 1 294 480 ] BO 0 -96 LN 1 [0 0 0] ST EO [1 0 0 1 326 480 ] BO 160 -96 LN 1 [0 0 0] ST EO [1 0 0 1 102 384 ] BO 160 96 LN 1 [0 0 0] ST EO [1 0 0 1 390 224 ] BO 64 96 LN 1 [0 0 0] ST EO [1 0 0 1 294 64 ] BO 64 96 LN 1 [0 0 0] ST EO [1 0 0 1 582 224 ] BO -64 96 LN 1 [0 0 0] ST EO [1 0 0 1 486 64 ] BO -64 96 LN 1 [0 0 0] ST EO [1 0 0 1 342 186.400 ] BO [(ClassMenuButtons)] [0 0 0] 13.9999 /Times-Roman SF 106.567 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 550 186.400 ] BO [(ClassSettings)] [0 0 0] 13.9999 /Times-Roman SF 75.4591 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 262 26.400 ] BO [(ClassMenu)] [0 0 0] 13.9999 /Times-Roman SF 62.9991 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 454 26.400 ] BO [(ClassMenu)] [0 0 0] 13.9999 /Times-Roman SF 62.9991 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 246 346.400 ] BO [(ClassVScrollbar)] [0 0 0] 13.9999 /Times-Roman SF 91.7686 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 246 506.400 ] BO [(ClassBaseWindow)] [0 0 0] 13.9999 /Times-Roman SF 105.768 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 246 602.400 ] BO [(ClassFramebuffer)] [0 0 0] 13.9999 /Times-Roman SF 100.308 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 246 698.400 ] BO [(ClassFramebuffer)] [0 0 0] 13.9999 /Times-Roman SF 100.308 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 454 346.400 ] BO [(ClassPanel)] [0 0 0] 13.9999 /Times-Roman SF 61.445 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 70 346.400 ] BO [(ClassCanvas)] [0 0 0] 13.9999 /Times-Roman SF 71.5528 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 294 640 ] BO 0 32 LN 1 [0 0 0] ST EO [1 0 0 1 53 28 ] BO 160 0 LN 3 [0 0 0] ST [0 0 0] 16 180 160 0 AR EO [1 0 0 1 249 64 ] BO 72 96 LN 3 [0 0 0] ST [0 0 0] 16 233.13 72 96 AR EO [1 0 0 1 345 224 ] BO 72 96 LN 3 [0 0 0] ST [0 0 0] 16 233.13 72 96 AR EO [1 0 0 1 441 384 ] BO -136 96 LN 3 [0 0 0] ST [0 0 0] 16 324.782 -136 96 AR EO [1 0 0 1 65 26.400 ] BO [(/QuitFromUser)] [0 0 0] 13.9999 /Helvetica-Bold SF 98.0126 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 0 18.400 ] BO [(\(sender\))] [0 0 0] 13.9999 /Helvetica-Oblique SF 52.1217 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 272 6.400 ] BO [(\(target\))] [0 0 0] 13.9999 /Helvetica-Oblique SF 45.1217 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 264 482.400 ] BO [(\(reciever\))] [0 0 0] 13.9999 /Helvetica-Oblique SF 59.1074 1 TS 5.59998 -15.9999 TL EO grestore @endspecial 346 1478 a Fn(Figure)h(8:)f(Sending)g(a)g(message)g(through)g(the)g(logical)g (container)g(hierarchy)0 1613 y Fg(2.3)50 b(Send)0 1700 y Fn(HyperNeWS)18 b(2.0)e(makes)h(use)f(of)h(the)g Fi(Send)h Fn(primitive.)26 b(This)16 b(primitive)f(is)i(used)f(for)h(communication)e(between)0 1756 y(UI)h(objects)e(and)i(for)f(communication)f(between)h(UI)h(objects)f (and)g(clients.)23 b(The)16 b(following)e(methods)g(are)i(added)f(to)0 1813 y Fi(ClassDraw)q(abl)q(e)g Fn(\(see)d(also)e(Appendix)h(B.6\):)68 1906 y Fh(\017)23 b Fi(/Send)111 b(\045)28 b(arglist)i(message)g(address)h (--)114 1963 y Fn(Send)14 b(a)g(message)g(to)g(an)g(instance.)20 b(The)14 b(address)g(is)f(either)i(an)f(instance,)h(an)f(object)g(name,)h(a)f (path)g(or)g Fi(null)p Fn(.)114 2019 y(The)d(arguments)g(must)f(be)h(in)g(an) h(array)g(so)f(that)g(they)g(can)h(be)f(discarded)h(if)f(the)g(message)g(is)g (not)g(delivered.)68 2113 y Fh(\017)23 b Fi(/SendSende)q(r)85 b(\045)28 b(--)g(instance)114 2170 y Fn(Return)11 b(the)h(object)f(that)f (initiated)h(the)g(current)h(message.)68 2263 y Fh(\017)23 b Fi(/SendTarge)q(t)85 b(\045)28 b(--)g(instance)114 2320 y Fn(Return)11 b(the)h(object)f(to)g(which)g(the)g(current)g(message)h(was)f (initially)f(send.)68 2414 y Fh(\017)23 b Fi(/SendRecie)q(ver)86 b(\045)28 b(--)g(instance)114 2470 y Fn(Return)11 b(the)h(object)f(that)f (received)j(the)e(current)g(message.)68 2564 y Fh(\017)23 b Fi(/SendMessa)q(ge)86 b(\045)27 b(--)i(name)114 2620 y Fn(Return)11 b(the)h(current)f(message)g(name.)952 2828 y(19)p eop %%Page: 20 20 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)68 195 y Fh(\017)23 b Fi(/SendArgs)85 b(\045)28 b(--)g(arglist)114 252 y Fn(Return)11 b(the)h(current)f(message)g(arguments.)0 339 y(The)e Fi(Send)i Fn(primitive)c(will)i(deliver)g(a)g(message)g(to)g(the)g(specified)f(target)i (object)e(only)h(if)g(the)g(object)f(exists.)j(If)e(the)g(target)0 395 y(object)i(exists)g(it)g(is)g(used)g(as)h(an)g(initial)e(delivery)h (target)h(\(see)g(Appendix)f(B.7\).)i(If)f(the)f(target)h(does)f(not)g(have)h (a)g(method)0 452 y(to)i(handle)f(the)h(message)g(then)g(the)g(message)g(is)f (passed)h(on)g(to)f(the)h(parent)h(of)f(the)g(target.)19 b(This)14 b(is)f(repeated)i(until)e(an)0 508 y(object)e(is)h(found)f(which)g(does)h (understand)f(the)g(message)h(otherwise)f(the)h(message)f(is)g(discarded)h (\(see)g(Figure)g(8\).)h(The)0 565 y(resulting)f(object)g(is)g(called)h(the)f Fm(receiver)p Fn(.)17 b(The)c(message)f(is)g(executed)h(in)f(the)h (receiver's)h(context)e(with)g(the)g(message)0 621 y(arguments)f(on)g(the)g (stack.)h(To)f(summarize,)g(the)g Fi(Send)i Fn(primitive)d(has)h(the)h (following)e(features:)68 708 y Fh(\017)23 b Fm(No)12 b(guaranteed)f (delivery)i Fn(When)f(the)g(address)g(of)h(the)f(target)g(is)g(not)f(known)h (or)g(when)g(no)g(parent)h(of)f(the)g(target)114 765 y(understands)e(the)h (message)h(then)f(it)f(is)h(discarded.)68 856 y Fh(\017)23 b Fm(No)12 b(return)f(value)i Fn(The)f Fi(Send)i Fn(primitive)c(cannot)i(be)h (used)e(to)h(obtain)g(a)g(return)g(value)g(from)g(an)h(object)e(because)114 912 y(the)g(message)g(may)g(not)g(be)g(delivered.)68 1003 y Fh(\017)23 b Fm(Robust)12 b Fn(The)h(caller)h(of)f Fi(Send)i Fn(will)d(not)g(be)i(affected)g(in)f(any)g(way)g(if)g(the)g(receiver)h(of)g (the)f(message)g(causes)g(an)114 1060 y(error.)68 1151 y Fh(\017)23 b Fm(Client)14 b(communication)g Fn(If)i(an)f(object)g(has)g(a)g(client)g (then)f Fi(Send)j Fn(can)f(pass)e(the)h(message)g(to)g(the)g(client.)22 b(See)114 1207 y(Section)11 b(2.4.)68 1299 y Fh(\017)23 b Fm(Error)9 b(handling)f Fn(Each)j(object)f(may)f(provide)h(an)g(error)h(handler)f(which) g(is)g(called)g(when)g(an)g(error)h(occurs)f(within)114 1355 y(the)h(context)g(of)g(a)h(message)f(\(see)h(Appendix)e(B.8\).)68 1446 y Fh(\017)23 b Fm(Logging)10 b Fn(If)i(required)g(the)f Fi(Send)i Fn(primitive)d(can)i(log)e(messages)h(in)g(a)h(message)f(log)g (\(see)h(Appendix)e(B.9\).)0 1533 y(The)h Fi(Send)i Fn(primitive)d(makes)h (the)g(implementation)e(of)j(reusable)f(objects)g(very)g(easy.)h(If)g(an)g (object)e(requires)i(external)0 1590 y(functionality)i(it)h(should)g(do)g(so) h(by)f(sending)g(a)h(message)g(to)f(itself.)24 b(The)16 b(message)f(is)h (passed)f(along)h(the)f(container)0 1646 y(hierarchy)c(until)f(some)g(object) g(is)g(found)h(that)f(knows)g(how)g(to)g(respond)h(to)f(the)g(message.)i (Take)f(for)g(example)f(a)h(``quit'')0 1703 y(button.)g(It)h(should)e(send)i (the)f(message)g Fi(/QuitFro)q(mUs)q(er)k Fn(to)c(itself.)h(The)g(message)f (is)h(intercepted)f(by)g(the)h(window)0 1759 y(container)j(which)f(will)g (close)h(and)g(quit.)22 b(The)15 b(quit)f(button)g(can)h(be)g(copied)g(and)g (pasted)f(into)g(another)h(environment)0 1816 y(where)d(it)f(remains)g (functional.)71 1872 y(The)h(default)g(behavior)f(of)i Fi(ClassContr)q(ol)i Fn(needs)e(to)e(be)h(modified)f(so)h(that)g(it)f(uses)h Fi(Send)p Fn(.)j(This)d(is)f(shown)g(in)0 1929 y(Appendix)g(B.10.)i(The)e(default)h (notifier)f(of)h(a)f(control)g(is)h(now)f Fi(/Action)p Fn(.)k(If)d(the)g (target)f(is)g Fi(null)i Fn(and)f(the)f(notifier)h(is)0 1985 y(a)g(non-executable)f(then)g(the)g(notifier)g(message)g(is)g Fi(Send)i Fn(to)e(the)g(control)g(itself.)0 2108 y Fg(2.4)50 b(Client)12 b(communication)0 2195 y Fn(A)g(mechanism)f(for)i(client)e (communication)g(will)g(be)h(added)g(to)g(the)g(already)g(exiting)f(CPS)j (and)e(Wire)g(interfaces.)j(The)0 2252 y(Cool)h(client)g(interface)i(will)d (mainly)h(rely)g(on)g(the)h(Wire)f(protocol.)27 b(To)16 b(establish)f (communication)g(with)h(the)g(UI)h(a)0 2308 y(client)c(program)h(opens)f(a)i (connection)e(to)g(an)h(UI)h(component.)j(It)c(may)f(communicate)g(with)g (the)h(UI)g(through)f(the)h(UI)0 2365 y(component.)d(The)g(connection's)g (execution)g(always)g(occurs)h(in)f(the)g(context)g(of)g(the)g(connected)h (UI)f(component.)71 2421 y(The)f(client)g(may)g(communicate)f(with)g(the)i (component)e(by)h(expressing)f(an)i(interest)f(in)f(handling)h(messages)f (which)0 2478 y(are)i(not)e(handled)h(by)g(the)g(component)f(itself.)i(The)f (Cool)g(client)f(interface)i(will)e(intercept)h(the)g(requested)g(messages)g (and)0 2534 y(execute)i(callbacks)g(in)f(the)h(client)f(as)h(required.)h (Figure)f(9)f(shows)g(how)g(this)g(can)h(be)g(done.)h(This)e(can)h(be)g (implemented)0 2591 y(by)j(modifying)f(the)h Fi(/deliverpa)q(ren)q(t)k Fn(method)14 b(\(see)i(Appendix)e(B.7\).)25 b(The)15 b(message)g (communication)e(to)i(the)0 2647 y(client)j(can)g(be)h(efficient)f(because)h (the)f(Wire)g(interface)h(can)g(be)f(used)g(to)g(allocate)g(usertokens)g(for) g(the)g(requested)0 2704 y(messages.)952 2828 y(20)p eop %%Page: 21 21 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)438 1988 y @beginspecial 0.400000 @hscale 0.400000 @vscale @setspecial%!PS-HyperNeWS drawing- %%Creator:arthur %%Title:HyperNeWS drawing. %%BoundingBox:0 0 678.72 784.576 %%TemplateBox:0 0 678.72 784.576 %%EndComments % "@(#)drawlib.ps 3.1 3/19/90 Arthur van Hoff (Turing Institute)"; % -- drawlib.ps -- Header file for PostScript drawings. /SC {dup type /arraytype eq {aload pop setrgbcolor} {setgray} ifelse} def /MX {1 0 0 1} def /CT {curveto} def /CP {closepath} def /LT {lineto} def /PT {moveto} def /PC {{lineto} stopped {moveto} if} def /LN {0 0 PT LT} def /LC {0 0 PC LT} def /FL {SC fill} def /ST {SC setlinewidth stroke} def /FS {gsave FL grestore ST} def /CM {matrix currentmatrix exch concat} def /SM {setmatrix} def /BO {gsave newpath concat} def /EO {grestore} def /SG {gsave SC eofill grestore ST} def /FG {SC eofill} def /AR { % c s a x y -- newpath matrix currentmatrix 5 1 roll newpath translate rotate 0 0 moveto 0 0 3 -1 roll -20 20 arc 0 0 lineto setmatrix FL } def /DA { % x y -- matrix currentmatrix 3 1 roll scale 0 1 1 -90 0 arc setmatrix } def /DR { % w h -- 0 0 moveto exch dup 0 lineto 1 index lineto 0 exch lineto closepath } def /DO { % w h -- matrix currentmatrix 3 1 roll scale 1 0.5 moveto 0.5 0.5 translate 0 0 0.5 0 360 arc closepath setmatrix } def /RR { % w h c -- 10 dict begin 2 index abs 2 index abs dup 2 index lt {exch pop} {pop} ifelse 2 div dup 2 index lt {exch pop} {pop} ifelse /c exch def /h exch def /w exch def c 0 moveto mark w 0 w h c arcto w h 0 h c arcto 0 h 0 0 c arcto 0 0 w 0 c arcto cleartomark closepath end } def /DP { % d1 d2 w h -- matrix currentmatrix 5 1 roll scale 0.5 0.5 moveto 0.5 0.5 0.5 5 -2 roll arc 0.5 0.5 lineto setmatrix } def /SF { % text col fontsize font -- text width findfont exch scalefont setfont SC 1 1 index {stringwidth pop abs 2 copy lt {exch} if pop} forall } def /TS { % width w h -- exch 2 index div exch scale } def /TL { % text w h lh -- 5 dict begin /h exch def 0 exch moveto pop {gsave show grestore 0 h rmoveto} forall end } def /TR { % text w h bh -- 5 dict begin /h exch def moveto { gsave dup stringwidth pop neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /TC { % text w h bh -- 5 dict begin /h exch def exch 2 div exch moveto { gsave dup stringwidth pop 2 div neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /IR { % w h DR gsave 1 setgray fill grestore 0 setgray stroke } def /IC { % str w h -- scale LoadImage imagecanvas } def /IM { % ... -- /pstr exch string def 0 exch translate scale {} settransfer 0 0 3 -1 roll 0 0 6 array astore {currentfile pstr readhexstring pop} image } def /EPSdict 10 dict begin /initmatrix { #Matrisk# setmatrix } def /initgraphics { systemdict /initgraphics get exec #Matrisk# setmatrix } def /showpage {} def currentdict end def /BEPS { save 5 1 roll EPSdict begin gsave scale translate matrix currentmatrix /#Matrisk# exch def systemdict /initgraphics get exec #Matrisk# setmatrix 500 dict begin } def /EEPS { end grestore end restore } def gsave initclip 1.010 1.066 scale [1 0 0 1 192 544 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 0 384 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 288 224 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 192 64 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 192 640 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 192 736 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 480 224 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 384 64 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 384 384 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 192 384 ] BO 160 -64 DR 1 [0 0 0] ST EO [1 0 0 1 272 576 ] BO 0 -32 LN 1 [0 0 0] ST EO [1 0 0 1 272 480 ] BO 0 -96 LN 1 [0 0 0] ST EO [1 0 0 1 304 480 ] BO 160 -96 LN 1 [0 0 0] ST EO [1 0 0 1 80 384 ] BO 160 96 LN 1 [0 0 0] ST EO [1 0 0 1 368 224 ] BO 64 96 LN 1 [0 0 0] ST EO [1 0 0 1 272 64 ] BO 64 96 LN 1 [0 0 0] ST EO [1 0 0 1 560 224 ] BO -64 96 LN 1 [0 0 0] ST EO [1 0 0 1 464 64 ] BO -64 96 LN 1 [0 0 0] ST EO [1 0 0 1 320 186.400 ] BO [(ClassMenuButtons)] [0 0 0] 13.9999 /Times-Roman SF 106.567 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 528 186.400 ] BO [(ClassSettings)] [0 0 0] 13.9999 /Times-Roman SF 75.4591 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 240 26.400 ] BO [(ClassMenu)] [0 0 0] 13.9999 /Times-Roman SF 62.9991 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 432 26.400 ] BO [(ClassMenu)] [0 0 0] 13.9999 /Times-Roman SF 62.9991 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 224 346.400 ] BO [(ClassVScrollbar)] [0 0 0] 13.9999 /Times-Roman SF 91.7686 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 224 506.400 ] BO [(ClassBaseWindow)] [0 0 0] 13.9999 /Times-Roman SF 105.768 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 224 602.400 ] BO [(ClassFramebuffer)] [0 0 0] 13.9999 /Times-Roman SF 100.308 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 224 698.400 ] BO [(ClassFramebuffer)] [0 0 0] 13.9999 /Times-Roman SF 100.308 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 432 346.400 ] BO [(ClassPanel)] [0 0 0] 13.9999 /Times-Roman SF 61.445 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 48 346.400 ] BO [(ClassCanvas)] [0 0 0] 13.9999 /Times-Roman SF 71.5528 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 272 640 ] BO 0 32 LN 1 [0 0 0] ST EO [1 0 0 1 31 28 ] BO 160 0 LN 3 [0 0 0] ST [0 0 0] 16 180 160 0 AR EO [1 0 0 1 227 64 ] BO 72 96 LN 3 [0 0 0] ST [0 0 0] 16 233.13 72 96 AR EO [1 0 0 1 323 224 ] BO 72 96 LN 3 [0 0 0] ST [0 0 0] 16 233.13 72 96 AR EO [1 0 0 1 419 384 ] BO -136 96 LN 3 [0 0 0] ST [0 0 0] 16 324.782 -136 96 AR EO [1 0 0 1 432 504 ] BO 90 0 LN 3 [0 0 0] ST [0 0 0] 16 180 90 0 AR EO [1 0 0 1 400 504 ] BO 24 16 LN 3 [0 0 0] ST EO [1 0 0 1 408 488 ] BO 24 16 LN 3 [0 0 0] ST EO [1 0 0 1 352 504 ] BO 48 0 LN 3 [0 0 0] ST EO [1 0 0 1 408 488 ] BO 16 32 LN 3 [0 0 0] ST EO [1 0 0 1 7 30.400 ] BO [(/SaveDrawing)] [0 0 0] 13.9999 /Helvetica-Bold SF 91.8107 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 391 530.400 ] BO [(/SaveDrawing)] [0 0 0] 13.9999 /Helvetica-Bold SF 91.8107 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 524 548 ] BO 148 -92 DO 1 [0 0 0] ST EO [1 0 0 1 562 480.400 ] BO [(Drawingtool)(client)] [0 0 0] 14 /Helvetica-Oblique SF 73.905 1 TS 23.5999 -16 TC EO grestore @endspecial 490 2086 a Fn(Figure)h(9:)f(A)g(message)g(intercepted)g(by)g(a)h(client)f (program)952 2828 y(21)p eop %%Page: 22 22 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)71 195 y Fn(It)20 b(must)g(remain)g(possible)f(to)h(use)h(the)f(standard)h(CPS)h(and)e(Wire)h (techniques)f(for)h(efficient)g(byte)f(encoded)0 252 y(communication.)10 b(Also)h(it)g(must)g(be)g(possible)g(to)g(have)h Fm(implementor)e Fn(clients)h(attached)h(to)f(objects)g(which)g(are)h(used)f(to)0 308 y(maintain)f(the)h(internal)g(data)h(of)f(the)h(object)f(\(for)g(example) h(Jot)e(objects\).)952 2828 y(22)p eop %%Page: 23 23 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)118 1054 y @beginspecial 0.600000 @hscale 0.600000 @vscale @setspecial%!PS-HyperNeWS drawing- %%Creator:arthur %%Title:HyperNeWS drawing. %%BoundingBox:0 0 711.04 383.76 %%TemplateBox:0 0 711.04 383.76 %%EndComments % "@(#)drawlib.ps 3.1 3/19/90 Arthur van Hoff (Turing Institute)"; % -- drawlib.ps -- Header file for PostScript drawings. /SC {dup type /arraytype eq {aload pop setrgbcolor} {setgray} ifelse} def /MX {1 0 0 1} def /CT {curveto} def /CP {closepath} def /LT {lineto} def /PT {moveto} def /PC {{lineto} stopped {moveto} if} def /LN {0 0 PT LT} def /LC {0 0 PC LT} def /FL {SC fill} def /ST {SC setlinewidth stroke} def /FS {gsave FL grestore ST} def /CM {matrix currentmatrix exch concat} def /SM {setmatrix} def /BO {gsave newpath concat} def /EO {grestore} def /SG {gsave SC eofill grestore ST} def /FG {SC eofill} def /AR { % c s a x y -- newpath matrix currentmatrix 5 1 roll newpath translate rotate 0 0 moveto 0 0 3 -1 roll -20 20 arc 0 0 lineto setmatrix FL } def /DA { % x y -- matrix currentmatrix 3 1 roll scale 0 1 1 -90 0 arc setmatrix } def /DR { % w h -- 0 0 moveto exch dup 0 lineto 1 index lineto 0 exch lineto closepath } def /DO { % w h -- matrix currentmatrix 3 1 roll scale 1 0.5 moveto 0.5 0.5 translate 0 0 0.5 0 360 arc closepath setmatrix } def /RR { % w h c -- 10 dict begin 2 index abs 2 index abs dup 2 index lt {exch pop} {pop} ifelse 2 div dup 2 index lt {exch pop} {pop} ifelse /c exch def /h exch def /w exch def c 0 moveto mark w 0 w h c arcto w h 0 h c arcto 0 h 0 0 c arcto 0 0 w 0 c arcto cleartomark closepath end } def /DP { % d1 d2 w h -- matrix currentmatrix 5 1 roll scale 0.5 0.5 moveto 0.5 0.5 0.5 5 -2 roll arc 0.5 0.5 lineto setmatrix } def /SF { % text col fontsize font -- text width findfont exch scalefont setfont SC 1 1 index {stringwidth pop abs 2 copy lt {exch} if pop} forall } def /TS { % width w h -- exch 2 index div exch scale } def /TL { % text w h lh -- 5 dict begin /h exch def 0 exch moveto pop {gsave show grestore 0 h rmoveto} forall end } def /TR { % text w h bh -- 5 dict begin /h exch def moveto { gsave dup stringwidth pop neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /TC { % text w h bh -- 5 dict begin /h exch def exch 2 div exch moveto { gsave dup stringwidth pop 2 div neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /IR { % w h DR gsave 1 setgray fill grestore 0 setgray stroke } def /IC { % str w h -- scale LoadImage imagecanvas } def /IM { % ... -- /pstr exch string def 0 exch translate scale {} settransfer 0 0 3 -1 roll 0 0 6 array astore {currentfile pstr readhexstring pop} image } def /EPSdict 10 dict begin /initmatrix { #Matrisk# setmatrix } def /initgraphics { systemdict /initgraphics get exec #Matrisk# setmatrix } def /showpage {} def currentdict end def /BEPS { save 5 1 roll EPSdict begin gsave scale translate matrix currentmatrix /#Matrisk# exch def systemdict /initgraphics get exec #Matrisk# setmatrix 500 dict begin } def /EEPS { end grestore end restore } def gsave initclip 1.010 1.066 scale [1 0 0 1 0 324 ] BO 356 -324 DR 1 [0 0 0] ST EO [1 0 0 1 8 294.400 ] BO [(Resource File Spaces)] [0 0 0] 13.9999 /Helvetica-Oblique SF 136.933 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 32 280 ] BO 284 -32 DR 1 [0 0 0] ST EO [1 0 0 1 32 224 ] BO 284 -32 DR 1 [0 0 0] ST EO [1 0 0 1 32 168 ] BO 284 -32 DR 1 [0 0 0] ST EO [1 0 0 1 420 72 ] BO 284 -32 DR 1 [0 0 0] ST EO [1 0 0 1 32 112 ] BO 284 -32 DR 1 [0 0 0] ST EO [1 0 0 1 32 56 ] BO 284 -32 DR 1 [0 0 0] ST EO [1 0 0 1 40 249.600 ] BO [($HOME/cool/rsrc)] [0 0 0] 17.9999 /Courier-Oblique SF 161.998 1 TS 6.39998 -19.9999 TL EO [1 0 0 1 40 193.600 ] BO [(~danny/cool/rsrc)] [0 0 0] 17.9999 /Courier-Oblique SF 172.797 1 TS 6.39998 -19.9999 TL EO [1 0 0 1 40 137.600 ] BO [()] [0 0 0] 17.9999 /Courier-Oblique SF 215.997 1 TS 6.39998 -19.9999 TL EO [1 0 0 1 428 41.600 ] BO [(/usr/local/drawtool/rsrc)] [0 0 0] 17.9999 /Courier-Oblique SF 259.196 1 TS 6.39998 -19.9999 TL EO [1 0 0 1 40 81.600 ] BO [($OPENWINHOME/img)] [0 0 0] 17.9999 /Courier-Oblique SF 172.797 1 TS 6.39998 -19.9999 TL EO [1 0 0 1 40 25.600 ] BO [($COOLHOME/rsrc)] [0 0 0] 17.9999 /Courier-Oblique SF 151.198 1 TS 6.39998 -19.9999 TL EO [1 0 0 1 492 196 ] BO 108 -84 DO 1 [0 0 0] ST EO [1 0 0 1 512 132.400 ] BO [(drawingtool)(client)] [0 0 0] 14 /Times-Roman SF 67.6615 1 TS 23.5999 -16 TC EO [1 0 0 1 548 112 ] BO 0 -40 LN 1 [0 0 0] ST [0 0 0] 12 -90 0 0 AR [0 0 0] 12 90 0 -40 AR EO [1 0 0 1 232 280 ] BO 0 60 LN 1 [0 0 0] ST [0 0 0] 12 90 0 0 AR EO [1 0 0 1 232 224 ] BO 0 24 LN 1 [0 0 0] ST [0 0 0] 12 90 0 0 AR EO [1 0 0 1 232 168 ] BO 0 24 LN 1 [0 0 0] ST [0 0 0] 12 90 0 0 AR EO [1 0 0 1 232 112 ] BO 0 24 LN 1 [0 0 0] ST [0 0 0] 12 90 0 0 AR EO [1 0 0 1 232 56 ] BO 0 24 LN 1 [0 0 0] ST [0 0 0] 12 90 0 0 AR EO [1 0 0 1 204 338.400 ] BO [(find resource)] [0 0 0] 13.9999 /Times-Roman SF 73.4709 1 TS 5.59998 -15.9999 TC EO [1 0 0 1 380 152 ] BO 24 16 LN 1 [0 0 0] ST EO [1 0 0 1 404 168 ] BO -4 -32 LN 1 [0 0 0] ST EO [1 0 0 1 400 136 ] BO 24 16 LN 1 [0 0 0] ST EO [1 0 0 1 376 156 ] BO 8 -8 DO 1 [0 0 0] ST EO [1 0 0 1 420 156 ] BO 8 -8 DO 1 [0 0 0] ST EO [1 0 0 1 380 152 ] BO -64 0 LN 1 [0 0 0] ST [0 0 0] 12 360 -64 0 AR EO [1 0 0 1 424 152 ] BO 68 0 LN 1 [0 0 0] ST [0 0 0] 12 180 68 0 AR EO grestore @endspecial 487 1152 a Fn(Figure)h(10:)f(Obtaining)f(a)i(resource)g(from)f(a)h(remote)f (client)0 1284 y Fl(3)58 b(Resources)0 1387 y Fn(Cool)16 b(will)g(have)g(to)g (access)h(files)f(to)g(load)g(and)g(save)g(resources)h(such)f(as)g(classes,)i (UI)f(components,)f(graphics)g(etc.)0 1443 y(File)g(access)h(is)f(very)g (awkward)h(in)f(NeWS)g(because)h(PostScript)f(programs)g(all)g(execute)h(in)e (the)h(server)h(file)f(space.)0 1500 y(Application)9 b(UIs)h(may)g(want)g(to) g(access)h(files)f(which)g(are)h(in)f(client)f(file)i(space.)g(For)g(this)e (purpose)h(a)h(resource)g(manager)0 1556 y(is)16 b(used.)26 b(The)16 b(resource)h(manager)g(is)e(used)h(to)g(located)g(resource)h(files.) 26 b(Location)16 b(of)g(files)g(is)g(done)g(by)g(searching)0 1613 y(several)c(file)f(spaces.)h(The)f(user)h(must)e(be)i(able)f(to)g (specify)g(in)g(which)g(order)h(the)f(file)h(spaces)f(are)h(searched.)71 1669 y(A)j(client)g(with)g(a)h(private)g(set)f(of)h(resources)g(may)f (register)h(with)f(the)g(resource)i(manager)f(which)f(resources)h(the)0 1726 y(client)g(can)h(provide.)26 b(When)17 b(the)f(resource)h(manager)g (requires)f(one)h(of)f(these)h(resources)g(it)e(will)h(ask)g(the)h(client)e (to)0 1782 y(provide)d(a)g(file)g(descriptor)g(from)g(which)g(the)g(resource) h(can)g(be)f(loaded)1165 1766 y Ff(5)1184 1782 y Fn(.)i(The)e(resource)h (manager)g(is)e(not)h(responsible)0 1839 y(for)g(the)f(loading)f(of)i(the)f (resource,)h(it)f(is)g(merely)g(there)h(to)f(bind)g(a)g(resource)h (identifier)f(to)g(a)h(file)f(descriptor.)71 1895 y(Appendix)d(B.11)i(shows)e (the)h(implementation)e(of)i(a)h(resource)g(manager)f(which)g(can)g(search)h (file)f(spaces)h(as)f(defined)0 1952 y(in)17 b(a)h(search)h(path.)30 b(It)18 b(cannot)f(yet)h(handle)f(client)g(file)h(spaces)g(as)g(discussed)e (above.)31 b(It)18 b(provides)f(the)g(following)0 2008 y(functionality:)68 2099 y Fh(\017)23 b Fi(resourcemg)q(r)30 b(\045)e(--)g(instance)114 2155 y Fn(Return)11 b(the)h(system)e(resource)i(manager.)68 2248 y Fh(\017)23 b Fi(/find)29 b(\045)f(name)h(--)f(location)j(file)e(true)g (|)e(name)i(false)114 2304 y Fn(A)11 b(method)g(of)h(the)g(resource)g (manager)g(which)f(is)h(used)f(to)g(find)h(a)g(resource)g(given)g(its)e (name.)j(If)g(the)e(resource)i(is)114 2361 y(found)c(it)g(returns)g(the)g (location)g(where)h(the)g(resource)g(was)g(found,)f(the)h(file)f(descriptor)g (from)h(which)f(the)g(resource)114 2417 y(can)i(be)h(read)g(and)f Fi(true)p Fn(.)j(If)e(the)f(resource)h(is)f(not)f(found)h(the)h(resource)g (name)f(and)g Fi(false)j Fn(is)d(returned.)0 2508 y(A)k(resource)h(can)g(be)g (anything)e(which)h(is)g(stored)g(in)g(a)h(file.)24 b(For)15 b(example)h(classes,)g(icons,)g(image)f(data,)i(postscript)0 2564 y(source.)h(The)13 b(resource)h(manager)f(must)g(be)g(extended)g(so)g (that)g(it)g(can)g(also)g(save)h(resources.)k(The)13 b(resource)h(manager)0 2621 y(needs)d(a)h(Cool)f(resource)h(browser)g(so)f(that)g(the)g(user)g (easily)g(and)h(specify)f(and)g(browse)h(the)f(resource)h(file)f(spaces.)p 0 2660 780 2 v 53 2688 a Fe(5)67 2704 y Fd(This)e(can)f(be)h(done)f(using)g (the)h(Wire)h(service.)952 2828 y Fn(23)p eop %%Page: 24 24 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)474 1443 y @beginspecial 0.600000 @hscale 0.600000 @vscale @setspecial%!PS-HyperNeWS drawing- %%Creator:arthur %%Title:HyperNeWS drawing. %%BoundingBox:0 0 422.918 549.629 %%TemplateBox:0 0 422.918 549.629 %%EndComments % "@(#)drawlib.ps 3.1 3/19/90 Arthur van Hoff (Turing Institute)"; % -- drawlib.ps -- Header file for PostScript drawings. /SC {dup type /arraytype eq {aload pop setrgbcolor} {setgray} ifelse} def /MX {1 0 0 1} def /CT {curveto} def /CP {closepath} def /LT {lineto} def /PT {moveto} def /PC {{lineto} stopped {moveto} if} def /LN {0 0 PT LT} def /LC {0 0 PC LT} def /FL {SC fill} def /ST {SC setlinewidth stroke} def /FS {gsave FL grestore ST} def /CM {matrix currentmatrix exch concat} def /SM {setmatrix} def /BO {gsave newpath concat} def /EO {grestore} def /SG {gsave SC eofill grestore ST} def /FG {SC eofill} def /AR { % c s a x y -- newpath matrix currentmatrix 5 1 roll newpath translate rotate 0 0 moveto 0 0 3 -1 roll -20 20 arc 0 0 lineto setmatrix FL } def /DA { % x y -- matrix currentmatrix 3 1 roll scale 0 1 1 -90 0 arc setmatrix } def /DR { % w h -- 0 0 moveto exch dup 0 lineto 1 index lineto 0 exch lineto closepath } def /DO { % w h -- matrix currentmatrix 3 1 roll scale 1 0.5 moveto 0.5 0.5 translate 0 0 0.5 0 360 arc closepath setmatrix } def /RR { % w h c -- 10 dict begin 2 index abs 2 index abs dup 2 index lt {exch pop} {pop} ifelse 2 div dup 2 index lt {exch pop} {pop} ifelse /c exch def /h exch def /w exch def c 0 moveto mark w 0 w h c arcto w h 0 h c arcto 0 h 0 0 c arcto 0 0 w 0 c arcto cleartomark closepath end } def /DP { % d1 d2 w h -- matrix currentmatrix 5 1 roll scale 0.5 0.5 moveto 0.5 0.5 0.5 5 -2 roll arc 0.5 0.5 lineto setmatrix } def /SF { % text col fontsize font -- text width findfont exch scalefont setfont SC 1 1 index {stringwidth pop abs 2 copy lt {exch} if pop} forall } def /TS { % width w h -- exch 2 index div exch scale } def /TL { % text w h lh -- 5 dict begin /h exch def 0 exch moveto pop {gsave show grestore 0 h rmoveto} forall end } def /TR { % text w h bh -- 5 dict begin /h exch def moveto { gsave dup stringwidth pop neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /TC { % text w h bh -- 5 dict begin /h exch def exch 2 div exch moveto { gsave dup stringwidth pop 2 div neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /IR { % w h DR gsave 1 setgray fill grestore 0 setgray stroke } def /IC { % str w h -- scale LoadImage imagecanvas } def /IM { % ... -- /pstr exch string def 0 exch translate scale {} settransfer 0 0 3 -1 roll 0 0 6 array astore {currentfile pstr readhexstring pop} image } def /EPSdict 10 dict begin /initmatrix { #Matrisk# setmatrix } def /initgraphics { systemdict /initgraphics get exec #Matrisk# setmatrix } def /showpage {} def currentdict end def /BEPS { save 5 1 roll EPSdict begin gsave scale translate matrix currentmatrix /#Matrisk# exch def systemdict /initgraphics get exec #Matrisk# setmatrix 500 dict begin } def /EEPS { end grestore end restore } def gsave initclip 1.010 1.066 scale [1 0 0 1 116 410 ] BO [(Class Manager)] [0 0 0] 13.9999 /Helvetica-Oblique SF 94.1353 1 TS 5.59998 -15.9999 TC EO [1 0 0 1 116 202 ] BO [(Resource Manager)] [0 0 0] 13.9999 /Helvetica-Oblique SF 119.041 1 TS 5.59998 -15.9999 TC EO [1 0 0 1 92 439.600 ] BO 176 -116 32 RR 1 [0 0 0] ST EO [1 0 0 1 92 231.600 ] BO 176 -116 32 RR 1 [0 0 0] ST EO [1 0 0 1 160 515.600 ] BO 0 -76 LN 1 [0 0 0] ST [0 0 0] 12 90 0 -76 AR EO [1 0 0 1 196 515.600 ] BO 0 -76 LN 1 [0 0 0] ST [0 0 0] 12 -90 0 0 AR EO [1 0 0 1 44 476 ] BO [(find)(/SBDemoCanvas)] [0 0 0] 14 /Helvetica SF 107.365 1 TS 23.5999 -16 TR EO [1 0 0 1 208 476 ] BO [(class)(SBDemoCanvas)] [0 0 0] 14 /Helvetica SF 103.473 1 TS 23.5999 -16 TL EO [1 0 0 1 164 323.600 ] BO 0 -92 LN 1 [0 0 0] ST [0 0 0] 12 90 0 -92 AR EO [1 0 0 1 0 264 ] BO [(find resouce file)(SBDemoCanvas.class.ps)] [0 0 0] 14 /Helvetica SF 157.933 1 TS 23.5999 -16 TR EO [1 0 0 1 128 0 ] BO [(File system and)(client connections)] [0 0 0] 14 /Helvetica SF 111.271 1 TS 23.5999 -16 TC EO [1 0 0 1 204 264 ] BO [(resource file descriptor)(/usr/cool/SBDemoCanvas.class.ps)] [0 0 0] 14 /Helvetica SF 214.731 1 TS 23.5999 -16 TL EO [1 0 0 1 196 231.600 ] BO 0 92 LN 1 [0 0 0] ST [0 0 0] 12 270 0 92 AR EO [1 0 0 1 164 115.600 ] BO 0 -76 LN 1 [0 0 0] ST [0 0 0] 12 90 0 -76 AR EO [1 0 0 1 196 115.600 ] BO 0 -76 LN 1 [0 0 0] ST [0 0 0] 12 -90 0 0 AR EO [1 0 0 1 184 403.600 ] BO 64 -64 DO 1 [0 0 0] ST EO [1 0 0 1 184 195.600 ] BO 64 -64 DO 1 [0 0 0] ST EO [1 0 0 1 200 352 ] BO [(class)(pool)] [0 0 0] 14 /Helvetica-Oblique SF 31.8918 1 TS 23.5999 -16 TC EO [1 0 0 1 196 148 ] BO [(file)(spaces)] [0 0 0] 14 /Helvetica-Oblique SF 44.352 1 TS 23.5999 -16 TC EO grestore @endspecial 718 1541 a Fn(Figure)h(11:)f(A)g(class)g(manager)0 1674 y Fl(4)58 b(Classes)0 1778 y Fn(In)10 b(the)g(following)f(sections)h(implementation)e (of)i Fm(resource)g Fn(classes)g(and)h Fm(script)e Fn(classes)h(is)g (discussed.)g(Note)g(that)g(these)0 1834 y(classes)15 b(are)i(ordinary)e(TNT) g(classes)h(with)e(some)h(added)h(flavor.)24 b(Both)16 b(types)f(of)g(class)h (are)g(automatically)e(deleted)0 1891 y(when)d(they)g(are)i(no)e(longer)g (used.)g(This)g(is)g(achieved)g(using)g(the)g Fi(ObsoleteS)q(erv)q(ic)q(e)j Fn(\(see)e(Appendix)f(B.12\).)0 2015 y Fg(4.1)50 b(Resource)13 b(classes)0 2102 y Fn(A)k(resource)h(class)f(is)f(a)i(class)f(which)f(is)h (loaded)g(when)g(required)g(and)g(deleted)g(when)g(it)g(becomes)g(obsolete.) 28 b(The)0 2159 y(concept)11 b(is)f(similar)g(to)g(the)h Fm(plug-in)f Fn(classes)h(that)f(were)i(used)e(in)h(HyperNeWS)h(2.0.)f(The)g(class)g(is)f (stored)h(in)f(a)h(resource)0 2215 y(file)f(which)g(is)g(accessed)h(using)e (the)h(resource)h(manager)g(\(see)g(Section)f(3\).)h(The)g(resource)g(name)f (of)g(the)g(class)g(is)g(derived)0 2272 y(from)h(the)g(classname)g(and)g(has) h(the)f(form)g(``)p Fm(classname.class.ps)p Fn('')g(\(see)h(Figure)f(11\).)h (If)g(the)f(class)g(is)g(not)f(found)h(by)g(the)0 2328 y(resource)h(manager)g (then)f(the)g Fi(systemdic)q(t)j Fn(is)d(checked)h(since)f(the)h(requested)f (class)g(may)g(be)h(a)g(TNT)f(class.)71 2385 y(The)h(resource)h(classes)g (are)g(loaded)f(by)h(a)f(class)h(manager)g(which)f(is)g(called)g Fi(classmgr)q Fn(.)18 b(It)12 b(also)g(takes)h(care)h(that)0 2441 y(the)g(classes)g(are)h(unloaded)e(when)h(they)g(are)h(no)e(longer)h (required.)20 b(The)14 b(class)g(manager)g(understands)g(the)f(following)0 2498 y(method:)d(\(see)i(Appendix)f(B.13\):)68 2591 y Fh(\017)23 b Fi(/find)111 b(\045)28 b(classname)j(--)d(class|nul)q(l)114 2647 y Fn(Find)11 b(a)g(class)h(using)e(the)h(resource)h(manager.)g(If)g(the) f(class)h(is)f(not)f(already)i(loaded)f(an)h(attempt)e(will)h(be)g(made)g(to) 114 2704 y(load)g(it)f(from)i(the)f(file)g Fm(classname.class.ps)p Fn(.)g Fi(null)i Fn(is)e(returned)g(when)h(the)f(class)g(is)g(not)g(found.) 952 2828 y(24)p eop %%Page: 25 25 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fn(A)g(resource)h(class)g (file)f(should)f(contain)h(the)g(following:)0 289 y Fi([supercla)q(ssn)q(am)q (es)31 b(....)e(])f(instanceva)q(rs)j(classbegin)0 345 y(....)0 402 y(classend)0 496 y Fn(The)15 b(file)f(must)g(contain)g(an)h(ordinary)f (TNT)h(class)f(definition)f(except)i(that)f(the)h(class)f(is)h(left)f(on)g (the)h(operand)g(stack.)0 552 y(Also)c(the)h(superclasses)g(are)h(not)f (directly)f(referenced,)k(instead)c(their)h(names)g(are)h(given)e(so)h(that)g (they)f(may)h(be)g(loaded)0 609 y(using)e(the)i(class)f(manager.)h(Below)f (is)g(an)h(example)f(of)g(a)h(trivial)f(resource)h(class)f(with)f(one)i (method)e Fi(Hello)p Fn(.)0 702 y Fi(/ClassObj)q(ect)31 b([])d(classbeg)q(in) 0 759 y(/Hello)i({)e(\045)f(--)110 815 y(console)j(\(Hello)g(world\\n\))g (fprintf)0 872 y(})e(def)0 928 y(classend)0 1022 y Fn(In)11 b(the)g(following)f(example)h(the)g(above)g(class)g(is)g(loaded)g(from)g(the) g(file)g(``hello.class.ps'')h(using)e(the)h Fi(/find)i Fn(method)0 1078 y(of)g(the)g(class)g(manager.)18 b(Assuming)11 b(that)i(the)g(resource)h (manager)g(locates)f(the)g(class)g(an)g(instance)g(is)g(created)h(and)f(the)0 1135 y Fi(/Hello)h Fn(method)c(is)h(called.)0 1229 y Fi(/hello)30 b(/find)f(classmgr)i(send)0 1285 y(/new)e(exch)g(send)0 1342 y(/hello)h(exch)f(send)0 1504 y Fg(4.2)50 b(Script)12 b(classes)0 1591 y Fn(In)e(an)f(interactive)h(environment)e(is)h(it)g(required)h(that)f (the)g(user)h(can)g(make)g(interactive)f(changes)h(to)f(the)g(UI)h (components.)0 1647 y(This)g(direct)h(method)f(of)h(programming)f(UIs)h(is)f (called)h(scripting)f(and)h(is)f(implemented)g(in)g(Cool)h(using)f Fm(script)g Fn(classes.)0 1704 y(This)17 b(concept)g(is)g(similar)g(to)g(the) g Fm(shared)g Fn(classes)h(used)f(in)g(HyperNeWS)i(2.0.)30 b(A)18 b(script)f(class)g(is)g(a)h(class)f(which)0 1760 y(contains)10 b(its)h(own)f(source)i(text)e(so)h(that)g(the)f(user)i(may)e(edit)h(it.)g (They)g(are)h(called)f(script)g(classes)g(because)g(these)g(classes)0 1817 y(contain)h(a)g(script)g(which)g(is)g(shared)g(by)g(as)h(many)e(UI)i (components)e(as)h(possible.)i(The)e(following)f(methods)g(are)i(added)0 1873 y(to)e Fi(ClassObje)q(ct)k Fn(to)c(implement)e(script)i(classes)h(\(see) f(also)g(Appendix)g(B.14\):)68 1967 y Fh(\017)23 b Fi(/scriptcla)q(ss)58 b(\045)28 b(--)g(class|nul)q(l)114 2023 y Fn(Return)11 b(the)h(script)e (class)i(of)f(an)h(instance)f(or)g(return)h(null)e(of)h(the)h(instance)f (does)g(not)g(have)g(a)h(script)f(class.)68 2117 y Fh(\017)23 b Fi(/getscript)113 b(\045)28 b(--)g(script|nu)q(ll)114 2174 y Fn(Return)11 b(the)h(script)e(of)i(an)f(instance)g(or)h(return)f Fi(null)i Fn(if)f(it)e(has)i(none.)68 2267 y Fh(\017)23 b Fi(/setscript)113 b(\045)28 b(script)i(--)114 2324 y Fn(Set)12 b(the)f(script)g(and)h(change)g (the)g(script)f(class)g(of)h(an)g(instance.)h(This)d(means)i(that)f(the)h Fi(/ParentDic)q(tAr)q(ra)q(y)114 2380 y Fn(of)f(the)g(instance)g(is)g (changed.)0 2474 y(To)19 b(demonstrate)f(that)h(script)g(classes)g(can)h(be)f (applied)g(to)f(any)i(TNT)f(class,)i(the)e Fi(/sillyfoo)q(te)q(r)j Fn(method)c(in)0 2531 y(the)c Fi(/demo)j Fn(method)d(of)g Fi(ClassButt)q(on)q (s)k Fn(is)c(replaced)h(by)f(a)h(script.)21 b(Note)14 b(that)g(the)h Fi(/sillyfoot)q(er)j Fn(method)0 2587 y(must)g(be)i Fi(undef)p Fn(ed)i(from)d(the)h(window)e(instance.)37 b(The)19 b(script)g(class)h(is)f (installed)f(below)h(the)h(instance)f(in)g(the)0 2643 y Fi(ParentDic)q(tAr)q (ra)q(y)p Fn(,)c(methods)10 b(which)h(are)i(installed)d(in)h(the)h(instance)f (therefore)h(have)g(priority)e(over)i(methods)e(in)0 2700 y(the)h(script)g (class.)952 2828 y(25)p eop %%Page: 26 26 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)528 1145 y @beginspecial 0.500000 @hscale 0.500000 @vscale @setspecial%!PS-HyperNeWS drawing- %%Creator:arthur %%Title:HyperNeWS drawing. %%BoundingBox:0 0 455.311 507.416 %%TemplateBox:0 0 455.311 507.416 %%EndComments % "@(#)drawlib.ps 3.1 3/19/90 Arthur van Hoff (Turing Institute)"; % -- drawlib.ps -- Header file for PostScript drawings. /SC {dup type /arraytype eq {aload pop setrgbcolor} {setgray} ifelse} def /MX {1 0 0 1} def /CT {curveto} def /CP {closepath} def /LT {lineto} def /PT {moveto} def /PC {{lineto} stopped {moveto} if} def /LN {0 0 PT LT} def /LC {0 0 PC LT} def /FL {SC fill} def /ST {SC setlinewidth stroke} def /FS {gsave FL grestore ST} def /CM {matrix currentmatrix exch concat} def /SM {setmatrix} def /BO {gsave newpath concat} def /EO {grestore} def /SG {gsave SC eofill grestore ST} def /FG {SC eofill} def /AR { % c s a x y -- newpath matrix currentmatrix 5 1 roll newpath translate rotate 0 0 moveto 0 0 3 -1 roll -20 20 arc 0 0 lineto setmatrix FL } def /DA { % x y -- matrix currentmatrix 3 1 roll scale 0 1 1 -90 0 arc setmatrix } def /DR { % w h -- 0 0 moveto exch dup 0 lineto 1 index lineto 0 exch lineto closepath } def /DO { % w h -- matrix currentmatrix 3 1 roll scale 1 0.5 moveto 0.5 0.5 translate 0 0 0.5 0 360 arc closepath setmatrix } def /RR { % w h c -- 10 dict begin 2 index abs 2 index abs dup 2 index lt {exch pop} {pop} ifelse 2 div dup 2 index lt {exch pop} {pop} ifelse /c exch def /h exch def /w exch def c 0 moveto mark w 0 w h c arcto w h 0 h c arcto 0 h 0 0 c arcto 0 0 w 0 c arcto cleartomark closepath end } def /DP { % d1 d2 w h -- matrix currentmatrix 5 1 roll scale 0.5 0.5 moveto 0.5 0.5 0.5 5 -2 roll arc 0.5 0.5 lineto setmatrix } def /SF { % text col fontsize font -- text width findfont exch scalefont setfont SC 1 1 index {stringwidth pop abs 2 copy lt {exch} if pop} forall } def /TS { % width w h -- exch 2 index div exch scale } def /TL { % text w h lh -- 5 dict begin /h exch def 0 exch moveto pop {gsave show grestore 0 h rmoveto} forall end } def /TR { % text w h bh -- 5 dict begin /h exch def moveto { gsave dup stringwidth pop neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /TC { % text w h bh -- 5 dict begin /h exch def exch 2 div exch moveto { gsave dup stringwidth pop 2 div neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /IR { % w h DR gsave 1 setgray fill grestore 0 setgray stroke } def /IC { % str w h -- scale LoadImage imagecanvas } def /IM { % ... -- /pstr exch string def 0 exch translate scale {} settransfer 0 0 3 -1 roll 0 0 6 array astore {currentfile pstr readhexstring pop} image } def /EPSdict 10 dict begin /initmatrix { #Matrisk# setmatrix } def /initgraphics { systemdict /initgraphics get exec #Matrisk# setmatrix } def /showpage {} def currentdict end def /BEPS { save 5 1 roll EPSdict begin gsave scale translate matrix currentmatrix /#Matrisk# exch def systemdict /initgraphics get exec #Matrisk# setmatrix 500 dict begin } def /EEPS { end grestore end restore } def gsave initclip 1.010 1.066 scale [1 0 0 1 178.803 192.000 ] BO 148 -36 DR 1 [0 0 0] ST EO [1 0 0 1 258.803 324.000 ] BO 192 -72 DR 1 [0 0 0] ST EO [1 0 0 1 38.803 324.000 ] BO 192 -72 DR 1 [0 0 0] ST EO [1 0 0 1 178.803 156.000 ] BO 148 -36 DR 1 [0 0 0] ST EO [1 0 0 1 178.803 120.000 ] BO 148 -36 DR 1 [0 0 0] ST EO [1 0 0 1 178.803 84.000 ] BO 148 -36 DR 1 [0 0 0] ST EO [1 0 0 1 178.803 48.000 ] BO 148 -36 DR 1 [0 0 0] ST EO [1 0 0 1 190.803 0 ] BO [(ClassButtons)()(ClassItemGroup)()(ClassRegion)()(ClassDrawable)()(ClassObject)] [0 0 0] 16 /Helvetica-Bold SF 123.583 1 TS 166 -18 TC EO [1 0 0 1 266.803 292 ] BO [(ClassButtons-script\(2\))] [0 0 0] 15.9999 /Helvetica-Bold SF 171.566 1 TS 5.99998 -17.9999 TC EO [1 0 0 1 46.803 292 ] BO [(ClassButtons-script\(1\))] [0 0 0] 15.9999 /Helvetica-Bold SF 171.566 1 TS 5.99998 -17.9999 TC EO [1 0 0 1 266.803 278.400 ] BO [(script class)] [0 0 0] 13.9999 /Helvetica-Oblique SF 69.2292 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 46.803 278.400 ] BO [(script class)] [0 0 0] 13.9999 /Helvetica-Oblique SF 69.2292 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 266.803 258.400 ] BO [(/action {...beep} def)] [0 0 0] 13.9999 /Helvetica SF 120.652 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 46.803 258.400 ] BO [(/path {...rectpath} def)] [0 0 0] 13.9999 /Helvetica SF 129.99 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 182.803 252.000 ] BO 36 -60 LN 1 [0 0 0] ST [0 0 0] 12 120.964 36 -60 AR EO [1 0 0 1 306.803 252.000 ] BO -32 -60 LN 1 [0 0 0] ST [0 0 0] 12 61.9275 -32 -60 AR EO [1 0 0 1 38.803 456 ] BO 88 -28 20 RR 1 [0 0 0] ST EO [1 0 0 1 142.803 456 ] BO 88 -28 20 RR 1 [0 0 0] ST EO [1 0 0 1 258.803 456 ] BO 88 -28 20 RR 1 [0 0 0] ST EO [1 0 0 1 362.803 456 ] BO 88 -28 20 RR 1 [0 0 0] ST EO [1 0 0 1 46.803 430.400 ] BO [(Button \(@1\))] [0 0 0] 13.9999 /Times-Roman SF 70.8392 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 270.803 430.400 ] BO [(Button \(@3\))] [0 0 0] 13.9999 /Times-Roman SF 70.8392 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 150.803 430.400 ] BO [(Button \(@2\))] [0 0 0] 13.9999 /Times-Roman SF 70.8392 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 374.803 430.400 ] BO [(Button \(@4\))] [0 0 0] 13.9999 /Times-Roman SF 70.8392 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 82.803 428.000 ] BO 68 -104 LN 1 [0 0 0] ST [0 0 0] 12 123.179 68 -104 AR EO [1 0 0 1 302.803 428.000 ] BO 16 -104 LN 1 [0 0 0] ST [0 0 0] 12 98.7462 16 -104 AR EO [1 0 0 1 186.803 428.000 ] BO -20 -104 LN 1 [0 0 0] ST [0 0 0] 12 79.1145 -20 -104 AR EO [1 0 0 1 402.803 428.000 ] BO -60 -104 LN 1 [0 0 0] ST [0 0 0] 12 60.0183 -60 -104 AR EO [1 0 0 1 18.803 316 ] BO 0 -296 LN 1 [0 0 0] ST EO [0 1 -1 0 21.600 115.603 ] BO [(ParentDictArray)] [0 0 0] 13.9999 /Helvetica-Oblique SF 98.797 1 TS 5.59998 -15.9999 TL EO [0 1 -1 0 21.600 383.603 ] BO [(Instance)] [0 0 0] 13.9999 /Helvetica-Oblique SF 52.92 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 26.803 324 ] BO -8 -8 DA 1 [0 0 0] ST EO [1 0 0 1 26.803 476 ] BO -8 -8 DA 1 [0 0 0] ST EO [1 0 0 1 26.803 12 ] BO -8 8 DA 1 [0 0 0] ST EO [1 0 0 1 26.803 336 ] BO -8 8 DA 1 [0 0 0] ST EO [1 0 0 1 18.803 344 ] BO 0 124 LN 1 [0 0 0] ST EO grestore @endspecial 608 1243 a Fn(Figure)g(12:)g(An)g(example)h(of)f(script)g(classes)0 1378 y Fi(/demo)29 b(ClassBut)q(ton)q(s)i(send)0 1434 y(1)d(index)h (/sillyfoo)q(te)q(r)h(undef)0 1491 y(\(/sillyfo)q(ote)q(r)h({)c(\045)h(index) i(buttons)g(=>)e(-)137 1547 y(/item)h(exch)g(send)137 1603 y(\(The)g(\045)f(is)g(extremely)j(intrestin)q(g..)q(.\))g(sprintf)f(\(\))137 1660 y(/setfoote)q(r)g(self)f(send)0 1716 y(})f(def\))h(/setscript)i(3)d (index)h(send)952 2828 y Fn(26)p eop %%Page: 27 27 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)368 317 y @beginspecial 0.700000 @hscale 0.700000 @vscale @setspecial%!PS-HyperNeWS drawing- %%Creator:arthur %%Title:HyperNeWS drawing. %%BoundingBox:0 0 436.32 59.696 %%TemplateBox:0 0 436.32 59.696 %%EndComments % "@(#)drawlib.ps 3.1 3/19/90 Arthur van Hoff (Turing Institute)"; % -- drawlib.ps -- Header file for PostScript drawings. /SC {dup type /arraytype eq {aload pop setrgbcolor} {setgray} ifelse} def /MX {1 0 0 1} def /CT {curveto} def /CP {closepath} def /LT {lineto} def /PT {moveto} def /PC {{lineto} stopped {moveto} if} def /LN {0 0 PT LT} def /LC {0 0 PC LT} def /FL {SC fill} def /ST {SC setlinewidth stroke} def /FS {gsave FL grestore ST} def /CM {matrix currentmatrix exch concat} def /SM {setmatrix} def /BO {gsave newpath concat} def /EO {grestore} def /SG {gsave SC eofill grestore ST} def /FG {SC eofill} def /AR { % c s a x y -- newpath matrix currentmatrix 5 1 roll newpath translate rotate 0 0 moveto 0 0 3 -1 roll -20 20 arc 0 0 lineto setmatrix FL } def /DA { % x y -- matrix currentmatrix 3 1 roll scale 0 1 1 -90 0 arc setmatrix } def /DR { % w h -- 0 0 moveto exch dup 0 lineto 1 index lineto 0 exch lineto closepath } def /DO { % w h -- matrix currentmatrix 3 1 roll scale 1 0.5 moveto 0.5 0.5 translate 0 0 0.5 0 360 arc closepath setmatrix } def /RR { % w h c -- 10 dict begin 2 index abs 2 index abs dup 2 index lt {exch pop} {pop} ifelse 2 div dup 2 index lt {exch pop} {pop} ifelse /c exch def /h exch def /w exch def c 0 moveto mark w 0 w h c arcto w h 0 h c arcto 0 h 0 0 c arcto 0 0 w 0 c arcto cleartomark closepath end } def /DP { % d1 d2 w h -- matrix currentmatrix 5 1 roll scale 0.5 0.5 moveto 0.5 0.5 0.5 5 -2 roll arc 0.5 0.5 lineto setmatrix } def /SF { % text col fontsize font -- text width findfont exch scalefont setfont SC 1 1 index {stringwidth pop abs 2 copy lt {exch} if pop} forall } def /TS { % width w h -- exch 2 index div exch scale } def /TL { % text w h lh -- 5 dict begin /h exch def 0 exch moveto pop {gsave show grestore 0 h rmoveto} forall end } def /TR { % text w h bh -- 5 dict begin /h exch def moveto { gsave dup stringwidth pop neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /TC { % text w h bh -- 5 dict begin /h exch def exch 2 div exch moveto { gsave dup stringwidth pop 2 div neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /IR { % w h DR gsave 1 setgray fill grestore 0 setgray stroke } def /IC { % str w h -- scale LoadImage imagecanvas } def /IM { % ... -- /pstr exch string def 0 exch translate scale {} settransfer 0 0 3 -1 roll 0 0 6 array astore {currentfile pstr readhexstring pop} image } def /EPSdict 10 dict begin /initmatrix { #Matrisk# setmatrix } def /initgraphics { systemdict /initgraphics get exec #Matrisk# setmatrix } def /showpage {} def currentdict end def /BEPS { save 5 1 roll EPSdict begin gsave scale translate matrix currentmatrix /#Matrisk# exch def systemdict /initgraphics get exec #Matrisk# setmatrix 500 dict begin } def /EEPS { end grestore end restore } def gsave initclip 1.010 1.066 scale [1 0 0 1 156 56 ] BO 120 -56 DR 1 [0 0 0] [1 1 1] FS EO [1 0 0 1 180 18.400 ] BO [(ALIVE)] [0 0 0] 23.9999 /Helvetica SF 68.0394 1 TS 7.59998 -25.9999 TL EO [1 0 0 1 0 28 ] BO 156 0 LN 1 [0 0 0] ST [0 0 0] 12 180 156 0 AR EO [1 0 0 1 276 28 ] BO 156 0 LN 1 [0 0 0] ST [0 0 0] 12 180 156 0 AR EO [1 0 0 1 40 40 ] BO 64 -24 32 RR 1 [0 0 0] [1 1 1] FS EO [1 0 0 1 316 40 ] BO 64 -24 32 RR 1 [0 0 0] [1 1 1] FS EO [1 0 0 1 56 18.400 ] BO [(/new)] [0 0 0] 13.9999 /Helvetica SF 29.5678 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 324 18.400 ] BO [(/destroy)] [0 0 0] 13.9999 /Helvetica SF 49.7979 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 180 4.800 ] BO [(TNT instance)] [0 0 0] 12 /Helvetica SF 71.3514 1 TS 5.2 -14 TL EO grestore @endspecial 661 415 a Fn(Figure)h(13:)f(TNT)g(component)f(states)275 1643 y @beginspecial 0.700000 @hscale 0.700000 @vscale @setspecial%!PS-HyperNeWS drawing- %%Creator:arthur %%Title:HyperNeWS drawing. %%BoundingBox:0 0 500.96 427.039 %%TemplateBox:0 0 500.96 427.039 %%EndComments % "@(#)drawlib.ps 3.1 3/19/90 Arthur van Hoff (Turing Institute)"; % -- drawlib.ps -- Header file for PostScript drawings. /SC {dup type /arraytype eq {aload pop setrgbcolor} {setgray} ifelse} def /MX {1 0 0 1} def /CT {curveto} def /CP {closepath} def /LT {lineto} def /PT {moveto} def /PC {{lineto} stopped {moveto} if} def /LN {0 0 PT LT} def /LC {0 0 PC LT} def /FL {SC fill} def /ST {SC setlinewidth stroke} def /FS {gsave FL grestore ST} def /CM {matrix currentmatrix exch concat} def /SM {setmatrix} def /BO {gsave newpath concat} def /EO {grestore} def /SG {gsave SC eofill grestore ST} def /FG {SC eofill} def /AR { % c s a x y -- newpath matrix currentmatrix 5 1 roll newpath translate rotate 0 0 moveto 0 0 3 -1 roll -20 20 arc 0 0 lineto setmatrix FL } def /DA { % x y -- matrix currentmatrix 3 1 roll scale 0 1 1 -90 0 arc setmatrix } def /DR { % w h -- 0 0 moveto exch dup 0 lineto 1 index lineto 0 exch lineto closepath } def /DO { % w h -- matrix currentmatrix 3 1 roll scale 1 0.5 moveto 0.5 0.5 translate 0 0 0.5 0 360 arc closepath setmatrix } def /RR { % w h c -- 10 dict begin 2 index abs 2 index abs dup 2 index lt {exch pop} {pop} ifelse 2 div dup 2 index lt {exch pop} {pop} ifelse /c exch def /h exch def /w exch def c 0 moveto mark w 0 w h c arcto w h 0 h c arcto 0 h 0 0 c arcto 0 0 w 0 c arcto cleartomark closepath end } def /DP { % d1 d2 w h -- matrix currentmatrix 5 1 roll scale 0.5 0.5 moveto 0.5 0.5 0.5 5 -2 roll arc 0.5 0.5 lineto setmatrix } def /SF { % text col fontsize font -- text width findfont exch scalefont setfont SC 1 1 index {stringwidth pop abs 2 copy lt {exch} if pop} forall } def /TS { % width w h -- exch 2 index div exch scale } def /TL { % text w h lh -- 5 dict begin /h exch def 0 exch moveto pop {gsave show grestore 0 h rmoveto} forall end } def /TR { % text w h bh -- 5 dict begin /h exch def moveto { gsave dup stringwidth pop neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /TC { % text w h bh -- 5 dict begin /h exch def exch 2 div exch moveto { gsave dup stringwidth pop 2 div neg 0 rmoveto show grestore 0 h rmoveto} forall end } def /IR { % w h DR gsave 1 setgray fill grestore 0 setgray stroke } def /IC { % str w h -- scale LoadImage imagecanvas } def /IM { % ... -- /pstr exch string def 0 exch translate scale {} settransfer 0 0 3 -1 roll 0 0 6 array astore {currentfile pstr readhexstring pop} image } def /EPSdict 10 dict begin /initmatrix { #Matrisk# setmatrix } def /initgraphics { systemdict /initgraphics get exec #Matrisk# setmatrix } def /showpage {} def currentdict end def /BEPS { save 5 1 roll EPSdict begin gsave scale translate matrix currentmatrix /#Matrisk# exch def systemdict /initgraphics get exec #Matrisk# setmatrix 500 dict begin } def /EEPS { end grestore end restore } def gsave initclip 1.010 1.066 scale [1 0 0 1 420 157.600 ] BO 76 -80 DO 1 [0 0 0] ST EO [1 0 0 1 0 113.600 ] BO 120 -56 DR 1 [0 0 0] [1 1 1] FS EO [1 0 0 1 340 109.600 ] BO 120 -56 DR 1 [0 0 0] [1 1 1] FS EO [1 0 0 1 172 369.600 ] BO 120 -56 DR 1 [0 0 0] [1 1 1] FS EO [1 0 0 1 196 332 ] BO [(ALIVE)] [0 0 0] 23.9999 /Helvetica SF 68.0394 1 TS 7.59998 -25.9999 TL EO [1 0 0 1 368 72 ] BO [(DATA)] [0 0 0] 23.9999 /Helvetica SF 64.007 1 TS 7.59998 -25.9999 TL EO [1 0 0 1 32 76 ] BO [(FILE)] [0 0 0] 23.9999 /Helvetica SF 50.6876 1 TS 7.59998 -25.9999 TL EO [1 0 0 1 192 313.600 ] BO -136 -200 LN 1 [0 0 0] ST [0 0 0] 12 55.7843 -136 -200 AR EO [1 0 0 1 340 100 ] BO -220 0 LN 1 [0 0 0] ST [0 0 0] 12 360 -220 0 AR EO [1 0 0 1 16 325.600 ] BO 156 0 LN 1 [0 0 0] ST [0 0 0] 12 180 156 0 AR EO [1 0 0 1 292 341.600 ] BO 156 0 LN 1 [0 0 0] ST [0 0 0] 12 180 156 0 AR EO [1 0 0 1 120 69.600 ] BO 220 0 LN 1 [0 0 0] ST [0 0 0] 12 180 220 0 AR EO [1 0 0 1 396 109.600 ] BO -124 204 LN 1 [0 0 0] ST [0 0 0] 12 301.293 -124 204 AR EO [1 0 0 1 356 109.600 ] BO -124 204 LN 1 [0 0 0] ST [0 0 0] 12 121.293 0 0 AR EO [1 0 0 1 80 233.600 ] BO 84 -21.5999 32 RR 1 [0 0 0] [1 1 1] FS EO [1 0 0 1 188 109.600 ] BO 84 -21.5999 32 RR 1 [0 0 0] [1 1 1] FS EO [1 0 0 1 244 233.600 ] BO 64 -24 32 RR 1 [0 0 0] [1 1 1] FS EO [1 0 0 1 56 337.600 ] BO 64 -24 32 RR 1 [0 0 0] [1 1 1] FS EO [1 0 0 1 44 369.600 ] BO 88 -21.5999 32 RR 1 [0 0 0] [1 1 1] FS EO [1 0 0 1 332 353.600 ] BO 64 -24 32 RR 1 [0 0 0] [1 1 1] FS EO [1 0 0 1 188 81.600 ] BO 84 -21.5999 32 RR 1 [0 0 0] [1 1 1] FS EO [1 0 0 1 312 233.600 ] BO 64 -24 32 RR 1 [0 0 0] [1 1 1] FS EO [1 0 0 1 428 165.600 ] BO 64 -24 32 RR 1 [0 0 0] [1 1 1] FS EO [1 0 0 1 88 212 ] BO [(/saveobject)] [0 0 0] 13.9999 /Helvetica SF 70.8115 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 196 88 ] BO [(/saveobject)] [0 0 0] 13.9999 /Helvetica SF 70.8115 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 196 60 ] BO [(/loadobject)] [0 0 0] 13.9999 /Helvetica SF 67.7033 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 256 212 ] BO [(/clone)] [0 0 0] 13.9999 /Helvetica SF 37.3518 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 324 212 ] BO [(/renew)] [0 0 0] 13.9999 /Helvetica SF 42.0137 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 440 144 ] BO [(/clone)] [0 0 0] 13.9999 /Helvetica SF 37.3518 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 72 316 ] BO [(/new)] [0 0 0] 13.9999 /Helvetica SF 29.5678 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 52 348 ] BO [(/newdefault)] [0 0 0] 13.9999 /Helvetica SF 71.5953 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 340 332 ] BO [(/destroy)] [0 0 0] 13.9999 /Helvetica SF 49.7979 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 420 109.600 ] BO 0 12 LN 1 [0 0 0] ST [0 0 0] 12 90 0 0 AR EO [1 0 0 1 68 0 ] BO [()] [0 0 0] 13.9999 /Helvetica SF 6 1 TS 5.59998 -15.9999 TL EO [1 0 0 1 196 318.400 ] BO [(TNT instance)] [0 0 0] 12 /Helvetica SF 71.3514 1 TS 5.2 -14 TL EO [1 0 0 1 28 62.400 ] BO [(ASCI text)] [0 0 0] 12 /Helvetica SF 54.0236 1 TS 5.2 -14 TL EO [1 0 0 1 360 58.400 ] BO [(PostScript data)] [0 0 0] 12 /Helvetica SF 81.3715 1 TS 5.2 -14 TL EO [1 0 0 1 132 360 ] BO 40 0 LN 1 [0 0 0] ST [0 0 0] 12 180 40 0 AR EO [1 0 0 1 16 360 ] BO 28 0 LN 1 [0 0 0] ST EO grestore @endspecial 608 1741 a(Figure)h(14:)g(UI)h(component)e(states)h(in)g(Cool)0 1875 y Fl(5)58 b(Persistence)0 1979 y Fn(This)11 b(section)g(will)g(discuss)g (the)g(problems)g(involved)g(in)g(making)g(TNT)h(UI)g(components)e (persistent.)i(A)g(persistent)f(UI)0 2035 y(component)j(is)h(a)h(component)e (which)h(can)g(be)h(saved)f(to)g(a)g(file,)i(loaded)e(from)g(a)h(file,)g (copied)f(and)g(pasted)g(etc.)24 b(The)0 2092 y(features)11 b(of)f(a)h(component)e(are)i(described)g(by)f(its)f(instance)h(variables.)i (Each)e(of)h(these)f(is)g(marked)g(as)g(persistent)g(or)g(not.)0 2148 y(A)h(persistent)g(variable)g(is)g(retained)h(when)f(the)g(object)g(is)g (copied)g(or)h(saved.)71 2205 y(It)j(is)f(not)h(necessary)g(that)g(every)h (TNT)f(class)f(be)i(persistent.)22 b(Only)14 b(the)h(relevant)g(UI)h (component)e(classes)h(need)0 2261 y(to)e(be)h(persistent.)j(And)c(of)g (those)g(only)g(some)g(of)g(the)g(information)f(needs)i(to)f(be)g(saved.)18 b(For)c(example)f(when)h(saving)0 2318 y(a)g(window,)g(its)f(eventmanager)h (doesn't)f(need)h(to)g(be)g(saved)f(since)h(it)f(can)i(be)f(recreated)h (easily)e(from)h(scratch.)19 b(What)0 2374 y(needs)11 b(to)g(be)h(saved)f(is) g(the)g(label)h(of)f(the)g(window)g(its)f(icon)h(image)g(etc.)0 2499 y Fg(5.1)50 b(Persistent)13 b(states)0 2586 y Fn(A)e(persistent)g (object)g(can)h(be)f(in)g(one)g(of)h(three)g(states:)952 2828 y(27)p eop %%Page: 28 28 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)68 195 y Fh(\017)23 b Fm(ALIVE)12 b Fn(The)h(object)f(is)g(in)g(working)g(order)h(and)g(is)f (part)g(of)h(the)f(UI.)h(It)g(is)f(a)h(part)f(of)h(TNT,)g(its)e(event)i (manager)g(is)114 252 y(running.)68 345 y Fh(\017)23 b Fm(DATA)10 b Fn(The)h(object)f(is)g(represented)h(by)f(a)h(PostScript)f(data)g (structure)h(which)f(contains)f(only)h(the)g(persistent)g(data)114 402 y(of)h(the)g(object.)h(This)e(complex)h(object)g(consists)f(of)i (uninitialized)d(instances.)68 496 y Fh(\017)23 b Fm(FILE)13 b Fn(The)g(object)f(is)h(represented)g(as)g(PostScript)g(text)f(in)g(a)h (file.)k(The)12 b(file)h(contains)f(only)g(the)h(persistent)f(data)114 552 y(of)f(the)g(object.)h(When)f(loaded)g(it)g(becomes)g Fm(DATA)p Fn(.)0 646 y(TNT)i(knows)f(only)g(the)g(first)h(of)g(these)f(states)h(\(see)g (Figure)g(13\).)j(In)d(Cool)g(these)f(states)h(must)e(be)i(represented)g(and) g(the)0 702 y(transitions)h(between)h(them)g(must)f(be)h(well)g(defined.)23 b(Figure)16 b(14)f(show)f(these)h(states)g(and)g(the)g(transitions)f(between) 0 759 y(them.)0 883 y Fg(5.2)50 b(Creating)12 b(new)g(UI)h(components)0 971 y Fn(In)19 b(an)g(interactive)g(environment)f(it)h(is)g(necessary)g(that) g(the)g(user)g(can)h(create)g(new)f(instances)g(of)g(UI)g(component)0 1027 y(classes)f(without)f(having)h(to)g(program)h(how)f(they)g(are)h (created.)34 b(Strictly)18 b(speaking)g(this)g(is)g(not)g(concerned)h(with)0 1083 y(persistence.)f(It)13 b(requires)h(the)f(introduction)f(of)i(a)f (uniform)g(mechanism)f(to)i(create)g(a)g(UI)f(component)g(from)g(its)g (class.)0 1140 y(The)g Fi(/newdefaul)q(t)j Fn(method)c(creates)i(a)f(new)g (instance)f(given)h(a)g(parent.)j(It)d(takes)g(only)f(one)h(argument)f(and)h (it)f(this)0 1196 y(is)f(the)g(same)g(for)h(every)g(UI)f(component)g(class:) 68 1290 y Fh(\017)23 b Fi(/newdefaul)q(t)85 b(\045)28 b(parent)i(--)e (instance)114 1347 y Fn(A)15 b(class)h(method)f(to)g(create)i(an)f (initialized)f(instance)g(of)h(a)g(UI)g(component)f(class.)25 b(The)16 b(instance)f(should)g(be)114 1403 y(ready)c(to)g(use,)h(all)f(its)g (parameters)g(are)i(set)e(to)g(the)g(most)f(frequently)h(used)g(defaults.)0 1497 y(In)19 b(Appendix)f(B.15)i(you)f(will)f(find)g(the)h Fi(/newdefau)q(lt)k Fn(methods)18 b(for)h(the)g(TNT)g(UI)g(components.)33 b(See)20 b(also)0 1553 y(Appendix)11 b(C.6)h(for)f(a)h(demonstration)e(of)h (how)g(this)g(method)f(is)h(used.)0 1678 y Fg(5.3)50 b(Persistent)13 b(variables)0 1765 y Fn(Some)g(mechanism)g(is)g(needed)h(to)f(mark)g (persistent)f(variables.)18 b(Therefore)d(a)e(method)g(called)g Fi(/persist)k Fn(is)c(added)0 1822 y(to)e Fi(ClassObje)q(ct)p Fn(.)k(It)c(is)g(used)g(to)g(mark)h(instance)f(variables)g(as)g(persistent.)g (\(see)h(also)f(Appendix)g(B.16\).)68 1915 y Fh(\017)23 b Fi(/persist)112 b(\045)28 b(name|list)q(of)q(nam)q(es)j(--)114 1972 y Fn(Mark)13 b(an)h(instance)f(variable)h(\(or)g(a)g(list)e(of)i(instance)f(variables\))h (as)f(persistent.)18 b(The)13 b(variable)h(will)f(be)g(copied)114 2028 y(and/or)e(saved)g(only)g(if)g(the)g(instance)g(variable)h(is)f (promoted.)0 2122 y(Note)k(that)g(the)g(persistent)g(instance)g(variables)g (are)h(only)f(copied)g(and/or)g(saved)h(when)f(they)g(have)h(been)g (promoted.)0 2179 y(Persistence)h(is)f(inherited)h(when)f(subclassing,)h(it)g (therefore)g(requires)g(the)g(modification)e(of)i Fi(classbegin)q Fn(.)31 b(If)17 b(a)0 2235 y(variable)c(is)g(persistent)f(in)h(one)g(of)g (its)g(super)g(classes)g(then)g(it)f(is)h(persistent)f(in)h(this)f(class.)17 b(For)c(example)g(the)g(instance)0 2291 y(variable)18 b Fi(/Width)i Fn(is)d(declared)h(to)f(be)h(persistent)e(in)h Fi(ClassRegi)q(on)q Fn(.)33 b(This)17 b(means)g(that)g(it)g(also)g(persistent)f(in)0 2348 y Fi(ClassButt)q(ons)q Fn(,)f Fi(ClassSetti)q(ngs)g Fn(and)d(every)f (other)h(subclass)e(of)i Fi(ClassRegio)q(n)p Fn(.)71 2404 y(The)k(order)g(in) g(which)g(variables)g(are)h(declared)g(to)f(be)g(persistent)g(affects)h(the)f (order)g(in)g(which)g(they)g(are)h(saved)0 2461 y(when)12 b(written)g(to)g(a) g(file.)j(This)c(may)h(not)g(seem)g(significant)f(but)h(it)g(is)g(important)f (when)h(using)f(SCCS)j(to)e(maintain)f(the)0 2517 y(file.)19 b(Changing)13 b(the)h(order)g(of)g(the)f(persistent)g(variables)h(may)f (cause)i(major)e(changes)h(in)f(the)h(file)f(which)h(affects)g(the)0 2574 y(efficiency)e(of)f(SCCS.)952 2828 y(28)p eop %%Page: 29 29 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(5.4)50 b(Cloning)0 282 y Fn(A)19 b(clone)g(is)f(a)h(copy)g(of)g(the)f(persistent)g (UI)h(component)f(data.)34 b(Cloning)18 b(is)h(used)f(when)h(the)g(user)g(is) f(editing)g(UI)0 339 y(components.)f(Whenever)d(a)g(component)e(is)h(copied)g (to)g(the)g(clipboard,)h(or)g(whenever)g(it)f(is)g(duplicated)f(then)h(a)h (clone)0 395 y(is)h(created.)25 b(This)14 b(clone)i(is)e(a)i(PostScript)f Fm(DATA)h Fn(structure.)24 b(The)15 b(clone)g(of)h(an)f(instance)g(is)g (either)h(a)f(dictionary)g(or)0 452 y(a)f(canvas)h(object)f(\(depending)f(on) h(the)g(original\))g(containing)e(only)i(those)f(instance)h(variables)g(that) g(were)h(marked)f(as)0 508 y(persistent.)d(The)g(following)f(methods)g(are)j (added)e(to)g Fi(ClassObje)q(ct)k Fn(in)c(Appendix)f(B.17:)68 601 y Fh(\017)23 b Fi(/clone)112 b(\045)27 b(--)i(clone)114 658 y Fn(Create)17 b(a)f(copy)g(of)g(the)f(instance)h(and)g(its)f(persistent) g(data.)25 b(Reference)18 b(checking)e(avoids)f(cyclic)h(objects)f(or)114 714 y(objects)10 b(that)h(are)h(referred)h(to)e(more)h(than)f(once)g(being)g (copied)g(twice.)68 808 y Fh(\017)23 b Fi(/cloneinst)q(anc)q(e)85 b(\045)28 b(clone)i(--)e('clone)114 864 y Fn(Called)16 b(when)f(an)h (instance)g(has)g(been)g(cloned.)25 b(It)15 b(may)h(be)g(subclassed)f(in)g (order)i(to)e(perform)h(some)f(special)114 920 y(action)c(when)g(cloning.)68 1014 y Fh(\017)23 b Fi(/clonethin)q(g)85 b(\045)28 b(any)h(--)f('any)114 1070 y Fn(Clone)14 b(an)g(PostScript)h(data)f(object.)20 b(It)14 b(may)g(not)g(be)g(possible)f(to)h(clone)h(every)f(NeWS)h(object.)21 b(For)14 b(example)114 1127 y Fi(eventtype)j Fn(objects)12 b(cannot)i(be)f(cloned)g(their)g(clone)h(is)f Fi(null)p Fn(.)19 b(This)13 b(method)f(is)h(usually)g(called)g(from)g(the)114 1183 y Fi(/cloneinst)q(anc)q(e)i Fn(method)10 b(to)h(clone)g(data)h(objects.) 0 1308 y Fg(5.5)50 b(Renewing)0 1395 y Fn(A)16 b(new)f(protocol)g(must)f(be)i (introduced)f(to)g(create)h(an)g Fm(ALIVE)g Fn(instance)f(from)g(a)h (PostScript)f Fm(DATA)h Fn(instance.)24 b(The)0 1451 y(method)10 b(is)h(called)h Fi(/renew)i Fn(\(see)d(Appendix)g(B.18\).)68 1544 y Fh(\017)23 b Fi(/renew)139 b(\045)28 b(parent)i(--)114 1601 y Fn(Renew)12 b(an)f(instance)g(from)h(data.)0 1694 y(The)e Fi(renew)i Fn(methods)d(is)g(similar)g(to)g Fi(/new)j Fn(except)e(that)g(the) f(instance)h(is)f(already)i(created)g(and)e(it)h(is)f(already)i(in)e(a)h (state)0 1750 y(where)k(most)f(of)h(its)f(parameters)h(have)g(been)g (assigned)f(a)h(value.)k(It)c(may)f(be)h(subclassed)f(in)g(order)i(to)e (perform)h(some)0 1807 y(special)e(operation.)j(An)e(example)f(program)g (which)h(use)f(the)h Fi(/renew)i Fn(method)c(in)h(combination)f(with)h(the)h Fi(/clone)0 1863 y Fn(method)d(can)i(be)g(found)f(in)g(Appendix)f(C.7.)0 1988 y Fg(5.6)50 b(Saving)0 2075 y Fn(The)11 b Fi(/saveobj)q(ect)k Fn(method)c(\(see)h(Appendix)e(B.19\))i(is)f(used)g(to)g(save)h(an)f (instance)g(to)g(a)h(file.)68 2168 y Fh(\017)23 b Fi(/saveobjec)q(t)140 b(\045)28 b(file)h(--)114 2224 y Fn(Save)14 b(an)h(instance)e(to)h(a)g(file.) 20 b(Care)15 b(is)e(take)h(that)g(objects)f(which)h(are)h(referenced)g(more)f (than)g(once)g(are)h(saved)114 2281 y(only)10 b(once.)i(This)f(avoids)g (problems)f(with)g(cyclic)i(data)f(structures.)68 2374 y Fh(\017)23 b Fi(/saveinsta)q(nce)141 b(\045)28 b(file)h(--)114 2431 y Fn(Save)12 b(the)f(content)g(of)g(an)h(instance.)f(May)g(be)h(subclassed)f (to)g(perform)g(some)g(special)g(operation)g(when)g(saving.)68 2524 y Fh(\017)23 b Fi(/savething)141 b(\045)27 b(file)i(any)g(--)114 2581 y Fn(Save)18 b(any)g(PostScript)f(data)h(to)f(a)h(file.)30 b(Note)18 b(that)f(not)g(all)g(PostScript)g(data)h(can)g(be)g(saved.)30 b(For)18 b(example)114 2637 y Fi(eventtype)e Fn(objects)11 b(are)j(not)e(saved,)h Fi(null)h Fn(is)e(saved)g(instead.)i(Also)e(path)g (objects)g(cannot)g(be)h(saved)f(since)114 2694 y(they)f(cannot)g(be)g (enumerated.)952 2828 y(29)p eop %%Page: 30 30 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(5.7)50 b(Loading)0 282 y Fn(Appendix)19 b(B.20)i(describes)f(how)g(UI)g(components)f (can)i(be)f(loaded)g(from)g(a)g(file)g(after)h(being)f(saved)g(using)f(the)0 339 y Fi(/saveobje)q(ct)c Fn(method.)68 433 y Fh(\017)23 b Fi(loadobject)141 b(\045)27 b(file)i(--)g(data)114 489 y Fn(A)10 b(PostScript)h Fm(DATA)g Fn(object)f(is)g(loaded)h(from)f(the)h(file.)g (Cyclic)g(and)g(multiple)e(references)j(are)f(recreated)h(where)114 545 y(appropriate.)f(Note)h(that)f Fi(/renew)i Fn(must)e(be)g(used)g(before)h (the)f(object)g(can)h(be)g(used)f(as)g(a)h(Cool)f(instance.)0 639 y(Note)e(that)g(you)g(must)f(send)i(a)f Fi(/renew)j Fn(message)d(to)g (the)h(resulting)e Fm(DATA)i Fn(object)f(before)h(it)f(can)h(be)f(used.)i(An) e(example)0 696 y(program)j(with)g(the)g Fi(/saveobje)q(ct)k Fn(method)c(and)g Fi(/loadobje)q(ct)k Fn(method)c(in)g(combination)f(with)g (the)i Fi(/renew)0 752 y Fn(method)d(can)i(be)g(found)f(in)g(Appendix)f(C.8.) 952 2828 y(30)p eop %%Page: 31 31 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fl(6)58 b(Conclusions)0 299 y Fn(It)12 b(is)g(possible)e(to)i(build)f(Cool)h(on)g (top)f(of)h(TNT.)h(It)f(all)f(depends)h(on)g(how)g(much)f(of)h(the)g(changes) h(can)f(be)g(incorporated)0 355 y(into)e(TNT)i(without)e(affecting)h (existing)f(TNT)i(development.)71 412 y(It)e(must)f(be)i(stressed)f(that)g (each)h(of)g(the)f(proposed)g(TNT)h(extensions)e(are)i(more)g(or)f(less)g (essential)g(to)g(the)g(success)h(of)0 468 y(Cool.)j(Each)f(of)f(these)g(may) g(not)f(seem)i(essential)e(on)h(its)f(own)h(but)g(together)g(they)f(form)h (the)h(back)f(bone)g(of)g(Cool.)i(You)0 524 y(can)f(compare)g(it)f(to)h(a)g (Mercedes)g(car.)k(If)c(you)f(strip)g(all)h(the)g(luxuries,)f(including)g (the)g(paint,)h(the)g(wind)f(screen)h(wipers)0 581 y(and)f(the)g(soft)g (chairs,)h(you)e(will)h(end)g(up)g(with)f(something)f(that)i(is)g(still)f(a)h (car)h(but)f(nobody)f(will)g(use)h(it.)i(Hopefully)d(this)0 637 y(will)f(not)h(happen)h(to)e(Cool.)71 694 y(Persistence)17 b(is)g(a)g(major)f(thread)i(to)e(the)h(success)g(of)g(the)g(Cool)g(system.)28 b(It)16 b(exposes)h(the)g(interior)f(of)i(TNT)e(by)0 750 y(saving)11 b(it)h(to)g(a)g(file.)j(Any)d(major)f(change)i(to)f(TNT)g(or)g(Cool)g(will)g (render)g(previously)f(developed)h(UIs)h(useless,)f(unless)0 807 y(upgrading)f(programs)f(are)j(provided.)71 863 y(The)d(relation)g (between)h(Cool)f(and)g(TNT)g(software)h(is)f(important.)g(It)h(will)e(be)i (fairly)f(easy)h(to)f(port)g(an)g(existing)f(TNT)0 920 y(program)i(to)g(Cool) g(if)h(the)f(programmer)g(follows)f(a)i(few)g(simple)e(steps.)h(Porting)g (from)g(TNT)h(to)e(Cool.)68 1013 y Fh(\017)23 b Fm(subclassing)114 1070 y Fn(Create)11 b(a)g(resource)g(class)f(for)h(each)g(subclass)f(in)g (the)g(TNT)g(source.)i(Make)f(sure)f(that)g(the)g(class)h(manager)f(is)g (used)114 1126 y(to)h(access)h(the)f(classes.)g(Small)g(subclasses)g(can)h (be)f(put)g(into)g(script)g(classes.)68 1220 y Fh(\017)23 b Fm(installmethod)114 1277 y Fn(Instead)11 b(of)g(using)g Fi(installmet)q(ho)q (d)j Fn(use)e(script)e(classes.)68 1370 y Fh(\017)23 b Fm(resources)114 1427 y Fn(Any)11 b(images)f(icons)h(etc.)h(used)f(by)h(the)f(program)g (should)f(be)i(loaded)f(through)f(the)h(resource)h(manager.)68 1521 y Fh(\017)23 b Fm(UI)11 b(components)114 1577 y Fn(Save)i(the)f(UI)g (components.)h(Either)e(recreate)j(them)e(from)f(scratch)i(using)e(Cool)h(or) g(run)g(a)h(conversion)e(program)114 1634 y(which)g(takes)g(a)h(TNT)f (application)f(window)h(and)g(saves)g(it)g(in)g(a)h(file)f(as)g(a)h(Cool)f (UI)h(component.)68 1727 y Fh(\017)23 b Fm(client)11 b(program)114 1784 y Fn(The)h(client)g(should)f(use)i(the)f(Cool)g(client)g(interface)h (which)g(will)e(be)i(based)f(on)g(the)h(Wire)f(service.)k(This)11 b(means)114 1840 y(that)g(the)g(Wire)g(and)h(CPS)g(functionality)e(can)i (still)e(be)i(used.)157 1934 y(1.)23 b(Connect)11 b(to)g(NeWS.)157 2007 y(2.)23 b(Tell)11 b(the)g(resource)h(manager)g(which)f(resources)g(are)i (available.)157 2080 y(3.)23 b(Locate)11 b(and)h(connect)f(to)g(the)g (required)h(UI)f(components.)157 2153 y(4.)23 b(Event)11 b(loop.)0 2247 y(Each)f(of)h(these)f(steps)f(is)h(fairly)g(new,)h(but)e(you)h(should)f (realize)i(that)f(some)f(of)h(the)g(proposed)g(functionality)e(will)i (already)0 2304 y(be)i(part)f(of)g(TNT)h(before)g(the)f(introduction)e(of)j (Cool.)g(This)e(will)h(eliminate)f(some)h(of)g(the)g(steps)g(above.)71 2360 y(Porting)j(from)i(Cool)f(to)g(TNT)g(will)f(be)i(much)f(harder.)24 b(It)15 b(means)h(that)e(a)i(lot)f(of)g(functionality)f(must)g(be)i(thrown)0 2416 y(away.)c(It)f(is)g(up)g(to)g(the)h(programmer)f(to)g(decide)g(whether)h (that)f(is)g(possible.)0 2541 y Fg(6.1)50 b(Remaining)12 b(problems)0 2628 y Fn(Here)g(is)f(a)h(list)e(of)h(the)h(problems)e(that)h(still)f(have)h (to)g(be)h(solved.)952 2828 y(31)p eop %%Page: 32 32 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)57 195 y Fn(1.)23 b Fm(Interactive)11 b(editing)114 252 y Fn(Creating)g(and)h(positioning)d(of) i(components)f(within)g(the)h(UI.)168 344 y Fh(\017)23 b Fn(Change)11 b Fi(ClassTrac)q(kSe)q(rv)q(ice)k Fn(so)10 b(that)g(in)h(edit)f(mode,)h (tracking)f(events)h(can)g(be)g(captured)g(by)f(Cool)214 400 y(before)i(they)f(get)g(send)g(to)g(the)g(UI.)168 472 y Fh(\017)23 b Fn(Visual)14 b(selection)h(feedback)h(in)f(both)g(color)g(and)g(black)g (and)h(white.)23 b(The)15 b(problem)g(here)h(is)f(that)g(some)214 529 y(canvases)j(are)h(not)f(transparent.)32 b(It)18 b(is)g(hard)h(to)e(draw) i(selection)f(rectangles)g(which)g(overlap)g(opaque)214 585 y(canvases.)168 657 y Fh(\017)23 b Fn(The)9 b(interaction)f(between)h (editing)f(and)h(layout)f(must)g(be)h(formalized)g(so)g(that)f(the)h(user)g (is)g(allowed)g(limited)214 713 y(editing)i(capability)h(if)h(automatic)e (layout)h(is)g(in)h(effect.)j(Perhaps)d(it)f(is)h(required)f(to)h(introduce)f (new)h(types)214 770 y(of)e(layout)g(for)g(Cool.)168 841 y Fh(\017)23 b Fn(There)15 b(are)g(no)f(facilities)f(to)h(handle)h(overlapping) e(UI)i(components.)k(There)c(should)e(be)i(a)f Fi(/tofront)q Fn(,)214 898 y Fi(/toback)g Fn(methods)c(for)i(every)f(UI)h(component.)f(It)g (is)g(not)g(clear)h(how)f(this)f(will)h(affect)h(layout.)57 990 y(2.)23 b Fm(Multiple)10 b(pages)114 1047 y Fn(It)g(should)f(be)h (possible)f(for)h(windows)f(to)h(have)g(more)g(than)g(one)g(`page')h(or)f (card.)i(The)f(requirement)e(for)i(multiple)114 1103 y(pages)h(becomes)h (acute)g(when)f(a)h(lot)f(of)h(information)e(must)g(be)i(presented)g(to)f (the)g(user.)k(This)11 b(is)i(often)f(the)g(case)114 1159 y(and)e(the)h (``window)f(with)g(multiple)f(pages'')i(model)f(is)g(successful)g(because)h (it)f(is)g(easy)h(to)f(grasp.)i(Each)f(window)114 1216 y(must)h(have)i(a)g (background)f(page)g(\(the)h(window)f(itself\))g(which)g(is)g(always)g (visible)f(plus)h(several)h(pages)f(which)114 1272 y(overlay)e(the)g (background)g(page.)168 1365 y Fh(\017)23 b Fn(Pages)f(can)g(be)g (implemented)e(by)h(inserting)g(another)h(layer)g(of)f(containment)g(in)g Fi(ClassWind)q(ow)q Fn(.)214 1421 y(Assuming)10 b(that)h(this)g(can)h(be)g (done)g(without)e(causing)i(inconsistencies)e(with)h(the)h(TNT)f(API)i(for)f (window)214 1478 y(objects.)f(The)g(existing)f(API)i(would)f(always)g(affect) h(the)g(current)f(page)h(of)f(the)h(window.)168 1549 y Fh(\017)23 b Fn(There)c(must)e(be)i(a)g(protocol)f(which)g(allows)g(components)f(to)h (perform)h(actions)f(when)h(they)f(become)214 1606 y(visible.)26 b(In)17 b(HyperNeWS)h(2.0)e(an)h Fi(/onopen)j Fn(message)c(or)h(an)g Fi(/onclose)j Fn(message)c(is)g(sent)h(to)f(an)214 1662 y(object)11 b(when)g(its)g(visibility)e(changes.)j(This)f(object)g(has)h(a)f(chance)i(to) e(start)g(or)h(conect)f(to)g(a)h(client)f(when)h(it)214 1719 y(receives)e(the)f Fi(/onopen)j Fn(message)e(while)f(the)g Fi(/onclose)k Fn(message)c(can)h(be)f(used)h(to)f(kill)f(or)i(disconnect)214 1775 y(from)h(the)g(client.)168 1847 y Fh(\017)23 b Fn(There)15 b(is)f(no)g(satisfactory)g(way)g(for)h(an)g(object)f(to)g(find)g(out)g (whether)g(it)g(is)g(visible)f(or)i(not.)20 b(Note)15 b(that)f(a)214 1903 y(canvas)f(may)g(be)g(mapped)g(but)f(at)i(the)f(same)g(time)f(invisible) f(because)j(one)f(of)g(its)g(parents)g(is)f(unmapped.)214 1960 y(This)e(can)i(be)g(solved)e(by)h(introducing)f(a)i(scoped)f(variable)h(for)f (visibility.)168 2031 y Fh(\017)23 b Fn(It)15 b(will)g(be)h(very)g(expensive) g(to)f(have)h(many)g(objects)f(in)h(a)g(window)f(when)h(they)f(all)h(use)f (canvases.)26 b(In)214 2088 y(HyperNeWS)16 b(we)f(found)f(that)h(users)g (build)f(interfaces)h(easily)g(consisting)e(of)i(up)g(to)f(500)h(components.) 214 2144 y(This)10 b(would)h(mean)g(that)g(there)h(would)e(be)i(very)f(many)g (inactive)g(canvases)h(floating)e(about.)168 2216 y Fh(\017)23 b Fi(ClassNotic)q(e)16 b Fn(is)c(not)h(a)g(subclass)f(of)h Fi(ClassWind)q(ow)j Fn(it)d(can)g(therefore)h(not)e(have)h(multiple)f(pages.) 214 2272 y(Either)h(the)g(same)g(functionality)f(is)h(added)g(to)g Fi(ClassNot)q(ice)k Fn(or)d Fi(ClassNotic)q(e)j Fn(must)12 b(be)h(made)h(a)214 2329 y(subclass)c(of)i Fi(ClassWindo)q(w)p Fn(.)57 2421 y(3.)23 b Fm(Single)10 b(button)g(objects)114 2478 y Fn(It)22 b(seems)h(likely)f(that)g(may)g(users)h(will)f(want)h(to)f (create)i(single)e(button)f(objects)h(each)i(with)e(their)g(own)114 2534 y(script)16 b(which)g(are)i(combined)e(together)g(into)g(a)h(group)f(of) h(buttons)f(which)g(has)h(the)f(same)h(properties)f(as)h(the)114 2591 y(existing)h Fi(ClassButto)q(ns)23 b Fn(object.)35 b(Perhaps)20 b Fi(ClassButt)q(ons)j Fn(can)d(be)f(changed)h(so)f(that)g(it)f(actually)114 2647 y(creates)24 b(instances)f(for)h(each)g(item)f(in)h(the)f(itemlist.)47 b(The)23 b(same)h(applies)f(to)g Fi(ClassSett)q(in)q(gs)k Fn(and)114 2704 y Fi(ClassItemG)q(rou)q(p)p Fn(.)952 2828 y(32)p eop %%Page: 33 33 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)57 195 y Fn(4.)23 b Fm(Robust)10 b(UI)h(components)114 252 y Fn(If)g(the)g(user)g(has)f(been)i (editing)d(the)i(UI)g(it)g(should)e(not)h(crash)i(before)f(it)g(can)g(be)g (saved.)h(Also)e(there)h(may)g(be)g(many)114 308 y(windows)d(and)i (components)f(sharing)g(the)g(Cool)h(LEM)f(which)h(makes)f(such)h(a)g(crash)g (much)f(more)h(dangerous.)h(In)114 364 y(HyperNeWS)i(this)f(is)h(solved)f(by) h(using)f(the)h Fi(Send)h Fn(primitive)e(whenever)h(user)g(code)h(\(from)f (resource)g(classes)114 421 y(or)d(scripts\))g(is)g(executed.)i(This)e(means) g(a)h(performance)g(penalty.)g(Unless)f Fi(Send)i Fn(is)e(implemented)f(in)h (the)g(server)114 477 y(an)f(alternative)h(solution)e(must)g(be)i(found.)h (Increased)g(use)e(of)h Fi(Send)h Fn(may)e(also)h(affect)g(existing)f(TNT)g (programs.)57 571 y(5.)23 b Fm(Multi)10 b(line)h(text)114 628 y Fn(Multi)i(line)i(text)f(editing)g(and)h(display)f(is)g(needed)i(for)f (scripting.)21 b(Using)14 b(Jot)h(has)g(the)f(disadvantage)h(that)f(the)114 684 y(actual)9 b(text)h(data)g(is)f(stored)g(on)g(the)h(server)g(side.)h (This)e(is)g(a)h(general)h(problem)d(with)h(clients)g(that)h(hold)f(data)g (which)114 741 y(is)h(to)g(be)h(stored)f(with)g(the)g(UI.)h(Jot)f(will)g (have)h(to)f(override)h(the)f Fi(/cloneins)q(tan)q(ce)k Fn(and)d Fi(/saveinsta)q(nc)q(e)114 797 y Fn(methods)f(so)h(that)g(first)g(retrieve)h (the)f(text)g(data)g(from)g(the)h(jot)e(client.)57 891 y(6.)23 b Fm(Tool)11 b(events)114 947 y Fn(There)h(will)e(be)i(several)g(tools)e(for) i(editing)e(and)i(monitoring)d(changes)j(within)e(the)i(Cool)f(system.)g (This)g(requires)114 1004 y(that)g(in)h(some)f(cases)h(these)g(tools)f(are)h (warned)h(that)e(their)h(data)g(has)g(changed.)h(For)g(example)e(the)h(class) g(browser)114 1060 y(should)17 b(be)j(told)e(when)h(a)g(resource)h(class)e (is)h(loaded)g(or)g(unloaded.)34 b(This)18 b(can)h(be)g(done)g(using)f(the)h (event)114 1117 y(mechanism.)0 1241 y Fg(6.2)50 b(Future)12 b(plans)0 1328 y Fn(The)f(implementation)f(of)h(a)h(complete)e(Cool)i(system) e(will)g(consist)h(of)g(the)g(following)f(steps.)57 1422 y(1.)23 b Fm(Embedding)10 b(in)h(TNT)i Fn(The)e(issues)g(which)g(are)h(discussed)e (in)h(this)g(document)f(must)g(be)i(incorporated)f(into)f(TNT.)57 1516 y(2.)23 b Fm(Interactive)c(editing)f Fn(This)h(will)g(probably)g(mean)g (changes)h(to)f(the)g Fi(TrackServ)q(ice)q Fn(.)39 b(Also)19 b(changes)g(to)114 1572 y Fi(ClassLayou)q(t)14 b Fn(must)d(be)g(anticipated.) 57 1666 y(3.)23 b Fm(Client)11 b(communication)f Fn(This)g(is)h(required)h (to)f(communicate)f(with)h(Jot)f(for)i(example.)57 1760 y(4.)23 b Fm(Property)8 b(windows)i Fn(The)f(design)g(and)g(implementation)e(of)j (property)f(windows)f(for)i(each)g(of)f(the)g(UI)h(component)114 1817 y(classes.)0 1910 y(The)j(result)f(of)h(all)g(this)f(work)h(will)f(be)h (an)g(an)g(operational)f(system)g(where)h(you)g(can)g(create)h(and)f(edited)f (UI)i(interfaces)0 1967 y(and)c(connect)h(them)f(to)g(clients)g(etc.)h(This)f (system)g(is)g(much)f(too)h(bare)h(to)g(present)f(to)g(the)g(user.)i(A)e(lot) g(of)h(the)f(tools)f(which)0 2023 y(were)14 b(discussed)e(must)g(now)h(be)g (implemented)f(using)g(Cool.)17 b(While)c(the)g(tools)f(are)h(being)g (implemented)f(some)g(TNT)0 2080 y(applications)e(can)i(be)f(ported)g(to)g (the)h(new)f(system.)g(The)g(tools)f(that)h(are)i(essential:)68 2174 y Fh(\017)23 b Fm(Object)11 b(warehouse)p Fn(.)h(A)f(collection)g(of)g (predesigned)g(UI)h(components)e(ready)i(for)g(use.)g(The)f(user)h(can)g (copy)f(and)114 2230 y(paste)g(objects)g(from)g(this)f(tool)h(into)f(his)h (own)g(application.)68 2324 y Fh(\017)23 b Fm(Drawing)10 b(tool)p Fn(.)h(Essential)g(tool)f(to)h(provide)g(graphical)g(input.)g(It)g(can)h(be)g (used)f(to)g(design)f(displayitem)g(objects.)68 2418 y Fh(\017)23 b Fm(Color)14 b(pallet)p Fn(.)21 b(Tool)14 b(to)h(choose)f(colors)h(or)g (gray)g(scales.)22 b(This)14 b(may)g(include)h(a)g(triangular)f(or)h (circular)g(color)114 2474 y(spectrum)10 b(from)i(which)f(the)g(user)g(can)h (pick)f(new)h(colors.)68 2568 y Fh(\017)23 b Fm(Property)10 b(browser)p Fn(.)i(Similar)e(to)h(the)g(system)f(properties)h(window)f(but)g (it)h(is)g(used)f(to)h(modify)f(properties)h(of)g(any)114 2624 y(object)g(inside)f(the)h(Cool)h(UI.)g(It)f(is)g(specifically)g(useful)g(to)g (set)g(and)g(examine)g(scoped)g(variables.)952 2828 y(33)p eop %%Page: 34 34 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)68 195 y Fh(\017)23 b Fm(Error)12 b(handler)p Fn(.)k(A)d(tool)f(to)h(catch)h(and)f(display)f (errors.)17 b(It)c(should)f(provide)h(enough)g(feedback)h(to)e(the)h(user)g (so)114 252 y(that)e(the)g(cause)h(of)f(the)g(error)h(may)f(be)h(retrieved.) 68 345 y Fh(\017)23 b Fm(PostScript)9 b(debugger)p Fn(.)j(A)f(high)g(level)g (interface)h(to)f(the)g(existing)f(PostScript)h(debugging)f(tools.)68 439 y Fh(\017)23 b Fm(Message)13 b(logger)p Fn(.)19 b(A)c(tool)e(which)g (logs)h(the)f(messages)h(that)f(go)h(through)f(the)h(system.)19 b(This)13 b(tool)g(is)h(essential)114 496 y(when)d(developing)f(new)i(UIs)f (and)g(applications.)68 589 y Fh(\017)23 b Fm(Resource)11 b(browser)p Fn(.)i(Allow)e(the)h(user)g(to)f(add)h(and)g(remove)g(directories)f(which)h (are)h(searched)f(by)g(the)f(resource)114 646 y(manager.)h(Also)e(provide)h (feedback)h(as)g(to)f(where)h(resources)g(can)f(be)h(found)f(or)g(not.)68 740 y Fh(\017)23 b Fm(Client)12 b(browser)p Fn(.)17 b(A)c(tool)f(to)h (monitor)e(the)i(existence)g(of)g(clients.)j(There)e(may)e(be)h(many)g (clients)f(connected)h(to)114 796 y(Cool)e(at)g(one)h(time,)f(this)f(tool)g (can)i(be)g(used)f(to)g(locate)g(and)h(kill)e(ones)h(that)g(are)h(no)f (longer)g(needed.)68 890 y Fh(\017)23 b Fm(Class)11 b(browser)p Fn(.)i(Examine)f(the)f(class)h(hierarchy)h(including)d(resource)j(and)f (script)f(classes.)i(For)g(each)f(class)g(the)114 946 y(user)f(can)h(ask)f (for)h(a)g(list)e(of)h(the)g(possible)g(methods,)f(where)i(these)f(originate) g(etc.)952 2828 y(34)p eop %%Page: 35 35 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fl(A)58 b(Parent)14 b(scope)h(implementation)i(notes)0 300 y Fg(A.1)50 b(HyperNeWS)12 b(2.0)0 387 y Fn(Insert)17 b(the)f(parent)h(instance)f (dictionaries)g(in)g(the)g Fi(ParentDic)q(tA)q(rra)q(y)k Fn(so)c(that)g(name) h(lookup)e(will)h(search)h(the)0 444 y(instance,)11 b(its)g(classes)g(and)h (its)e(parent)i(instances)f(\(in)g(that)g(order\).)h(For)g(example:)869 538 y Ff(dictionary)7 b(stack)p 773 551 405 2 v 772 607 2 57 v 798 590 a Fn(instance)p 1176 607 V 773 609 405 2 v 772 665 2 57 v 798 648 a(class)p 1176 665 V 772 722 V 798 705 a(.)h(.)g(.)p 1176 722 V 773 723 405 2 v 772 780 2 57 v 798 763 a(parent)j(instance)p 1176 780 V 772 836 V 798 819 a(.)d(.)g(.)p 1176 836 V 773 838 405 2 v 772 894 2 57 v 798 877 a(.)g(.)g(.)p 1176 894 V 68 980 a Fh(\017)23 b Fm(Advantages)18 b Fn(It)h(is)f(very)i(fast)f(since)g(it)f (is)h(based)g(on)f(standard)h(name)g(lookup.)34 b(No)19 b(special)g (operators)g(for)114 1036 y(access/assignment)10 b(are)i(needed.)68 1130 y Fh(\017)23 b Fm(Disadvantages)12 b Fn(Every)h(promoted)f(variable)i (is)f(more)g(or)h(less)f(a)g(scoped)h(variable.)k(Adding)12 b(parent)i(instances)114 1187 y(dictionaries)9 b(to)h(the)h Fi(ParentDict)q(Ar)q(ray)j Fn(can)d(be)g(both)f(powerful)g(and)h(dangerous.)g (There)g(must)e(be)i(system)114 1243 y(defined)g(defaults)g(\(backstops\),)g (therefore)h(the)f(use)h(of)f(scoped)g(variables)g(must)g(be)g(restricted)g (to)g(a)h(fixed)f(set)g(of)114 1300 y(system)f(defined)h(scoped)g(variables.) h(The)g Fi(ParentDict)q(Arr)q(ay)q Fn(s)i(can)d(no)h(longer)f(be)g(shared) 1682 1283 y Ff(6)1701 1300 y Fn(.)0 1424 y Fg(A.2)50 b(Local)13 b(dicts)f(first)g(in)g Fb(ParentDictArray)0 1511 y Fn(Each)h(instance)g(has)g (a)g(local)g(dictionary)f(containing)g(its)g(scoped)h(variables.)k(The)c (local)f(dictionaries)g(of)i(the)e(instance)0 1568 y(and)d(of)g(its)f (parents)h(are)h(inserted)e(into)g(the)h(object's)g Fi(ParentDict)q(Arr)q(ay) q Fn(.)14 b(Name)9 b(lookup)f(will)g(search)h(the)g(instance,)0 1624 y(its)i(local)g(dict,)g(the)g(parents)h(local)f(dicts)f(and)i(its)e (classes.)i(For)g(example)869 1718 y Ff(dictionary)7 b(stack)p 773 1731 405 2 v 772 1788 2 57 v 798 1771 a Fn(instance)p 1176 1788 V 773 1789 405 2 v 772 1846 2 57 v 798 1829 a(own)k(local)g(dict)p 1176 1846 V 772 1902 V 798 1885 a(parent)g(local)h(dict)p 1176 1902 V 772 1959 V 798 1942 a(.)c(.)g(.)p 1176 1959 V 773 1960 405 2 v 772 2017 2 57 v 798 2000 a(class)p 1176 2017 V 772 2073 V 798 2056 a(.)g(.)g(.)p 1176 2073 V 773 2075 405 2 v 772 2131 2 57 v 798 2114 a(.)g(.)g(.)p 1176 2131 V 68 2217 a Fh(\017)23 b Fm(Advantages)10 b Fn(It)i(is)f(a)h(much)f(cleaner)h(solution) e(than)h(the)g(previous)g(one)h(since)f(the)h(scoped)f(variables)g(are)i (clearly)114 2273 y(separated)f(from)g(the)g(instance/class)f(variables.)j (Class)e(variables)g(do)g(not)f(override)h(the)g(scoped)g(variables)g(and)114 2330 y(can)f(be)h(used)f(as)h(backstops.)e(Access)i(is)f(possible)f(without)g (the)h(use)h(of)f(a)h(special)f(operators)68 2424 y Fh(\017)23 b Fm(Disadvantages)9 b Fn(Every)j(object)e(must)g(contain)h(an)g(additional)f (dictionary)g(to)h(store)g(the)g(scoped)g(variables.)h(This)114 2480 y(will)e(add)h(at)h(least)f(120)g(bytes)g(to)g(each)h(instance.)f (Assignment)f(requires)h(a)h(special)f(operator.)p 0 2521 780 2 v 53 2548 a Fe(6)67 2564 y Fd(In)f(the)f(HyperNeWS)f(2.0)h(design)f (document)g(a)h(server)f(based)g(implementation)g(is)i(proposed)d(which)i (solves)e(this)j(problem.)952 2828 y Fn(35)p eop %%Page: 36 36 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(A.3)50 b(Local)13 b(dicts)f(below)g(class)h(dicts)f(in)g Fb(ParentDictArray)0 282 y Fn(Same)e(as)g(the)f(previous)g(solution)f(but)h(the)g(local)h (dictionaries)e(are)j(added)f(to)f(the)g Fi(ParentDic)q(tAr)q(ra)q(y)k Fn(in)c(a)h(different)0 339 y(order.)i(Name)g(lookup)e(will)g(search)i(the)g (instance,)f(its)g(classes,)g(its)g(local)g(dict)g(and)g(the)h(parents)f (local)g(dicts.)869 433 y Ff(dictionary)c(stack)p 773 446 405 2 v 772 502 2 57 v 798 485 a Fn(instance)p 1176 502 V 773 504 405 2 v 772 560 2 57 v 798 543 a(class)p 1176 560 V 772 617 V 798 600 a(.)h(.)g(.)p 1176 617 V 773 618 405 2 v 772 675 2 57 v 798 658 a(own)j(local)g(dict)p 1176 675 V 772 731 V 798 714 a(parent)g(local)h(dict)p 1176 731 V 772 788 V 798 771 a(.)c(.)g(.)p 1176 788 V 773 789 405 2 v 772 846 2 57 v 798 829 a(.)g(.)g(.)p 1176 846 V 68 931 a Fh(\017)23 b Fm(Advantages)10 b Fn(Same)i(as)f(the)h(previous)e(solution.)g(Class)i(variables)f(now)g (override)h(scoped)f(variables.)68 1025 y Fh(\017)23 b Fm(Disadvantages)11 b Fn(Class)i(variables)f(can)h(not)f(be)h(used)g(as)g(a)g(backstop.)i (Therefore)f(the)e(use)h(of)g(scoped)f(variables)114 1082 y(must)e(be)h (restricted)h(to)f(a)g(small)g(set)g(of)g(system)g(defined)g(variables.)0 1206 y Fg(A.4)50 b(Recursive)13 b(send)0 1293 y Fn(To)g(find)g(a)h(scoped)g (variable)f(recursively)h(search)g(the)f(container)h(hierarchy)g(using)e Fi(Parent)30 b(send)p Fn(.)20 b(The)13 b(chain)h(of)0 1350 y(sends)d(is)g(terminated)f(when)i(the)f(value)g(is)g(found.)0 1444 y Fi(/getscope)q(d)30 b({)110 1500 y(\045)d(variable)q(-na)q(me)k(--)d (value)110 1556 y(dup)g(promoted?)j({)219 1613 y(self)e(exch)g(get)110 1669 y(})e({)219 1726 y(/getscope)q(d)k(Parent)e(send)110 1782 y(})e(ifelse)0 1839 y(})h(def)68 1945 y Fh(\017)23 b Fm(Advantages)10 b Fn(Simple)h(implementation.)68 2039 y Fh(\017)23 b Fm(Disadvantages)9 b Fn(Very)i(slow.)g(Also)f(there)h(is)g(no)f(backstop)g(and)h(therefore)h (there)f(cannot)g(be)g(an)g(unrestricted)f(set)114 2095 y(of)h(scoped)g (variables.)0 2220 y Fg(A.5)50 b(Dynamic)13 b(lookup)0 2307 y Fn(To)i(access)h(a)g(scoped)f(variable)g(use)g(a)h(special)f(routine)g (which)g(dynamically)f(looks)g(up)h(the)g(variable)h(in)f(the)g(parent)0 2363 y(instances)c(of)g(an)h(instance.)f(If)h(the)f(variable)h(is)f Fm(not)f Fn(found)h(it)g(assumed)g(to)g(be)g(defined)h(in)f(the)g(current)h (context.)0 2457 y Fi(/getscope)q(d)30 b({)110 2514 y(\045)d(instance)k (scoped-va)q(ria)q(bl)q(e-n)q(am)q(e)f(--)e(value)110 2570 y({)219 2627 y(2)g(copy)h(known)g({get)g(exit})h(if)219 2683 y(exch)f(/Parent)h(get)952 2828 y Fn(36)p eop %%Page: 37 37 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)219 195 y Fi(dup)29 b(null)g(eq)f({pop)h(cvx)g(exec)g(exit})g(if)219 252 y(exch)110 308 y(})e(loop)0 364 y(})h(def)68 462 y Fh(\017)23 b Fm(Advantages)13 b Fn(A)h(scoped)h(variable)f(is)g(defined)g(by)g(its)g(method)f(of)h(access.) 22 b(Any)14 b(promoted)f(instance)h(variable)114 519 y(can)h(be)f(accessed)i (as)e(if)h(it)f(is)g(a)h(scoped)f(variable.)21 b(No)15 b(mucking)e(about)h (with)g(the)g Fi(ParentDi)q(ctA)q(rr)q(ay)k Fn(or)114 575 y(additional)10 b(dictionaries)g(saves)h(a)h(lot)f(of)g(space.)i(Class)e(variables)g(can)h (be)f(used)h(as)f(backstops.)68 666 y Fh(\017)23 b Fm(Disadvantages)9 b Fn(It)j(requires)f(a)h(server)g(based)f(implementation)e(otherwise)i(it)g (will)g(be)g(too)g(slow.)0 790 y Fg(A.6)50 b(Dynamic)13 b(lookup)e(with)g (local)h(dicts)0 877 y Fn(Same)19 b(as)g(the)f(previous)g(solution)f(except)i (that)f(the)h(instances)f(now)g(contain)g(local)g(dicts)g(to)h(contain)f(the) g(scoped)0 933 y(variables.)68 1021 y Fh(\017)23 b Fm(Advantages)10 b Fn(Scoped)i(variables)f(are)h(clearly)g(separated)g(from)f(other)g (variables.)68 1112 y Fh(\017)23 b Fm(Disadvantages)7 b Fn(Same)j(as)f(the)g (previous)f(solution.)h(In)g(this)g(solution)e(it)h(is)h(possible)f(to)g (share)i(empty)e(dictionaries)114 1169 y(therefore)15 b(the)f(additional)f (memory)g(requirements)h(may)g(be)g(acceptable.)21 b(Special)15 b(operators)f(for)g(access)h(and)114 1225 y(assignment)10 b(of)h(scoped)g (variables)g(are)i(needed.)0 1349 y Fg(A.7)50 b(Dynamic)13 b(distribution)0 1436 y Fn(It)f(is)f(possible)g(to)g(distribute)f(the)i (value)g(of)g(a)g(scoped)f(variable)h(to)g(all)f(the)h(children.)h(This)e(a)h (sort)f(of)h(super-promote,)g(it)0 1492 y(promotes)d(the)h(variable)g(not)g (only)f(in)h(the)g(current)g(instance)g(but)f(also)h(in)g(all)g(its)f (children.)i(Each)f(instance)g(must)f(defined)0 1549 y(which)i(scoped)g (variables)g(it)g('imports')g(and)g(which)g(ones)g(it)g('exports'.)68 1637 y Fh(\017)23 b Fm(Advantages)10 b Fn(Access)i(will)e(be)i(immediate)e (since)h(all)g(scoped)h(variables)f(are)h(promoted.)68 1728 y Fh(\017)23 b Fm(Disadvantages)8 b Fn(Assignment)h(and)h(promoting)e(will)h (be)i(very)f(slow.)h(The)f(administration)e(required)i(to)g(keep)g(the)114 1784 y(scoped)h(variables)g(and)g(their)g(values)f(consistent)g(with)h(the)g (scoped)g(variables)g(of)g(parents)g(and)g(children)g(will)f(be)114 1841 y(enormous.)h(Also)f(each)i(instance)f(contains)f(a)i(copy)f(of)g(every) h(scoped)f(variable)g(which)g(it)g(may)g(use,)g(this)f(makes)114 1897 y(the)h(instance)g(dictionary)f(rather)i(large.)0 2021 y Fg(A.8)50 b(Shared)12 b(arrays)0 2108 y Fn(If)f(two)f(variables)g(refer)i (to)e(the)g(same)h(executable)g(array)g(containing)e(a)i(single)f(value)g (then)g(it)g(is)g(possible)f(to)h(change)h(the)0 2164 y(return)g(value)h(of)f (both)g(variables)g(by)g(changing)g(the)g(content)g(of)g(the)h(shared)f (array.)i(This)d(can)i(be)g(used)f(to)g(share)g(values)0 2221 y(along)j(the)h(container)g(hierarchy.)23 b(A)15 b(scoped)g(variable)g(which) f(is)h(inherited)f(shares)h(its)f(value-array)i(with)e(the)h(same)0 2277 y(scoped)c(variable)g(in)g(the)f(parent.)i(Imagine)f(that)f Fi(/a)p Fn(,)j Fi(/b)e Fn(and)g Fi(/c)h Fn(represent)g(the)f(same)f(scoped)h (variable)g(at)g(increasing)0 2334 y(levels)g(in)g(the)g(container)g (hierarchy:)0 2421 y Fi(/a)28 b({4})h(def)0 2478 y(/b)f(/a)g(load)h(def)0 2534 y(/c)f(/a)g(load)h(def)0 2647 y(\045)f(change)i(the)e(value)i(of)e(/a,)g (/b)h(AND)f(/c)0 2704 y(/a)g(load)h(0)f(5)g(put)952 2828 y Fn(37)p eop %%Page: 38 38 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)68 195 y Fh(\017)23 b Fm(Advantages)10 b Fn(Access)i(is)f(immediate.)f(Assignment)g(at)h(the)h (root)e(of)i(the)f(tree)h(is)f(immediate)f(to.)68 289 y Fh(\017)23 b Fm(Disadvantages)17 b Fn(When)i(a)g(new)g(value)f(is)h(assigned)f(to)g(a)h (scoped)g(variable)g(which)f(is)g(not)g(the)h(root)f(of)h(the)114 345 y(inheritance)14 b(tree,)i(all)f(value-arrays)g(of)f(its)g(children)g (have)h(to)f(be)h(changed.)22 b(Each)14 b(scoped)h(variable)f(must)g(be)114 402 y(known)c(in)h(advance.)h(No)f(backstop)f(possibility)f(therefore)i(only) g(a)g(system)f(defined)h(set)g(of)g(scoped)g(variables)g(is)114 458 y(allowed.)0 583 y Fg(A.9)50 b(Shared)12 b(nested)g(arrays)0 670 y Fn(Some)e(of)g(the)g(disadvantages)g(of)g(the)g(previous)f(approach)i (can)f(be)g(eliminated)f(using)h(nested)f(executable)i(arrays.)h(Each)0 726 y(executable)k(array)g(refers)g(to)f(the)g(previous)g(one)g(indirectly.) 23 b(Example,)16 b Fi(/a)p Fn(,)i Fi(/b)p Fn(,)f Fi(/c)g Fn(and)e Fi(/d)h Fn(represent)g(the)f(same)0 783 y(scoped)c(variable)h(at)f (increasing)g(levels)g(in)g(the)g(container)h(hierarchy:)0 877 y Fi(/a)28 b({4)g(exec})i(def)0 933 y(/b)e({//a)h(exec})h(def)0 990 y(/c)e({//b)h(exec})h(def)0 1046 y(/d)e({//c)h(exec})h(def)0 1159 y(\045)e(assign)i(a)d(new)i(value)g(to)g(/a,)f(/b,)h(/c)f(AND)g(/d)0 1215 y(/a)g(load)h(0)f(5)g(put)0 1328 y(\045)g(assign)i(a)d(new)i(value)g(to) g(/c)f(AND)g(/d)0 1385 y(/c)g(load)h(0)f(6)g(put)0 1498 y(\045)g(to)g(link)h (them)g(back)g(to)f(the)h(same)g(value)0 1554 y(/c)f(load)h(0)f(/b)g(load)h (put)68 1660 y Fh(\017)23 b Fm(Advantages)10 b Fn(Access)i(is)f(fast.)g (Assignment)f(at)h(all)h(levels)e(is)h(immediate.)68 1754 y Fh(\017)23 b Fm(Disadvantages)10 b Fn(Access)h(becomes)h(a)f(little)g(slower) g(as)g(the)h(number)f(of)g(nesting)g(levels)g(increase.)h(Each)g(scoped)114 1811 y(variable)h(must)g(be)h(known)f(in)g(advance.)19 b(No)13 b(backstop)g(possibility)e(therefore)k(only)e(a)g(system)g(defined)h(set)f (of)114 1867 y(scoped)e(variables)g(is)g(allowed.)952 2828 y(38)p eop %%Page: 39 39 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fl(B)58 b(TNT)14 b(extensions)0 300 y Fg(B.1)50 b(Container)12 b(hierarchy)0 370 y Fa(\045)0 410 y(\045)20 b(Implement)f(a)h(logical)f(container)h (hierarchy.)0 449 y(\045)0 528 y(ClassDrawable)f(/@parent)g(null)h(put)0 568 y(ClassDrawable)f(/Members)g(nullarray)h(put)0 646 y(/setcontainer)f({)h (\045)g(container)f(--)159 686 y(@parent)h(1)g(index)f(eq)h({pop})g({)319 725 y(@parent)f(null)h(ne)g({)478 765 y(@parent)g(/Members)f(2)h(copy)f (known)h({)638 804 y(2)f(copy)h(get)g([exch)f({)797 844 y(dup)h(self)f(eq)h ({pop})g(if)638 883 y(})f(forall])h(put)478 922 y(})g({pop)g(pop})f(ifelse) 319 962 y(})h(if)319 1001 y(dup)g(null)f(eq)h({)478 1041 y(pop)g(/@parent)f (unpromote)319 1080 y(})h({)478 1120 y(soften)g(/@parent)f(exch)h(promote)478 1159 y(@parent)g(/Members)478 1199 y(2)g(copy)g(known)f({2)h(copy)g(get})f ({//nullarray})g(ifelse)478 1238 y([self)h(soften])f(append)h(put)478 1277 y(/invalidatecontainer)f(self)g(send)319 1317 y(})h(ifelse)159 1356 y(})g(ifelse)0 1396 y(})g(/installmethod)f(ClassDrawable)g(send)0 1475 y(/container)g({)80 b(\045)20 b(--)f(container)159 1514 y(@parent)0 1553 y(})h(/installmethod)f(ClassDrawable)g(send)0 1632 y(/members)g({)120 b(\045)20 b(--)f(memberslist)159 1672 y(Members)0 1711 y(})h(/installmethod)f(ClassDrawable)g(send)0 1790 y(/invalidatecontainer)f({)40 b(\045)20 b(--)159 1829 y(valid?)g({)319 1869 y(/invalidate)f(self)h(send)319 1908 y(/members)f(self)h(send)f({/invalidatecontainer)g(exch)g(send})h(forall)159 1948 y(})g(if)0 1987 y(})g(/installmethod)f(ClassDrawable)g(send)0 2066 y(/destroy)g({)120 b(\045)20 b(--)159 2106 y(null)g(/setcontainer)f (self)h(send)159 2145 y(/Menu)g(unpromote)159 2184 y(/destroy)g(super)f(send) 0 2224 y(})h(/installmethod)f(ClassDrawable)g(send)0 2303 y(\045)0 2342 y(\045)h(set)g(the)f(containers)g(for)h(the)g(framebuffers)0 2382 y(\045)0 2460 y(/children)f(globalroot)g(send)h({)159 2500 y(globalroot)g(/setcontainer)f(3)g(-1)h(roll)g(send)0 2539 y(})g(forall)0 2618 y(\045)0 2658 y(\045)g(Make)f(sure)h(that)g (/reparent)f(in)h(ClassDrawable)f(calls)g(/setcontainer.)0 2697 y(\045)952 2828 y Fn(39)p eop %%Page: 40 40 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 235 y Fa(/reparent)19 b({)100 b(\045)20 b(parent)f(--)159 274 y(dup)h(/setcontainer)f(self)h(send) 159 313 y(soften)g(/Parent)f(exch)h(promote)0 353 y(})g(/installmethod)f (ClassDrawable)g(send)0 432 y(/reparent)g({)100 b(\045)20 b(parent)f(--)159 471 y(Mapped)h(exch)159 511 y(/reparent)g(super)f(send)159 550 y(/Mapped)h(exch)f(promote)0 589 y(})h(/installmethod)f(ClassCanvas)g (send)0 668 y(/reparent)g({)100 b(\045)20 b(parent)f(--)159 708 y(/reparent)h(super)f(send)0 747 y(})h(/installmethod)f(ClassRegion)g (send)0 826 y(\045)0 866 y(\045)h(newcanvas)f(implicitly)g(does)h(a)g (/reparent)f(so)h(we)g(must)f(execute)0 905 y(\045)h(an)g(additional)f (/setcontainer)g(when)g(a)h(canvas)g(is)f(created)0 944 y(\045)0 1023 y(ClassCanvas)g(/ClassCanvas-NewInit)g(known)g(not)h({)159 1063 y(ClassCanvas)g(/ClassCanvas-NewInit)159 1102 y(1)g(index)g(/NewInit)f (get)h(put)0 1142 y(})g(if)0 1220 y(/NewInit)f({)120 b(\045)20 b(--)159 1260 y(/ClassCanvas-NewInit)f(self)g(send)159 1299 y(Parent)h(/setcontainer)f(self)g(send)0 1339 y(})h(/installmethod)f (ClassCanvas)g(send)0 1418 y(\045)0 1457 y(\045)h(adding)f(subwindows)h (changes)f(the)h(container)f(hierarchy)0 1496 y(\045)0 1575 y(ClassWindow)g(/ClassWindow-addsubwindow)f(known)i(not)f({)159 1615 y(ClassWindow)h(/ClassWindow-addsubwindow)159 1654 y(1)g(index)g (/addsubwindow)f(get)g(put)0 1694 y(})h(if)0 1773 y(ClassWindow)f (/ClassWindow-removesubwindow)f(known)h(not)h({)159 1812 y(ClassWindow)g (/ClassWindow-removesubwindow)159 1851 y(1)g(index)g(/removesubwindow)f(get)g (put)0 1891 y(})h(if)0 1970 y(/addsubwindow)f({)179 b(\045)20 b(subwin)g(--)159 2009 y(self)g(/setcontainer)f(2)h(index)f(send)159 2049 y(/ClassWindow-addsubwindow)f(self)i(send)0 2088 y(})g(/installmethod)f (ClassWindow)g(send)0 2167 y(/removesubwindow)g({)279 b(\045)19 b(oldsubwin)h(--)159 2206 y({Parent)g(setcontainer})f(1)h(index)f(send)159 2246 y(/ClassWindow-removesubwindow)f(self)i(send)0 2285 y(})g (/installmethod)f(ClassWindow)g(send)0 2364 y(\045)0 2403 y(\045)h(setting)f (the)h(basewindow)f(of)h(a)g(notice)f(changes)h(the)f(container)h(hierarchy)0 2443 y(\045)0 2522 y(ClassNotice)f(/ClassNotice-setbasewindow)f(known)i(not)f ({)159 2561 y(ClassNotice)h(/ClassNotice-setbasewindow)159 2601 y(1)g(index)g(/setbasewindow)f(get)g(put)0 2640 y(})h(if)952 2828 y Fn(40)p eop %%Page: 41 41 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fa(/setbasewindow)19 b({)159 b(\045)20 b(basewindow)f(|)h(null)g(--)159 235 y(dup)g(null)g(eq)g ({Parent})f({dup})g(ifelse)159 274 y(Tail)h(null)g(ne)f({dup)h(/setcontainer) f(Tail)h(send})f(if)159 313 y(/setcontainer)g(self)h(send)159 353 y(/ClassNotice-setbasewindow)e(self)i(send)0 392 y(})g(/installmethod)f (ClassNotice)g(send)0 471 y(\045)0 511 y(\045)h(The)g(invoker)f(of)h(a)g (menu)f(changes)0 550 y(\045)0 629 y(ClassMenu)g(/ClassMenu-setinvoker)g (known)g(not)h({)159 668 y(ClassMenu)g(/ClassMenu-setinvoker)159 708 y(1)g(index)g(/setinvoker)f(get)h(put)0 747 y(})g(if)0 826 y(/setinvoker)f({)60 b(\045)20 b(object|null)f(--)159 866 y(/ClassMenu-setinvoker)g(self)g(send)159 905 y(Invoker)h(null)f(ne)h ({Invoker})f({Parent})h(ifelse)159 944 y(/setcontainer)f(self)h(send)0 984 y(})g(/installmethod)f(ClassMenu)g(send)0 1063 y(\045)0 1102 y(\045)h(Fix)g(a)f(bootstrapping)g(problem)h(with)f(invalidate.)0 1142 y(\045)0 1220 y(/invalidate)g({)159 1260 y(Parent)h(null)g(ne)f ({/invalidate)g(Parent)h(send})f(if)159 1299 y(/invalidate)h(super)f(send)0 1339 y(})h(/installmethod)f(ClassMenuHeader)g(send)0 1418 y(/invalidate)g({) 159 1457 y(Parent)h(null)g(ne)f({/invalidate)g(Parent)h(send})f(if)159 1496 y(/invalidate)h(super)f(send)0 1536 y(})h(/installmethod)f (ClassCommandMenu)f(send)0 1615 y(/invalidate)h({)159 1654 y(Parent)h(null)g(ne)f({/invalidate)g(Parent)h(send})f(if)159 1694 y(/invalidate)h(super)f(send)0 1733 y(})h(/installmethod)f (ClassSettingsMenu)f(send)0 1812 y(/invalidate)h({)159 1851 y(/invalidate)h(super)f(send)159 1891 y(/Center)h(/client)f(self)h(send)f({) 319 1930 y(/invalidate)g(exch)h(send)159 1970 y(})g(if)0 2009 y(})g(/installmethod)f(ClassPinnedMenu)g(send)952 2828 y Fn(41)p eop %%Page: 42 42 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(B.2)50 b(Scoped)12 b(variable)g(management)0 265 y Fa(\045)0 305 y(\045)20 b(Implement)f(lookup)h(of)f(variables)h(in)f(linked)h(lists)0 344 y(\045)0 384 y(systemdict)f(begin)0 462 y(/linkwhere)g({)80 b(\045)20 b(dict)f(linkkey)h(key)f(--)h(dict)g(true)f(|)h(false)159 502 y(3)g(1)g(roll)g(exch)f({)319 541 y(\045)h(key)f(linkkey)h(dict)319 581 y(dup)g(3)f(index)h(known)f({)478 620 y(3)h(1)g(roll)g(pop)f(pop)h(true)g (exit)319 660 y(})g(if)319 699 y(1)g(index)f(2)h(copy)g(known)f(not)h({)478 738 y(pop)g(pop)g(pop)f(pop)h(false)g(exit)319 778 y(})g(if)319 817 y(get)g(dup)f(null)h(eq)g({)478 857 y(pop)g(pop)g(pop)f(false)h(exit)319 896 y(})g(if)159 936 y(})g(loop)0 975 y(})g(def)0 1054 y(/linkget)f({)120 b(\045)20 b(dict)f(linkkey)h(key)f(--)h(value)159 1093 y(dup)g(4)g(1)g(roll)f (linkwhere)h({exch)f(get})h({cvx)f(exec})h(ifelse)0 1133 y(})g(def)0 1212 y(/linkknown)f({)80 b(\045)20 b(dict)f(linkkey)h(key)f(--)h(boolean)159 1251 y(linkwhere)g({pop)f(true})h({false})f(ifelse)0 1291 y(})h(def)0 1369 y(end)g(\045systemdict)952 2828 y Fn(42)p eop %%Page: 43 43 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(B.3)50 b(Scoped)12 b(variables)0 265 y Fa(\045)0 305 y(\045)20 b(Change)f(existing)h (TNT)f(variables)h(into)f(scoped)h(variables)0 344 y(\045)0 423 y(/makescoped)f({)60 b(\045)20 b(var-name)f(scoped-var-name)g(--)159 462 y(dup)h(/understands?)f(self)h(send)f({pop)h(pop})g({)319 502 y(2)g(copy)f(exch)h(self)g(send)f(def)319 541 y([/self)g(cvx)h(/@parent)f (4)h(-1)g(roll)g(/linkget)f(cvx])h(cvx)319 581 y(/installmethod)f(self)g (send)159 620 y(})h(ifelse)0 660 y(})g(/installmethod)f(ClassDrawable)g(send) 0 738 y(/BG0)239 b(/&BG0)378 b(/makescoped)19 b(ClassDrawable)g(send)0 778 y(/BG)259 b(/&BG)398 b(/makescoped)19 b(ClassDrawable)g(send)0 817 y(/BG2)239 b(/&BG2)378 b(/makescoped)19 b(ClassDrawable)g(send)0 857 y(/BG3)239 b(/&BG3)378 b(/makescoped)19 b(ClassDrawable)g(send)0 896 y(/FG)259 b(/&FG)398 b(/makescoped)19 b(ClassDrawable)g(send)0 936 y(/2DBG)219 b(/&2DBG)358 b(/makescoped)19 b(ClassDrawable)g(send)0 975 y(/2DFG)219 b(/&2DFG)358 b(/makescoped)19 b(ClassDrawable)g(send)0 1054 y(/3D?)239 b(/&3D?)378 b(/makescoped)19 b(ClassDrawable)g(send)0 1133 y(/TextFont)139 b(/&TextFont)278 b(/makescoped)19 b(ClassDrawable)g (send)0 1172 y(/FooterFont)99 b(/&FooterFont)238 b(/makescoped)19 b(ClassWindow)g(send)0 1212 y(/IconFont)139 b(/&IconFont)278 b(/makescoped)19 b(ClassBaseWindow)g(send)0 1251 y(/DragFrame?)99 b(/&DragFrame?)238 b(/makescoped)19 b(ClassWindow)g(send)0 1330 y(\045)0 1369 y(\045)h(Promote)f(colors)h(in)g(the)f(right)h(way)0 1409 y(\045)0 1488 y(/setallcolors)f({)h(\045)g(2dfg)f(2dbg)h(fg)g(bg0)f(bg)h (bg2)g(bg3)g(=>)f(-)159 1527 y(/&BG3)h(exch)g(promote)159 1567 y(/&BG2)g(exch)g(promote)159 1606 y(/&BG)40 b(exch)20 b(promote)159 1645 y(/&BG0)g(exch)g(promote)159 1685 y(/&FG)40 b(exch)20 b(promote)159 1724 y(/&2DBG)g(exch)g(promote)159 1764 y(/&2DFG)g(exch)g (promote)159 1803 y(self)g(isinstance?)f({)319 1843 y(/invalidatecontainer)f (self)i(send)159 1882 y(})g(if)0 1922 y(})g(/installmethod)f(ClassDrawable)g (send)0 2000 y(/setcolors)g({)h(\045)g(fg)g(bg)f(=>)h(-)159 2040 y(3D?)g({)319 2079 y(\045)g(REMIND)f(:)h(These)g(are)f(not)h(correct.) 319 2119 y(dup)g(+.80)f(ChangeBrightness)g(/&BG0)g(exch)h(promote)319 2158 y(dup)g(-.15)f(ChangeBrightness)g(/&BG2)g(exch)h(promote)319 2198 y(dup)g(-.50)f(ChangeBrightness)g(/&BG3)g(exch)h(promote)319 2237 y(/&BG)f(exch)h(promote)319 2276 y(/&FG)f(exch)h(promote)159 2316 y(}{)319 2355 y(/&2DBG)f(exch)h(promote)319 2395 y(/&2DFG)f(exch)h (promote)159 2434 y(})g(ifelse)159 2513 y(self)g(isinstance?)f({)319 2552 y(/invalidatecontainer)f(self)i(send)159 2592 y(})g(if)0 2631 y(})g(/installmethod)f(ClassDrawable)g(send)952 2828 y Fn(43)p eop %%Page: 44 44 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fa(\045)0 235 y(\045)20 b(Set)g(the)f(text)h(font)g(properly)0 274 y(\045)0 353 y(ClassNotice)f(/TextFont)g(undef)0 392 y(ClassLabel)g(/TextFont)g(undef) 0 432 y(ClassWindow)g(/TextFont)g(undef)0 471 y(ClassSettings)g(/TextFont)g (undef)0 511 y(ClassMenuHeader)g(/TextFont)g(undef)0 550 y(ClassCommandMenu)g (/TextFont)g(undef)0 629 y(/settextfont)g({)h(\045)g(font)f(=>)h(-)159 668 y(/ModifyFont)g(self)f(send)159 708 y(/&TextFont)h(exch)f(promote)159 747 y(self)h(isinstance?)f({)319 787 y(/invalidatecontainer)f(self)i(send)159 826 y(})g(if)0 866 y(})g(/installmethod)f(ClassDrawable)g(send)0 944 y(\045)0 984 y(\045)h(Promote)f(the)h(/&3D?)g(variable)f(properly)0 1023 y(\045)0 1102 y(/set3D)g({)160 b(\045)20 b(boolean|proc)f(--)159 1142 y(/&3D?)h(exch)g(promote)159 1181 y(self)g(isinstance?)f({)319 1220 y(/invalidatecontainer)f(self)i(send)159 1260 y(})g(if)0 1299 y(})g(/installmethod)f(ClassDrawable)g(send)952 2828 y Fn(44)p eop %%Page: 45 45 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(B.4)50 b(Naming)13 b(objects)0 265 y Fa(\045)0 305 y(\045)20 b(Make)f(sure)h(that)g (all)f(UI)h(components)f(have)h(names)g(which)0 344 y(\045)g(are)g(unique)f (within)h(exch)f(container)g(and)h(which)g(are)0 384 y(\045)g(known)f(in)h (the)g(scope)f(of)h(the)g(parent)f(container.)0 423 y(\045)0 502 y(/setname)g({)120 b(\045)20 b(name)f(--)159 541 y(dup)h(dup)g(length)f (string)h(cvs)f(0)h(get)g(64)g(ne)g({)319 581 y(\(@\045\))f(sprintf)h(cvn)159 620 y(})g(if)159 660 y(@parent)g(null)f(eq)h({)319 699 y(/setname)f(super)h (send)159 738 y(})g({)319 778 y(@parent)f(1)h(index)g(known)f({pop})h({)478 817 y(/named?)g(self)f(send)h({)638 857 y(@parent)f(/name)h(self)f(send)h (undef)478 896 y(})g(if)478 936 y(dup)g(/setname)f(super)h(send)478 975 y(@parent)g(exch)f(self)h(soften)f(put)319 1014 y(})h(ifelse)159 1054 y(})g(ifelse)0 1093 y(})g(/installmethod)f(ClassDrawable)g(send)0 1172 y(\045)h(overwrite)f(the)h(one)g(from)f('contain.psh')0 1212 y(/setcontainer)g({)h(\045)g(container)f(--)159 1251 y(@parent)h(1)g (index)f(eq)h({pop})g({)319 1291 y(@parent)f(null)h(ne)g({)478 1330 y(/named?)g(self)f(send)h({)638 1369 y(@parent)f(/name)h(self)f(send)h (undef)478 1409 y(})g(if)478 1448 y(@parent)g(/Members)f(2)h(copy)f(known)h ({)638 1488 y(2)f(copy)h(get)g([exch)f({)797 1527 y(dup)h(self)f(eq)h({pop})g (if)638 1567 y(})f(forall])h(put)478 1606 y(})g({pop)g(pop})f(ifelse)319 1645 y(})h(if)319 1685 y(dup)g(null)f(eq)h({)478 1724 y(pop)g(/@parent)f (unpromote)319 1764 y(})h({)478 1803 y(soften)g(/@parent)f(exch)h(promote)478 1843 y(/named?)g(self)f(send)h({)638 1882 y(@parent)f(/name)h(self)f(send)h (known)478 1922 y(})g({true})g(ifelse)f({)638 1961 y(1)g(1)h(10000)g({)797 2000 y(/newnamestr)f(self)h(send)f(sprintf)h(cvn)797 2040 y(@parent)f(1)h (index)g(known)797 2079 y(not)g({exit})f(if)h(pop)638 2119 y(})f(for)638 2158 y(/setname)g(super)g(send)478 2198 y(})h(if)478 2237 y(@parent)g(/name)f(self)h(send)f(self)h(soften)g(put)478 2276 y(@parent)g(/Members)478 2316 y(2)g(copy)g(known)f({2)h(copy)g(get})f ({//nullarray})g(ifelse)478 2355 y([self)h(soften])f(append)h(put)478 2395 y(/invalidatecontainer)f(self)g(send)319 2434 y(})h(ifelse)159 2474 y(})g(ifelse)0 2513 y(})g(/installmethod)f(ClassDrawable)g(send)0 2592 y(/destroy)g({)120 b(\045)20 b(--)159 2631 y(@parent)g(null)f(ne)h({)319 2671 y(/named?)f(self)h(send)f({)952 2828 y Fn(45)p eop %%Page: 46 46 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)478 195 y Fa(@parent)20 b(/name)f(self)h(send)f(undef)319 235 y(})h(if)319 274 y(null)f (/setcontainer)g(self)h(send)159 313 y(})g(if)159 353 y(/Members)g(unpromote) 159 392 y(/Menu)g(unpromote)159 432 y(/destroy)g(super)f(send)0 471 y(})h(/installmethod)f(ClassDrawable)g(send)0 550 y(\045)0 589 y(\045)h(These)f(are)h(the)g(name)f(templates)h(used)f(to)h(generate)f (unique)h(names)0 629 y(\045)0 708 y(ClassObject)f(/newnamestr)g (\(@object\045\))g(put)0 747 y(ClassCanvas)g(/newnamestr)g(\(@canvas\045\))g (put)0 787 y(ClassPanel)g(/newnamestr)g(\(@panel\045\))h(put)0 826 y(ClassButtons)f(/newnamestr)g(\(@buttons\045\))g(put)0 866 y(ClassSettings)g(/newnamestr)g(\(@settings\045\))g(put)0 905 y(ClassHGauge)g(/newnamestr)g(\(@gauge\045\))g(put)0 944 y(ClassLabel)g(/newnamestr)g(\(@label\045\))h(put)0 984 y(ClassVScrollbar)f (/newnamestr)g(\(@scrollbar\045\))g(put)0 1023 y(ClassHSlider)g(/newnamestr)g (\(@slider\045\))g(put)0 1063 y(ClassScrollList)g(/newnamestr)g (\(@list\045\))g(put)0 1102 y(ClassFramebuffer)g(/newnamestr)g (\(@framebuffer\045\))g(put)0 1142 y(ClassWindow)g(/newnamestr)g (\(@window\045\))g(put)0 1181 y(ClassMenu)g(/newnamestr)g(\(@menu\045\))h (put)0 1220 y(ClassTextCanvas)f(/newnamestr)g(\(@text\045\))g(put)0 1299 y(\045)0 1339 y(\045)h(assign)f(names)h(to)g(the)f(frame)h(buffers)0 1378 y(\045)0 1457 y(globalroot)f(/@parent)h(null)f(put)0 1496 y(/@root)g(/setname)h(globalroot)f(send)0 1536 y(1)h(/children)f(globalroot)g (send)h({)159 1575 y(dup)g(/@parent)f(globalroot)h(soften)f(put)159 1615 y(1)h(index)g(\(@framebuffer\045\))f(sprintf)g(cvn)159 1654 y(/setname)h(3)g(-1)f(roll)h(send)159 1694 y(1)g(add)0 1733 y(})g(forall)f(pop)952 2828 y Fn(46)p eop %%Page: 47 47 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(B.5)50 b(Addressing)13 b(objects)0 265 y Fa(\045)0 305 y(\045)20 b(Find)f(an)h (object)g(given)f(an)h(address.)f(An)h(address)g(is)f(either)0 344 y(\045)h(an)g(object)f(name)h(or)g(a)f(path)h(of)g(object)f(names.)0 384 y(\045)0 462 y(/findobject)g({)60 b(\045)20 b(null|instance|name|path)e (--)i(instance|null)159 502 y(dup)g(type)g(/arraytype)f(eq)h({)319 541 y(dup)g(0)f(get)h(/findobject)f(self)h(send)f(dup)h(null)g(ne)g({)478 581 y(exch)g(1)g(1)g(index)f(length)h(1)f(sub)h(getinterval)f({)638 620 y(2)g(copy)h(known)g(not)f({)797 660 y(pop)h(pop)f(null)h(exit)638 699 y(})f(if)638 738 y(get)478 778 y(})h(forall)319 817 y(})g({exch)f(pop})h (ifelse)159 857 y(})g({)319 896 y(dup)g(null)f(ne)h({)478 936 y(dup)g(type)g(/nametype)f(eq)h({)638 975 y(self)f(/@parent)h(2)f(index)h (linkwhere)f({)797 1014 y(exch)h(get)638 1054 y(})f({pop)h(null})g(ifelse)478 1093 y(})g({)638 1133 y(dup)f(isinstance?)g(not)h({pop)g(null})f(if)478 1172 y(})h(ifelse)319 1212 y(})g(if)159 1251 y(})g(ifelse)0 1291 y(})g(/installmethod)f(ClassDrawable)g(send)0 1369 y(/address)g({)120 b(\045)20 b(--)f(path)159 1409 y(@parent)h(null)f(ne)h({)319 1448 y(/address)f(@parent)h(send)f([/name)h(self)f(send])h(append)159 1488 y(})g({)319 1527 y([/name)f(self)h(send])159 1567 y(})g(ifelse)0 1606 y(})g(/installmethod)f(ClassDrawable)g(send)0 1685 y(\045)0 1724 y(\045)h(Install)f(@canvas)h(generic)f(name)h(in)f(ClassCanvas)0 1764 y(\045)0 1843 y(ClassCanvas)g(/ClassCanvas-destroy)g(known)g(not)h({)159 1882 y(ClassCanvas)g(/ClassCanvas-destroy)e(1)i(index)f(/destroy)h(get)f(put) 0 1922 y(})h(if)0 1961 y(ClassCanvas)f(/ClassCanvas-NewInit)g(known)g(not)h ({)159 2000 y(ClassCanvas)g(/ClassCanvas-NewInit)e(1)i(index)f(/NewInit)h (get)f(put)0 2040 y(})h(if)0 2119 y(/NewInit)f({)120 b(\045)20 b(--)159 2158 y(/ClassCanvas-NewInit)f(self)g(send)159 2198 y(Parent)h(/setcontainer)f(self)g(send)159 2237 y(/@canvas)h(self)f(soften)h (promote)0 2276 y(})g(/installmethod)f(ClassCanvas)g(send)0 2355 y(/destroy)g({)120 b(\045)20 b(--)159 2395 y(/@canvas)g(unpromote)159 2434 y(/ClassCanvas-destroy)f(self)g(send)0 2474 y(})h(/installmethod)f (ClassCanvas)g(send)0 2552 y(\045)0 2592 y(\045)h(Install)f(@window)h (generic)f(name)h(in)f(ClassCanvas)0 2631 y(\045)952 2828 y Fn(47)p eop %%Page: 48 48 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fa(ClassWindow)19 b(/ClassWindow-destroy)g(known)g(not)h({)159 235 y(ClassWindow)g (/ClassWindow-destroy)e(1)i(index)f(/destroy)h(get)f(put)0 274 y(})h(if)0 313 y(ClassWindow)f(/ClassWindow-NewInit)g(known)g(not)h({)159 353 y(ClassWindow)g(/ClassWindow-NewInit)e(1)i(index)f(/NewInit)h(get)f(put)0 392 y(})h(if)0 471 y(/NewInit)f({)120 b(\045)20 b(--)159 511 y(/ClassWindow-NewInit)f(self)g(send)159 550 y(Parent)h(/setcontainer)f(self) g(send)159 589 y(/@window)h(self)f(soften)h(promote)0 629 y(})g (/installmethod)f(ClassWindow)g(send)0 708 y(/destroy)g({)120 b(\045)20 b(--)159 747 y(/@window)g(unpromote)159 787 y(/ClassWindow-destroy) f(self)g(send)0 826 y(})h(/installmethod)f(ClassWindow)g(send)0 905 y(\045)0 944 y(\045)h(Modify)f(the)h(/target)f(method)h(of)g (ClassControl)f(so)g(that)0 984 y(\045)h(a)g(target)f(can)h(be)g(an)f (adress.)0 1023 y(\045)0 1102 y(/target)g({)140 b(\045)20 b(--)f(object)159 1142 y(Target)h(findobject)0 1181 y(})g(/installmethod)f(ClassControl)g(send) 952 2828 y Fn(48)p eop %%Page: 49 49 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(B.6)50 b(Sending)12 b(messages)0 265 y Fa(\045)0 305 y(\045)20 b(Robust)f(message)h (sending.)f(/findobject)g(is)h(used)g(to)0 344 y(\045)g(establish)f(a)h (target,)f(/deliver)h(is)f(used)h(to)g(deliver)0 384 y(\045)g(the)g(message)f (to)h(the)f(reciever.)0 423 y(\045)h(The)g(/SendCTX)f(field)g(in)h(the)g (currentprocess)f(dict)g(is)h(the)0 462 y(\045)g(operand)f(stack)h(of)g(the)f (previous)h(context)f(and)h(contains)0 502 y(\045)g(the)g(sender)f (information.)0 541 y(\045)0 620 y(/SendCTXget)g({)60 b(\045)20 b(n)g(--)f(null|thing)159 660 y(currentprocess)g(/SendCTX)h(2)f(copy)h(known) g({)319 699 y(get)g(dup)f(length)h(3)g(-1)f(roll)h(sub)g(get)159 738 y(})g({pop)g(pop)g(pop)f(null})h(ifelse)0 778 y(})g(/installmethod)f (ClassDrawable)g(send)0 857 y(/SendReciever)59 b({2)20 b(SendCTXget})f (/installmethod)g(ClassDrawable)g(send)0 896 y(/SendSender)99 b({3)20 b(SendCTXget})f(/installmethod)g(ClassDrawable)g(send)0 936 y(/SendTarget)99 b({4)20 b(SendCTXget})f(/installmethod)g(ClassDrawable)g (send)0 975 y(/SendMessage)79 b({5)20 b(SendCTXget})f(/installmethod)g (ClassDrawable)g(send)0 1014 y(/SendArgs)139 b({6)20 b(SendCTXget})f (/installmethod)g(ClassDrawable)g(send)0 1093 y(/Send)h({)179 b(\045)20 b(args)f(message)h(target)f(--)159 1133 y(/findobject)h(self)f (send)h(dup)f(null)h(eq)g({pop)f(pop)h(pop})g({)319 1172 y(self)f(soften)h (null)319 1212 y(currentprocess)f(/SendCTX)g(2)h(copy)f(known)h({get})g({)478 1251 y(pop)g(pop)g(4)f(array)319 1291 y(})h(ifelse)319 1369 y(currentprocess)f(/OperandStack)g(get)319 1409 y(currentprocess)g(/SendCTX)g (3)h(-1)g(roll)f(put)319 1488 y(clear)g(SendArgs)h(aload)f(pop)h(SendMessage) 319 1527 y(/deliver)f(SendTarget)g(send)319 1606 y(clear)g(currentprocess)g (/SendCTX)h(get)f(aload)h(pop)319 1645 y(currentprocess)f(/SendCTX)g(3)h(-1)g (roll)f(put)319 1685 y(pop)h(pop)f(pop)h(pop)g(pop)159 1724 y(})g(ifelse)0 1764 y(})g(/installmethod)f(ClassDrawable)g(send)952 2828 y Fn(49)p eop %%Page: 50 50 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(B.7)50 b(Delivering)12 b(messages)0 265 y Fa(\045)0 305 y(\045)20 b(Deliver)f(a)h(message)g(to)f(the)h(first)g(object)f(in)h(the)0 344 y(\045)g(container)f(hierarchy)g(which)h(understands)f(it.)0 384 y(\045)0 462 y(/deliverself)g({)40 b(\045)20 b(args..)f(message)h(--)159 502 y(currentprocess)f(/ErrorDetailLevel)g(1)h(put)159 541 y(currentprocess)f(/SendCTX)h(2)f(copy)h(known)g({)319 581 y(get)g(dup)f(length)h(2)g(sub)f(self)h(soften)f(put)159 620 y(})h({pop)g(pop})g(ifelse)159 699 y(/log)g(self)g(send)159 738 y({cvx)g(exec})g(stopped)f({)319 778 y(/error)g(self)h(send)159 817 y(})g(if)0 857 y(})g(/installmethod)f(ClassDrawable)g(send)0 936 y(/deliverparent)g({)159 b(\045)20 b(args..)g(message)f(--)159 975 y(@parent)h(null)f(ne)h({)319 1014 y(/deliver)f(@parent)h(send)159 1054 y(})g({)319 1093 y(/log)f(self)h(send)159 1133 y(})g(ifelse)0 1172 y(})g(/installmethod)f(ClassDrawable)g(send)0 1251 y(/deliver)g({)120 b(\045)20 b(args...)f(message)g(--)159 1291 y(dup)h(/understands?)f(self)h (send)f({)319 1330 y(/deliverself)g(self)g(send)159 1369 y(})h({)319 1409 y(/deliverparent)f(self)g(send)159 1448 y(})h(ifelse)0 1488 y(})g(/installmethod)f(ClassDrawable)g(send)952 2828 y Fn(50)p eop %%Page: 51 51 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(B.8)50 b(Error)13 b(handling)0 265 y Fa(\045)0 305 y(\045)20 b(Error)f(handler)0 344 y(\045)0 423 y(ClassDrawable)g(/&reporterrors?)g(true)g(put)0 462 y(/reporterrors?)g({)159 b(\045)20 b(--)g(boolean)159 502 y(self)g(/@parent)f(/&reporterrors?)g(linkget)0 541 y(})h(/installmethod)f (ClassDrawable)g(send)0 620 y(/error)g({)160 b(\045)20 b(--)159 660 y(reporterrors?)f({)319 699 y(currentprocess)g(/errordict)g(known)g({)478 738 y(currentprocess)g(/$error)g(get)h(/newerror)f(get)h({)638 778 y(currentprocess)e(/$error)i(get)g(begin)638 817 y(console)f(\(***)h (error)f(***\\n\))h(writestring)638 857 y(console)f(message)g(writestring)638 896 y(console)g(flushfile)638 936 y(end)478 975 y(})h(if)319 1014 y(})g(if)159 1054 y(})g(if)0 1093 y(})g(/installmethod)f(ClassDrawable)g (send)952 2828 y Fn(51)p eop %%Page: 52 52 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(B.9)50 b(Message)14 b(logging)0 265 y Fa(\045)0 305 y(\045)20 b(log)g(message)f(to)h (the)f(console)0 344 y(\045)0 423 y(ClassDrawable)g(/&log?)g(true)h(put)0 462 y(/log?)g({)f(\045)h(--)g(boolean)159 502 y(self)g(/@parent)f(/&log?)h (linkget)0 541 y(})g(/installmethod)f(ClassDrawable)g(send)0 620 y(/logstr)g({)140 b(\045)20 b(--)f(str)159 660 y(SendTarget)h (SendReciever)f(eq)g({)319 699 y(SendSender)g(SendReciever)g(eq)h({)478 738 y(SendReciever)f(dup)h(null)g(ne)f({/namestr)h(exch)f(send})h(if)319 778 y(})g({)478 817 y(\(\045)g(to)g(\045\))g([)638 857 y(SendSender)f(dup)g (null)h(ne)g({/namestr)f(exch)h(send})f(if)638 896 y(SendReciever)g(dup)g (null)h(ne)g({/namestr)f(exch)h(send})f(if)478 936 y(])h(sprintf)319 975 y(})g(ifelse)159 1014 y(})g({)319 1054 y(\(\045)g(via)f(\045)h(to)g (\045\))g([)478 1093 y(SendSender)f(dup)h(null)g(ne)f({/namestr)h(exch)f (send})h(if)478 1133 y(SendTarget)f(dup)h(null)g(ne)f({/namestr)h(exch)f (send})h(if)478 1172 y(SendReciever)f(dup)h(null)g(ne)f({/namestr)h(exch)f (send})h(if)319 1212 y(])g(sprintf)159 1251 y(})g(ifelse)159 1291 y(\(--)g(\045\\\(\))g([SendMessage])f(sprintf)g(append)159 1330 y(0)h(1)g(SendArgs)f(length)h(1)g(sub)f({)319 1369 y(dup)h(0)f(gt)h ({exch)g(\(,\))f(append)h(exch})f(if)319 1409 y(SendArgs)g(exch)h(get)f(200)h (string)g(cvs)f(append)159 1448 y(})h(for)159 1488 y(\(\\\)\))g(append)0 1527 y(})g(/installmethod)f(ClassDrawable)g(send)0 1606 y(/log)h({)199 b(\045)20 b(--)159 1645 y(log?)g({)319 1685 y(console)f(/logstr)h(self)f (send)h(writestring)319 1724 y(console)f(\(\\n\))h(writestring)319 1764 y(console)f(flushfile)159 1803 y(})h(if)0 1843 y(})g(/installmethod)f (ClassDrawable)g(send)952 2828 y Fn(52)p eop %%Page: 53 53 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(B.10)50 b(Control)12 b(actions)0 265 y Fa(\045)0 305 y(\045)20 b(Change)f (ExecuteNotifier)g(in)h(ClassControl)f(so)h(that)f(it)h(uses)g('Send')0 344 y(\045)0 423 y(ClassControl)f(/Notifier)g(/Action)h(put)0 502 y(ClassControl)f(/ClassControl-ExecuteNotifier)f(known)h(not)h({)159 541 y(ClassControl)f(/ClassControl-ExecuteNotifier)159 581 y(1)h(index)g(/ExecuteNotifier)f(get)g(put)0 620 y(})h(if)0 699 y(/ExecuteNotifier)f({)119 b(\045)20 b(value)g(notifier)f(--)159 738 y(dup)h(null)g(ne)g(1)f(index)h(xcheck)f(not)h(and)g(/target)f(self)h (send)f(null)h(eq)g(and)g({)319 778 y(exch)f([exch)h(NotificationObject])e (exch)40 b(self)20 b(/Send)f(self)319 817 y(\045)h([value])f(notifier)g(self) h(/Send)g(self)319 857 y(5)g(array)f(astore)319 896 y(/sendmanager)g (/eventmgr)g(self)h(send)f(send)159 936 y(})h({)319 975 y (/ClassControl-ExecuteNotifier)e(self)h(send)159 1014 y(})h(ifelse)0 1054 y(})g(/installmethod)f(ClassControl)g(send)952 2828 y Fn(53)p eop %%Page: 54 54 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(B.11)50 b(Resource)13 b(manager)0 265 y Fa(\045)0 305 y(\045)20 b(A)g(brain)f(dead)h (resource)f(manager.)0 344 y(\045)0 384 y(systemdict)g(begin)0 462 y(/ClassResourceMgr)g(ClassObject)g([])h(classbegin)0 541 y(/paths)f([)159 581 y(\(HOME\))h(getenv)f(\(/rsrc\))h(append)159 620 y(\(HOME\))g(getenv)f(\(/cool/rsrc\))g(append)159 660 y(\(COOLHOME\))h (\(/usr/local/cool\))e(?getenv)i(\(/rsrc\))f(append)0 699 y(])h(def)0 778 y(/find)g({)f(\045)h(rsrcname)g(--)f(path)h(file)g(true)f(|)h(rsrcname)f (false)159 817 y(dup)h(length)g(string)f(cvs)h(paths)f(\(r\))h(filepathopen)0 857 y(})g(def)0 936 y(classend)f(def)h(\045ClassResourceMgr)0 1014 y(/resourcemgr)f(/new)h(ClassResourceMgr)e(send)i(def)0 1093 y(end)g(\045systemdict)952 2828 y Fn(54)p eop %%Page: 55 55 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(B.12)50 b(Auto)12 b(dictionaries)0 265 y Fa(\045)0 305 y(\045)20 b(A)g(dictionary)f (class)g(that)h(automatically)f(undefs)g(every)0 344 y(\045)h(key)g(when)f (the)h(value)f(becomes)h(obsolete.)f(Note)h(that)f(the)0 384 y(\045)h(dictionary)f(also)h(contains)f(the)h(/ParentDictArray)e(key!)0 423 y(\045)0 462 y(systemdict)h(begin)0 541 y(/ClassAutoDict)g(ClassObject)g ([])h(classbegin)0 581 y(/HandleObsoleteTarget)e({)i(\045)g(val)g(--)159 620 y(self)g({)319 660 y(2)g(index)f(eq)h({)478 699 y(self)g(exch)f(undef)h (exit)319 738 y(})g(if)f(pop)159 778 y(})h(forall)g(pop)0 817 y(})g(def)0 896 y(/addkey)f({)140 b(\045)20 b(key)f(val)h(--)159 936 y(soften)159 975 y(dup)g(self)g(/addclient)f(ObsoleteService)g(send)159 1014 y(promote)0 1054 y(})h(def)0 1093 y(classend)f(def)h(\045ClassAutoDict)0 1172 y(end)g(\045systemdict)952 2828 y Fn(55)p eop %%Page: 56 56 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(B.13)50 b(Plug-in)12 b(classes)0 265 y Fa(\045)0 305 y(\045)20 b(A)g(ResourceClass)f (manager.)g(The)h(FIX)f(to)h(classbegin)f(ensures)h(that)0 344 y(\045)g(super)f(class)h(names)g(can)f(be)h(used)g(instead)f(of)h(super)f (class)h(instances.)0 384 y(\045)0 423 y(systemdict)f(begin)0 502 y(ClassObject)g(/classfile)g(null)h(put)0 581 y(/ClassResourceClassMgr)e (ClassObject)h([])h(classbegin)0 620 y(/classdict)f(nulldict)h(def)0 660 y(/rsrcmgr)f(resourcemgr)g(def)0 738 y(/FIX)h(dictbegin)0 778 y(/classbegin)f({)60 b(\045)20 b(supers)f(instancevars)g(--)h(supers')39 b(instancevars)159 817 y(exch)20 b(dup)g(isarray?)f(not)h({[exch]})f(if)159 857 y([exch)h({)319 896 y(dup)g(type)f(/nametype)g(eq)h({)478 936 y(/find)g(classmgr)f(send)319 975 y(})h(if)159 1014 y(})g(forall])159 1054 y(exch)g(systemdict)f(/classbegin)g(get)h(exec)0 1093 y(})g(def)0 1133 y(dictend)f(def)0 1212 y(/find)h({)179 b(\045)20 b(classname)f(--)h(class|null)159 1251 y(classdict)g(1)g(index)f(known)h({) 319 1291 y(classdict)f(exch)h(get)159 1330 y(})g({)319 1369 y(dup)g(\(\045.class.ps\))f(sprintf)g(/find)g(rsrcmgr)h(send)g({)478 1409 y(\045)g(classname)f(path)h(file)478 1448 y(console)g(\(LOAD)f (\045\\n\))h([4)g(index])f(fprintf)478 1488 y(//FIX)h(begin)f(2)h(index)g (exch)f(cvx)h(exec)g(end)f(exch)h(pop)478 1527 y(\045)g(classname)f(path)h (class)478 1567 y(dup)g(/classfile)f(4)h(-1)g(roll)f(put)478 1606 y(dup)h(3)g(1)g(roll)478 1645 y(/classdict)f(promoted?)h(not)f({)638 1685 y(/classdict)g(/new)g(ClassAutoDict)g(send)h(promote)478 1724 y(})g(if)478 1764 y(/addkey)g(/classdict)f(self)g(send)h(send)319 1803 y(})g({)478 1843 y(pop)g(systemdict)f(1)h(index)f(known)h({)638 1882 y(systemdict)f(exch)g(get)h(exec)478 1922 y(})g({pop)g(null})f(ifelse) 319 1961 y(})h(ifelse)159 2000 y(})g(ifelse)0 2040 y(})g(def)0 2119 y(currentdict)f(/FIX)h(undef)0 2198 y(classend)f(def)h (\045ClassResourceClassMgr)0 2276 y(/classmgr)f(/new)h(ClassResourceClassMgr) e(send)i(def)0 2355 y(end)g(\045systemdict)952 2828 y Fn(56)p eop %%Page: 57 57 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(B.14)50 b(Shared)12 b(classes)0 265 y Fa(\045)0 305 y(\045)20 b(Implement)f(script)h (classes.)0 344 y(\045)0 423 y(/scriptclass)f({)40 b(\045)20 b(--)f(class|null)159 462 y(/script)h(where)f(not)h({null})g(if)0 502 y(})g(/installmethod)f(ClassObject)g(send)0 581 y(/baseclass)g({)80 b(\045)20 b(--)f(class)159 620 y(/superclasses)g(self)h(send)g(dup)f(length)h (1)g(sub)159 660 y(/scriptclass)f(self)h(send)g(null)f(ne)h({1)g(sub})f(if) 159 699 y(get)0 738 y(})h(/installmethod)f(ClassObject)g(send)0 817 y(/getscript)g({)80 b(\045)20 b(--)f(string|null)159 857 y(/scriptclass)g(self)h(send)g(dup)f(null)h(ne)g({/script)f(get})h(if)0 896 y(})g(/installmethod)f(ClassObject)g(send)0 975 y(/findscriptclass)g({)h (\045)f(script)h(--)g(class)159 1014 y(\045)g(script)159 1054 y(self)g(dup)g(/scriptclassdict)e(known)i(not)g({)319 1093 y(dup)g(/scriptclassdict)e(/new)i(ClassAutoDict)f(send)g(put)159 1133 y(})h(if)159 1212 y(\045)g(script)g(baseclass)159 1251 y(dup)g(/scriptclassdict)f(get)h(2)f(index)h(known)f({)319 1291 y(/scriptclassdict)g(get)g(exch)h(get)g(harden)159 1330 y(})g({)319 1369 y(/visible?)f(self)h(send)f({)478 1409 y(console)h(\(SCRIPT) f(CLOSE\\n\))g([])h(fprintf)478 1448 y(/OnClose)g(self)f(send)319 1488 y(})h(if)319 1567 y(\045)g(script)f(class)319 1606 y(/classname)g(1)h (index)f(send)h(\(\045-script\))f(sprintf)h(cvn)f(1)h(index)g([])319 1685 y(\045)g(script)f(class)h(class-name)f(class)g([])319 1724 y(classbegin)g(1)h(index)f(cvx)h(exec)g(classend)f(exch)h(pop)319 1803 y(\045)g(script)f(class)h(script-class)319 1843 y(dup)g(/script)f(4)h (index)f(put)319 1882 y(exch)g(3)h(copy)g(/scriptclassdict)f(get)g(/addkey)h (exch)f(send)319 1922 y(pop)h(exch)f(pop)319 2000 y(/visible?)g(self)h(send)f ({)478 2040 y(console)h(\(SCRIPT)f(OPEN\\n\))g([])h(fprintf)478 2079 y(/OnOpen)g(self)f(send)319 2119 y(})h(if)159 2158 y(})g(ifelse)0 2198 y(})g(/installmethod)f(ClassObject)g(send)0 2276 y(/setscript)g({)80 b(\045)20 b(script)f(--)159 2316 y(/baseclass)h(self)f(send)159 2355 y(/findscriptclass)g(exch)h(send)159 2395 y(/ParentDictArray)f(exch)h (promote)0 2434 y(})g(/installmethod)f(ClassObject)g(send)952 2828 y Fn(57)p eop %%Page: 58 58 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(B.15)50 b(Creating)12 b(default)f(components)0 265 y Fa(\045)0 305 y(\045)20 b(Create)f(an)h(initialized)f(object)h(from)f(scratch)0 344 y(\045)0 423 y(/newdefault)g({)60 b(\045)20 b(parent)f(--)h(instance)159 462 y(/new)g(self)g(send)159 502 y(0)g(0)g(100)g(50)g(/reshape)f(5)h(index)f (send)0 541 y(})h(/installmethod)f(ClassRegion)g(self)g(send)0 620 y(/newdefault)g({)60 b(\045)20 b(parent)f(--)h(instance)159 660 y(\(Example)g(Label\))f(exch)h(/new)f(self)h(send)0 699 y(})g(/installmethod)f(ClassLabel)g(send)0 778 y(/newdefault)g({)60 b(\045)20 b(parent)f(--)h(instance)159 817 y(/Spaced)g(exch)f(/new)h(self)g (send)159 857 y([\(One\))g(\(Two\))f(\(Three\)])h(/setitemlist)f(2)h(index)f (send)159 896 y(/Exclusive)h(/setchoicemode)e(2)i(index)g(send)0 936 y(})g(/installmethod)f(ClassSettings)g(send)0 1014 y(/newdefault)g({)60 b(\045)20 b(parent)f(--)h(instance)159 1054 y(/Spaced)g(exch)f(/new)h(self)g (send)159 1093 y([\(One\))g(\(Two\))f(\(Three\)])h(/setitemlist)f(2)h(index)f (send)159 1133 y(8)h(8)g(/setgaps)f(3)h(index)g(send)159 1172 y(0)g(/setdefault)f(2)h(index)g(send)0 1212 y(})g(/installmethod)f (ClassButtons)g(send)0 1291 y(/newdefault)g({)60 b(\045)20 b(parent)f(--)h(instance)159 1330 y(/Spaced)g(exch)f(/new)h(self)g(send)159 1369 y([[\(File\))g(/Grid)f(framebuffer)g(/new)h(ClassMenu)f(send)319 1409 y([\(Save\))g(\(Store\))h(\(Load\)])f(/setitemlist)g(2)h(index)f(send) 319 1448 y(0)h(/setdefault)f(2)h(index)f(send])159 1488 y([\(Edit\))h(/Grid)f (framebuffer)g(/new)h(ClassMenu)f(send)319 1527 y([\(Undo\))g(\(Copy\))h (\(Paste\)])f(/setitemlist)g(2)h(index)f(send)319 1567 y(1)h(/setdefault)f(2) h(index)f(send])159 1606 y(])h(/setitemlist)f(2)h(index)g(send)159 1645 y(8)g(8)g(/setgaps)f(3)h(index)g(send)159 1685 y(1)g(/Right)g (/setmenudirection)e(3)i(index)g(send)0 1724 y(})g(/installmethod)f (ClassMenuButtons)f(send)0 1803 y(/newdefault)h({)60 b(\045)20 b(parent)f(--)h(instance)159 1843 y(/new)g(self)g(send)159 1882 y(37)g(/setvalue)f(2)h(index)g(send)0 1922 y(})g(/installmethod)f (ClassHGauge)g(send)0 2000 y(/newdefault)g({)60 b(\045)20 b(parent)f(--)h (instance)159 2040 y(/new)g(self)g(send)159 2079 y(0)g(10)g(100)g (/setparameters)f(4)g(index)h(send)159 2119 y(0)g(0)g(15)g(100)g(/reshape)f (5)h(index)f(send)0 2158 y(})h(/installmethod)f(ClassVScrollbar)g(send)0 2237 y(/newdefault)g({)60 b(\045)20 b(parent)f(--)h(instance)159 2276 y(/new)g(self)g(send)159 2316 y(0)g(10)g(100)g(/setparameters)f(4)g (index)h(send)159 2355 y(0)g(0)g(100)g(15)g(/reshape)f(5)h(index)f(send)0 2395 y(})h(/installmethod)f(ClassHScrollbar)g(send)0 2474 y(/newdefault)g({) 60 b(\045)20 b(parent)f(--)h(instance)159 2513 y(/new)g(self)g(send)159 2552 y(37)g(/setvalue)f(2)h(index)g(send)159 2592 y(20)g(/settickmarks)f(2)h (index)g(send)0 2631 y(})g(/installmethod)f(ClassHSlider)g(send)952 2828 y Fn(58)p eop %%Page: 59 59 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fa(/newdefault)19 b({)60 b(\045)20 b(parent)f(--)h(instance)159 235 y(/Spaced)g(exch)f(/new)h (self)g(send)159 274 y(/Center)g(1)g(index)f(/newdefault)g(ClassButtons)g (send)h(/addclient)f(3)h(index)g(send)0 313 y(})g(/installmethod)f (ClassPanel)g(send)0 392 y(/newdefault)g({)60 b(\045)20 b(parent)f(--)h (instance)159 432 y(/new)g(self)g(send)159 471 y(\(Text)g(field\))f (/setvalue)h(2)g(index)f(send)159 511 y(10)h(/setminimumvisible)f(2)h(index)f (send)0 550 y(})h(/installmethod)f(ClassTextField)g(send)0 629 y(/newdefault)g({)60 b(\045)20 b(parent)f(--)h(instance)159 668 y(/new)g(self)g(send)159 708 y(37)g(/setvalue)f(2)h(index)g(send)159 747 y(10)g(/setminimumvisible)f(2)h(index)f(send)0 787 y(})h(/installmethod)f (ClassNumericField)f(send)0 866 y(/newdefault)h({)60 b(\045)20 b(parent)f(--)h(instance)159 905 y(/new)g(self)g(send)159 944 y(/Exclusive)g(/setchoicemode)e(2)i(index)g(send)159 984 y([\(Monday\))g (\(Tuesday\))f(\(Wednesday\))g(\(Thursday\))179 1023 y(\(Friday\))h (\(Saturday\))f(\(Sunday\)])159 1063 y(/setitemlist)g(2)h(index)g(send)159 1102 y(0)g(0)g(100)g(125)g(/reshape)f(5)h(index)f(send)0 1142 y(})h(/installmethod)f(ClassScrollList)g(send)952 2828 y Fn(59)p eop %%Page: 60 60 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(B.16)50 b(Persistent)13 b(variables)0 265 y Fa(\045)0 305 y(\045)20 b(Mark)f(persistent)h(variables.)f(It)h(is)f(done)h(explicitly)f(like)h(this) 0 344 y(\045)g(since)f(it)h(would)g(otherwise)f(require)g(a)h(fix)g(in)g (classbegin)0 384 y(\045)0 462 y(\045)g(clear)f(existing)h(persistency)f (information)0 502 y({)h(\045)g(proc)f(class)h(--)159 541 y(dup)g (/persistent)f(//nullarray)g(put)159 581 y(/subclasses)h(exch)f(send)h({2)g (copy)f(1)h(index)g(exec)f(pop})h(forall)f(pop)0 620 y(})h(ClassObject)f(1)h (index)f(exec)0 699 y(systemdict)g(/systemdict-classbegin)f(known)i(not)g({) 159 738 y(systemdict)g(/systemdict-classbegin)e(systemdict)h(/classbegin)g (get)h(put)0 778 y(})g(if)0 817 y(systemdict)f(/classbegin)g({)160 b(\045)19 b(...)h(-)g(...)159 857 y(systemdict-classbegin)159 896 y(/superclasses)f(self)h(send)g({)319 936 y(/persistent)f(exch)h(send)f ({persist})g(forall)159 975 y(})h(forall)0 1014 y(})g(put)0 1093 y(/persist)f({)120 b(\045)20 b(name|list)f(--)159 1133 y(dup)h(isarray?)f(not)h({[exch]})f(if)159 1172 y([exch)h({)319 1212 y(/persistent)f(self)h(send)f(1)h(index)g(arraycontains?)e({pop})i(if) 159 1251 y(})g(forall])g(dup)f(length)h(0)g(gt)f({)319 1291 y(/persistent)g(self)h(send)f(1)h(index)g(append)f(/persistent)g(exch)h (store)319 1330 y(/subclasses)f(self)h(send)f({)478 1369 y(2)h(copy)g (/persist)f(exch)h(send)f(pop)319 1409 y(})h(forall)f(pop)159 1448 y(})h({pop})g(ifelse)0 1488 y(})g(/installmethod)f(ClassObject)g(send)0 1567 y(\045)0 1606 y(\045)h(Mark)f(the)h(persistent)f(instance)h(variables)f (of)h(the)f(TNT)h(classes)0 1645 y(\045)0 1724 y([)159 1764 y(/ObjectName)g(/Properties)0 1803 y(])g(/persist)f(ClassObject)g(send)0 1882 y([)159 1922 y(/Transparent)g(/VisualState)159 1961 y(/&BG0)h(/&BG)g (/&BG2)f(/&BG3)h(/&FG)f(/&2DBBG)h(/&2DFG)159 2000 y(/&TextFont)g (/GraphicFont)f(/HelpKeyWord)159 2040 y(/Menu)h(/&3D?)159 2079 y(/minsize)g(/preferredsize)159 2119 y(/TNTLayout)g(/Mapped)0 2158 y(])g(/persist)f(ClassDrawable)g(send)0 2237 y([)159 2276 y(/BorderStroke)159 2316 y(/Freezable?)h(/Frontable?)f(/Helpable?)g (/Keyable?)159 2355 y(/Menuable?)h(/Openable?)f(/Receptible?)g(/Selectable?) 159 2395 y(/Trackable?)159 2434 y(/DropPreviewLevel)g(/SaveBehind)g (/Retained)g(/EventsConsumed)159 2474 y(/ForkFix?)h(/SelectableType)e (/@canvas)0 2513 y(])i(/persist)f(ClassCanvas)g(send)0 2592 y([)159 2631 y(/X)h(/Y)g(/Width)f(/Height)0 2671 y(])h(/persist)f (ClassRegion)g(send)952 2828 y Fn(60)p eop %%Page: 61 61 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 235 y Fa([)159 274 y(/FocusNoticeable?)19 b(/FocusForwardable?)159 313 y(/ClientDict)h (/RegionClientList)0 353 y(])g(/persist)f(ClassBag)h(send)0 432 y([)159 471 y(/NGap)g(/EGap)g(/SGap)f(/WGap)h(/NInset)f(/EInset)g (/SInset)h(/WInset)0 511 y(])g(/persist)f(ClassBorderBag)g(send)0 589 y([)159 629 y(/&DragFrame?)g(/FooterFont)h(/Freezable?)f(/BorderEdge)159 668 y(/ReshapeSize)g(/BorderStroke)159 708 y(/HeaderGap)h(/FooterGap)f (/FooterPad)g(/HeaderPad)159 747 y(/FooterFraction)g(/HeaderHeight)g (/FooterHeight)159 787 y(/HeaderDeltaY)g(/Close?)h(/Footer?)f(/Label?)g (/Pin?)h(/Opened?)159 826 y(/Reshape?)g(/Label)f(/LeftFooter)g(/RightFooter) 159 866 y(/@window)0 905 y(])h(/persist)f(ClassWindow)g(send)0 984 y([)159 1023 y(/IconLabel)h(/IconImage)f(/IconFont)0 1063 y(])h(/persist)f(ClassBaseWindow)g(send)0 1142 y([)0 1181 y(])h(/persist)f (ClassPopupWindow)g(send)0 1260 y([)159 1299 y(/Placement)h (/LayoutParameters)e(/Columns)159 1339 y(/Rows)i(/VerticalGap)f (/HorizontalGap)0 1378 y(])h(/persist)f(ClassLayout)g(send)0 1457 y([)159 1496 y(/Value)h(/Notifier)f(/Previewer)0 1536 y(])h(/persist)f(ClassControl)g(send)0 1615 y([)159 1654 y(/Contents)0 1694 y(])h(/persist)f(ClassPanel)g(send)0 1773 y([)159 1812 y(/ItemList)h(/FixedItemSize?)0 1851 y(])g(/persist)f(ClassItemGroup)g(send)0 1930 y([)159 1970 y(/ItemWidth)h(/ItemHeight)f(/Abbreviated?)159 2009 y(/Justification)g(/Default)h(/buttonfont)0 2049 y(])g(/persist)f (ClassButtons)g(send)0 2127 y([)0 2167 y(])h(/persist)f(ClassMenuButtons)g (send)0 2246 y([)159 2285 y(/Justification)g(/ChoiceMode)g(/ItemWidth)h (/ItemHeight)0 2325 y(])g(/persist)f(ClassSettings)g(send)0 2403 y([)159 2443 y(/Label)0 2482 y(])h(/persist)f(ClassLabel)g(send)0 2561 y([)159 2601 y(/ChoiceMode)h(/VisualState)f(/BaseMenu?)g(/PinnedLabel) 159 2640 y(/Label)h(/Pinnable?)f(/Justification)g(/LayoutArgCount)0 2680 y(])h(/persist)f(ClassMenu)g(send)952 2828 y Fn(61)p eop %%Page: 62 62 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 235 y Fa([)0 274 y(])20 b(/persist)f(ClassMenuHeader)g(send)0 353 y([)159 392 y(/Default)h(/LayoutByRows?)f(/Columns)g(/Rows)g(/CellSize)0 432 y(])h(/persist)f(ClassCommandMenu)g(send)0 511 y([)159 550 y(/LayoutByRows?)g(/Columns)h(/Rows)f(/CellSize)0 589 y(])h(/persist)f (ClassSettingsMenu)g(send)0 668 y([)0 708 y(])h(/persist)f(ClassPinnedMenu)g (send)0 787 y([)159 826 y(/Top)h(/Bottom)f(/Width)h(/Height)159 866 y(/ScrollMinimum)f(/ItemList)h(/ItemWidth)f(/ItemHeight)159 905 y(/Value)h(/ChoiceMode)0 944 y(])g(/persist)f(ClassScrollList)g(send)0 1023 y([)159 1063 y(/Low)h(/High)g(/Max)f(/ScrollDelay)g(/ScrollThresh)0 1102 y(])h(/persist)f(ClassVScrollbar)g(send)0 1181 y([)159 1220 y(/Value)h(/Min)g(/Max)f(/EndBoxes?)g(/TickMarks)g(/Delta)159 1260 y(/Normalize)h(/SliderDelay)f(/SliderThresh)0 1299 y(])h(/persist)f (ClassHSlider)g(send)0 1378 y([)159 1418 y(/Value)h(/Min)g(/Max)f(/TickMarks) 0 1457 y(])h(/persist)f(ClassHGauge)g(send)0 1536 y([)159 1575 y(/ReadOnly?)h(/MinimumVisible)e(/ScrollThresh)h(/ScrollDelay)159 1615 y(/Value)h(/CaretDelay)0 1654 y(])g(/persist)f(ClassTextField)g(send)0 1733 y([)159 1773 y(/Maximum)h(/Minimum)f(/Delta)h(/Normalizer)0 1812 y(])g(/persist)f(ClassNumericField)g(send)952 2828 y Fn(62)p eop %%Page: 63 63 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(B.17)50 b(Cloning)12 b(components)0 265 y Fa(\045)0 305 y(\045)20 b(Create)f(a)h (clone)g(of)g(an)f(object)0 344 y(\045)0 384 y(/REFDICT)g(growabledict)g(def) 0 462 y(/CLONEDICT)g(dictbegin)0 502 y(countedtypes)g({{pop)h(null})f(def})h (forall)0 541 y(uncountedtypes)f({{})h(def})f(forall)0 581 y(/stringtype)g({)60 b(\045)20 b(string)f(--)h('string)159 620 y(dup)g(length)g(string)f(copy)0 660 y(})h(def)0 699 y(/arraytype)f({)80 b(\045)20 b(array)f(--)h('array)159 738 y([)g(1)g(index)g({clonething})f (forall])g(exch)h(xcheck)f({cvx})h(if)0 778 y(})g(def)0 817 y(/packedarraytype)f(/arraytype)g(load)h(def)0 857 y(/dicttype)f({)100 b(\045)20 b(dict)f(--)h('dict)159 896 y(//REFDICT)g(1)g(index)f(known)h({)319 936 y(//REFDICT)f(1)h(index)f(get)319 975 y(exch)g(soft)h({soften})f ({harden})h(ifelse)159 1014 y(})g({)319 1054 y(dup)g(isobject?)f({)478 1093 y(dup)h(isinstance?)f({)638 1133 y(growabledict)638 1172 y(//REFDICT)g(2)h(index)f(2)h(index)g(put)638 1212 y(/cloneinstance)e(2)i (index)g(send)638 1251 y(exch)f(soft)h({soften})f(if)478 1291 y(})h({pop)g(null})f(ifelse)319 1330 y(})h({)478 1369 y(dup)g(maxlength)f (dict)478 1409 y(//REFDICT)g(2)h(index)g(2)g(index)f(put)478 1448 y(1)h(index)g({)638 1488 y(\045)f(dict)h('dict)g(key)f(val)h(--)638 1527 y(exch)f(clonething)g(exch)h(clonething)638 1567 y(3)f(copy)h(put)g(pop) f(pop)478 1606 y(})h(forall)478 1645 y(exch)g(soft)f({soften})h(if)319 1685 y(})g(ifelse)159 1724 y(})g(ifelse)0 1764 y(})g(def)0 1803 y(/canvastype)f({)60 b(\045)20 b(canvas)f(--)h('canvas)159 1843 y(//REFDICT)g(1)g(index)f(known)h({)319 1882 y(//REFDICT)f(1)h(index)f (get)319 1922 y(exch)g(soft)h({soften})f({harden})h(ifelse)159 1961 y(})g({)319 2000 y(dup)g(isinstance?)f({)478 2040 y(nullcanvas)g (newcanvas)478 2079 y(//REFDICT)g(2)h(index)g(2)g(index)f(put)478 2119 y(/cloneinstance)g(2)h(index)f(send)478 2158 y(exch)h(soft)f({soften})h (if)319 2198 y(})g({)478 2237 y(dup)g(/Retained)f(get)h(not)478 2276 y(1)g(index)g(/Parent)f(get)h(null)f(ne)h(or)g({)638 2316 y(pop)f(null)478 2355 y(})h(if)319 2395 y(})g(ifelse)159 2434 y(})g(ifelse)0 2474 y(})g(def)0 2513 y(dictend)f(def)100 b(\045CLONEDICT)0 2592 y(/cloneinstance)19 b({)h(\045)g(clone)f(--)h('clone)159 2631 y(dup)g(/ParentDictArray)f(ParentDictArray)g(put)159 2671 y(/persistent)h(self)f(send)h({)952 2828 y Fn(63)p eop %%Page: 64 64 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)319 195 y Fa(\045)20 b('self)f(key)319 235 y(dup)h(promoted?)f({)478 274 y(2)h(copy)g(self)f(1)h (index)g(get)f(/clonething)h(self)f(send)h(put)319 313 y(})g(if)319 353 y(pop)159 392 y(})g(forall)0 432 y(})g(/installmethod)f(ClassObject)g (send)0 511 y(/cloneinstance)g({)159 b(\045)20 b(canvas)g(--)f('canvas)159 550 y(/cloneinstance)g(super)h(send)159 589 y(dup)g(/BBOX)g([/bbox)f(self)h (send])f(cvx)h(put)0 629 y(})g(/installmethod)f(ClassCanvas)g(send)0 708 y(/cloneinstance)g({)159 b(\045)20 b(clone)g(--)f('clone)159 747 y(/cloneinstance)g(super)h(send)159 787 y(dup)g(/children)159 826 y(/children)g(self)f(send)h(/clonething)f(self)h(send)f(put)0 866 y(})h(/installmethod)f(ClassBag)g(send)0 944 y(/clonething)g({)60 b(\045)20 b(any)f(--)h('any)159 984 y(//CLONEDICT)g(1)f(index)h(truetype)f (get)h(cvx)g(exec)0 1023 y(})g(/installmethod)f(ClassObject)g(send)0 1102 y(/clone)g({)160 b(\045)20 b(--)f(clone)159 1142 y(self)h(harden)g (/clonething)f(self)g(send)159 1181 y(//REFDICT)h(cleanoutdict)0 1220 y(})g(/installmethod)f(ClassObject)g(send)0 1299 y(currentdict)g (/CLONEDICT)g(undef)0 1339 y(currentdict)g(/REFDICT)g(undef)952 2828 y Fn(64)p eop %%Page: 65 65 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(B.18)50 b(Renewing)12 b(components)0 265 y Fa(\045)0 305 y(\045)20 b(Renew)f(a)h(component)g(from)f(data.)0 344 y(\045)0 384 y(/renew)g({)160 b(\045)20 b(parent)f(--)159 423 y(pop)h(InstanceVars)f({)319 462 y(1)h(index)f(promoted?)g(not)h({promote})f({pop)h(pop})g(ifelse)159 502 y(})g(forall)0 541 y(})g(/installmethod)f(ClassObject)g(send)0 620 y(/renew)g({)160 b(\045)20 b(parent)f(--)159 660 y(dup)h(/renew)g(super)f (send)159 699 y(/reparent)h(self)f(send)159 738 y(/Menu)h(promoted?)f({)319 778 y(self)g(/renew)h(Menu)g(send)159 817 y(})g(if)0 857 y(})g (/installmethod)f(ClassDrawable)g(send)0 936 y(/renew)g({)160 b(\045)20 b(parent)f(--)159 975 y(dup)h(/Mapped)g(get)f(Mapped)h(and)f({)319 1014 y(/Mapped)g(false)h(promote)159 1054 y(})g(if)159 1093 y(/renew)g(super)f(send)159 1133 y(gsave)h(Parent)f(setcanvas)h(BBOX)f (/reshape)h(self)f(send)h(grestore)159 1172 y(/BBOX)g(unpromote)159 1212 y(Selectable?)g({Holder)f(null)h(eq)f({/Holder)h(self)f(soften)h (promote})f(if})h(if)0 1251 y(})g(/installmethod)f(ClassCanvas)g(send)0 1330 y(/renew)g({)160 b(\045)20 b(parent)f(--)159 1369 y(/renew)h(super)f (send)159 1409 y(/regionclientlist)g(self)h(send)f({)319 1448 y(self)g(/renew)h(3)g(-1)g(roll)f(send)159 1488 y(})h(forall)159 1527 y(/children)g(self)f(send)h({)319 1567 y(self)f(/renew)h(3)g(-1)g(roll)f (send)159 1606 y(})h(forall)159 1645 y(/children)g(unpromote)0 1685 y(})g(/installmethod)f(ClassBag)g(send)0 1764 y(/renew)g({)160 b(\045)20 b(parent)f(--)159 1803 y(pop)h(framebuffer)f(/renew)h(super)f(send) 0 1843 y(})h(/installmethod)f(ClassMenu)g(send)0 1922 y(/renew)g({)160 b(\045)20 b(parent)f(--)159 1961 y(/renew)h(super)f(send)159 2000 y(0)h(1)g(/itemcount)f(self)h(send)g(1)f(sub)h({)319 2040 y(/menu)f(self)h(send)319 2079 y(self)f(/renew)h(3)g(-1)g(roll)f(send)159 2119 y(})h(for)0 2158 y(})g(/installmethod)f(ClassMenuButtons)f(send)0 2237 y(/renew)h({)160 b(\045)20 b(parent)f(--)159 2276 y(/renew)h(super)f (send)159 2316 y(0)h(1)g(/itemcount)f(self)h(send)g(1)f(sub)h({)319 2355 y(/Item)f(self)h(send)g(dup)f(/SubMenu)h(known)f({)478 2395 y(/SubMenu)h(get)f(self)h(/renew)f(3)h(-1)g(roll)g(send)319 2434 y(})g({pop})f(ifelse)159 2474 y(})h(for)0 2513 y(})g(/installmethod)f (ClassCommandMenu)f(send)0 2592 y(/renew)h({)160 b(\045)20 b(parent)f(--)159 2631 y(/renew)h(super)f(send)159 2671 y(0)h(1)g(/itemcount) f(self)h(send)g(1)f(sub)h({)952 2828 y Fn(65)p eop %%Page: 66 66 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)319 195 y Fa(/Item)19 b(self)h(send)g(dup)f(/SubMenu)h(known)f({)478 235 y(/SubMenu)h(get)f(self)h (/renew)f(3)h(-1)g(roll)g(send)319 274 y(})g({pop})f(ifelse)159 313 y(})h(for)0 353 y(})g(/installmethod)f(ClassSettingsMenu)f(send)0 432 y(/renewvalue)h({)159 471 y(Value)h(/setvalue)f(self)h(send)0 511 y(})g(/installmethod)f(ClassTextField)g(send)0 589 y(/renew)g({)159 629 y(/renew)h(super)f(send)159 668 y(/Caret)h(/new)g(ClassForCaret)e(send)i (promote)159 708 y(/CheckModifiable)f(self)h(send)159 747 y(/PendingDelete?)f (dictbegin)319 787 y(InterestingRankDict)f({pop)i(false)f(def})h(forall)159 826 y(dictend)g(def)159 866 y(/renewvalue)g(self)f(send)0 905 y(})h(/installmethod)f(ClassTextField)g(send)0 984 y(/renewvalue)g({)159 1023 y(/value)h(self)g(send)f(/setvalue)g(self)h(send)159 1063 y(/invalidate)g(self)f(send)0 1102 y(})h(/installmethod)f(ClassNumericField)f (send)952 2828 y Fn(66)p eop %%Page: 67 67 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(B.19)50 b(Saving)12 b(components)0 265 y Fa(\045)0 305 y(\045)20 b(Save)f(an)h (object)g(to)g(a)f(file)0 344 y(\045)0 384 y(/REFDICT)g(growabledict)g(def)0 462 y(/SAVEDICT)g(dictbegin)0 502 y(uncountedtypes)g({{writeobject})g(def})g (forall)0 541 y(countedtypes)g({{pop)h(null)f(writeobject})g(def})h(forall)0 581 y(/stringtype)f({)60 b(\045)20 b(file)f(string)h(--)159 620 y(2)g(copy)g(writeobject)159 660 y(length)g(32)g(gt)f({\(\\n\))h (writestring})f({pop})h(ifelse)0 699 y(})g(def)0 738 y(/realtype)f({)100 b(\045)20 b(file)f(real)h(--)159 778 y(dup)g(dup)g(cvi)g(eq)f({cvi})h(if)g (writeobject)0 817 y(})g(def)0 857 y(/fixedtype)f(//realtype)g(def)0 896 y(/marktype)g({pop)h(\([\))g(writestring})f(def)0 936 y(/colortype)g({)80 b(\045)20 b(file)f(color)h(--)159 975 y(\045)g(file)g(r)g(g)g(b)f(--)159 1014 y(colorrgb)159 1054 y(3)h(index)g(4)g(-1)f(roll)h(savething)f(2)h(index) g(32)f(write)159 1093 y(2)h(index)g(3)g(-1)f(roll)h(savething)f(1)h(index)g (32)f(write)159 1133 y(1)h(index)g(exch)f(savething)h(dup)f(32)h(write)159 1172 y(\()g(rgbcolor\))g(writestring)0 1212 y(})g(def)0 1251 y(/operatortype)f({)h(\045)g(file)f(op)h(--)159 1291 y(128)g(string)g(cvs)f (1)h(1)g(index)g(length)f(2)h(sub)g(getinterval)f(writestring)0 1330 y(})h(def)0 1369 y(/fonttype)f({)100 b(\045)20 b(file)f(font)h(--)159 1409 y(2)g(copy)g(/FontName)f(get)h(writeobject)159 1448 y(1)g(index)g(\()g (findfont)f(\))h(writestring)159 1488 y(2)g(copy)g(/FontMatrix)f(get)h (savething)159 1527 y(1)g(index)g(\()g(makefont)f(\))h(writestring)159 1567 y(2)g(copy)g(/PrinterMatched)f(get)g(writeobject)159 1606 y(pop)h(\()g(printermatchfont\))f(writestring)0 1645 y(})h(def)0 1685 y(/arraytype)f({)80 b(\045)20 b(file)f(array)h(--)159 1724 y(2)g(copy)g(xcheck)f({\({\)})h({\([\)})f(ifelse)h(writestring)159 1764 y(0)g(1)g(2)g(index)g(length)f(1)h(sub)g({)319 1803 y(dup)g(0)f(ne)h({) 478 1843 y(dup)g(6)g(mod)f(0)h(eq)g({)638 1882 y(2)f(index)h(\(\\n\))g (writestring)478 1922 y(})g({)638 1961 y(2)f(index)h(32)g(write)478 2000 y(})g(ifelse)319 2040 y(})g(if)319 2079 y(1)g(index)f(exch)h(get)g(2)f (index)h(exch)g(savething)159 2119 y(})g(for)159 2158 y(xcheck)g({\(}\)})f ({\(]\)})h(ifelse)f(writestring)0 2198 y(})h(def)0 2237 y(/packedarraytype)f (//arraytype)g(def)0 2276 y(/dicttype)g({)100 b(\045)20 b(file)f(dict)h(--) 159 2316 y(//REFDICT)g(1)g(index)f(known)h({)319 2355 y(2)g(copy)f(//REFDICT) h(exch)f(get)h(writeobject)319 2395 y(1)g(index)f(\()h(GETREF\))f (writestring)319 2434 y(soft)g({\()h(soften\))g(writestring})f({pop})g (ifelse)159 2474 y(})h({)319 2513 y(dup)g(isclass?)f({)478 2552 y(dup)h(/script)f(known)h({)638 2592 y(2)f(copy)h(/superclasses)f(exch)h (send)638 2631 y(dup)f(length)h(1)g(sub)f(get)h(savething)638 2671 y(//REFDICT)f(2)h(copy)f(/refcounter)g(get)h(put)952 2828 y Fn(67)p eop %%Page: 68 68 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)638 195 y Fa(//REFDICT)19 b(/refcounter)g(2)h(copy)f(get)h(1)g(add)g(put)638 274 y(1)f(index)h(32)g (write)638 313 y(/script)f(get)h(1)g(index)f(exch)h(writeobject)638 353 y(\()f(SCRIPT\))h(writestring)478 392 y(})g({)638 432 y(/classname)f (exch)g(send)638 471 y(1)g(index)h(exch)g(writeobject)638 511 y(\()f(CLASS\))h(writestring)478 550 y(})g(ifelse)319 589 y(})g({)478 629 y(dup)g(isinstance?)f({)638 668 y(2)g(copy)h(/class)g(exch)f(send)h (savething)638 708 y(//REFDICT)f(2)h(copy)f(/refcounter)g(get)h(put)638 747 y(//REFDICT)f(/refcounter)g(2)h(copy)f(get)h(1)g(add)g(put)638 787 y(1)f(index)h(\()g(BEGININSTANCE\\n\))f(writestring)638 826 y(2)g(copy)h(/saveinstance)f(exch)h(send)638 866 y(1)f(index)h (\(ENDINSTANCE\))f(writestring)478 905 y(})h({)638 944 y(//REFDICT)f(2)h (copy)f(/refcounter)g(get)h(put)638 984 y(//REFDICT)f(/refcounter)g(2)h(copy) f(get)h(1)g(add)g(put)638 1023 y(2)f(copy)h(maxlength)f(writeobject)638 1063 y(1)g(index)h(\()g(BEGINDICT\\n\))f(writestring)638 1102 y(2)g(copy)h({)797 1142 y(\045)g(file)f(key)h(val)797 1181 y(3)g(copy)f(pop)h(savething)f(exch)h(pop)797 1220 y(1)g(index)f(32)h(write) 797 1260 y(1)g(index)f(exch)h(savething)797 1299 y(dup)g(\()g(def\\n\))f (writestring)638 1339 y(})g(forall)638 1378 y(\(ENDDICT\))g(writestring)478 1418 y(})h(ifelse)478 1457 y(soft)g({\()g(soften\))f(writestring})g({pop})h (ifelse)319 1496 y(})g(ifelse)159 1536 y(})g(ifelse)0 1575 y(})g(def)0 1615 y(/canvastype)f({)60 b(\045)20 b(file)f(canvas)h(--)159 1654 y(//REFDICT)g(1)g(index)f(known)h({)319 1694 y(2)g(copy)f(//REFDICT)h (exch)f(get)h(writeobject)319 1733 y(1)g(index)f(\()h(GETREF\))f(writestring) 319 1773 y(soft)g({\()h(soften\))g(writestring})f({pop})g(ifelse)159 1812 y(})h({)319 1851 y(dup)g(isinstance?)f({)478 1891 y(2)h(copy)g(/class)f (exch)h(send)f(savething)478 1970 y(//REFDICT)g(2)h(copy)g(/refcounter)f(get) h(put)478 2009 y(//REFDICT)f(/refcounter)h(2)f(copy)h(get)g(1)g(add)f(put)478 2088 y(1)h(index)g(\()f(BEGINCANVAS\\n\))g(writestring)478 2127 y(2)h(copy)g(/saveinstance)f(exch)g(send)478 2167 y(1)h(index)g (\(ENDCANVAS\))f(writestring)478 2206 y(soft)h({\()g(soften\))f(writestring}) g({pop})h(ifelse)319 2246 y(})g({)478 2285 y(pop)g(null)g(writeobject)319 2325 y(})g(ifelse)159 2364 y(})g(ifelse)0 2403 y(})g(def)0 2443 y(dictend)f(def)100 b(\045SAVEDICT)0 2522 y(/savething)19 b({)80 b(\045)20 b(file)f(val)h(--)159 2561 y(//SAVEDICT)g(1)f(index)h (truetype)f(get)h(exec)0 2601 y(})g(/installmethod)f(ClassDrawable)g(send)0 2680 y(/saveobject)g({)219 b(\045)20 b(file)g(--)952 2828 y Fn(68)p eop %%Page: 69 69 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)159 195 y Fa(dup)20 b(\(0.01)g(BEGINSAVE\\n\))f(writestring)159 235 y(//REFDICT)h(/refcounter)f (0)h(put)159 274 y(dup)g(self)g(harden)f(/savething)g(self)h(send)159 313 y(//REFDICT)g(cleanoutdict)159 353 y(\(\\nENDSAVE\\n\))f(writestring)0 392 y(})h(/installmethod)f(ClassDrawable)g(send)0 471 y(/saveinstance)g({)h (\045)g(file)f(--)159 511 y(/persistent)h(self)f(send)h({)319 550 y(dup)g(promoted?)f({)478 589 y(2)h(copy)g(writeobject)478 629 y(1)g(index)g(32)f(write)478 668 y(self)h(exch)f(get)h(1)g(index)g(exch)f (savething)478 708 y(dup)h(\()g(def\\n\))f(writestring)319 747 y(})h({pop})f(ifelse)159 787 y(})h(forall)g(pop)0 826 y(})g (/installmethod)f(ClassDrawable)g(send)0 905 y(/saveinstance)g({)h(\045)g (file)f(--)159 944 y(dup)h(/saveinstance)f(super)h(send)159 984 y(dup)g(\(/BBOX)g(\))f(writestring)159 1023 y(dup)h([gsave)g(Parent)f (setcanvas)g(/bbox)h(self)f(send)h(grestore])f(cvx)h(savething)159 1063 y(\()g(def\\n\))g(writestring)0 1102 y(})g(/installmethod)f(ClassCanvas) g(send)0 1181 y(/saveinstance)g({)h(\045)g(file)f(--)159 1220 y(dup)h(/saveinstance)f(super)h(send)159 1260 y(dup)g(/children)f (writeobject)159 1299 y(dup)h(/children)f(self)h(send)g(savething)159 1339 y(\()g(def\\n\))g(writestring)0 1378 y(})g(/installmethod)f(ClassBag)g (send)0 1457 y(currentdict)g(/SAVEDICT)g(undef)0 1496 y(currentdict)g (/REFDICT)g(undef)952 2828 y Fn(69)p eop %%Page: 70 70 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(B.20)50 b(Loading)12 b(components)0 265 y Fa(\045)0 305 y(\045)20 b(Load)f(from)h (file)0 344 y(\045)0 384 y(/REFDICT)f(growabledict)g(def)0 462 y(/LOADDICT)g(dictbegin)0 502 y(/BEGINSAVE)g({)80 b(\045)20 b(version)f(--)159 541 y(pop)0 581 y(})h(def)0 620 y(/ENDSAVE)f(nullproc)h (def)0 699 y(/CLASS)f({)160 b(\045)20 b(name)f(--)h(class)159 738 y(/find)g(classmgr)f(send)0 778 y(})h(def)0 817 y(/SCRIPT)f({)140 b(\045)20 b(class)f(string)h(--)f(class)159 857 y(/findscriptclass)g(3)h(-1)g (roll)f(send)159 896 y(//REFDICT)h(dup)f(/refcounter)g(get)h(currentdict)f (put)159 936 y(//REFDICT)h(/refcounter)f(2)h(copy)f(get)h(1)g(add)f(put)0 975 y(})h(def)0 1054 y(/GETREF)f({)140 b(\045)20 b(nr)f(--)h(thing)159 1093 y(//REFDICT)g(exch)f(get)0 1133 y(})h(def)0 1212 y(/BEGINDICT)f({)239 b(\045)20 b(maxlength)f(--)159 1251 y(dict)h(begin)159 1291 y(//REFDICT)g(dup)f(/refcounter)g(get)h(currentdict)f(put)159 1330 y(//REFDICT)h(/refcounter)f(2)h(copy)f(get)h(1)g(add)f(put)0 1369 y(})h(def)0 1409 y(/ENDDICT)f({)279 b(\045)20 b(--)g(dict)159 1448 y(currentdict)g(end)0 1488 y(})g(def)0 1567 y(/BEGININSTANCE)f({)159 b(\045)20 b(class)g(--)159 1606 y(growabledict)f(begin)159 1645 y(//REFDICT)h(dup)f(/refcounter)g(get)h(currentdict)f(put)159 1685 y(//REFDICT)h(/refcounter)f(2)h(copy)f(get)h(1)g(add)f(put)159 1724 y(/ParentDictArray)g(exch)h(def)0 1764 y(})g(def)0 1803 y(/ENDINSTANCE)f({)199 b(\045)20 b(--)g(instance)159 1843 y(currentdict)g (end)0 1882 y(})g(def)0 1961 y(/BEGINCANVAS)f({)199 b(\045)20 b(class)g(--)159 2000 y(nullcanvas)g(newcanvas)f(begin)159 2040 y(//REFDICT)h(dup)f(/refcounter)g(get)h(currentdict)f(put)159 2079 y(//REFDICT)h(/refcounter)f(2)h(copy)f(get)h(1)g(add)f(put)159 2119 y(/ParentDictArray)g(exch)h(def)0 2158 y(})g(def)0 2198 y(/ENDCANVAS)f({)239 b(\045)20 b(--)g(canvas)159 2237 y(currentdict)g(end)0 2276 y(})g(def)0 2316 y(dictend)f(def)h(\045LOADDICT)0 2395 y(systemdict)f(begin)0 2434 y(/loadobject)g({)219 b(\045)20 b(file)g(--)f(data)159 2474 y(//LOADDICT)h(begin)159 2513 y(//REFDICT)g (/refcounter)f(0)h(put)159 2552 y(cvx)g(exec)159 2592 y(//REFDICT)g (cleanoutdict)159 2631 y(end)0 2671 y(})g(def)952 2828 y Fn(70)p eop %%Page: 71 71 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fa(end)20 b(\045systemdict)0 274 y(currentdict)f(/REFDICT)g(undef)0 313 y(currentdict)g(/LOADDICT)g(undef)952 2828 y Fn(71)p eop %%Page: 72 72 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fl(C)58 b(Examples)0 299 y Fn(This)11 b(section)f(contains)h(some)g(small)f(example)h (programs)g(to)g(illustrate)f(how)h(Cool)h(can)f(be)h(used.)0 423 y Fg(C.1)50 b(Scoped)12 b(variables)0 499 y Fn(The)g Fi(/set3D)i Fn(method)d(is)g(used)g(to)h(change)g(the)f(scoped)h(variable)g(that)f (controls)g(whether)h(an)g(interface)g(is)f(3D)h(or)g(2D.)0 544 y(Setting)f(this)f(variable)i(in)f(the)g(window)f(changes)i(the)f(whole)g (UI.)0 621 y Fa(\045)0 660 y(\045)20 b(Demonstrate)f(parent)g(scope)0 700 y(\045)0 739 y(\(cool/src/init.psh\))g(run)0 818 y(/win)h(null)f (framebuffer)g(/new)h(ClassBaseWindow)f(send)g(def)0 858 y(/settings)g (/Spaced)h(win)f(/new)h(ClassSettings)f(send)h(def)0 937 y(\045)g(create)f (the)h(settings)0 976 y(/Exclusive)f(/setchoicemode)g(settings)g(send)0 1015 y([)h(\(Black)f(and)h(white\))g(\(Three)f(Dimensional\))g(])h (/setitemlist)f(settings)g(send)0 1055 y([/3D?)h(win)f(send)h({1})g({0})f (ifelse])h(/setvalue)f(settings)g(send)0 1094 y(8)h(8)g(/setgaps)f(settings)g (send)0 1173 y(\045)h(set)g(the)f(script)h(of)g(the)f(window)0 1213 y(\(/Action)g({)120 b(\045)20 b(item)f(--)159 1252 y(pop)h(0)g(get)g(1)g (eq)f(set3D)h(/paint)f(self)h(send)0 1291 y(})g(def\))f(/setscript)h(win)f (send)0 1370 y(\045)h(Add)g(the)f(settings)h(to)f(the)h(window)0 1410 y(/Center)f(settings)h(/addclient)f(win)h(send)0 1449 y(\(Scoped)f(variables)h(Demo\))f(/setlabel)g(win)h(send)0 1489 y(20)g(10)g(20)f(10)h(/setgaps)f(win)h(send)0 1528 y(/place)f(win)h (send)0 1568 y(/new)g(ClassEventMgr)f(send)g(/activate)g(win)h(send)0 1607 y(/map)g(win)f(send)0 1686 y(newprocessgroup)g(currentfile)g(closefile) 952 2828 y Fn(72)p eop %%Page: 73 73 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(C.2)50 b(Scripts)0 271 y Fn(The)11 b Fi(/setscri)q(pt)k Fn(method)10 b(can)i(be)g(used)f(to)g(change)g(the)h(functionality)d(of)j(an)f(instance.)0 348 y Fa(\(cool/src/init.psh\))19 b(run)0 427 y(/demo)h(ClassButtons)f(send)0 466 y(/b)h(exch)f(def)0 506 y(/w)h(exch)f(def)0 585 y(w)h(/sillyfooter)f (undef)0 624 y(\(/sillyfooter)g({)h(\045)g(index)f(buttons)h(=>)f(-)159 664 y(/item)h(exch)g(send)159 703 y(\(The)g(\045)g(is)g(extremely)f (intresting...\))g(sprintf)g(\(\))159 742 y(/setfooter)h(self)f(send)0 782 y(})h(def\))f(/setscript)h(w)g(send)0 861 y(newprocessgroup)f (currentfile)g(closefile)952 2828 y Fn(73)p eop %%Page: 74 74 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(C.3)50 b(Send)0 265 y Fn(Demonstrate)10 b(how)g(the)g Fi(Send)i Fn(primitive)c(can)j (be)f(used)g(to)g(communicate)f(between)i(components.)f(Two)g(windows)f(are)0 310 y(created.)k(The)e(first)g(contains)g(a)g(scrollbar)h(which)f(controls)f (a)i(gauge)f(in)g(the)g(second.)0 387 y Fa(\(cool/src/init.psh\))19 b(run)0 426 y(\045)0 466 y(\045)h(Demonstrate)f(the)h(use)f(of)h('Send')0 505 y(\045)0 584 y(\045)g(Create)f(window)h(1)0 624 y(/win1)g(null)f (framebuffer)g(/new)h(/ClassBaseWindow)f(/find)g(classmgr)h(send)f(send)h (def)0 663 y(\(Send)g(demo\))f(/setlabel)g(win1)h(send)0 702 y(20)g(10)g(20)f(10)h(/setgaps)f(win1)h(send)0 742 y(\(/Toggle)f({)120 b(\045)20 b(item)f(--)159 781 y(pop)h([])g(/ToggleOpened)f(/@play)g(Send)0 821 y(})h(def)0 860 y(/Action)f({)140 b(\045)20 b(value)f(--)159 900 y(pop)h([exch)g(cvi])f(/setvalue)h([/@play)f(/@temp])g(Send)0 939 y(})h(def\))f(/setscript)h(win1)f(send)0 1018 y(\045)h(Create)f (scrollbar)0 1057 y(/sb)h(win1)f(/new)h(/ClassHScrollbar)f(/find)g(classmgr)h (send)f(send)h(def)0 1097 y(0)g(10)g(100)f(/setparameters)g(sb)h(send)0 1136 y(/Action)f(/setpreviewer)g(sb)h(send)0 1176 y(/South)f(sb)h(/addclient) f(win1)h(send)0 1254 y(\045)g(create)f(the)h(buttons)0 1294 y(/buttons)f(/Spaced)h(win1)f(/new)h(/ClassButtons)f(/find)g(classmgr)h(send) f(send)h(def)0 1333 y([[\(toggle\))f(/Toggle])h([\(Quit\))f(/QuitFromUser]])0 1373 y(/setitemlist)g(buttons)g(send)0 1412 y(8)h(8)g(/setgaps)f(buttons)g (send)0 1452 y(/Center)g(buttons)h(/addclient)f(win1)h(send)0 1531 y(\045)g(Create)f(window)h(2)0 1570 y(/win2)g(null)f(framebuffer)g(/new) h(/ClassBaseWindow)f(/find)g(classmgr)h(send)f(send)h(def)0 1609 y(\(win2\))f(/setlabel)h(win2)f(send)0 1649 y(20)h(20)g(20)f(20)h (/setgaps)f(win2)h(send)0 1688 y(/@play)f(/setname)h(win2)f(send)0 1767 y(\045)h(create)f(gauge)0 1807 y(/g)h(framebuffer)f(/new)h(/ClassHGauge) f(/find)g(classmgr)g(send)h(send)g(def)0 1846 y(/@temp)f(/setname)h(g)g(send) 0 1885 y(0)g(100)g(/setrange)f(g)h(send)0 1925 y(0)g(/setvalue)f(g)h(send)0 1964 y(/Center)f(g)h(/addclient)f(win2)h(send)0 2004 y(0)g(0)g(40)f(40)h (/reshape)g(g)f(send)0 2083 y(\045)h(Initialize)f(the)h(windows)0 2122 y(/place)f(win1)h(send)0 2161 y(/location)f(win1)h(send)0 2201 y(0)g(-105)f(xyadd)h(300)g(100)f(/reshape)h(win2)f(send)0 2240 y(/new)h(ClassEventMgr)f(send)0 2280 y(dup)h(/activate)f(win1)h(send)0 2319 y(/activate)f(win2)h(send)0 2359 y(/map)g(win1)f(send)0 2398 y(/map)h(win2)f(send)0 2477 y(newprocessgroup)g(currentfile)g(closefile) 952 2828 y Fn(74)p eop %%Page: 75 75 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(C.4)50 b(Buttons)12 b(demo)0 265 y Fn(Implement)d(the)h(demo)g(method)g(of)g Fi(ClassButt)q(ons)k Fn(using)c(the)g(techniques)f(provided)h(by)g(Cool.)h (Makes)g(use)f(of)g(the)0 310 y(class)h(manager)h(and)f(script)g(classes.)0 387 y Fa(\045)0 426 y(\045)20 b(The)g(COOL)f(ClassButtons)g(demo)0 466 y(\045)0 505 y(\(cool/src/init.psh\))g(run)0 584 y(/win)h(null)f (framebuffer)g(/new)h(/ClassBaseWindow)f(/find)g(classmgr)h(send)f(send)h (def)0 624 y(/buttons)f(/Spaced)h(win)f(/new)h(/ClassButtons)f(/find)h (classmgr)f(send)h(send)f(def)0 702 y(\045)h(Initialize)f(the)h(buttons)0 742 y([)g(\(Weather\))f(\(Sport\))h(\(Gossip\))40 781 y([\(NeWS\))f (/NeWSAction])40 821 y(\(Entertainment\))g(\(Finance\))g(\(Happy)g(Talk\))0 860 y(])h(/setitemlist)f(buttons)g(send)0 900 y(3)h(/setdefault)f(buttons)g (send)0 939 y(8)h(8)g(/setgaps)f(buttons)g(send)0 978 y(/preferredsize)g ({278)h(50})f(/installmethod)g(buttons)g(send)0 1018 y(/minsize)g({194)h(76}) g(/installmethod)f(buttons)g(send)0 1097 y(\045)h(Define)f(the)h(actions)f (in)h(the)g(window's)f(script)0 1136 y(\(/Action)g({)120 b(\045)20 b(index)f(--)159 1176 y(/item)h(exch)g(send)159 1215 y(\(The)g(\045)g(is)g (extremely)f(boring...\))g(sprintf)g(\(\))159 1254 y(/setfooter)h(self)f (send)0 1294 y(})h(def)0 1333 y(/NeWSAction)f({)60 b(\045)20 b(index)f(--)159 1373 y(pop)h({5)g({beep)f(.0005)h(sleep})f(repeat})h(fork)f (pop)0 1412 y(})h(def\))f(/setscript)h(win)f(send)0 1491 y(\045)h(Add)g(the)f (buttons)h(to)f(the)h(window)g(and)f(Go!)0 1531 y(/Center)g(buttons)h (/addclient)f(win)h(send)0 1570 y(\(ClassButtons)f(Demo\))h(/setlabel)f(win)g (send)0 1609 y(\(\))h(\(This)f(uses)h(the)g(/Spaced)f(layout)h(style)f(--)h (reshape)f(it!\))h(/setfooter)f(win)h(send)0 1649 y(20)g(10)g(20)f(10)h (/setgaps)f(win)h(send)0 1688 y(/place)f(win)h(send)0 1728 y(/new)g(/ClassEventMgr)f(/find)g(classmgr)g(send)h(send)g(/activate)f(win)h (send)0 1767 y(/map)g(win)f(send)0 1846 y(\045)h(clean)f(exit)0 1885 y(newprocessgroup)g(currentfile)g(closefile)952 2828 y Fn(75)p eop %%Page: 76 76 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(C.5)50 b(Scrollbar)12 b(demo)0 265 y Fn(Implement)e(the)h(demo)g(method)f(of)i Fi(ClassVScrol)q(lb)q(ar)p Fn(.)j(The)d(original)e(demo)h(method)f(makes)h (use)g(of)g(a)h(subclass)0 310 y(of)f Fi(ClassCan)q(vas)k Fn(called)d Fi(SBDemoCanv)q(as)p Fn(.)0 385 y Fa(executive)0 424 y(\(cool/src/init.psh\)) 19 b(run)0 464 y(\045)0 503 y(\045)h(use)g(the)f(class)h(manager)f(to)h(load) g(SBDemoCanvas.class.ps)0 543 y(\045)0 582 y(/sb)g(framebuffer)f(/new)g (/ClassVScrollbar)g(/find)h(classmgr)f(send)h(send)f(def)0 622 y(/can)h(framebuffer)f(/new)g(/SBDemoCanvas)g(/find)h(classmgr)f(send)h (send)f(def)0 700 y(/@sbdemocanvas)g(/setname)g(can)h(send)0 779 y(0)g(10)g(101)f(/setparameters)g(sb)h(send)0 858 y(/@sbdemocanvas)f (/settarget)g(sb)h(send)0 898 y(/updatedemo)f(/setnotifier)g(sb)h(send)0 937 y(/updatedemo)f(/setpreviewer)g(sb)h(send)0 1016 y(37)g(dup)f(/setvalue)h (sb)g(send)0 1055 y(null)g(/updatedemo)f(can)g(send)0 1134 y(/win)h(can)f(framebuffer)g(/new)h(ClassBaseWindow)f(send)g(def)0 1174 y(/East)h(sb)f(/addclient)h(win)f(send)0 1213 y(/Footer?)g(false)h (/setattribute)f(win)h(send)0 1253 y(\(ClassVScrollbar\))f(/setlabel)g(win)h (send)0 1292 y(/place)f(win)h(send)0 1331 y(/new)g(ClassEventMgr)f(send)g (/activate)g(win)h(send)0 1371 y(/map)g(win)f(send)0 1450 y(\045)h(clean)f (exit)0 1489 y(newprocessgroup)g(currentfile)g(closefile)0 1564 y Fn(It)11 b(uses)g(the)h(resource)g(class)f Fi(SBDemoCanv)q(as)q Fn(.)j(This)d(stored)g(in)g(the)g(file)g Fm(SBDemoCanvas.class.ps)p Fn(:)0 1639 y Fa(/ClassCanvas)0 1678 y(dictbegin)80 1718 y(/String)19 b(\(\))h(def)0 1757 y(dictend)0 1797 y(classbegin)80 1836 y(/TextFont)59 b(/ZapfChancery-MediumItalic)18 b(findfont)319 1875 y(100)i(scalefont)f(def) 80 1915 y(/FG)179 b(0)20 b(0)g(1)f(rgbcolor)h(def)80 1994 y(/Paint)f({)159 2033 y(BackgroundColor)g(setcolor)h(/bbox)f(self)h(send)f(rectpath)h(fill)159 2073 y(TextFont)g(setfont)159 2112 y(FG)g(setcolor)g(ShowString)80 2151 y(})g(def)80 2230 y(/updatedemo)f({)h(\045)g(value)f(sbar)h(=>)f(-)159 2270 y(gsave)239 2309 y(pop)h(self)f(setcanvas)239 2349 y(TextFont)g(setfont) 239 2388 y(BackgroundColor)g(setcolor)g(ShowString)239 2428 y(cvi)h(3)g(string)f(cvs)h(/String)f(exch)h(def)239 2467 y(FG)g(setcolor)f (ShowString)159 2506 y(grestore)80 2546 y(})h(def)80 2625 y(/ShowString)f({) 159 2664 y(size)h(self)g(send)f(2)h(div)g(exch)f(2)h(div)g(exch)g(25)f(sub)h (moveto)159 2704 y(String)g(cshow)952 2828 y Fn(76)p eop %%Page: 77 77 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)80 195 y Fa(})20 b(def)80 274 y(/preferredsize)f({150)g(125})h(def)0 313 y(classend)952 2828 y Fn(77)p eop %%Page: 78 78 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(C.6)50 b(Newdefault)11 b(demo)0 265 y Fn(Create)i(a)e(window)g(containing)f(all)h (the)g(default)h(UI)f(components.)0 342 y Fa(\(cool/src/init.psh\))19 b(run)0 381 y(\045)0 421 y(\045)h(Create)f(a)h(window)g(containig)f(all)h (default)f(components)0 460 y(\045)0 539 y(/panel)g(/Grid)h(framebuffer)f (/new)h(ClassPanel)f(send)h(def)0 579 y(10)g(10)g(/setgaps)f(panel)g(send)0 618 y([true)h(4)f(4])h(/setlayoutparameters)f(panel)g(send)0 658 y([)159 697 y(ClassRegion)h(ClassLabel)f(ClassSettings)g(ClassButtons)159 736 y(ClassMenuButtons)159 776 y(ClassPanel)159 815 y(ClassTextField)g (ClassNumericField)159 855 y(ClassHSlider)g(ClassHGauge)h(ClassHScrollbar)159 894 y(ClassVSlider)f(ClassVGauge)h(ClassVScrollbar)159 934 y(ClassScrollList)0 973 y(])g({)159 1012 y(framebuffer)g(/newdefault)f(3)g (-1)h(roll)g(send)159 1052 y(dup)g(/addclient)f(panel)h(send)0 1091 y(})g(forall)0 1170 y(/win)g(panel)f(framebuffer)g(/new)h (ClassBaseWindow)f(send)g(def)0 1210 y(\(newdefault)g(demo\))h(/setlabel)f (win)h(send)0 1249 y(20)g(20)g(20)f(20)h(/setgaps)f(win)h(send)0 1288 y(/place)f(win)h(send)0 1328 y(/new)g(ClassEventMgr)f(send)g(/activate)g (win)h(send)0 1367 y(/map)g(win)f(send)0 1446 y(newprocessgroup)g (currentfile)g(closefile)952 2828 y Fn(78)p eop %%Page: 79 79 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(C.7)50 b(Clone)12 b(demo)0 265 y Fn(Create)k(a)f(window)e(which)h(can)h(clone)g (itself.)20 b(The)15 b(window)e(contains)h(2)g(buttons,)h(one)f(to)g(create)i (a)e(clone)h(the)f(other)0 305 y(quits)c(the)h(application.)g(The)h(window)e (also)h(contains)g(a)g(default)h(scrolling)e(list.)0 381 y Fa(\045)0 421 y(\045)20 b(Create)f(a)h(window)g(which)f(can)h(clone)f(itself) 0 460 y(\045)0 500 y(\(cool/src/init.psh\))g(run)0 579 y(/b)h(/Spaced)f (framebuffer)g(/new)h(ClassButtons)f(send)h(def)0 618 y(10)g(10)g(/setgaps)f (b)h(send)0 658 y([)159 697 y([\(Duplicate\))f(/Duplicate])159 736 y([\(Quit\))h(/QuitFromUser])0 776 y(])g(/setitemlist)f(b)h(send)0 855 y(/w)g(b)g(framebuffer)f(/new)g(ClassBaseWindow)g(send)h(def)0 894 y(/South)f(w)h(/newdefault)f(ClassScrollList)g(send)h(/addclient)f(w)h (send)0 973 y(\(/Duplicate)f({)159 1012 y(/clone)h(self)g(send)159 1052 y(framebuffer)g(/renew)f(2)h(index)f(send)159 1091 y(/eventmgr)h(self)f (send)40 b(/activate)19 b(2)h(index)f(send)159 1131 y(/location)h(self)f (send)h(20)g(-20)f(xyadd)h(/move)f(3)h(index)g(send)159 1170 y(/map)g(1)g(index)f(send)159 1210 y(userdict)h(begin)f(dup)h(def)g(end)159 1249 y(/footer)g(self)f(send)h(pop)g(\(cloned\))f(/setfooter)g(self)h(send)0 1288 y(})g(def)0 1328 y(/Action)f({)159 1367 y(exch)h(0)g(get)g(/item)f(3)h (-1)g(roll)f(send)179 1407 y(\(I)h(hate)g(\045s\))f(sprintf)h(\(\))g (/setfooter)f(self)g(send)0 1446 y(})h(def\))f(/setscript)h(w)g(send)0 1525 y(\(Clone)f(demo\))h(/setlabel)f(w)h(send)0 1565 y(10)g(10)g(10)f(10)h (/setgaps)f(w)h(send)0 1604 y(/place)f(w)h(send)0 1643 y(/new)g (ClassEventMgr)f(send)g(/activate)g(w)h(send)0 1683 y(/map)g(w)f(send)0 1762 y(newprocessgroup)g(currentfile)g(closefile)952 2828 y Fn(79)p eop %%Page: 80 80 bop 0 50 a Fm(Cool)11 b(Design)g(Specification)382 b(July)11 b(4,)h(1991)541 b(Version)11 b(0.1)g(Draft)0 195 y Fg(C.8)50 b(Save)12 b(and)g(load)g(demo)0 265 y Fn(Create)i(a)g(window)e(which)h(can)h (save)f(and)g(reload)h(itself.)i(The)e(window)e(contains)g(3)h(buttons,)g (one)g(to)g(save)g(a)h(copy)f(of)0 310 y(itself)i(in)g Fi(~/window.r)q(sr)q (c)p Fn(,)20 b(one)15 b(to)g(load)g(a)h(copy)f(from)h(the)f(same)g(file)g (and)h(one)f(to)g(quit)g(the)g(application.)23 b(The)0 355 y(window)11 b(also)g(contains)f(a)i(settings)e(object)h(to)g(select)g(the)g (window)g(color.)0 432 y Fa(\045)0 471 y(\045)20 b(Create)f(a)h(window)g (that)f(can)h(save)g(and)f(load)h(from)g(a)f(file.)0 511 y(\045)0 550 y(\(cool/src/init.psh\))g(run)0 629 y(/b)h(/Spaced)f(framebuffer)g(/new)h (ClassButtons)f(send)h(def)0 668 y(10)g(10)g(/setgaps)f(b)h(send)0 708 y([)159 747 y([\(Save\))g(/Save])159 787 y([\(Load\))g(/Load])159 826 y([\(Quit\))g(/QuitFromUser])0 866 y(])g(/setitemlist)f(b)h(send)0 944 y(/w)g(b)g(framebuffer)f(/new)g(ClassBaseWindow)g(send)h(def)0 984 y(/South)f(w)h(/newdefault)f(ClassSettings)g(send)h(/addclient)f(w)h (send)0 1063 y(\(/Save)f({)159 1102 y(\(\))h(\(\))g(/setfooter)f(self)h(send) 159 1142 y(\(window.rsrc\))f(\(w\))h(file)g(/saveobject)f(self)g(send)159 1181 y(\(Saved\))h(\(window.rsrc\))f(/setfooter)g(self)h(send)0 1220 y(})g(def)0 1260 y(/Load)g({)159 1299 y(\(\))g(\(\))g(/setfooter)f(self) h(send)159 1339 y({\(window.rsrc\))f(\(r\))h(file})g(stopped)f(not)h({)319 1378 y(/loadobject)f(self)h(send)319 1418 y(framebuffer)f(/renew)g(2)h(index) g(send)319 1457 y(/eventmgr)f(self)h(send)39 b(/activate)19 b(2)h(index)g(send)319 1497 y(/location)f(self)h(send)f(20)h(-20)g(xyadd)f (/move)h(3)g(index)f(send)319 1536 y(/map)g(1)h(index)g(send)319 1575 y(userdict)f(begin)h(dup)f(def)h(end)319 1615 y(\(Loaded\))f (\(window.rsrc\))g(/setfooter)g(self)h(send)159 1654 y(})g(if)0 1694 y(})g(def)0 1733 y(/Action)f({)159 1773 y(\(\))h(\(\))g(/setfooter)f (self)h(send)159 1812 y(pop)g(0)g(get)g({)319 1851 y(0)g({1)f(.8)h(.8)g (rgbcolor})319 1891 y(1)g({.8)f(1)h(.8)g(rgbcolor})319 1930 y(/Default)f({.8)h(.8)g(1)f(rgbcolor})159 1970 y(})h(case)159 2009 y(0)g(0)g(0)g(rgbcolor)f(exch)h(/setcolors)f(self)h(send)159 2049 y(/paint)g(self)g(send)0 2088 y(})g(def\))f(/setscript)h(w)g(send)0 2167 y(\(Save/Load)f(demo\))h(/setlabel)f(w)h(send)0 2206 y(10)g(10)g(10)f (10)h(/setgaps)f(w)h(send)0 2246 y(/place)f(w)h(send)0 2285 y(/new)g(ClassEventMgr)f(send)g(/activate)g(w)h(send)0 2325 y(/map)g(w)f(send)0 2404 y(newprocessgroup)g(currentfile)g(closefile)952 2828 y Fn(80)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF