Category : Alternate Operating Systems - Quarterdeck DesqView, CP/M, etc
Archive   : PCCAPP.ZIP
Filename : PROGAPP.PS

 
Output of file : PROGAPP.PS contained in archive : PCCAPP.ZIP
%!
/GlSave save def /TeXDict 200 dict def TeXDict begin /Resolution 300 def /Inch
{Resolution mul}def /Mtrx 6 array def /letter where{pop}{/letter{}def}ifelse
/legal where{pop}{/legal{}def}ifelse /note where{pop}{/note{}def}ifelse
/@letter{72 Resolution div dup neg scale 310 -3005 translate Mtrx
currentmatrix pop}def /@landscape{letter initmatrix 72 Resolution div dup neg
scale Mtrx currentmatrix 0 0.0 put Mtrx 1 -1.0 put Mtrx 2 1.0 put Mtrx 3 0.0
put Mtrx setmatrix 300 310 translate Mtrx currentmatrix pop}def /@legal{legal
initmatrix 72 Resolution div dup neg scale 295 -3880 translate Mtrx
currentmatrix pop}def /@copies{/#copies exch def}def /@restore /restore load
def /restore{vmstatus pop dup @VMused lt{pop @VMused}if exch pop exch @restore
/@VMused exch def}def /@pri{( )print( )
cvs print}def /@FontMatrix[1 0 0 -1 0 0]def /@FontBBox[0 0 1 1]def /dmystr
(ZZf@@)def /newname{dmystr cvn}def /df{/fontname exch def dmystr 2 fontname
cvx(@@@)cvs putinterval newname 7 dict def newname load begin /FontType 3 def
/FontMatrix @FontMatrix def /FontBBox @FontBBox def /BitMaps 256 array def
/BuildChar{CharBuilder}def /Encoding 256 array def 0 1 255{Encoding exch
/.undef put}for end fontname{/foo setfont}2 array copy cvx def fontname load 0
dmystr 5 string copy cvn cvx put}def /dfend{newname newname load definefont
setfont}def /ch-image{ch-data 0 get}def /ch-width{ch-data 1 get}def /ch-height
{ch-data 2 get}def /ch-xoff{ch-data 3 get}def /ch-yoff{ch-data 4 get}def
/ch-tfmw{ch-data 5 get}def /CharBuilder{save 3 1 roll exch /BitMaps get exch
get /ch-data exch def ch-data null ne{ch-tfmw 0 ch-xoff neg ch-yoff neg
ch-width ch-xoff sub ch-height ch-yoff sub setcachedevice ch-width ch-height
true[1 0 0 1 ch-xoff ch-yoff]{ch-image}imagemask}if restore}def /dc{/ch-code
exch def dup 0 get length 2 lt{pop[<00>1 1 0 0 8.00]}if /ch-data exch def
newname load /BitMaps get ch-code ch-data put newname load /Encoding get
ch-code dup( )cvs cvn put}def /bop{erasepage initgraphics Mtrx setmatrix
/SaveImage save def 0 0 moveto}def /eop{showpage SaveImage restore}def /@start
{@letter vmstatus pop /@VMused exch def pop}def /@end{(VM used: )print @VMused
@pri(. Unused: )print vmstatus @VMused sub @pri pop pop(\n)print flush end
GlSave restore}def /p{show}def /v{/dy exch neg def /dx exch def /x1
currentpoint /y1 exch def def newpath x1 y1 moveto dx 0 rlineto 0 dy rlineto
dx neg 0 rlineto closepath fill x1 y1 moveto}def /li{lineto}def /rl{rlineto}
def /rc{rcurveto}def /np{/SaveX currentpoint /SaveY exch def def newpath}def
/st{stroke SaveX SaveY moveto}def /fi{fill SaveX SaveY moveto}def /dot{/myY
exch def /myX exch def /deltax currentlinewidth 2 div def np myX deltax sub
myY moveto myX deltax add myY lineto st}def /ellipse{/endangle exch def
/startangle exch def /yrad exch def /xrad exch def /myY exch def /myX exch def
/savematrix matrix currentmatrix def myX myY translate xrad yrad scale 0 0 1
startangle endangle arc savematrix setmatrix}def /a{moveto}def /delta 0 def /b
{exch p dup /delta exch def 0 rmoveto}def /c{p delta 4 sub dup /delta exch def
0 rmoveto}def /d{p delta 3 sub dup /delta exch def 0 rmoveto}def /e{p delta 2
sub dup /delta exch def 0 rmoveto}def /f{p delta 1 sub dup /delta exch def 0
rmoveto}def /g{p delta 0 rmoveto}def /h{p delta 1 add dup /delta exch def 0
rmoveto}def /i{p delta 2 add dup /delta exch def 0 rmoveto}def /j{p delta 3
add dup /delta exch def 0 rmoveto}def /k{p delta 4 add dup /delta exch def 0
rmoveto}def /l{p -4 0 rmoveto}def /m{p -3 0 rmoveto}def /n{p -2 0 rmoveto}def
/o{p -1 0 rmoveto}def /q{p 1 0 rmoveto}def /r{p 2 0 rmoveto}def /s{p 3 0
rmoveto}def /t{p 4 0 rmoveto}def /w{0 rmoveto}def /x{0 exch rmoveto}def /y{3
-1 roll p moveto}def /bos{/section save def}def /eos{section restore}def
/@SpecialDefaults{/hs 8.5 Inch def /vs 11 Inch def /ho 0 def /vo 0 def /hsc 1
def /vsc 1 def /CLIP false def}def /@hsize{/hs exch def /CLIP true def}def
/@vsize{/vs exch def /CLIP true def}def /@hoffset{/ho exch def}def /@voffset{
/vo exch def}def /@hscale{/hsc exch def}def /@vscale{/vsc exch def}def
/@setclipper{hsc vsc scale CLIP{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto
hs neg 0 rlineto closepath clip}if}def /@beginspecial{gsave /SpecialSave save
def currentpoint transform initgraphics itransform translate @SpecialDefaults
@MacSetUp}def /@setspecial{MacDrwgs{md begin /pxt ho def /pyt vo neg def end}{
ho vo translate @setclipper}ifelse}def /@endspecial{SpecialSave restore
grestore}def /MacDrwgs false def /@MacSetUp{userdict /md known{userdict /md
get type /dicttype eq{md begin /letter{}def /note{}def /legal{}def /od{txpose
1 0 mtx defaultmatrix dtransform exch atan/pa exch def 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}def /txpose{pxs pys scale ppr
aload pop por{noflips{pop exch neg exch translate pop 1 -1 scale}if xflip
yflip and{pop exch neg exch translate 180 rotate 1 -1 scale ppr 3 get ppr 1
get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if xflip yflip not
and{pop exch neg exch translate pop 180 rotate ppr 3 get ppr 1 get neg sub neg
0 translate}if yflip xflip not and{ppr 1 get neg ppr 0 get neg translate}if}{
noflips{translate pop pop 270 rotate 1 -1 scale}if xflip yflip and{translate
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 translate}if xflip yflip not and{translate pop pop 90 rotate
ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{translate
pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 exch translate}if}ifelse
scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy
translate .96 dup scale neg exch neg exch translate}if}def /cp{pop pop
showpage pm restore}def end}if}if}def /psf$TeXscale{65536 div}def
/DocumentInitState[matrix currentmatrix currentlinewidth currentlinecap
currentlinejoin currentdash currentgray currentmiterlimit]cvx def /startTexFig
{/psf$SavedState save def userdict maxlength dict begin currentpoint transform
DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap
setlinewidth setmatrix itransform moveto /psf$ury exch psf$TeXscale def
/psf$urx exch psf$TeXscale def /psf$lly exch psf$TeXscale def /psf$llx exch
psf$TeXscale def /psf$y exch psf$TeXscale def /psf$x exch psf$TeXscale def
currentpoint /psf$cy exch def /psf$cx exch def /psf$sx psf$x psf$urx psf$llx
sub div def /psf$sy psf$y psf$ury psf$lly sub div def psf$sx psf$sy scale
psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub translate
/DefFigCTM matrix currentmatrix def /initmatrix{DefFigCTM setmatrix}def
/defaultmatrix{DefFigCTM exch copy}def /initgraphics{DocumentInitState
setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix
DefFigCTM setmatrix}def /showpage{initgraphics}def /erasepage{initgraphics}
def /copypage{}def}def /clipFig{currentpoint 6 2 roll newpath 4 copy 4 2 roll
moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath
moveto}def /doclip{psf$llx psf$lly psf$urx psf$ury clipFig}def /endTexFig{end
psf$SavedState restore}def end statusdict /waittimeout 300 put

TeXDict begin @start bos /fa df[17 4 -1 -14 22]45 dc
[ 00007E00018000007E0000C00000FC0000C00000FC0000C00000FC0000600001F80000600001F8
0000600003F80000300003F000003FFFFFF000003FFFFFF000001FFFFFE00000180007E000001C
000FE000000C000FC000000C000FC000000E001FC0000006001F80000006001F80000003003F00
000003003F00000003007F00000001807E00000001807E0000000180FE00000000C0FC00000000
C0FC00000000E1FC0000000061F80000000061F80000000073F80000000033F00000000033F000
0000001FE0000000001FE0000000001FE0000000000FC0000000000FC0000000000FC000000000
07800000000007800000000007800000000003000000>46 49 -2 0 50]65 dc[<00003FE00000
01FFFC000007FFFF00001FF00F80003F8001C0007E0000E000F800003001F000003803E0000018
07C000000C0FC000000E0F800000061F000000063F000000073F000000033E000000037E000000
037E000000037E00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC0000
0000FC00000000FC00000000FC00000000FC00000000FC000000007E000000037E000000037E00
0000033E000000033F000000073F000000071F000000070F8000000F0FC000000F07C000001F03
E000001F01F000003F00F800007F007E0000CF003F80038F001FF00F070007FFFE030001FFF803
00003FE001>40 49 -4 0 48]67 dc[ 000003F000000003F000000003F000000003F000000003F000000003F000000003F000000003F0
00000003F000000003F000000003F000000003F000000003F000000003F000000003F000000003
F000000003F000000003F000000003FFFFF80003FFFFFE0003F0007F8003F0000FC003F00007E0
03F00003F003F00001F003F00001F803F00000F803F00000FC03F00000FC03F00000FC03F00000
FC03F00000FC03F00000FC03F00000FC03F00000F803F00001F803F00001F003F00003F003F000
07E003F0000FC003F0003F80FFFFFFFF00FFFFFFFC00FFFFFFE000>38 49 -3 0 45]80 dc[<03
F807C00FFE0FF01F871FF83E01FF187E00FE0CFC007E0CFC007E0CFC003E0CFC003E0CFC003E0C
7E003E007E003E003F003E001F003E000FC03E0007F03E0001FF3E00007FFE000003FE0000003E
0000003E0000003E0000003E000C003E001E003C003F007C003F0078003F00F0001E03E0000FFF
C00003FE0000>30 31 -3 0 33]97 dc[<001FC00000FFF00001F81C0007E00E000FC007000F80
03001F0001803F0001803E0000007E0000007C000000FC000000FC000000FC000000FC000000FC
000000FC000000FC000000FC000000FC0000007C0000007E0000003E0000003E000C001F001E00
0F003F000F803F0007C03F0001F01E0000FFFC00001FF000>25 31 -2 0 29]99 dc[<001FC000
00FFF00001F83C0007E00E000F8006000F0003001F0001803E0001803E0000007E0000007C0000
00FC000000FC000000FC000000FC000000FC000000FC000000FFFFFF80FFFFFF80FC000F807C00
0F807C001F807E001F003E001F001E001F001F003E000F003E0007807C0003E0F80000FFE00000
3F8000>25 31 -2 0 29]101 dc[<003FE00001FFFC0007E03F001F0007C03E0003E0780000F0
780000F0F0000078F0000078F0000078F0000078F0000078780000F8780000F03C0001F01E000F
E00FFFFFC003FFFF8007FFFF000FFFF8000F0000001C0000001C0000001C0000001C0000000C3F
00000DFFE00007E1F000078078000F807C001F003E001F003E003F003F003F003F003F003F003F
003F003F003F003F003F003F003F001F003E001F003E000F807C1807807C3C03E1FF3C01FFE3FC
003F00F8>30 46 -2 15 33]103 dc[ F00007C001F00007C001F00007C001F00007C001F00007C001F00007C001F00007C001F00007C0
01F00007C001F00007C001F00007C001F00007C001F00007C001F00007C001F00007C001F00007
C001F00007C001F00007C001F00007E001F00007E001F00007F001F00007D803E00007DC03E000
07CE07C00007C3FF800007C0FE000007C000000007C000000007C000000007C000000007C00000
0007C000000007C000000007C000000007C000000007C000000007C000000007C000000007C000
00000FC0000000FFC0000000FFC0000000FFC00000001FC000000000C0000000>33 50 -2 0 37
]104 dc[ 07C007C007C007C007C007C007C007C00FC0FFC0FFC0FFC01FC000C00000000000000000000000
00000000000000000007000F801FC01FC01FC00F800700>14 48 -1 0 17]105 dc[ FFFE07C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007
C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C0
07C007C007C00FC0FFC0FFC0FFC01FC000C0>15 50 -1 0 17]108 dc[ 3FFF8FFFE0FFFE3FFF8FFFE007C001F0007C0007C001F0007C0007C001F0007C0007C001F0007C
0007C001F0007C0007C001F0007C0007C001F0007C0007C001F0007C0007C001F0007C0007C001
F0007C0007C001F0007C0007C001F0007C0007C001F0007C0007C001F0007C0007C001F0007C00
07C001F0007C0007C001F0007C0007C001F0007C0007C001F0007C0007C001F0007C0007E001F8
007C0007E001F8007C000FF001FC007C00FFD803E600F800FFDC03E700F800FFCE07C381F0001F
C3FF80FFE00000C0FE003F8000>51 31 -2 0 55]109 dc[ 8007C001F00007C001F00007C001F00007C001F00007C001F00007C001F00007C001F00007C001
F00007C001F00007C001F00007C001F00007C001F00007C001F00007C001F00007C001F00007C0
01F00007C001F00007C001F00007C001F00007C001F00007E001F00007E001F0000FF001F000FF
D803E000FFDC03E000FFCE07C0001FC3FF800000C0FE0000>33 31 -2 0 37]110 dc[<001FC0
0000FFF80001F07C0007C01F000F800F801F0007C01E0003C03E0003E03E0003E07C0001F07C00
01F0FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F87C0001F07C
0001F07C0001F03E0003E03E0003E01E0003C01F0007C00F800F8007C01F0001F07C0000FFF800
001FC000>29 31 -2 0 33]111 dc[ 000007C000000007C000000007C000000007C000000007C000000007C000000007C000000007C0
00000007C000000007C1FC000007C7FF800007CE0FC00007D803E00007F001F00007E000F80007
C0007C0007C0007E0007C0003E0007C0003F0007C0003F0007C0001F0007C0001F8007C0001F80
07C0001F8007C0001F8007C0001F8007C0001F8007C0001F8007C0001F8007C0003F0007C0003F
0007C0003E0007C0007E0007C0007C0007E000FC00FFF000F800FFD803F000FFCE07E0001FC7FF
800000C0FE0000>33 45 -2 14 37]112 dc[ 0007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0
0007C00007C00007C00007E00007E0780FE0FCFFF0FCFFF0FCFFDC781FCFF000C3E0>22 31 -2
0 25]114 dc[<80FE00C3FFC0EF03E0FC00F0F80078F00038F0003CE0003CE0003CC0003CC000
7CC0007C0001F8000FF801FFF007FFE01FFFC03FFF807FFC007F8000FC0000F80030F00030F000
30F000307000707800703800F01E03F00FFF3001FC10>22 31 -2 0 26]115 dc[<001F00007F
8000F8C001F06001F06003E03003E03003E03003E03003E03003E03003E03003E03003E00003E0
0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0
00FFFFE0FFFFE01FFFE00FE00007E00003E00001E00001E00000E00000E00000E0000060000060
00006000006000006000>20 44 -1 0 25]116 dc dfend /fb df[<000380000780001F00003E
00007C0000FC0000F80001F00003F00007E00007E0000FC0000FC0001FC0001F80003F80003F80
003F00003F00007F00007F00007F00007E0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
00FE0000FE0000FE0000FE0000FE0000FE0000FE00007E00007F00007F00007F00003F00003F00
003F80003F80001F80001FC0000FC0000FC00007E00007E00003F00001F00000F80000FC00007C
00003E00001F00000780000380>17 60 -5 15 27]40 dc[ 001F80000F800007C00007E00003F00003F00001F80001F80001FC0000FC0000FE0000FE00007E
00007E00007F00007F00007F00003F00003F80003F80003F80003F80003F80003F80003F80003F
80003F80003F80003F80003F80003F80003F80003F00007F00007F00007F00007E00007E0000FE
0000FE0000FC0001FC0001F80001F80003F00003F00007E00007C0000F80001F80001F00003E00
007C0000F00000E00000>17 60 -4 15 27]41 dc[<38003C003E001F000F000780038003C001
C001C001E000E03FE07FE0FFE0FFE0FFE0FFE0FFC0FFC07F803E00>11 22 -4 12 19]44 dc[<
FFFF80FFFF80FFFF80FFFF80FFFF80FFFF80FFFF80>17 7 -1 -10 23]45 dc[<1E007F807F80
FFC0FFC0FFC0FFC07F807F801E00>10 10 -4 0 19]46 dc[<60000000F0000000F8000000F800
0000780000007C0000007C0000003C0000003E0000003E0000001F0000001F0000000F0000000F
8000000F8000000780000007C0000007C0000003E0000003E0000001E0000001F0000001F00000
00F0000000F8000000F80000007C0000007C0000003C0000003E0000003E0000001E0000001F00
00001F0000000F8000000F8000000780000007C0000007C0000003C0000003E0000003E0000001
F0000001F0000000F0000000F8000000F8000000780000007C0000007C0000003E0000003E0000
001E0000001F0000001F0000000F0000000F8000000F800000078000000300>25 60 -4 15 34]
47 dc[<7FFFFE7FFFFE7FFFFE7FFFFE00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF
0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF
0000FF0000FF0000FF0000FF0000FF0000FF00F8FF00FFFF00FFFF00FFFF0007FF00007F00001F
00000700>23 39 -5 0 34]49 dc[ 1FFFFFC00FFFFFC0078003C003C003C001F003C000F801E0007C01E0007E01E0003F8000001FC0
00000FE0000007F8000003FC000001FE000001FF000000FF800000FFC000007FC000007FE00000
7FE03E007FE07F003FE0FF803FE0FF807FE0FF807FE0FF80FFC0FF80FFC07F01FF807F07FF803F
FFFF001FFFFC0007FFF80000FFC000>27 39 -3 0 34]50 dc[<01FF800007FFF0001FFFFC003F
FFFE007F03FF00FF00FF80FF80FFC0FF807FC0FF807FE0FF807FE0FF807FE07F007FE03E007FE0
00007FE000007FE000007FC000007FC00000FF800000FF000003FE0000FFF80000FFC00000FFF0
00000FFC000003FE000001FF000001FF001F81FF801FC0FF803FC0FF803FE0FF803FC0FF803FC0
FF803FC1FF001FC3FF000FFFFE0007FFFC0003FFF00000FFC000>27 39 -3 0 34]51 dc[<007F
FFF8007FFFF8007FFFF8007FFFF80000FF000000FF000000FF000000FF000000FF000000FF00FF
FFFFF8FFFFFFF8FFFFFFF8FFFFFFF8F8007F007C007F003C007F001E007F000F007F000F807F00
07807F0003C07F0001E07F0001F07F0000F87F0000787F00003C7F00001E7F00001F7F00000FFF
000007FF000003FF000001FF000001FF000000FF0000007F0000003F0000003F0000001F00>29
39 -2 0 34]52 dc[<00FF800007FFF0000FFFFC003FFFFE003F83FF007E00FF80FE007FC0FF00
7FC0FF003FC0FF003FE0FF003FE0FF003FE07E003FE01C003FE000003FE000003FE000003FC000
003FC01E007F801F007F801FC0FF001FFFFE001FFFF8001E7FC0001E0000001E0000001E000000
1E0000001E0000001FFE00001FFF80001FFFE0001FFFF0001FFFFC001FFFFC001FFFFE001FFFFF
001F803F001C000700>27 39 -3 0 34]53 dc[<007FC00001FFF80003FFFC0007FFFE000FF0FF
001FC07F803FC03FC03F803FC07F803FE07F803FE07F803FE07F803FE0FF803FE0FF803FE0FF80
3FE0FF803FE0FF803FE0FFC03FC0FFC03FC0FFE03F80FFE07F00FFFFFE00FFFFFC00FF9FF000FF
8200007F8000007F8000007F801E007FC03F003FC07F803FC07F801FE07F800FE07F800FF83F80
07FE1F0001FFFF0000FFFE00003FFC000007F800>27 39 -3 0 34]54 dc[<1E007F807F80FFC0
FFC0FFC0FFC07F807F801E0000000000000000000000000000001E007F807F80FFC0FFC0FFC0FF
C07F807F801E00>10 27 -4 0 19]58 dc[ 3FFFFE01E00001FF0001F00003FF0000F00003FE0000F00003FE0000F80007FE0000780007FC00
007FFFFFFC00003FFFFFF800003FFFFFF800003FFFFFF800001E001FF000001F003FF000000F00
3FE000000F003FE000000F807FE0000007807FC0000007C0FFC0000003C0FF80000003C0FF8000
0003E1FF80000001E1FF00000001F3FF00000000F3FE00000000F3FE00000000FFFE000000007F
FC000000007FFC000000003FF8000000003FF8000000003FF8000000001FF0000000001FF00000
00000FE0000000000FE0000000000FE00000000007C00000000007C00000>47 41 -2 0 52]65
dc[ FC0003FF0003FC0003FF0003FC0001FF8003FC0001FF8003FC0001FF8003FC0001FF8003FC0001
FF8003FC0001FF8003FC0001FF8003FC0001FF0003FC0003FF0003FC0003FE0003FC0007FC0003
FC001FF80003FFFFFFE00003FFFFFF000003FFFFFFC00003FC003FF00003FC001FF80003FC000F
F80003FC0007FC0003FC0007FC0003FC0003FE0003FC0003FE0003FC0003FE0003FC0003FE0003
FC0007FE0003FC0007FC0003FC0007FC0003FC000FF80003FC001FF800FFFFFFFFF000FFFFFFFF
C000FFFFFFFF8000FFFFFFFC0000>41 41 -3 0 49]66 dc[<00007FF800000007FFFF0000001F
FFFFC000007FFFFFF00000FFF807F80003FFC000FC0007FF00007E000FFC00001F000FF800001F
001FF800000F803FF000000F803FF0000007807FE0000007807FE0000007807FE000000000FFC0
00000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC0000000
00FFC000000000FFC000000000FFC000000000FFC0000000007FE0000007807FE0000007807FE0
000007803FF000000F803FF000000F801FF800001F800FF800001F800FFC00003F8007FF00007F
8003FFC001FF8000FFF807FF80007FFFFFFF80001FFFFF8F800007FFFE078000007FF00380>41
41 -4 0 50]67 dc[ 01FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF00
01FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF00
01FF00FFFFFEFFFFFEFFFFFEFFFFFE>23 41 -1 0 26]73 dc[ FF00FFFFFFFF0003FE01FF8003FE007F8003FE003F8003FE001F8003FE000F8003FE000F8003FE
00078003FE00078003FE00078003FE0007C003FE0003C003FE0003C003FE0003C003FE0003C003
FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE000000
03FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE0000
0003FE00000003FE00000003FE000000FFFFFE0000FFFFFE0000FFFFFE0000FFFFFE0000>34 41
-3 0 41]76 dc[ C000007F8003C00000FF8003C00001FF8003C00001FF8003C00003FF8003C00007FF8003C0000F
FF8003C0001FFF8003C0001FFF8003C0003FF78003C0007FF78003C000FFE78003C001FFC78003
C001FF878003C003FF078003C007FF078003C00FFE078003C00FFC078003C01FF8078003C03FF0
078003C07FF0078003C0FFE0078003C0FFC0078003C1FF80078003C3FF00078003C7FF00078003
CFFE00078003CFFC00078003DFF800078003FFF000078003FFF000078003FFE0000780FFFFC001
FFFEFFFF8001FFFEFFFF0001FFFEFFFF0001FFFE>47 41 -3 0 54]78 dc[<0000FFE00000000F
FFFE0000003FFFFF800000FFC07FE00001FF001FF00003FE000FF80007FC0007FC000FF80003FE
001FF00001FF001FF00001FF003FE00000FF803FE00000FF807FE00000FFC07FE00000FFC07FC0
00007FC0FFC000007FE0FFC000007FE0FFC000007FE0FFC000007FE0FFC000007FE0FFC000007F
E0FFC000007FE0FFC000007FE0FFC000007FE0FFC000007FE07FC000007FC07FC000007FC07FC0
00007FC07FE00000FFC03FE00000FF803FE00000FF801FF00001FF001FF00001FF000FF80003FE
0007F80003FC0003FC0007F80001FF001FF000007FC07FC000003FFFFF80000007FFFC00000000
FFE00000>43 41 -4 0 52]79 dc[ 0003FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE00
000003FE00000003FE00000003FE00000003FE00000003FE00000003FFFFFC0003FFFFFF8003FF
FFFFE003FE007FF003FE001FF803FE000FF803FE0007FC03FE0007FC03FE0007FE03FE0007FE03
FE0007FE03FE0007FE03FE0007FE03FE0007FE03FE0007FC03FE0007FC03FE000FFC03FE001FF8
03FE003FF0FFFFFFFFE0FFFFFFFFC0FFFFFFFF00FFFFFFF000>39 41 -3 0 47]80 dc[ 00F1FFFE00FFFFFF80FFFFFFC0FFF01FE0FF000FE0FE0007F0FC0007F0F80003F8F00003F8F000
03F8F00003F8F00007F8000007F800000FF800003FF80003FFF8003FFFF001FFFFF007FFFFE00F
FFFFC01FFFFFC03FFFFF807FFFFE007FFFF800FFFFC000FFF80000FFC00000FF0001E0FF0001E0
FE0001E0FE0003E0FE0003E07E0007E07F000FE03F801FE03FC0FFE01FFFFFE00FFFFFE003FFF1
E000FF80E0>29 41 -4 0 38]83 dc[<00FFFFFFE00000FFFFFFE00000FFFFFFE00000FFFFFFE0
0000007FC0000000007FC0000000007FC0000000007FC0000000007FC0000000007FC000000000
7FC0000000007FC0000000007FC0000000007FC0000000007FC0000000007FC0000000007FC000
0000007FC0000000007FC0000000007FC0000000007FC0000000007FC0000000007FC000000000
7FC00000F0007FC001E0F0007FC001E0F0007FC001E0F0007FC001E0F0007FC001E0F8007FC003
E0F8007FC003E0F8007FC003E07C007FC007C07C007FC007C07E007FC00FC07F807FC03FC07FFF
FFFFFFC07FFFFFFFFFC07FFFFFFFFFC07FFFFFFFFFC0>43 40 -2 0 48]84 dc[<00003FF80000
0001FFFF00000007FFFFC000001FFFFFF000003FF807F800007FC001F80000FF80007C0000FF00
003E0001FF00001E0001FE00001E0003FE00001F0003FE00000F0003FE00000F0003FE00000F00
03FE00000F0003FE00000F0003FE00000F0003FE00000F0003FE00000F0003FE00000F0003FE00
000F0003FE00000F0003FE00000F0003FE00000F0003FE00000F0003FE00000F0003FE00000F00
03FE00000F0003FE00000F0003FE00000F0003FE00000F0003FE00000F0003FE00000F0003FE00
000F0003FE00000F0003FE00000F0003FE00000F00FFFFF803FFFCFFFFF803FFFCFFFFF803FFFC
FFFFF803FFFC>46 41 -3 0 53]85 dc[<03FC0FFC0FFF1FFC3FFFFFFC7FC3FFFC7F81FFC0FF80
FF80FF007F80FF007F80FF007F80FF807F807F807F807FC07F803FF87F801FFFFF8007FFFF8000
FFFF800001FF8000007F801F807F803FC07F803FC07F803FC0FF003FC0FF003FC3FE001FFFFC00
0FFFF00003FFC000>30 27 -2 0 33]97 dc[<0F01FE00000F8FFFC0000FDFFFF0000FFE0FF800
0FFC03FC000FF801FE000FF001FE000FF001FF000FF000FF000FF000FF800FF000FF800FF000FF
800FF000FF800FF000FF800FF000FF800FF000FF800FF000FF800FF000FF800FF000FF000FF000
FF000FF001FE000FF001FE000FFC03FC000FFF0FF8000FFFFFF0000FFFFFC0000FF1FF00000FF0
0000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000F
F00000000FF00000000FF0000000FFF0000000FFF0000000FFF0000000FFF0000000>33 42 -2
0 38]98 dc[<003FF00001FFFC0007FFFF000FFC1F801FF007C03FE007C03FC003C07FC000007F
C00000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000
7F803F007FC07F803FC07F803FC07F801FE07F800FF87F8007FFFF0001FFFE00003FF800>26 27
-2 0 31]99 dc[<007FC7FF8001FFF7FF8007FFFFFF800FF87FFF801FE01FF8003FC00FF8003F
C007F8007F8007F8007F8007F800FF8007F800FF8007F800FF8007F800FF8007F800FF8007F800
FF8007F800FF8007F800FF8007F800FF8007F8007F8007F8007FC007F8003FC007F8003FC007F8
001FE00FF8000FF83FF80007FFFFF80001FFFFF800003FC7F800000007F800000007F800000007
F800000007F800000007F800000007F800000007F800000007F800000007F800000007F8000000
07F80000007FF80000007FF80000007FF80000007FF800>33 42 -2 0 38]100 dc[<003FF000
01FFFE0003FFFF800FFC0FC01FF003C03FE003E03FC001E07FC000007F800000FF800000FF8000
00FF800000FF800000FFFFFFE0FFFFFFE0FFFFFFE0FF800FE0FF800FE07F800FE07F801FC03FC0
1FC03FC03FC01FE03F800FF0FF0007FFFE0001FFFC00003FE000>27 27 -2 0 32]101 dc[<7F
FFC0007FFFC0007FFFC0007FFFC00007F8000007F8000007F8000007F8000007F8000007F80000
07F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800
0007F8000007F8000007F80000FFFFC000FFFFC000FFFFC000FFFFC00007F8000007F8000007F8
000007F8000007F8000007F8000007F83F0007F87F8007F87F8003FC7F8003FE7F8001FF7F8000
7FFF00003FFE000007FC00>25 42 -2 0 21]102 dc[<00FFF80007FFFF001FFFFFC03FE03FE0
7F800FF07E0003F0FE0003F8FC0001F8FC0001F8FC0001F8FE0003F87F000FF83FFFFFF81FFFFF
F00FFFFFF01FFFFFE03FFFFFC03FFFFF003FFFF8003F0000003E0000003C0000003CFF80001FFF
F0001FFFF8001FE3FC003FC1FE003F80FE007F80FF007F80FF007F80FF007F80FF007F80FF007F
80FF303F80FEFC3FC1FEFC1FE3FEFC0FFFFFFC07FFFFF800FF83F0>30 40 -2 13 34]103 dc[<
FFFF1FFF80FFFF1FFF80FFFF1FFF80FFFF1FFF800FF007F8000FF007F8000FF007F8000FF007F8
000FF007F8000FF007F8000FF007F8000FF007F8000FF007F8000FF007F8000FF007F8000FF007
F8000FF007F8000FF007F8000FF807F8000FF807F8000FFC07F8000FFC07F8000FFE07F8000FFF
8FF0000FF7FFE0000FF1FFC0000FF07F80000FF00000000FF00000000FF00000000FF00000000F
F00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF0000000FFF0000000
FFF0000000FFF0000000FFF0000000>33 42 -3 0 38]104 dc[ 0FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0FFF0FFF0FF
F0FFF000000000000000000000000007C00FE01FF03FF03FF03FF03FF01FF00FE007C0>16 43
-2 0 19]105 dc[<0FF8003FFF007FFFC0FF3FE0FF0FF0FF0FF0FF07F8FF07F87E07F80007F800
07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800FFF800
FFF800FFF800FFF80000000000000000000000000000000000000003C0000FF0000FF0001FF800
1FF8001FF8001FF8000FF0000FF00003C0>21 55 5 12 21]106 dc[ 0FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00F
F00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0FFF0FFF0FFF0FFF0>16 42
-2 0 19]108 dc[ FC00FF000FF003FC00FF000FF003FC00FF000FF003FC00FF000FF003FC00FF000FF003FC00FF00
0FF003FC00FF000FF003FC00FF000FF003FC00FF000FF003FC00FF000FF003FC00FF000FF003FC
00FF000FF003FC00FF000FF003FC00FF000FF803FE00FF000FF803FE00FF000FFC03FF00FF000F
FC03FF00FF000FFF03FFC0FF00FFEFC7FBF1FE00FFE7FFF1FFFC00FFE1FFE07FF800FFE07F801F
E000>52 27 -3 0 59]109 dc[ 0FF007F8000FF007F8000FF007F8000FF007F8000FF007F8000FF007F8000FF007F8000FF007F8
000FF007F8000FF007F8000FF007F8000FF007F8000FF007F8000FF807F8000FF807F8000FFC07
F8000FFC07F8000FFE07F800FFEF8FF000FFE7FFE000FFE1FFC000FFE07F8000>33 27 -3 0 38
]110 dc[<003FE00001FFFC0007FFFF000FF07F801FE03FC03FC01FE03F800FE07F800FF07F80
0FF0FF800FF8FF800FF8FF800FF8FF800FF8FF800FF8FF800FF8FF800FF8FF800FF87F800FF07F
800FF07F800FF03F800FE03FC01FE01FC01FC00FF07F8003FFFE0001FFFC00003FE000>29 27
-2 0 34]111 dc[ F00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF1FE00000FFFFFC000
0FFFFFF0000FFE1FF8000FFC07FC000FF803FE000FF003FE000FF001FF000FF001FF000FF000FF
800FF000FF800FF000FF800FF000FF800FF000FF800FF000FF800FF000FF800FF000FF800FF000
FF800FF001FF000FF001FF000FF001FE000FF003FE000FFC07FC00FFFF0FF800FFFFFFF000FFFF
FFC000FFF1FF0000>33 39 -2 12 38]112 dc[ F0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF07E0F
F0FF0FF8FF0FF8FF0FFCFFFFFCFFFFFFFEFFEFFCFFE7F0>24 27 -2 0 28]114 dc[ FFC0FFFFF0FF03F8FC00F8F8007CF8007CF0007CF000FC0003FC003FFC03FFFC0FFFF83FFFF87F
FFF07FFFC0FFFF80FFFC00FF0000FC00F0F800F0F800F07C01F07E07F03FFFF01FFFF003FE70>
22 27 -2 0 27]115 dc[<003F8000FFE001FFF003FCF007F8F807F87807F87807F87807F87807
F87807F87807F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007
F800FFFFF0FFFFF0FFFFF01FFFF007F80003F80003F80001F80000F80000F80000F80000780000
7800007800007800>21 38 -1 0 27]116 dc[<007FC7FF8001FFF7FF8007FFFFFF8007F87FFF
800FF01FF8000FF00FF8000FF00FF8000FF007F8000FF007F8000FF007F8000FF007F8000FF007
F8000FF007F8000FF007F8000FF007F8000FF007F8000FF007F8000FF007F8000FF007F8000FF0
07F8000FF007F8000FF007F8000FF007F800FFF07FF800FFF07FF800FFF07FF800FFF07FF800>
33 27 -3 0 38]117 dc[<0003E000000003E000000007F000000007F00000000FF80000000FF8
0000000FF80000001FFC0000001FFC0000003FFE0000003FDE0000003FDE0000007F8F0000007F
8F000000FF8F800000FF07800001FF07C00001FE03C00001FE03C00003FE03E00003FC01E00007
FC01F00007F800F000FFFF07FF80FFFF07FF80FFFF07FF80FFFF07FF80>33 27 -1 0 36]118
dc[<00078003C000000FC007E000000FC007E000000FC007E000001FE00FF000001FE00FF00000
3FF01FF800003FF01FF800003FF01FF800007FF83FFC00007FF83FBC00007FF83FBC0000FF7C7F
3E0000FF3C7F1E0001FF3EFF1F0001FE1EFE0F0001FE1EFE0F0003FE1FFE0F8003FC0FFC078003
FC0FFC078007F80FF807C007F807F803C007F807F803C0FFFE3FFE1FFEFFFE3FFE1FFEFFFE3FFE
1FFEFFFE3FFE1FFE>47 27 -1 0 50]119 dc[<0FC00000003FF00000007FF8000000787C0000
00F03E000000F01F000000FF0F000000FF0F8000007E078000003C07C000000003C000000003C0
00000003E000000003E000000007F000000007F00000000FF80000000FF80000000FF80000001F
FC0000001FFC0000003FFE0000003FDE0000003FDE0000007F8F0000007F8F000000FF8F800000
FF07800001FF07C00001FE03C00001FE03C00003FE03E00003FC01E00007FC01F00007F800F000
FFFF07FF80FFFF07FF80FFFF07FF80FFFF07FF80>33 39 -1 12 36]121 dc[ 00FFFFFF007FC0FF007FE03F003FF01F001FF00F000FF80F800FFC0F8007FC078003FE078003FF
078001FF878000FF800000FFC000007FE000783FE000781FF000781FF8007C0FF8007C07FC003C
07FE003E03FF003F81FF003FFFFF803FFFFF803FFFFF80>25 27 -2 0 31]122 dc dfend /fc
df[<3C7EFFFFFFFF7E3C>8 8 -4 0 16]46 dc[<7FFFE07FFFE07FFFE003F80003F80003F80003
F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003
F80003F80003F80003F80003F80003F80003F800FFF800FFF800FFF80003F800007800001800>
19 32 -4 0 28]49 dc[ C03801E03800F038007800003E00003F00001F80000FC0000FE00007F00007F00007F81803F87E
03F8FF03F8FF07F8FF07F0FF07F0FE0FE07C3FE03FFF801FFF0003FC00>21 32 -3 0 28]50 dc
[<01FE000FFFC01FFFE03E07F07F03F8FF01FCFF81FCFF81FEFF81FEFF81FE7F01FE3E01FE0001
FC0001FC0003F80007F001FFC001FE0001FF80001FC0000FE00F07F01F87F83FC3F83FC3F83FC3
F83FC3F81F87F01F07F00FFFE003FF8000FE00>23 32 -2 0 28]51 dc[<07F8001FFF003FFF80
7C1FC07C0FE0FE07F0FF07F0FF07F8FE07F87E07F83C07F80007F80007F80007F03807F03C07E0
3E0FE03FFFC03BFF0039FC003800003800003800003900003FF8003FFE003FFF003FFF803FFFC0
3FFFE03C01E0300060>21 32 -3 0 28]53 dc[<00FF0003FFC007FFE00F83F01F00F83E00FC3E
00FC7E00FE7E00FE7E00FEFE00FEFE00FEFE00FEFE00FEFF00FCFF00FCFF80F8FFC1F8FEFFF0FE
7FE0FE1F807E00007E01F07E03F83F03F83F03F81F83F80FC1F807F07003FFF000FFE0001F80>
23 32 -2 0 28]54 dc[ FE0003C003FE0001C003FC0001FFFFFC0001FFFFFC0000FFFFF80000E00FF80000700FF0000070
0FF00000781FF00000381FE00000381FE000001C3FC000001C3FC000001E7FC000000E7F800000
0E7F8000000FFF80000007FF00000007FF00000003FE00000003FE00000003FE00000001FC0000
0001FC00000000F800000000F800000000F800000000700000>37 34 -2 0 42]65 dc[<0003FE
0000001FFFC00000FFFFF00001FF00F80003F8003C0007F0001E000FE0000F001FC00007003F80
0007803F800003807F800003807F000003807F00000000FF00000000FF00000000FF00000000FF
00000000FF00000000FF00000000FF00000000FF000000007F000003807F000003807F80000380
3F800007803F800007801FC0000F800FE0000F8007F0001F8003F8003F8001FF00FF8000FFFFE7
80001FFF83800003FE0180>33 34 -3 0 40]67 dc[ F8000007F8000007F8000007F8000007F8000007F8000007F8380007F8380007F8380007F83800
07F8780007F8F80007FFF80007FFF80007FFF80007F8F80007F8780007F8381C07F8381C07F838
1C07F8381C07F8003C07F8003C07F8003807F8007807F800F807F803F8FFFFFFF8FFFFFFF8FFFF
FFF8>30 34 -2 0 35]70 dc[ 0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC
0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC00FFFFF0FFFFF0FFFFF0>20
34 0 0 21]73 dc[ 007807F8007807F8007807F8003807F8003807F8003807F8003807F8000007F8000007F8000007
F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80000
07F8000007F8000007F8000007F80000FFFFF000FFFFF000FFFFF000>29 34 -2 0 34]76 dc[<
FFFFC000FFFFC000FFFFC00007F8000007F8000007F8000007F8000007F8000007F8000007F800
0007F8000007F8000007F8000007F8000007FFFF0007FFFFE007FFFFF007F807F807F801FC07F8
00FE07F800FE07F800FF07F800FF07F800FF07F800FF07F800FF07F800FF07F800FE07F800FE07
F801FC07F807F8FFFFFFF0FFFFFFE0FFFFFF00>32 34 -2 0 38]80 dc[ F8FFFFC1FFFC07F801FE0E07F803FC0E07F803FC0007F803FC0007F803FC0007F803FC0007F803
FC0007F803FC0007F803FC0007F803FC0007F807F80007F807F80007F80FF00007FFFFE00007FF
FFC00007FFFFF00007F807F80007F801FC0007F800FE0007F800FF0007F800FF0007F800FF0007
F800FF0007F800FF0007F800FF0007F800FE0007F801FC0007F807F800FFFFFFF000FFFFFFC000
FFFFFE0000>39 34 -2 0 42]82 dc[ 3FE0003FE0003F00007F00007F0000FF000FFF01FFFE07FFFE0FFFFC1FFFF83FFFF07FFFE07FFF
C0FFFC00FF8000FE0000FE001CFC001CFC001C7C003C7C007C3E00FC3F03FC1FFFFC07FF9C01FC
0C>24 34 -3 0 31]83 dc[<07FFFFF80007FFFFF80007FFFFF8000007F800000007F800000007
F800000007F800000007F800000007F800000007F800000007F800000007F800000007F8000000
07F800000007F800000007F800000007F800000007F800000007F800000007F800000007F80000
E007F801C0E007F801C0E007F801C0E007F801C0F007F803C0F007F803C07007F803807807F807
807807F807807E07F81F807FFFFFFF807FFFFFFF807FFFFFFF80>34 34 -2 0 39]84 dc[<0FC0
7F1FF8FF3FFDFF7F0FF0FE07F0FE03F0FE03F0FE03F07F03F07F83F03FE3F00FFFF001FFF00003
F01C03F03E03F07F03F07F07E07F0FE03FFFC01FFF8007FC00>24 22 -2 0 27]97 dc[<00FE00
07FF800FFFC01FC1E03F80707F00707F00007E0000FE0000FE0000FE0000FE0000FE0000FE0000
7E01C07E03E07F07F03F07F01F87F00FFFE007FFC000FF00>20 22 -2 0 25]99 dc[<01F87FC0
07FF7FC01FFFFFC03F83FE003F00FE007E007E007E007E00FE007E00FE007E00FE007E00FE007E
00FE007E00FE007E00FE007E00FE007E007E007E007E007E003F007E003F81FE001FFFFE0007FF
7E0001FC7E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000
007E0000007E000003FE000003FE000003FE00>26 35 -2 0 31]100 dc[<00FE0003FFC00FFF
E01FC0F03F00787F00387E00007E0000FE0000FE0000FE0000FFFFF8FFFFF8FFFFF8FE01F87E01
F87E01F03F03F01F87E00FFFC007FF8000FE00>21 22 -2 0 26]101 dc[<01FFC0000FFFF800
1FFFFC003F007E007C001F00F8000F80F8000F80F8000F80F8000F807C003F803FFFFF001FFFFF
001FFFFE003FFFF8003FFFE0003C000000380000003800000039FC00001FFF00001FFFC0003F07
E0003E03E0007E03F0007E03F0007E03F0007E03F0007E03F2003E03E7003F07EF801FFFFF8007
FF7F0001FC1E00>25 33 -1 11 28]103 dc[ 1F807E001F807E001F807E001F807E001F807E001F807E001F807E001F807E001F807E001F807E
001F807E001FC07E001FE07E001FF0FC001FBFFC001F9FF8001F87E0001F8000001F8000001F80
00001F8000001F8000001F8000001F8000001F8000001F8000001F800000FF800000FF800000FF
800000>26 35 -2 0 31]104 dc[ 1F801F801F801F801F801F801F80FF80FF80FF800000000000000000000000000E003F003F807F
807F803F803F000E00>12 36 -1 0 15]105 dc[ 1F803F007E001F803F007E001F803F007E001F803F007E001F803F007E001F803F007E001F803F
007E001F803F007E001F803F007E001F803F007E001F803F007E001F803F007E001F803F007E00
1FC03F807E001FE03FC07E001FF07EE0FC00FFBFFE7FFC00FF9FFC3FF800FF87F00FE000>42 22
-2 0 47]109 dc[ 001F807E001F807E001F807E001F807E001F807E001F807E001F807E001F807E001FC07E001FE0
7E001FF0FC00FFBFFC00FF9FF800FF87E000>26 22 -2 0 31]110 dc[<00FE0007FFC00FFFE0
1F83F03F01F87E00FC7E00FCFE00FEFE00FEFE00FEFE00FEFE00FEFE00FEFE00FE7E00FC7E00FC
7E00FC3F01F81F83F00FFFE007FFC000FE00>23 22 -2 0 28]111 dc[ F000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8FE0001FBFF800
1FFFFC001FE0FE001FC07F001F803F801F803F801F801FC01F801FC01F801FC01F801FC01F801F
C01F801FC01F801FC01F801FC01F803F801F803F801FC07F001FF0FF00FFFFFE00FFBFFC00FF87
F000>26 32 -2 10 31]112 dc[ 80001F80001F80001F80001F80001F80001F83801F87C01FCFE01FCFE01FEFE0FFFFC0FF7F80FF
3E00>19 22 -2 0 23]114 dc[ 7F8007FF001FFF003FFE007FFC00FFF000FE0000F00000F00700F00700780F007FFF001FFF0007
F300>17 22 -2 0 22]115 dc[<01F80003FE0007FF000FE7000FC3800FC3800FC3800FC3800F
C3800FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC000FFFF00FFFF00FF
FF003FC0000FC00007C00007C00003C00003C00001C00001C00001C00001C000>17 32 -1 0 22
]116 dc[<03F87FC007FE7FC00FFF7FC01F83FE001F80FE001F80FE001F807E001F807E001F80
7E001F807E001F807E001F807E001F807E001F807E001F807E001F807E001F807E001F807E001F
807E00FF83FE00FF83FE00FF83FE00>26 22 -2 0 31]117 dc[<1F0000007FC000007FE00000
F1F00000E0780000FE380000FE3C00007C1C0000001C0000000E0000000E0000001F0000001F00
00003F8000003F8000007FC000007FC000007FC00000FCE00000FCE00001FCF00001F8700003F8
780003F0380003F0380007E01C0007E01C000FE01E000FC00E00FFF03FE0FFF03FE0FFF03FE0>
27 32 -1 10 30]121 dc[ 07F07003F87001FC00E0FE00E0FE00E07F00F03F80F01F80781FC07C0FE07FFFF07FFFF07FFFF0
>20 22 -2 0 25]122 dc dfend /fd df[<607030181C0C0C0606067EFEFEFCFC78>7 16 -4
10 14]44 dc[<78FCFCFCFC78>6 6 -4 0 14]46 dc[ 03C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C0FB
C0FFC007C001C000C0>16 32 -4 0 24]49 dc[ 006006006003006001800001C00000E000007000003C00003E00001E00000F00000F800007C000
07C00007E03007E07803E0FC03E0FC07E0FC07E0F807C0600FC0300F80383F000FFE0003F000>
19 32 -2 0 24]50 dc[<01F80007FC000F0F001C07003C03803803C07803C07803E07803E078
03E0F803E0F803E0F803E0F803E0FC03C0FC03C0FC0780FE0700FBFE00F9FC00F8000078000078
00007C00003C03803C07C01E07C00E03C00701C003C38001FF00007E00>19 32 -2 0 24]54 dc
[<07C0001FF000383800301C00780E007C07007C07803807800003C00003C00003C00003E007F3
E00FFBE01C0FE03C07E07807E07807E0F803E0F803E0F803E0F803E0F803C0F803C0F803C07803
C07803803C07801C07000E0E0007FC0001F000>19 32 -2 0 24]57 dc[ 0003F00E0003F0060003E0060003E0070007E0030007C0030007C003800FC001FFFF8001FFFF80
01C01F8000C01F0000C01F0000603E0000603E0000603E0000307C0000307C0000307C000018F8
000018F8000018F800000DF000000DF000000FF0000007E0000007E0000007E0000003C0000003
C0000003C00000018000>32 34 -2 0 37]65 dc[<000FE000003FFC0000FC0E0001F0030007C0
01800F8000C00F0000C01F0000603E0000603E0000307E0000307C0000307C000030FC000000FC
000000FC000000FC000000FC000000FC000000FC000000FC0000307C0000307C0000307E000030
3E0000703E0000701F0000F00F0000F00F8001F007C001F001E003F000FC0E70003FF830000FE0
10>28 34 -3 0 35]67 dc[ E007C003E007C003E007C003E007C003E007C003E007C003E007C003E007C003E007C003E007C0
03E007FFFFE007FFFFE007C003E007C003E007C003E007C003E007C003E007C003E007C003E007
C003E007C003E007C003E007C003E007C003E007C003E0FFFE7FFFFFFE7FFF>32 34 -2 0 37]
72 dc[<07E0001FF800783E00781F00FC1F00FC0F80FC0F80780F80300F80000F80000F80000F
80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F
80000F80000F80000F80000F80000F80000F80000F8003FFF803FFF8>21 34 -1 0 25]74 dc[<
FFFFFF00FFFFFF0007C03F0007C00F0007C0070007C0070007C0030007C0038007C0038007C001
8007C0018007C0018007C0018007C0000007C0000007C0000007C0000007C0000007C0000007C0
000007C0000007C0000007C0000007C0000007C0000007C0000007C0000007C0000007C0000007
C0000007C0000007C00000FFFF0000FFFF0000>25 34 -2 0 30]76 dc[ 0007C00FE30007C00FC18007C01F818007C01F800007C01F800007C01F800007C01F000007C01F
000007C01F000007C01F000007C01E000007C03E000007C03C000007C078000007FFF0000007FF
F8000007C07E000007C01F000007C00F800007C007C00007C007E00007C007E00007C007E00007
C007E00007C007E00007C007E00007C007C00007C00F800007C01F000007C07E0000FFFFF80000
FFFFE00000>33 34 -2 0 36]82 dc[<003FFF8000003FFF80000001F000000001F000000001F0
00000001F000000001F000000001F000000001F000000001F000000001F000000001F000000001
F000000001F000000003F000000003F800000007FC00000007CC0000000FCE0000001F86000000
1F870000003F030000003E018000007E01800000FC00C00000FC00E00001F800600001F0007000
03F000300007E000380007E0001C000FC0003E00FFF800FFE0FFF800FFE0>35 34 -1 0 37]89
dc[<0F83C03FE7F07C3FB8781F18F80F18F80F18F80F18F80F007C0F007C0F003F0F000FFF0003
FF00000F00000F00380F007C0F007C1E007C3C003FF8001FE000>21 21 -2 0 24]97 dc[<0C1F
000E7FC00EE1F00F80F00F00780F003C0F003C0F003E0F003E0F003E0F003E0F003E0F003E0F00
3E0F003C0F003C0F00780F80780FE1F00F7FE00F1F800F00000F00000F00000F00000F00000F00
000F00000F00000F00000F00001F0000FF0000FF00000F0000>23 35 -1 0 27]98 dc[<03F1FE
0FFDFE1F0FF03C03E03C01E07801E07801E0F801E0F801E0F801E0F801E0F801E0F801E0F801E0
7801E07801E03C01E03E03E01F07E007FDE003F1E00001E00001E00001E00001E00001E00001E0
0001E00001E00001E00001E00003E0001FE0001FE00001E0>23 35 -2 0 27]100 dc[<00FC00
07FF000F83801E00C03C00607C0060780000F80000F80000F80000F80000F80000FFFFE0FFFFE0
7801E07C03E03C03C01E07C00F0F8007FF0001FC00>19 21 -1 0 22]101 dc[ 0F000F000F000F000F000F000F000F000F000F000F000F000F000F001F00FF00FF000F00000000
00000000000000000000000E001F003F003F001F000E00>11 34 0 0 13]105 dc[ 000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00
0F000F000F000F000F000F000F000F000F001F00FF00FF000F00>12 35 0 0 13]108 dc[ FF9FFCFFF3FF9FFC0F007803C00F007803C00F007803C00F007803C00F007803C00F007803C00F
007803C00F007803C00F007803C00F007803C00F007803C00F007803C00F007803C00F007803C0
0F807C03C01FC07E03C0FFE0F70780FF3FE1FF000F0FC07E00>38 21 -1 0 41]109 dc[ FFFFF3FF0F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00
F00F00F00F00F00F80F01FC0F0FFE1E0FF7FC00F1F80>24 21 -1 0 27]110 dc[<01FC0007FF
000F07801E03C03C01E07C01F07800F0F800F8F800F8F800F8F800F8F800F8F800F8F800F87800
F07800F03C01E01E03C00F078007FF0001FC00>21 21 -1 0 24]111 dc[ 000F00000F00000F00000F00000F00000F00000F00000F1F000F7FC00FE1F00F80F00F00780F00
7C0F007C0F003E0F003E0F003E0F003E0F003E0F003E0F003E0F007C0F007C0F00780F80F8FFE1
F0FF7FE00F1F80>23 31 -1 10 27]112 dc[<01E003F007980F0C0F0C0F0C0F0C0F0C0F0C0F00
0F000F000F000F000F000F000F000F000F00FFF8FFF83F001F000F000700070007000300030003
000300>14 31 -1 0 19]116 dc[<01F8FF03FEFF0787F80F01F00F01F00F00F00F00F00F00F0
0F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F01F01F0FF0FF0FF0FF00F00F0
>24 21 -1 0 27]117 dc[<3E00007F0000FB8000F9C000F8C000F86000006000007000003000
003000003800003800007C00007C00007C0000FE0000F60000F60001E30001E30003E38003C180
03C18007C0C00780C00780C00F00600F00601F00F8FFE3FEFFE3FE>23 31 -1 10 26]121 dc
dfend /fe df[<0F03C0000F03C0000F03C0000F03C0000F03C0000F03C0000F03C0000F03C000
0F03C0000F03C0000F03C0000F03C0000F03C0000F03C0000F03C000FFF3FC00FFF3FC00FFF3FC
000F03C0000F03C0000F03C0000F03C0000F03C0000F03C0000F01C0000785E08003FCFF8001FC
7F8000FC1F80>25 29 0 0 24]11 dc[<0F03C00F03C00F03C00F03C00F03C00F03C00F03C00F
03C00F03C00F03C00F03C00F03C00F03C00F03C00F03C0FFF3C0FFF3C0FFF3C00F03C00F03C00F
03C00F03C00F03C00F03C00F03C00713C007F3C003F3C001F3C0>18 29 0 0 22]13 dc[<00E0
01C0038007000F000E001E001C003C003C0038007800780078007000F000F000F000F000F000F0
00F000F000F000F000F000F000700078007800780038003C003C001C001E000E000F0007000380
01C000E0>11 42 -2 11 16]40 dc[ C003C003C001C001E001E001E001E001E001E001E001E001E001E001E001E001C003C003C003C0
03800780078007000F000E001E001C0038007000E000>11 42 -2 11 16]41 dc[ E0>11 3 0 -8 14]45 dc[4 4 -4 0 12]46 dc[ 00F0F0F0F0>4 18 -4 0 12]58 dc[ 003C007E001FFFFC001FFFFC001FFFFC000F00F8000F00F8000701F0000781F0000781F0000381
E0000383E00003C3E00001C3C00001C7C00001E7C00000E7800000E7800000E78000006F000000
7F0000007F0000003E0000003E0000>25 29 -1 0 28]65 dc[<003FC000FFF803FFFC07FFFC0F
E03C1F80043F00003E00007E00007C00007C0000F80000F80000F80000F80000F80000F80000F8
00007C00007C00007E00003E00003F00001F80100FE07007FFF803FFF800FFF8003FE0>22 29
-2 0 27]67 dc[ 003EF8003EF8003EF8003EF8003EF8003EF8003EF8003EF8003CF8007CF8007CF800F8F800F8F8
01F0F803F0F80FE0FFFF80FFFF00FFFC00>23 29 -4 0 30]68 dc[ C0F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000FFFF80FFFF80FFFF
80F80000F80000F80000F80000F80000F80000F80000F80000FFFFC0FFFFC0FFFFC0FFFFC0>18
29 -4 0 25]69 dc[ F80000F80000F80000FFFF00FFFF00FFFF00F80000F80000F80000F80000F80000F80000F80000
F80000F80000FFFF80FFFF80FFFF80FFFF80>17 29 -4 0 24]70 dc[ F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8>5 29 -3 0 12]73 dc[ F801F0F803E0F807E0F807C0F80FC0F80F80F81F00FC1F00FE3E00FE7E00FF7C00FFFC00FFF800
FBF000F9F000F8F800F87C00F83C00F81E00F81F00F80F80F807C0F803E0F801F0F800F8F8007C
>22 29 -4 0 29]75 dc[ F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800>15 29 -4 0 22]76
dc[ F8F0F0F8F0F0F0F0F1F0F0F1F0F0F1E0F0F3E0F0F3E0F0F3C0F0F3C0F0F780F0F780F0F780F0FF
00F0FF00F0FF00F0FE00F0>20 29 -4 0 29]78 dc[<003F000001FFE00003FFF00007E1F8000F
807C001F003E003E001F003E001F007C000F807C000F80FC000FC0F80007C0F80007C0F80007C0
F80007C0F80007C0F80007C0F80007C0780007807C000F807C000F803C000F003E001F001F003E
000F807C0007E1F80003FFF00001FFE000003F0000>26 29 -2 0 31]79 dc[ 0000F80000F80000F80000F80000F80000F80000F80000F80000F80000FFFC00FFFF00FFFF80F8
0FC0F803E0F801E0F801F0F801F0F801F0F801F0F801F0F801E0F803E0F80FC0FFFF80FFFF00FF
FC00>20 29 -4 0 27]80 dc[ 00F81F00F81E00F83E00F87C00FFFC00FFFF00FFFF80F80FC0F803E0F801E0F801F0F801F0F801
F0F801F0F801E0F803E0F80FC0FFFF80FFFF00FFF800>21 29 -4 0 27]82 dc[<07F0001FFC00
7FFE00FFFF00FC1F80F00F804007C00007C00007C00007C0000FC0000F80007F8007FF000FFE00
1FFC003FF8007FC000FC0000FC0000F80000F80000F800007C02007E0F003FFF001FFF000FFE00
03F800>18 29 -2 0 23]83 dc[<003E0000003E0000003E0000003E0000003E0000003E000000
3E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000
003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000FFFFFF
80FFFFFF80FFFFFF80FFFFFF80>25 29 -1 0 28]84 dc[<003E0000003E0000007F0000007F00
00007B000000F3800000F3800001F3C00001F3C00001E1C00003E1E00003E1E00003E0E00007C0
F00007C0F00007C070000F8078000F8078001F803C001F003C001F003C003E001E003E001E003E
001E007C000F007C000F00FC000F80F8000780F8000780>25 29 -1 0 28]86 dc[<01F000F800
01F000F80001F000F80003F001FC0003D801DC0003D801DC00039801CC00079C03CE00079C03CE
00079C03CE000F9C07CF000F9E07CF000F8E078F000F0E0787001F0E0F87801F0F0F87801F0F0F
87801F070F03803E070F03C03E071F03C03E079F03C03E039E01C07C039E01E07C039E01E07C03
BE01E07C01FC00E0F801FC00F0F801FC00F0F801F800F0>36 29 -1 0 39]87 dc[<1F9E3FFE7F
FEF87EF01EF01EF01E7E1E3FFE1FFE03FE001E201E301E3C3C3FFC1FF807E0>15 18 -1 0 20]
97 dc[<03F80FFE1FFE3E0E78027800F000F000F000F000F000F000780078063E0E1FFE0FFC03
F0>15 18 -1 0 18]99 dc[<07CF1FFF3FFF3E1F780F780FF00FF00FF00FF00FF00FF00F780F78
0F3E1F1FFF0FFF07CF000F000F000F000F000F000F000F000F000F000F000F>16 29 -1 0 21]
100 dc[<03F80FFE1FFE3E0678007800F000F000F000FFFEFFFEFFFE701E781C3C3C3FF80FF007
E0>15 18 -1 0 18]101 dc[<0F000F000F000F000F000F000F000F000F000F000F000F000F00
0F000F00FFE0FFE0FFE00F000F000F000F000F000F000F00078403FC01FC00FC>14 29 0 0 13]
102 dc[<07F8001FFE003FFF007C0F80F003C0F003C0F003C0F807C07FFF803FFF803FFF007FFC
0078000070000077E0007FF0003FF8003C3C00781E00781E00781E00781E00781E003C3C001FFF
C00FFFC007E7C0>18 27 -1 9 21]103 dc[ F03CF03CF03CF83CFC7CFFF8FFF8F3E0F000F000F000F000F000F000F000F000F000F000F000>
14 29 -3 0 21]104 dc[<787878787878787878787878787878787878000000000000F8F8F8F8
F8>5 29 -1 0 9]105 dc[ C0F3E0F1F0F0F8F0FCF000F000F000F000F000F000F000F000F000F000F000>15 29 -3 0 20]
107 dc[4 29 -2 0 9
]108 dc[ 03C0F01E03C0F01E03C0F01E03C0F01E03C0F81F03C0FC3F87C0FFFFFF80F7F8FF00F1F03E00>
26 18 -3 0 33]109 dc[ FC7CFFF8FFF8F3E0>14 18 -3 0 21]110 dc[<03F0000FFC001FFE003E1F007C0F80780780F0
03C0F003C0F003C0F003C0F003C0F003C07807807807803E1F001FFE000FFC0003F000>18 18
-1 0 21]111 dc[ 0FF00FF00FF00FF00FF01EF01EF87CFFFCFFF8F3E0>16 26 -3 8 21]112 dc[<000F000F000F
000F000F000F000F000F07CF1FFF3FFF3E1F780F780FF00FF00FF00FF00FF00FF00F780F7C0F3E
1F1FFF0FFF07CF>16 26 -1 8 21]113 dc[ F000F800F800FC00FF80FF80F780F380>9 18 -3 0 14]114 dc[<1FC07FE0FFF0F0F8C0780078
00F807F81FF07FE07F80F800F000F000F0707FF03FF01FC0>13 18 -1 0 16]115 dc[<07C00F
F01FF01E201E001E001E001E001E001E001E001E001E001E001E00FFE0FFE0FFE01E001E001E00
1E001E001E00>12 24 -1 0 15]116 dc[<3F3C7FFCFFFCF07CF03CF03CF03CF03CF03CF03CF0
3CF03CF03CF03CF03CF03CF03CF03C>14 18 -3 0 21]117 dc[<03C007E007E007600E700E70
0E701E781E783C3C3C3C3C3C7C1E781E781EF80FF00FF00F>16 18 -1 0 19]118 dc[<0780F0
000F81F8000F81F8000EC1B8001EC3BC001CC39C001CC39C001CE39C003CE79E003CE71E003C67
1E0078670F0078670F0078760F0078360F00F03E0780F03E0780F03C0780>25 18 -1 0 28]
119 dc[ 381C3C3C3C3C1C781E781E780FF00FF00F>16 26 -1 8 19]121 dc dfend /ff df[<70F8F8F8
7000000000F8F8F8F8F8F8F8F8F8F8F8F8F8F8F870>5 25 -8 0 22]33 dc[<701C701C783C78
3C783C783C783CF83EF83EF83E783C3018>15 12 -3 -14 22]34 dc[<1C38001C38001C38001C
38001C38001C38007FFFC0FFFFE0FFFFE00E1C000E1C000E1C000F1E00070E00070E00070E00FF
FFE0FFFFE07FFFC0038700038700038700038700038700038700>19 25 -1 0 22]35 dc[<1803
803807C03C0FE01C0EE01C0EE01E0EE00E0EE00F0EE0070FE00787C003838003800003C00001C0
0001E00000E00000E00000F0000070000078003838007C3800FE3C00FE1C00EE1E00EE0E00EE0F
00EE0700FE0700FE07807C0380380180>19 32 -1 3 22]37 dc[<1F0F003F9F807FFFC0F9F9C0
F0F1C0F1F1C0F1F800F3F800F3BC007F9C003F1E001F0E000F0E000F8F001FC7001DE7E01CE7E0
1CF7E01C70001C70001C70001EF0000FE00007E00003C000>19 25 -1 0 22]38 dc[<60F0F83C
3C1E0E0E0E3E7E7E7C38>7 14 -7 -11 22]39 dc[<00E001E007C007800F001E003E003C007C
00780078007800F000F000F000F000F000F000F000F000F0007800780078007C003C003E001E00
0F00078007C001E000E0>11 33 -6 4 22]40 dc[ 03C003C003C001E001E001E001E001E001E001E001E001E003C003C003C007C007800F800F001E
003C007C00F000E000>11 33 -4 4 22]41 dc[<01C00001C00001C00021C20071C700FDDF807F
FF003FFE000FF8000FF8003FFE007FFF00FDDF8071C70021C20001C00001C00001C000>17 18
-2 -4 22]42 dc[<01C00001C00001C00001C00001C00001C00001C00001C000FFFF80FFFF80FF
FF8001C00001C00001C00001C00001C00001C00001C00001C000>17 19 -2 -3 22]43 dc[<70
F87C1E0F0F3F7F7F7F7E3C>8 12 -7 6 22]44 dc[17 3 -2 -11 22]
45 dc[<78FCFCFCFC78>6 6 -8 0 22]46 dc[ 00001C00001E00000E00000F000007000007800003800003C00001C00001C00001E00000E00000
F000007000007800003800003C00001C00001E00000E00000F00000700000780000380000180>
17 32 -2 3 22]47 dc[<03E0000FF8001FFC001E3C003C1E007C1F00780F00780F00F00780F0
0780F00780F00780F00780F00780F00780F00780F00780780F00780F00780F003C1E001E3C001F
FC000FF80003E000>17 25 -2 0 22]48 dc[<7FFC7FFE7FFC03C003C003C003C003C003C003C0
03C003C003C003C003C003C003C07BC0FFC07FC00FC007C003C001C001C0>15 25 -3 0 22]49
dc[<7FFF80FFFF80FFFF803C07801E07800F000007800003E00001F00000F800007C00003E0000
1F00000F00000F80000780000780700780F80780F80F80F81F00F87F007FFE003FFC000FF000>
17 25 -2 0 22]50 dc[<0FF0003FFC007FFE00FC3F00F80F00F80F80F8078020078000078000
0F80000F00003E0007FC0007F80007FC00007E00001F00101F007C0F007C0F007C1F007C3F003F
FE001FFC0007F000>17 25 -2 0 22]51 dc[<01FFC001FFC001FFC0001C00001C00001C00001C
00001C00FFFFE0FFFFE0FFFFE0F01C00781C00381C003C1C001E1C000E1C000F1C00079C00039C
0003DC0001FC0000FC0000FC00007C00>19 25 -1 0 22]52 dc[<0FE0003FFC007FFE00FC3F00
F80F00F80F80F80780700780000780000F80300F007C1F007FFE007FFC007FF000780000780000
7800007800007800007800007800007FFE007FFE003FFE00>17 25 -2 0 22]53 dc[<07F0000F
FC001FFE003E3F007C0F00780F80780780F80780F00780F00780F80780F80F80FC1F00FFFE00FF
FE00F7F800F840007800007C1F003C1F003E1F001F9F000FFF0003FE0000FC00>17 25 -2 0 22
]54 dc[<78FCFCFCFC7800000000000078FCFCFCFC78>6 18 -8 0 22]58 dc[<60F87C3C1E0E
3E7E7E7E7C3C0000000000003C7E7E7E7E3C>7 24 -7 6 22]59 dc[<000380000780001F8000
3E0000FC0003F00007E0001F80003E0000FC0000F00000FC00003E00001F800007E00003F00000
FC00003E00001F80000780000380>17 21 -2 -2 22]60 dc[<7FFF00FFFF80FFFF8000000000
0000000000000000000000FFFF80FFFF807FFF00>17 11 -2 -7 22]61 dc[ 00003E00001F800007E00003F00000FC00003E00001F80000780001F80003E0000FC0003F00007
E0001F80003E0000FC0000F00000E00000>17 21 -2 -2 22]62 dc[<07000F800F800F800700
00000000000000000780078007800780078007C003E001F800FCF87EF81EF81EF87E7FFC3FF81F
E0>15 25 -3 0 22]63 dc[<7F1FC0FFBFE07F1FC01E0F001E0F001E0F001FFF000FFE000FFE00
0F1E000F1E000F1E00071C00071C0007BC0007BC0007BC0003B80003B80003B80003B80003F800
01F00001F00001F000>19 25 -1 0 22]65 dc[<7FFE00FFFF807FFF801E07C01E03E01E01E01E
01E01E01E01E01E01E01E01E03C01E0F801FFF001FFF001FFF801E07801E03C01E03C01E03C01E
03C01E03C01E07807FFF80FFFF007FFC00>19 25 0 0 22]66 dc[<03F00007FC000FFE001F1F
003E0F807C0780780780780780F80000F00000F00000F00000F00000F00000F00000F00000F800
007807807807807C07803E0F801F1F800FFF8007FF8003F380>17 25 -2 0 22]67 dc[<7FF800
FFFE007FFF001E0F801E07801E07C01E03C01E03C01E01E01E01E01E01E01E01E01E01E01E01E0
1E01E01E01E01E01E01E03C01E03C01E07C01E07801E0F007FFF00FFFE007FF800>19 25 0 0
22]68 dc[<7FFFE0FFFFE07FFFE01E01E01E01E01E01E01E01E01E01E01E00001E3C001E3C001F
FC001FFC001FFC001E3C001E3C001E00001E00001E03C01E03C01E03C01E03C07FFFC0FFFFC07F
FFC0>19 25 -1 0 22]69 dc[ 001E3C001E3C001FFC001FFC001FFC001E3C001E3C001E00001E00001E01E01E01E01E01E01E01
E0FFFFE0FFFFE0FFFFE0>19 25 -1 0 22]70 dc[<03EF000FFF001FFF003F3F003C1F007C1F00
780F00780F00F80F00F07F80F0FFC0F07F80F00000F00000F00000F00000F80000780F00780F00
7C0F003E1F003F3F001FFF000FFF0003F700>18 25 -2 0 22]71 dc[<7F8FF0FFDFF87F8FF01E
03C01E03C01E03C01E03C01E03C01E03C01E03C01E03C01E03C01FFFC01FFFC01FFFC01E03C01E
03C01E03C01E03C01E03C01E03C01E03C07F8FF0FFDFF87F8FF0>21 25 0 0 22]72 dc[ FFFFFFFF03C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003
C003C0FFFFFFFFFFFF>16 25 -3 0 22]73 dc[<1FC0007FF000FFF800F87C00F83C00F83C0070
3C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C0000
3C00003C00003C0007FF0007FF8007FF00>17 25 -2 0 22]74 dc[<7F07E0FF8FF07F07E01C03
801C07801C07001C0F001C1E001E1C001E3C001F38001FF8001FF0001DF0001DE0001CF0001C78
001C3C001C1C001C1E001C0F001C07807F0FE0FF8FF07F0FE0>20 25 0 0 22]75 dc[ FFFFE0FFFFE01E01E01E01E01E01E01E01E01E00C01E00001E00001E00001E00001E00001E0000
1E00001E00001E00001E00001E00001E00001E00001E0000FFE000FFE000FFE000>19 25 -1 0
22]76 dc[ F38039B38039B38039B3803BBB803BBB803B1B803B1B803B1B803B1B803E0F80FE0FE0FE0FE0FC
07E0>19 25 -1 0 22]77 dc[<7F0F00FF9F007F1F001C1F001C37001C37001C37001C77001C77
001C67001C67001CE7001CE7001CE7001CC7001CC7001DC7001DC7001D87001D87001D87001F07
007F1FC0FF3FE07E1FC0>19 25 -1 0 22]78 dc[<1FFC003FFE007FFF007C1F00F80F80F00780
F00780F00780F00780F00780F00780F00780F00780F00780F00780F00780F00780F00780F00780
F00780F80F807C1F007FFF003FFE001FFC00>17 25 -2 0 22]79 dc[<7F8000FFC0007F80001E
00001E00001E00001E00001E00001E00001E00001FF8001FFE001FFF001E0F801E07801E03C01E
03C01E03C01E03C01E03C01E07801E0F807FFF00FFFE007FF800>18 25 -1 0 22]80 dc[<7F81
E0FFC7F07F87F81E0F781E0F781E0F301E0F001E0F001E0F001E0F001E1F001FFE001FFC001FFE
001E1F001E0F801E07801E07801E07801E07801E0F801E1F007FFE00FFFC007FF000>21 25 0 0
22]82 dc[ FF001FFE003FFC007FE000FE0000F80000F00000F00F00F00F00F81F007C3F003FFF001FFF000F
F700>17 25 -2 0 22]83 dc[<07FE000FFF0007FE0000F00000F00000F00000F00000F00000F0
0000F00000F00000F00000F00000F00000F00000F00000F00000F000F0F1E0F0F1E0F0F1E0F0F1
E0FFFFE0FFFFE07FFFE0>19 25 -1 0 22]84 dc[<00F80003FE0007FF000F8F800F07801F07C0
1E03C01E03C01E03C01E03C01E03C01E03C01E03C01E03C01E03C01E03C01E03C01E03C01E03C0
1E03C01E03C01E03C07F8FF0FFDFF87F8FF0>21 25 0 0 22]85 dc[<01F00001F00003F80003
F80003B80003B80003B80007BC0007BC0007BC00071C000F1E000F1E000F1E000F1E000F1E001E
0F001E0F001E0F001E0F003E0F803C0780FF1FE0FFBFE0FF1FE0>19 25 -1 0 22]86 dc[<0E0E
000F1E000F1E001F1F001B1B0019B30019B30019B30019B30019B30019B30039F38039F38039F3
8038E3803803803803803803803803807001C07001C07001C0FC07E0FE0FE0FC07E0>19 25 -1
0 22]87 dc[<7F1FC0FFBFE07F1FC01E0F001F1E000F1E000F3C0007BC0007FC0003F80003F800
03F00001F00001E00001F00003F00003F80007F80007F8000FBC000F3C000F3E007F1F807F3FC0
7F1F80>19 25 -1 0 22]88 dc[<03FC0007FE0003FC0000F00000F00000F00000F00000F00000
F00000F00000F00001F80001F80003F80003BC0007BC00079E00079E000F1E000F1F001F0F001E
0F80FF1FE0FFBFE0FF1FE0>19 25 -1 0 22]89 dc[ 00F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
F000FFF0FFF0FFF0>12 32 -8 3 22]91 dc[<000180000380000780000700000F00000E00001E
00001C00003C0000380000780000700000F00000E00001E00001C00001C00003C0000380000780
000700000F00000E00001E00001C00003C0000380000780000700000F00000E00000E00000>17
32 -2 3 22]92 dc[ 00F000F000F000F000F000F000F000F000F000F000F000F000F000F0FFF0FFF0FFF0>12 32 -1
3 22]93 dc[<1FC3E03FF7E07FFFE0FC3F00F81F00F00F00F00F00FC0F007FEF003FFF000FFF00
003F00380F007C1F007C3E007FFE003FF8001FE000>19 18 -2 0 22]97 dc[<073F000FFFC00F
FFE00FC3E00F81F00F00F00F00F80F00780F00780F00780F00780F00F80F00F80F81F00FE3F00F
FFE00FFFC00F3F000F00000F00000F00000F00007F0000FF00007F0000>21 25 1 0 22]98 dc[
<03F8000FFE001FFF003F0F807C0780780780F80000F00000F00000F00000F00000F80000780E
007C1F003F1F001FFF000FFE0003FC00>17 18 -2 0 22]99 dc[<07E7F01FFFF83FFFF07E3F80
7C0F80F80F80F80780F00780F00780F00780F00780F80780F807807C0F807E1F803FFF801FFF80
07E780000780000780000780000780003F80007F80003F80>21 25 -1 0 22]100 dc[<03F800
0FFE001FFF003F0F807C0780780780F80000F00000FFFF80FFFF80FFFF80F80780780F807C0F00
3E1F001FFE000FFC0003F000>17 18 -2 0 22]101 dc[<7FFE00FFFF007FFE0003C00003C000
03C00003C00003C00003C00003C00003C00003C00003C00003C00003C000FFFF00FFFF007FFF00
03C00003C70003CF8003EF8001FF8000FF80003F00>17 25 -1 0 22]102 dc[<07FC001FFF00
3FFF807E0FC0F001E0E000E0E000E0E000E0F001E07807C07FFFC03FFF803FFE00780000700000
7FE0003FF8003FFC003E7C007C3E00781E00781E00781E007C3FC03E7DE03FFFE01FFFE007E7C0
>19 28 -1 10 22]103 dc[<7FE3FCFFF3FE7FE3FC0F01E00F01E00F01E00F01E00F01E00F01E0
0F01E00F01E00F01E00F81E00F81E00FE3E00FFFC00FFFC00F3F000F00000F00000F00000F0000
7F0000FF00007F0000>23 25 1 0 22]104 dc[<7FFF80FFFF807FFF8001E00001E00001E00001
E00001E00001E00001E00001E00001E00001E00001E00001E0007FE0007FE0007FE00000000000
000000000001C00003E00003E00003E00001C000>17 26 -2 0 22]105 dc[<3F807FC0FFE0F8
F0F8F8707800780078007800780078007800780078007800780078007800780078007800780078
00783FF83FF83FF8000000000000007000F800F800F80070>13 35 -2 9 22]106 dc[<7F87F0
FFCFF07F87F00E07800E0F000E0E000F1E000FBC000FF8000FF8000EF0000E78000E3C000E1E00
0E0F000E7FE00E7FE00E7FE00E00000E00000E00000E00007E0000FE00007E0000>20 25 0 0
22]107 dc[ 01E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E000FFE000FFE000
FFE000>18 25 -2 0 22]108 dc[ 3870E03870E03870E03870E03870E03C78E03E7CE0FFFFE0FFEFC0FBC780>21 18 0 0 22]109
dc[<7FE3FCFFF3FE7FE3FC0F01E00F01E00F01E00F01E00F01E00F01E00F01E00F01E00F01E00F
81E00F81E00FE3E07FFFC0FFFFC07F3F00>23 18 1 0 22]110 dc[<03E0000FF8001FFC003E3E
007C1F00780F00F00780F00780F00780F00780F00780F00780780F00780F003E3E001FFC000FF8
0003E000>17 18 -2 0 22]111 dc[<7FE000FFF0007FE0000F00000F00000F00000F00000F00
000F00000F3F000FFFC00FFFE00FC3E00F81F00F00F00F00F80F00780F00780F00780F00780F00
F80F00F80F81F00FE3F07FFFE0FFFFC07F3F00>21 27 1 9 22]112 dc[<003FF0007FF8003FF0
00078000078000078000078000078000078007E7801FFF803FFF803E1F807C0F80780780F80780
F00780F00780F00780F00780F807807807807C0F803E1F801FFF800FFF8007E780>21 27 -1 9
22]113 dc[ 07C00007C00007E0C007F9E0FFFFE0FFBFE0FF9FC0>19 18 -1 0 22]114 dc[ FC3EF80EF00EF01E00FE1FFC3FF87FE0FC00E03CE03CF07C7FFC3FFC1FFC>15 18 -3 0 22]
115 dc[<00F80003FE0003FF0007CF800787800787800787800783000780000780000780000780
00078000078000078000FFFF00FFFF007FFF00078000078000078000078000038000>17 23 -1
0 22]116 dc[<03F9FC07FFFE0FFFFC0F87E00F03E00F01E00F01E00F01E00F01E00F01E00F01
E00F01E00F01E00F01E00F01E07F0FE0FF1FE07F0FE0>23 18 1 0 22]117 dc[<00E00001F000
01F00003F80003B80003B80007BC00071C00071C00071C000E0E000E0E000E0E001E0F001C0700
7F1FC0FF1FE07F1FC0>19 18 -1 0 22]118 dc[<0F1E000F1E000F1E001FBF001DB7001DB700
1DB7001DF70019F30019F30038E380380380380380380380380380FF1FE0FFBFE0FF1FE0>19 18
-1 0 22]119 dc[<7F1FC0FF3FE07F1FC00E0E00071C00073C0003B80001F00001E00000E00001
F00003F00003B800073C000F1C007F1FC07F3FC07F1FC0>19 18 -1 0 22]120 dc[<1C00003F
00007F800073C0007DC00039C00000E00000E00000E00000F00000F00000F00001F80001B80003
9800039C00039C00071C00071C00070E000E0E000E0E000E07001C07007F1FC0FF9FE07F1FC0>
19 27 -1 9 22]121 dc[ F00000F800007C00783E00781F00780F807FFFC07FFFC03FFFC0>18 18 -1 0 22]122 dc[<00
3F8000FF8001FF8001F00001E00001E00001E00001E00001E00001E00001E00001E00001E00003
E000FFC000FF8000FF8000FFC00003E00001E00001E00001E00001E00001E00001E00001E00001
E00001E00001F00001FF8000FF80003F80>17 32 -2 3 22]123 dc[ E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001F00000FF80007F8000
7F8000FF8001F00001E00001E00001E00001E00001E00001E00001E00001E00001E00003E000FF
E000FFC000FF0000>17 32 -2 3 22]125 dc dfend /fg df[<0030006001C003C0038007000F
001E001E003E003C003C007C007C007C00FC00F800F800F800F800F800F800F800F800F800FC00
7C007C007C003C003C003E001E001E000F000700038003C001C000600030>12 41 -3 10 19]
40 dc[ F001F001F001F001F001F001F001F003F003E003E003E003C003C007C0078007800F000E001C00
3C0038006000C000>12 41 -3 10 19]41 dc[<2030180C060607033B7FFFFFFE7C38>8 15 -3
8 13]44 dc[<387CFEFEFE7C38>7 7 -3 0 13]46 dc[ 00003800003800003C00001C00001C00001E00000E00000F000007000007000007800003800003
800003C00001C00001E00000E00000E00000F000007000007000007800003800003C00001C0000
1C00001E00000E00000E00000F00000700000700000780000380000180>17 41 -3 10 24]47
dc[<7FFF807FFF807FFF8003F00003F00003F00003F00003F00003F00003F00003F00003F00003
F00003F00003F00003F00003F00003F00003F00003F00003F000F3F000FFF000FFF0000FF00000
F000003000>17 27 -3 0 24]49 dc[ E00380E001C0E000F000007800003E00001F00001F80000FC0000FC0000FE03807E07C07E0FE0F
E0FE0FE0FE1FC07C7F807FFF001FFE0007F800>19 27 -2 0 24]50 dc[<07F8001FFE003FFF00
7C1F80FE1FC0FE0FC0FE0FE0FE0FE07C0FE0380FE0000FE0000FC0001F80001F0003F80003FC00
003F00001F803C1F807E0FC07E0FC07E0FC07E0FC03C1F801FFF000FFE0003F800>19 27 -2 0
24]51 dc[<03FFF803FFF803FFF8001F80001F80001F80001F80FFFFF8FFFFF8FFFFF8F01F8070
1F80381F801C1F800E1F800F1F80071F80039F8001DF8000FF80007F80007F80003F80001F8000
0F80000780000780>21 27 -1 0 24]52 dc[<07F0001FFE003FFF00781F80FC0FC0FC0FC0FC0F
E0FC0FE0780FE0000FE0000FE0000FE0380FC0380F803E1F003FFE0039F8003800003800003800
003F80003FF0003FFC003FFE003FFF003FFF80380380>19 27 -2 0 24]53 dc[<03F80007FE00
1FFF003F0F803E07C07C07C07C07E07C07E0FC07E0FC07E0FC07E0FC07E0FC07C0FE07C0FE0780
FFFF00FDFE00FC20007C07807C0FC03E0FC03E0FC01F0FC00F87C007FF8003FF00007E00>19 27
-2 0 24]54 dc[<03F8001FFE003FFF007E0F807C03C0F803C0F803E0F803E0F807E0F80FE07C
3FE03CFFC01FFFC00FFF801FFF003FFE003FFF007FE7807FC3807F03C07C03C07803C03803C03C
0F801FFF000FFE0003F800>19 27 -2 0 24]56 dc[<387CFEFEFE7C3800000000387CFEFEFE7C
38>7 18 -3 0 13]58 dc[<038007C00FE00FE00FE007C0038000000000000000000380038003
80038003C001C001E000F000F8007C783EFC3FFC3FFC3FF83F783E3FFC0FF0>16 29 -3 0 23]
63 dc[ 8001C07F0001C07F0001E0FF0000E0FE0000E0FE000071FC000071FC00007BFC00003BF800003B
F800001FF000001FF000001FF000000FE000000FE0000007C0000007C0000007C00000038000>
31 28 -2 0 36]65 dc[ 0FE007F00FE007F00FE007F00FE007F00FE007E00FE00FC00FE03F800FFFFE000FFFFF000FE01F
800FE00FC00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FC00FE01FC0FFFFFF80FFFF
FF00FFFFF800>28 28 -2 0 34]66 dc[<001FE00000FFFC0003FFFE0007F80F000FE003801F80
01C03F0001C03F0000E07F0000E07E0000E0FE000000FE000000FE000000FE000000FE000000FE
000000FE000000FE0000E07E0000E07F0000E03F0001E03F0001E01F8003E00FE007E007F81FE0
03FFFDE000FFF8E0001FE060>27 28 -3 0 34]67 dc[ F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007
F00007F00007F00007F00007F00007F00007F000FFFF80FFFF80FFFF80>17 28 0 0 18]73 dc[
000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE000FFFF
80FFFF80FFFF80>24 28 -2 0 29]76 dc[ 01FC03F00E01FC03F00E03FE03F00E03FE03F00E03FE03F00E07E703F00E07E703F00E0FC383F0
0E0FC383F00E1F81C3F00E1F81C3F00E1F81C3F00E3F00E3F00E3F00E3F00E7E0073F00E7E0073
F00E7E0073F00EFC003BF00EFC003BF00FF8001FF00FF8001FF0FFF8001FFFFFF0000FFFFFF000
0FFF>40 28 -2 0 45]77 dc[ 0FF00E000FF00E001FF00E003FF00E007FF00E00FF700E00FE700E01FE700E03FC700E07F8700E
07F0700E0FF0700E1FE0700E3FC0700E7F80700E7F00700EFF00700FFE00700FFC0070FFF807FF
FFF807FFFFF007FF>32 28 -2 0 37]78 dc[<003FE00001FFFC0003F07E000FC01F801F800FC0
3F800FE03F0007E07F0007F07E0003F07E0003F0FE0003F8FE0003F8FE0003F8FE0003F8FE0003
F8FE0003F8FE0003F8FE0003F87E0003F07E0003F07F0007F03F0007E01F0007C01F800FC00FC0
1F8003F07E0001FFFC00003FE000>29 28 -3 0 36]79 dc[ 00000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FFFFC000F
FFFF000FE03F800FE01FC00FE00FC00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FC0
0FE01FC00FE03F80FFFFFF00FFFFFE00FFFFF000>27 28 -2 0 33]80 dc[ 80FC07C0F003E0E001E0E001F0E001F00001F00003F0000FF001FFF00FFFE01FFFE03FFFC07FFF
807FFF00FFFC00FF8000FC0000F800E0F800E0F801E07801E07C07E03FFFE01FFEE007F860>20
28 -3 0 27]83 dc[<07FFFF0007FFFF0007FFFF00001FC000001FC000001FC000001FC000001F
C000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000E0
1FC070E01FC070E01FC070E01FC070F01FC0F0701FC0E0781FC1E07C1FC3E07FFFFFE07FFFFFE0
7FFFFFE0>28 28 -2 0 33]84 dc[<000FF800007FFE0000FFFF8001FC07C003F001E007E000E0
07E000700FE000700FE000700FE000700FE000700FE000700FE000700FE000700FE000700FE000
700FE000700FE000700FE000700FE000700FE000700FE000700FE000700FE000700FE00070FFFE
07FFFFFE07FFFFFE07FF>32 28 -2 0 37]85 dc[<0FC3F83FF7F87E3FF8FC1FC0FC0FC0FC0FC0
FC0FC07E0FC03F8FC01FFFC003FFC00C0FC01E0FC03F0FC03F0F803F1F801FFE0007F800>21 18
-1 0 23]97 dc[<1C1F801EFFE01FE1F01F80F81F807C1F807C1F807E1F807E1F807E1F807E1F
807E1F807E1F807C1F807C1F80F81FE1F01FFFE01F9F801F80001F80001F80001F80001F80001F
80001F80001F8000FF8000FF8000FF8000>23 29 -1 0 27]98 dc[<03F8000FFE001F07003E03
807E03807C0000FC0000FC0000FC0000FC0000FC0000FC0C007C1E007C3F003E3F001F3F000FFE
0003F800>17 18 -2 0 21]99 dc[<03F3FE0FFFFE1F0FFE3E03F07C03F07C03F0FC03F0FC03F0
FC03F0FC03F0FC03F0FC03F07C03F07C03F03E03F01F07F00FFFF003FBF00003F00003F00003F0
0003F00003F00003F00003F00003F0001FF0001FF0001FF0>23 29 -2 0 27]100 dc[<01FC00
0FFF801F83C03E01C07E00E07C0000FC0000FC0000FC0000FFFFE0FFFFE0FC03E07C03E07C03C0
3E07C01F0F800FFF0001FC00>19 18 -1 0 22]101 dc[<7FFC007FFC007FFC000FC0000FC000
0FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC000FFF800FFF800FFF800
0FC0000FC0000FC0000FC0000FC3C00FC7E00FC7E007E7E003F3E000FFC0003F80>19 29 0 0
15]102 dc[<03FE001FFFC03E03E07C01F0F800F8F800F8F800F87801F83FFFF81FFFF03FFFE0
3FFFC03FFF0078000030000033F0001FFC003E1F003C0F007C0F807C0F807C0F807C0FB03C0F78
3E1F780FFFF803F1F0>21 27 -1 9 24]103 dc[ 1F81F81F81F81F81F81F81F81F81F81F81F81F81F81FC1F81FC1F81FF1F01FBFF01F8FC01F8000
1F80001F80001F80001F80001F80001F80001F8000FF8000FF8000FF8000>24 29 -1 0 27]
104 dc[ 80000000000000000000000E001F003F803F803F801F000E00>12 30 0 0 13]105 dc[<1FE07F
F8FC7CFC7EFC3FFC3F783F003F003F003F003F003F003F003F003F003F003F003F003F003F003F
003F003F01FF01FF01FF00000000000000000000001C003E007F007F007F003E001C>16 38 4 8
15]106 dc[ 801F801F801F801F801F801F801F801F801F80FF80FF80FF80>12 29 0 0 13]108 dc[ 9FFCFFF3FF9FFCFFF3FF9FFC1F80FC07E01F80FC07E01F80FC07E01F80FC07E01F80FC07E01F80
FC07E01F80FC07E01F80FC07E01F80FC07E01F80FC07E01FC0FE07E01FC0FE07E0FFF0FB87C0FF
BFF1FF80FF8FE07F00>38 18 -1 0 41]109 dc[ 1F81F81F81F81F81F81F81F81F81F81F81F81F81F81FC1F81FC1F8FFF1F0FFBFF0FF8FC0>24 18
-1 0 27]110 dc[<01FC000FFF801F07C03E03E07C01F07C01F0FC01F8FC01F8FC01F8FC01F8FC
01F8FC01F87C01F07C01F03E03E01F07C00FFF8001FC00>21 18 -1 0 24]111 dc[ F000FFF0001F80001F80001F80001F80001F80001F9F801FFFE01FE1F01F80F81F80FC1F807C1F
807E1F807E1F807E1F807E1F807E1F807E1F807C1F80FC1F80F8FFE1F0FFFFE0FF9F80>23 26
-1 8 27]112 dc[ 80001F86001F8F001F9F801F9F80FFDF80FF7F00FF3C00>17 18 -1 0 20]114 dc[ F878F03CE03CE03C01FC1FFC3FF87FF8FFF0FFC0F800F038F03870783FF80FD8>14 18 -2 0 19
]115 dc[<03E007F80F981F9C1F9C1F9C1F9C1F801F801F801F801F801F801F801F80FFFCFFFC
3FFC0F800F80078007800380038003800380>14 26 -1 0 19]116 dc[<03F9FF07FDFF0F87FF
1F83F81F81F81F81F81F81F81F81F81F81F81F81F81F81F81F81F81F81F81F81F81F81F8FF8FF8
FF8FF8FF8FF8>24 18 -1 0 27]117 dc[<00780000780000FC0000FC0001FE0001FE0001FE00
03F70003F70007F78007E38007E3800FC1C00FC1C01FC1E0FFE3FCFFE3FCFFE3FC>22 18 -1 0
25]118 dc[<00F01E0000F01E0000F83E0001F83F0001FC7F0001FC7F0003FC7F8003FEFF8007
FEFBC007EFF9C007E7F1C00FC7F0E00FC3F0E01FC3E0F01F87E070FF8FF9FEFF8FF9FEFF8FF9FE
>31 18 -1 0 34]119 dc[<3E00007F8000E3C000E1E000FCE000FCF000787000007000007800
00780000FC0000FC0000FE0001FE0001FE0003FF0003F70007F78007E38007E3800FC1C00FC1C0
1FC1E0FFE3FCFFE3FCFFE3FC>22 26 -1 8 25]121 dc[ 1F87800FC3800FE38007E38003F00073F80071F80070FC0078FE00387F003E3F003FFF803FFF80
>17 18 -1 0 21]122 dc dfend /fh df[<78000000FC000000FE000000FE0000006700000007
000000078000000780000007803C0003C07E0003C0F60003C0F30003C0F30003C0F30001E07900
01E0780001E0780001E0780001E03C0000F03C0000F03C0000F03C0000F01E0000F01E000FFFFE
000FFFFE00007800000078000000780000003C0000003C0000003C0300001C0780001E0780000E
03800007FF000001FE00>25 37 1 8 23]12 dc[<006000000070000000300000003000000030
000000380000001800000018000000180000001C0000000C0000000C0000FFFFFFC0FFFFFFC000
060000000600000006000000070000000300000003000000030000000380000001800000018000
000180000001C000>26 26 -5 3 32]43 dc[<1E1E003FBF0071FB00F0F980E07980F07980F03C
80F03C00F03C00F03C00781E00781E00381E003C1E001C1F000E1F0007FF0001E600>17 18 -4
0 21]97 dc[<0F803FE07878701CF008F000F000F000F000F0007800780038181C3C1E1E0F0C03
FC00F8>15 18 -4 0 19]99 dc[<1E1E003FBF0071FB00F0F980E07980F07980F03C80F03C00F0
3C00F03C00781E00781E00381E003C1E001C1F000E1F0007FF0001EF0000078000078000078000
07800003C00003C00003C00003C00003E0001FE0000FE0>19 29 -4 0 21]100 dc[<0F803FE0
3878701C7008F000F000F000F000FFC07FF07838380C3C0C1C0C0F0C03FC00F0>14 18 -4 0 19
]101 dc[<1E003F00398078C03CC03CC03C401E001E001E000F000F00C780C780678037803F00
0E00000000000000000000000000018001C001E000C0>11 28 -3 0 13]105 dc[<3C007E00F6
00F300F300F30079007800780078003C003C003C003C001E001E001E001E000F000F000F000F00
078007800780078007C03FC01FC0>10 29 -3 0 11]108 dc[<300780780FC03C0E603C1E303C
0F303C0F301E0F101E07801E07801E07800F03C00F03C0CF03C0CF83C06783C067E3C03F7F801C
1F00>20 18 -3 0 23]110 dc[<0F80003FE00078F000703800F01C00F01E00F00E00F00F00F0
0F00F00F007807807807803807001C07001E07000F0E0003FC0000F800>17 18 -4 0 21]111
dc[ 81C00781E003C0E003C0F003C0F003C0F001E07801E07819E07819E0700CF0700CF8F007EFE003
8780>21 26 0 8 21]112 dc[<300078003C003C003C003C001E001E001E001E000F000F06CF0F
CF0F678767C33F7E1C3C>16 18 -3 0 18]114 dc[<1F007FC0E0E0F060F0707070207807F80F
F01FF01FE01F801E301C780E3C061807F801F0>14 18 -3 0 17]115 dc[<1E003F8079C078C0
786078603C203C003C003C001E001E001E001E000F000F00FFE0FFE0078007800780078003C003
C003C00180>11 26 -3 0 14]116 dc[<07C7800FEFC01E3EC01C1E601C1E601C1E601E0F201E
0F001E0F001E0F000F07800F0780C78780C787806783C03783C03F03C00E0180>19 18 -3 0 22
]117 dc[ 01C3>16 18 -2 0 17]122 dc dfend /fi df[<07E01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFF
FFFFFF7FFE7FFE3FFC1FF807E0>16 16 -2 -2 21]15 dc dfend /fj df[<70F8F8F870>5 5
-3 0 12]58 dc[<000001800000078000001F0000007C000001F0000007C000001F0000007C00
0001F0000007C000001F0000007C000000F0000000F00000007C0000001F00000007C0000001F0
0000007C0000001F00000007C0000001F00000007C0000001F800000078000000180>25 26 -3
3 32]60 dc dfend /fk df[<7F87FC007F87FC000F03C0000F03C0000F03C0000F03C0000F03
C0000F03C0000F03C0000F03C0000F03C0000F03C0000F03C0000F03C0000F03C0000F03C000FF
FFFC00FFFFFC000F03C0000F03C0000F03C0000F03C0000F03C0000F07C1C00707C3E00787E3E0
03E3F3E000FFFFC0003F0F80>27 29 0 0 24]11 dc[<7F87F87F87F80F03C00F03C00F03C00F
03C00F03C00F03C00F03C00F03C00F03C00F03C00F03C00F03C00F03C00F03C0FFFFC0FFFFC00F
00000F00000F00000F00000F03800F07C00707C00787C003E38000FF80003F00>21 29 0 0 23]
12 dc[<7FC7F8FF807FC7F8FF800F01E03C000F01E03C000F01E03C000F01E03C000F01E03C00
0F01E03C000F01E03C000F01E03C000F01E03C000F01E03C000F01E03C000F01E03C000F01E03C
000F01E03C00FFFFFFFC00FFFFFFFC000F01E000000F01E000000F01E000000F01E000000F01E0
38000F03E07C000703F07C000783F07C0003E1FC380000FFDFF800001F03F000>33 29 0 0 35]
14 dc[<70F8F8F87000000000207070707070707070707070F8F8F8F8F8F8F870>5 29 -3 0 12
]33 dc[<060300000603000006030000070380000301800003018000030180000381C0000180C0
000180C0000180C00001C0E000FFFFFFFCFFFFFFFC006030000060300000603000006030000070
3800003018000030180000301800FFFFFFFCFFFFFFFC001C0E00000C0600000C0600000C060000
0C0600000E070000060300000603000006030000070380000301800003018000030180>30 37
-2 8 35]35 dc[<40603018180C0C0C7CFCFCF870>6 13 -3 -16 12]39 dc[<00C00180030007
000E000E001C001C003800380038007000700070007000F000F000F000F000F000F000F000F000
F000F000F000F00070007000700070003800380038001C001C000E000E0007000300018000C0>
10 42 -3 11 16]40 dc[ 038003C003C003C003C003C003C003C003C003C003C003C003C003800380038003800700070007
000E000E001C001C00380030006000C000>10 42 -2 11 16]41 dc[<00060000000600000006
000000060000000600000006000000060000000600000006000000060000000600000006000000
060000FFFFFFE0FFFFFFE000060000000600000006000000060000000600000006000000060000
000600000006000000060000000600000006000000060000>27 28 -2 4 32]43 dc[<40607030
3018181878F8F8F070>5 13 -3 8 12]44 dc[11 3 0 -8 14]45 dc[<70F8F8
F870>5 5 -3 0 12]46 dc[ 00060006000700030003000380018001C000C000C000E000600060007000300030003800180018
001C000C000E00060006000700030003>16 41 -2 10 21]47 dc[<07E00FF01C38381C781E70
0E700EF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00F700E700E781E381C1C38
0FF007E0>16 27 -2 0 21]48 dc[ 0780078007800780078007800780078007800780E780FF801F8003800180>14 27 -3 0 21]49
dc[ 0FFC0FFC1FFC1FFC1E783E307C1FF807E0>16 27 -2 0 21]50 dc[<0FC03FF07878783CFC1EFC
1FFC1F781F301F001F001E001E003C007807E007E00078003C003C383E7C3E7E1E7C3E7C3C387C
1FF007E0>16 27 -2 0 21]51 dc[<03FFC003FFC0003C00003C00003C00003C00003C00003C00
FFFFC0FFFFC0E03C00603C00303C00383C00183C000C3C000E3C00073C00033C0003BC0001FC00
00FC00007C00007C00003C00001C00001C00>18 27 -1 0 21]52 dc[<0FC01FF03078603CF81E
F81EF81FF81F701F001F001F001E301E301C3C3C3FF033E0300030003000300030003FC03FF03F
F83FFC300C>16 27 -2 0 21]53 dc[<03E00FF01C38381C380E700E700F700FF00FF00FF00FF0
0FF80EF80EFC1CF7F8F3F0F00070007000381C383E1C3E0C1E070C03FC00F0>16 27 -2 0 21]
54 dc[<03800007C00007C00007C00007C00007C00007C00007C00003C00003C00003C00003C0
0001C00001C00000E00000E000006000006000003000C01800C01800C00C00E006007FFF007FFF
007FFF807FFF80600000>17 28 -2 0 21]55 dc[<07E01FF03C3C700C7006E007E007E007E00F
E01F703F38FE1DFE0FFC0FF81FF03FB87F1C7C1C780E700E700E300E381C1C380FF007E0>16 27
-2 0 21]56 dc[<0F803FE030F078387C187C1C381E000E000E000F0FCF1FEF383F701F701FF0
0FF00FF00FF00FF00EF00E700E701C381C1C380FF007E0>16 27 -2 0 21]57 dc[<70F8F8F870
000000000000000070F8F8F870>5 18 -3 0 12]58 dc[<406070303018181878F8F8F0700000
00000000000070F8F8F870>5 26 -3 8 12]59 dc[ 003E0007007E0003007C0003FFFC0003FFFC000180F8000180F80001C1F80000C1F00000C1F000
00E3F0000063E0000063E0000077E0000037C0000037C000003FC000001F8000001F8000001F80
00000F0000000F0000000F000000060000>28 28 -1 0 31]65 dc[ 3E0F803E0F801F0F801F0F801F0F801F0F801F0F801E0F803E0F807C0F80F80FFFE00FFFF00F80
F80F807C0F803E0F803E0F803E0F803E0F803E0F803C0F807C0F80F8FFFFF0FFFFC0>24 28 -2
0 29]66 dc[<001FC00000FFF00003F0380007C00C000F0006001E0003003E0003003C0001807C
00018078000180F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000180
780001807C0001803C0003803E0003801E0007800F00078007C00F8003F03B8000FFE180001F80
80>25 28 -2 0 30]67 dc[ 800F8007C00F8003C00F8003C00F8003E00F8003E00F8003E00F8003E00F8003E00F8003E00F80
03E00F8003E00F8003C00F8003C00F8007C00F8007800F800F000F801F000F803E000F80FC00FF
FFF000FFFFC000>27 28 -2 0 32]68 dc[ 0F80060F80030F83030F83030F83000F83000F87000FFF000FFF000F87000F83000F83060F8306
0F83060F80060F800E0F800C0F801C0F803CFFFFFCFFFFFC>24 28 -2 0 28]69 dc[ FC000F80000F80000F80000F80000F80000F80000F83000F83000F83000F83000F87000FFF000F
FF000F87000F83000F83000F830C0F830C0F800C0F800C0F801C0F80180F80380F8078FFFFF8FF
FFF8>22 28 -2 0 27]70 dc[ 7C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000FFFFC000FFFFC000F
807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C00
FFF3FFC0FFF3FFC0>26 28 -2 0 31]72 dc[ 0F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F80FFF8FFF8>13 28
-1 0 15]73 dc[<1F80003FE00078F000FCF800FC7C00FC7C00787C00307C00007C00007C0000
7C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000
7C00007C00007C001FFF801FFF80>17 28 0 0 21]74 dc[ 700F80300F80380F80180F80180F80180F80180F80000F80000F80000F80000F80000F80000F80
000F80000F80000F80000F80000F80000F80000F80000F8000FFFC00FFFC00>21 28 -2 0 26]
76 dc[ 0C0FC0F8000C1F60F8000C1F60F8000C1F60F8000C3E30F8000C3E30F8000C3E30F8000C7C18F8
000C7C18F8000C7C18F8000CF80CF8000CF80CF8000CF80CF8000DF006F8000DF006F8000DF006
F8000FE003F8000FE003F8000FE003F800FFC001FF80FFC001FF80>33 28 -2 0 38]77 dc[ C00C00FFC01C001E001C000C003C000C003C000C007C000C00FC000C00FC000C01FC000C01FC00
0C03EC000C07EC000C07CC000C0FCC000C0F8C000C1F0C000C1F0C000C3E0C000C7E0C000C7C0C
000CF80C000CF80C000DF00C000FF00C000FE00C000FC01E00FFC0FFC0FF80FFC0>26 28 -2 0
31]78 dc[<003F800001FFF00003E0F80007803C000F001E001E000F003E000F803C0007807C00
07C07C0007C0F80003E0F80003E0F80003E0F80003E0F80003E0F80003E0F80003E0F80003E078
0003C07C0007C03C0007803C0007801E000F000F001E0007803C0003E0F80001FFF000003F8000
>27 28 -2 0 32]79 dc[ 80000F80000F80000FFF800FFFE00F80F00F80780F803C0F803E0F803E0F803E0F803E0F803E0F
803E0F803C0F80780F80F0FFFFE0FFFF80>23 28 -2 0 28]80 dc[ 300F80F8300F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F81F0000F83
E0000FFFC0000FFFE0000F81F0000F8078000F803C000F803E000F803E000F803E000F803E000F
803E000F803C000F8078000F81F000FFFFE000FFFF0000>28 28 -2 0 31]82 dc[<83F800CFFC
00FC0F00F00700E00380C00380C003C0C003C00003C00007C00007C0003F8003FF800FFF001FFE
003FFC007FF000FF0000F80000F80000F00180F00180F003807003807807803C1F801FF98007E0
80>18 28 -2 0 23]83 dc[<07FFFC0007FFFC00001F0000001F0000001F0000001F0000001F00
00001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F
0000001F0000C01F0060C01F0060C01F0060C01F0060E01F00E0601F00C0701F01C0781F03C07F
FFFFC07FFFFFC0>27 28 -1 0 30]84 dc[<001F0000007FC00001F0E00003C0300003C0180007
8018000F800C000F800C000F800C000F800C000F800C000F800C000F800C000F800C000F800C00
0F800C000F800C000F800C000F800C000F800C000F800C000F800C000F800C000F800C000F800C
000F801E00FFF8FFC0FFF8FFC0>26 28 -2 0 31]85 dc[<00060000000F0000000F0000000F00
00001F8000001F8000001F8000003EC000003EC000007EE000007C6000007C600000FC700000F8
300000F8300001F8180001F0180001F0180003E00C0003E00C0007E00E0007C0060007C006000F
C007000F8003000F800780FFF01FF0FFF01FF0>28 28 -1 0 31]86 dc[<001C003800001C0038
00001C003800003E007C00003E007C00003E007C00007F00FE00007F00FE00007F00FE00007D81
F60000F981F30000F981F30000F8C3E30001F0C3E18001F0C3E18001F067C18003E067C0C003E0
67C0C003E03FC0C007C03F806007C03F806007C03F80600F801F00300F801F00300F803F00301F
803E0078FFF1FFE1FFFFF1FFE1FF>40 28 -1 0 43]87 dc[<387CFCFCF8C0C0C06060301808>
6 13 -2 -16 12]96 dc[<0F8F803FFFC0787FE0F03E60F01E60F01E60F01E00781E003C1E001F
FE0007FE00001E00381E007C1E007C1E007C3C003FF8001FE000>19 18 -1 0 21]97 dc[<187C
001DFF001F87801E01C01E01E01E00E01E00F01E00F01E00F01E00F01E00F01E00F01E00E01E01
E01E01C01F87801FFF001E7E001E00001E00001E00001E00001E00001E00001E00001E00001E00
00FE0000FE0000>20 29 -1 0 23]98 dc[<03E00FF81E0C3C0678067800F000F000F000F000F0
00F0007038787C387C1E7C0FF803F0>15 18 -1 0 18]99 dc[<07E7F00FF7F01E1F80380F8078
0780700780F00780F00780F00780F00780F00780F007807007807807803807801E1F800FFF8003
E780000780000780000780000780000780000780000780000780000780003F80003F80>20 29
-1 0 23]100 dc[<03E00FF81E0C3C0678067000F000F000F000F000FFFEFFFE700E781E381C1C
380FF003E0>15 18 -1 0 18]101 dc[<7FF07FF00F000F000F000F000F000F000F000F000F00
0F000F000F000F000F00FFE0FFE00F000F000F000F000F000F0E0F1F079F03DF01FE007C>16 29
0 0 13]102 dc[<07F8001FFE003C0F00700380E001C0E001C0E001C0E001C07007C03FFF801F
FF003FFE003FF80070000070000037E0003FF0003C3C00381C00781E00781E00781E00781E0038
1D803C3DC00FFFC007E380>18 27 -1 9 21]103 dc[ 07801E07801E07801E07801E07801E07801E07801E07801E07801F07801F8F001EFF001E7E001E
00001E00001E00001E00001E00001E00001E00001E00001E0000FE0000FE0000>20 29 -1 0 23
]104 dc[ FE000000000000000000000000001C003E003E003E001C00>10 29 0 0 11]105 dc[<3F007FC0
F8E0F8F0F878707800780078007800780078007800780078007800780078007800780078007800
780078007807F807F8000000000000000000000000007000F800F800F80070>13 37 4 8 13]
106 dc[ 001E60001E30001E18001E3E001E7FC01E7FC01E00001E00001E00001E00001E00001E00001E00
001E00001E0000FE0000FE0000>19 29 -1 0 22]107 dc[ 1E001E001E001E001E001E001E001E001E001E001E001E001E001E001E001E001E001E001E001E
00FE00FE00>10 29 0 0 11]108 dc[ 781E03C0781E03C0781E03C0781E03C0781E03C0781E03C0781E03C0781F03E0781F03E0781F87
B0F0FEFF9FF0FE3E07C0>32 18 -1 0 35]109 dc[ 801E07801E07801E07801E07801E07801E07801E07801E07801F07801F8F00FEFF00FE7E00>20
18 -1 0 23]110 dc[<03F0000FFC001E1E00380700780780700380F003C0F003C0F003C0F003
C0F003C0F003C07003807807803807001E1E000FFC0003F000>18 18 -1 0 21]111 dc[ 00FFC0001E00001E00001E00001E00001E00001E00001E7C001FFF001F87801E03C01E01E01E01
E01E00F01E00F01E00F01E00F01E00F01E00F01E01E01E01E01E03C01F8780FFFF00FE7E00>20
26 -1 8 23]112 dc[<003FF0003FF000078000078000078000078000078000078003E7800FF7
801E1F803C0F80780780780780F00780F00780F00780F00780F00780F007807807807807803C0F
801E1B800FF38003E180>20 26 -1 8 22]113 dc[ 001E001E001E001E701EF81EF81FF8FFF0FFE0>13 18 -1 0 16]114 dc[<8F80FFE0F070E038
C038C038007807F81FF07FE07FC0FE00F000E030E03070703FF01FB0>13 18 -1 0 16]115 dc[
<03C00FE00E601E301E301E301E301E301E001E001E001E001E001E001E001E00FFE0FFE03E00
1E000E000E000600060006000600>12 26 -1 0 16]116 dc[<03E7F00FF7F00E1F801E0F801E
07801E07801E07801E07801E07801E07801E07801E07801E07801E07801E07801E0780FE3F80FE
3F80>20 18 -1 0 23]117 dc[<00E00000E00000E00001F00001F00003F80003D80003D80007
DC00078C00078C000F06000F06000F06001E03001E0780FF8FE0FF8FE0>19 18 -1 0 22]118
dc[<00C0600001C0700001E0F00001E0F00003E0F80003F1F80003F1F80007B1CC00079BCC0007
9BCC000F1B86000F0F86000F0F86001E0F03001E0F03001E0F0780FF3FCFE0FF3FCFE0>27 18
-1 0 30]119 dc[ F00001F80003DC0003CC000786000F87807FCFF07FCFF0>21 18 0 0 22]120 dc[<3C00007E00
00C70000C18000F9800070C00000C00000C00000E00000E00000E00001F00001F00003F80003D8
0003D80007DC00078C00078C000F06000F06000F06001E03001E0780FF8FE0FF8FE0>19 26 -1
8 22]121 dc[ 7FFC7FFC>14 18 -1 0 18]122 dc dfend bop 797 482 a fa(A)22 b(Primer)h(on)591
573 y(Programming)g(Applications)772 664 y(in)g(PC-Choices)430 785 y fd(An)o
(tonio)17 b(Lain,)h(Lee)e(Lup)h(Y)l(uen)e(and)i(Ro)o(y)f(H.)f(Campb)q(ell)836
882 y(July)h(16,)h(1992)-159 -500 y
14208860 18471518 328908 2631270 18747801 26575831 startTexFig

%!PS-Adobe-2.0 EPSF-1.2
%%Creator: idraw
%%DocumentFonts: Helvetica-Bold
%%Pages: 1
%%BoundingBox: 5 40 285 404
%%EndComments

/arrowHeight 8 def
/arrowWidth 4 def

/IdrawDict 51 dict def
IdrawDict begin

/reencodeISO {
dup dup findfont dup length dict begin
{ 1 index /FID ne { def }{ pop pop } ifelse } forall
/Encoding ISOLatin1Encoding def
currentdict end definefont
} def

/ISOLatin1Encoding [
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
/parenleft/parenright/asterisk/plus/comma/minus/period/slash
/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N
/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve
/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut
/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar
/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot
/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior
/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine
/guillemotright/onequarter/onehalf/threequarters/questiondown
/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute
/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis
/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave
/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex
/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis
/yacute/thorn/ydieresis
] def
/Helvetica-Bold reencodeISO def

/none null def
/numGraphicParameters 17 def
/stringLimit 65535 def

/Begin {
save
numGraphicParameters dict begin
} def

/End {
end
restore
} def

/SetB {
dup type /nulltype eq {
pop
false /brushRightArrow idef
false /brushLeftArrow idef
true /brushNone idef
} {
/brushDashOffset idef
/brushDashArray idef
0 ne /brushRightArrow idef
0 ne /brushLeftArrow idef
/brushWidth idef
false /brushNone idef
} ifelse
} def

/SetCFg {
/fgblue idef
/fggreen idef
/fgred idef
} def

/SetCBg {
/bgblue idef
/bggreen idef
/bgred idef
} def

/SetF {
/printSize idef
/printFont idef
} def

/SetP {
dup type /nulltype eq {
pop true /patternNone idef
} {
dup -1 eq {
/patternGrayLevel idef
/patternString idef
} {
/patternGrayLevel idef
} ifelse
false /patternNone idef
} ifelse
} def

/BSpl {
0 begin
storexyn
newpath
n 1 gt {
0 0 0 0 0 0 1 1 true subspline
n 2 gt {
0 0 0 0 1 1 2 2 false subspline
1 1 n 3 sub {
/i exch def
i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
} for
n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline
} if
n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline
patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
brushNone not { istroke } if
0 0 1 1 leftarrow
n 2 sub dup n 1 sub dup rightarrow
} if
end
} dup 0 4 dict put def

/Circ {
newpath
0 360 arc
patternNone not { ifill } if
brushNone not { istroke } if
} def

/CBSpl {
0 begin
dup 2 gt {
storexyn
newpath
n 1 sub dup 0 0 1 1 2 2 true subspline
1 1 n 3 sub {
/i exch def
i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
} for
n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline
n 2 sub dup n 1 sub dup 0 0 1 1 false subspline
patternNone not { ifill } if
brushNone not { istroke } if
} {
Poly
} ifelse
end
} dup 0 4 dict put def

/Elli {
0 begin
newpath
4 2 roll
translate
scale
0 0 1 0 360 arc
patternNone not { ifill } if
brushNone not { istroke } if
end
} dup 0 1 dict put def

/Line {
0 begin
2 storexyn
newpath
x 0 get y 0 get moveto
x 1 get y 1 get lineto
brushNone not { istroke } if
0 0 1 1 leftarrow
0 0 1 1 rightarrow
end
} dup 0 4 dict put def

/MLine {
0 begin
storexyn
newpath
n 1 gt {
x 0 get y 0 get moveto
1 1 n 1 sub {
/i exch def
x i get y i get lineto
} for
patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
brushNone not { istroke } if
0 0 1 1 leftarrow
n 2 sub dup n 1 sub dup rightarrow
} if
end
} dup 0 4 dict put def

/Poly {
3 1 roll
newpath
moveto
-1 add
{ lineto } repeat
closepath
patternNone not { ifill } if
brushNone not { istroke } if
} def

/Rect {
0 begin
/t exch def
/r exch def
/b exch def
/l exch def
newpath
l b moveto
l t lineto
r t lineto
r b lineto
closepath
patternNone not { ifill } if
brushNone not { istroke } if
end
} dup 0 4 dict put def

/Text {
ishow
} def

/idef {
dup where { pop pop pop } { exch def } ifelse
} def

/ifill {
0 begin
gsave
patternGrayLevel -1 ne {
fgred bgred fgred sub patternGrayLevel mul add
fggreen bggreen fggreen sub patternGrayLevel mul add
fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor
eofill
} {
eoclip
originalCTM setmatrix
pathbbox /t exch def /r exch def /b exch def /l exch def
/w r l sub ceiling cvi def
/h t b sub ceiling cvi def
/imageByteWidth w 8 div ceiling cvi def
/imageHeight h def
bgred bggreen bgblue setrgbcolor
eofill
fgred fggreen fgblue setrgbcolor
w 0 gt h 0 gt and {
l b translate w h scale
w h true [w 0 0 h neg 0 h] { patternproc } imagemask
} if
} ifelse
grestore
end
} dup 0 8 dict put def

/istroke {
gsave
brushDashOffset -1 eq {
[] 0 setdash
1 setgray
} {
brushDashArray brushDashOffset setdash
fgred fggreen fgblue setrgbcolor
} ifelse
brushWidth setlinewidth
originalCTM setmatrix
stroke
grestore
} def

/ishow {
0 begin
gsave
fgred fggreen fgblue setrgbcolor
/fontDict printFont printSize scalefont dup setfont def
/descender fontDict begin 0 [FontBBox] 1 get FontMatrix end
transform exch pop def
/vertoffset 1 printSize sub descender sub def {
0 vertoffset moveto show
/vertoffset vertoffset printSize sub def
} forall
grestore
end
} dup 0 3 dict put def
/patternproc {
0 begin
/patternByteLength patternString length def
/patternHeight patternByteLength 8 mul sqrt cvi def
/patternWidth patternHeight def
/patternByteWidth patternWidth 8 idiv def
/imageByteMaxLength imageByteWidth imageHeight mul
stringLimit patternByteWidth sub min def
/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv
patternHeight mul patternHeight max def
/imageHeight imageHeight imageMaxHeight sub store
/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def
0 1 imageMaxHeight 1 sub {
/y exch def
/patternRow y patternByteWidth mul patternByteLength mod def
/patternRowString patternString patternRow patternByteWidth getinterval def
/imageRow y imageByteWidth mul def
0 patternByteWidth imageByteWidth 1 sub {
/x exch def
imageString imageRow x add patternRowString putinterval
} for
} for
imageString
end
} dup 0 12 dict put def

/min {
dup 3 2 roll dup 4 3 roll lt { exch } if pop
} def

/max {
dup 3 2 roll dup 4 3 roll gt { exch } if pop
} def

/midpoint {
0 begin
/y1 exch def
/x1 exch def
/y0 exch def
/x0 exch def
x0 x1 add 2 div
y0 y1 add 2 div
end
} dup 0 4 dict put def

/thirdpoint {
0 begin
/y1 exch def
/x1 exch def
/y0 exch def
/x0 exch def
x0 2 mul x1 add 3 div
y0 2 mul y1 add 3 div
end
} dup 0 4 dict put def

/subspline {
0 begin
/movetoNeeded exch def
y exch get /y3 exch def
x exch get /x3 exch def
y exch get /y2 exch def
x exch get /x2 exch def
y exch get /y1 exch def
x exch get /x1 exch def
y exch get /y0 exch def
x exch get /x0 exch def
x1 y1 x2 y2 thirdpoint
/p1y exch def
/p1x exch def
x2 y2 x1 y1 thirdpoint
/p2y exch def
/p2x exch def
x1 y1 x0 y0 thirdpoint
p1x p1y midpoint
/p0y exch def
/p0x exch def
x2 y2 x3 y3 thirdpoint
p2x p2y midpoint
/p3y exch def
/p3x exch def
movetoNeeded { p0x p0y moveto } if
p1x p1y p2x p2y p3x p3y curveto
end
} dup 0 17 dict put def

/storexyn {
/n exch def
/y n array def
/x n array def
n 1 sub -1 0 {
/i exch def
y i 3 2 roll put
x i 3 2 roll put
} for
} def

/SSten {
fgred fggreen fgblue setrgbcolor
dup true exch 1 0 0 -1 0 6 -1 roll matrix astore
} def

/FSten {
dup 3 -1 roll dup 4 1 roll exch
newpath
0 0 moveto
dup 0 exch lineto
exch dup 3 1 roll exch lineto
0 lineto
closepath
bgred bggreen bgblue setrgbcolor
eofill
SSten
} def

/Rast {
exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore
} def

%%EndProlog

%%BeginIdrawPrologue
/arrowhead {
0 begin
transform originalCTM itransform
/taily exch def
/tailx exch def
transform originalCTM itransform
/tipy exch def
/tipx exch def
/dy tipy taily sub def
/dx tipx tailx sub def
/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def
gsave
originalCTM setmatrix
tipx tipy translate
angle rotate
newpath
arrowHeight neg arrowWidth 2 div moveto
0 0 lineto
arrowHeight neg arrowWidth 2 div neg lineto
patternNone not {
originalCTM setmatrix
/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul
arrowWidth div def
/padtail brushWidth 2 div def
tipx tipy translate
angle rotate
padtip 0 translate
arrowHeight padtip add padtail add arrowHeight div dup scale
arrowheadpath
ifill
} if
brushNone not {
originalCTM setmatrix
tipx tipy translate
angle rotate
arrowheadpath
istroke
} if
grestore
end
} dup 0 9 dict put def

/arrowheadpath {
newpath
arrowHeight neg arrowWidth 2 div moveto
0 0 lineto
arrowHeight neg arrowWidth 2 div neg lineto
} def

/leftarrow {
0 begin
y exch get /taily exch def
x exch get /tailx exch def
y exch get /tipy exch def
x exch get /tipx exch def
brushLeftArrow { tipx tipy tailx taily arrowhead } if
end
} dup 0 4 dict put def

/rightarrow {
0 begin
y exch get /tipy exch def
x exch get /tipx exch def
y exch get /taily exch def
x exch get /tailx exch def
brushRightArrow { tipx tipy tailx taily arrowhead } if
end
} dup 0 4 dict put def

%%EndIdrawPrologue

%I Idraw 10 Grid 8 8

%%Page: 1 1

Begin
%I b u
%I cfg u
%I cbg u
%I f u
%I p u
%I t
[ 0.659941 0 0 0.659941 0 0 ] concat
/originalCTM matrix currentmatrix def

Begin %I Pict
%I b u
%I cfg u
%I cbg u
%I f u
%I p u
%I t
[ 0.824578 0 0 0.824578 -175.445 -23.049 ] concat

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.300000 0.300000 0.300000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 258.5 358 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.332000 0.332000 0.332000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 257 328.5 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.364000 0.364000 0.364000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 256.5 312.5 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.396000 0.396000 0.396000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 256 296.5 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.428000 0.428000 0.428000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 253.5 280 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.460000 0.460000 0.460000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 252 263.5 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.492000 0.492000 0.492000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 251 248.5 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.524000 0.524000 0.524000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 251 233 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.556000 0.556000 0.556000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 249.5 217.5 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.588000 0.588000 0.588000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 247 201.5 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.620000 0.620000 0.620000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 243 182 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.652000 0.652000 0.652000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 241 165 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.684000 0.684000 0.684000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 237.5 146.5 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.716000 0.716000 0.716000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 268.5 162 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.748000 0.748000 0.748000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 275.5 153.5 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.780000 0.780000 0.780000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 283 145 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.812000 0.812000 0.812000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 291 137.5 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.844000 0.844000 0.844000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 298 129 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.876000 0.876000 0.876000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 306 120.5 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.908000 0.908000 0.908000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 313 111.5 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.940000 0.940000 0.940000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 320.5 103.5 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.972000 0.972000 0.972000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 327 95 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
1.000000 1.000000 1.000000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 334.5 87 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
1.000000 1.000000 1.000000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 340.5 78.5 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
1.000000 1.000000 1.000000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 349 70.5 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
1.000000 1.000000 1.000000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 357 64.5 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
1.000000 1.000000 1.000000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 364.5 57 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
1.000000 1.000000 1.000000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 373.5 50 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
1.000000 1.000000 1.000000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 384 44.5 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
1.000000 1.000000 1.000000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 395.5 39 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
1.000000 1.000000 1.000000 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.5 -0 -0 0.5 408 36 ] concat
%I 4
2 292
559 824
652 737
39 140
4 Poly
End

Begin %I Rect
none SetB %I b n
%I cfg White
1 1 1 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.704812 -0 -0 0.880212 111.607 174.698 ] concat
%I
242 411 687 676 Rect
End

Begin %I Rect
none SetB %I b n
%I cfg White
1 1 1 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 0.985075 -0 -0 1.10713 51.1119 19.5384 ] concat
%I
177 177 242 474 Rect
End

Begin %I Rect
none SetB %I b n
%I cfg White
1 1 1 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 1 -0 -0 1 44.5 21.5 ] concat
%I
242 82 593 277 Rect
End

Begin %I Rect
none SetB %I b n
%I cfg White
1 1 1 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 1 -0 -0 1 49.5 32.5 ] concat
%I
490 232 686 513 Rect
End

End %I eop

Begin %I Text
%I cfg White
1 1 1 SetCFg
%I f -*-helvetica-bold-r-normal-*-14-*-*-*-*-*-*-*
Helvetica-Bold 14 SetF
%I t
[ 8.61841 0 0 12.7191 64.4289 403.472 ] concat
%I
[
(PC)
] Text
End

Begin %I Pict
%I b u
%I cfg u
%I cbg u
%I f u
%I p u
%I t
[ 0.590656 0 0 0.590656 109.449 -72.9931 ] concat

Begin %I Pict
%I b u
%I cfg u
%I cbg u
%I f u
%I p u
%I t
[ 6.12303e-17 -1 1 6.12303e-17 3.5 832.5 ] concat

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 4
212 222
142 292
141 306
212 236
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
212 221
221 228
212 236
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 6
221 228
212 236
212 274
306 274
310 263
221 263
6 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
310 263
306 274
316 270
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 4
133 302
143 292
141 306
133 302
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
133 302
133 310
141 306
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
221 384
221 358
212 376
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
212 376
212 390
221 384
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 5
133 310
142 306
212 376
212 390
133 310
5 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
389 358
393 348
399 354
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 6
389 358
399 354
399 443
433 443
425 452
389 452
6 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
425 452
433 443
439 452
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 4
355 523
425 452
439 452
372 519
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
355 523
359 531
372 519
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
355 522
350 531
359 531
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
285 452
277 443
297 443
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
285 452
270 452
277 443
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 5
270 452
285 452
355 522
351 531
270 452
5 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 4
286 161
296 138
353 82
357 90
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
353 82
362 82
357 90
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 4
362 82
357 91
427 161
441 161
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
441 161
427 161
435 170
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 6
434 170
427 161
389 161
389 255
400 244
400 170
6 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 7
406 273
416 263
491 263
491 229
500 237
500 273
406 273
7 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
491 229
500 223
500 237
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 4
500 223
500 237
571 307
579 303
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
579 303
570 307
579 312
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 4
500 377
570 307
579 312
531 359
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
273 161
295 139
287 161
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
287 161
273 161
279 170
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 7
287 161
279 170
313 170
313 259
323 255
323 161
287 161
7 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
323 255
313 259
319 265
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 4
389 255
323 255
320 265
394 265
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
389 255
400 244
400 259
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
400 259
394 264
389 255
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
416 263
402 263
406 273
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
402 263
396 269
406 273
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 4
406 273
396 269
396 343
406 339
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
406 339
396 343
402 350
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 6
406 339
402 350
491 350
491 385
500 377
500 339
6 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
491 385
500 377
500 391
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
500 391
500 377
531 360
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 6
230 340
224 350
221 350
221 358
212 376
212 340
6 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 4
316 270
306 274
306 340
316 328
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 6
285 452
297 443
312 443
312 434
323 426
323 452
6 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 4
323 358
333 348
392 348
389 358
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 4
230 340
225 350
310 350
306 340
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 4
312 354
323 358
323 426
312 434
4 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
306 340
316 343
310 350
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
307 340
316 327
316 343
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
312 354
319 348
323 358
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 3
323 358
319 348
332 348
3 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 28
348 468
365 460
365 460
369 462
373 465
377 469
379 473
381 478
381 483
381 488
379 493
378 493
378 493
364 498
364 498
365 497
368 495
370 491
372 487
372 483
372 478
370 474
367 471
364 468
360 466
355 466
351 466
347 468
28 Poly
End

Begin %I Poly
none SetB %I b n
%I cfg LtGray
0.764706 0.764706 0.764706 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I 42
359 499
378 493
379 493
376 498
373 502
369 505
364 508
358 509
353 509
348 508
343 506
339 503
335 499
332 495
330 490
330 484
330 479
332 474
334 469
338 465
342 462
347 460
352 458
357 458
363 459
365 460
364 460
347 468
347 468
346 469
343 471
340 475
339 479
338 483
339 488
341 492
343 495
347 498
351 500
355 500
360 500
364 498
42 Poly
End

End %I eop

End %I eop

End %I eop

showpage

%%Trailer

end

endTexFig
262 1107 a fb(Con)n(ten)n(ts)262 1198 y fg(1)38 b(In)o(tro)q
(duction)1080 b(2)262 1290 y(2)38 b(Ob)s(jects)14 b(in)i(Choices)954 b(2)324
1340 y fk(2.1)41 b(In)o(tro)q(duction)14 b fj(:)21 b(:)f(:)g(:)g(:)h(:)f(:)g
(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
(:)f(:)g(:)h(:)65 b fk(2)324 1389 y(2.2)41 b(Smart)14 b(p)q(oin)o(ters)36 b fj
(:)20 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)65 b fk(3)262 1481 y fg(3)38 b(The)15 b
(Standard)f(Nameserv)o(er)792 b(5)262 1572 y(4)38 b(Input/Outp)o(ut)12 b(from)
i(the)h(terminal)663 b(6)262 1663 y(5)38 b(Using)15 b(Timers)1039 b(11)324
1713 y fk(5.1)41 b(F)m(ree)15 b(Running)f(Timers)i fj(:)k(:)g(:)h(:)f(:)g(:)g
(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)44
b fk(11)324 1763 y(5.2)d(Timeout)15 b(Timers)42 b fj(:)20 b(:)h(:)f(:)g(:)h
(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
(:)g(:)h(:)44 b fk(12)262 1854 y fg(6)38 b(Pro)q(cess)15 b(creation,)g(comm)o
(unication)d(and)k(sync)o(hronization)197 b(13)324 1904 y fk(6.1)41 b(Pro)q
(cess)16 b(Creation)31 b fj(:)20 b(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)44 b fk(14)324
1954 y(6.2)d(Pro)q(cess)16 b(Sync)o(hronization)27 b fj(:)21 b(:)f(:)g(:)g
(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)44
b fk(15)324 2004 y(6.3)d(Pro)q(cess)16 b(Comm)o(unication)29 b fj(:)21 b(:)f
(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
(:)h(:)44 b fk(17)262 2095 y fg(A)26 b(Learning)14 b(to)i(t)o(yp)q(e)971 b
(18)324 2145 y fk(A.1)31 b(Line.h)f fj(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
(:)h(:)f(:)g(:)h(:)44 b fk(18)324 2195 y(A.2)31 b(T)o(yp)q(e1.cc)14 b fj(:)20
b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)44 b fk(19)262 2286 y fg(B)28 b
(Learning)14 b(to)i(t)o(yp)q(e:)k(t)o(w)o(o)15 b(pro)q(cesses)g(\(T)o(yp)q
(e2.cc\))415 b(23)967 2574 y fk(1)g eop bop 262 307 a fb(1)69 b(In)n(tro)r
(duction)262 398 y fk(This)13 b(do)q(cumen)o(t)g(is)h(an)e(informal)h(in)o
(tro)q(duction)h(to)f(building)h(applications)g(for)f(Choices.)262 448 y(It)k
(is)h(neither)h(an)e(exhaustiv)o(e)i(nor)e(a)g(tec)o(hnical)i(description)h
(of)d(Choices)i(Application)262 498 y(Programming)14 b(In)o(terface)i(\(API\)\
.)g(The)f(purp)q(ose)h(of)f(the)g(do)q(cumen)o(t)h(is)g(to)f(sho)o(w,)g(using)
262 548 y(simple)g(examples,)g(ho)o(w)e(to)h(build)h(Choices)h(applications.)
k(The)14 b(programmer)g(will)h(\014nd)262 597 y(that)j(Choices)i(is)f(organiz\
ed)g(as)f(an)g(ob)r(ject-orien)o(ted)j(system,)e(b)q(oth)g(inside)h(and)e(out\
.)262 647 y(Man)o(y)13 b(features)j(in)e(Choices)i(resem)o(ble)g(features)g
(in)e(other)h(systems)g(and)f(w)o(e)h(hop)q(e)g(that)262 697 y(this)21 b(mak)
o(es)g(programming)f(easier.)41 b(Ho)o(w)o(ev)o(er,)22 b(some)f(features)h
(are)f(v)o(ery)g(di\013eren)o(t.)262 747 y(While)d(our)g(do)q(cumen)o(tation)
h(needs)g(m)o(uc)o(h)e(impro)o(v)o(emen)o(t,)i(w)o(e)f(hop)q(e)g(that)g(this)
h(guide)262 797 y(will)e(b)q(e)g(of)f(use)h(to)f(the)h(more)g(adv)o(en)o(turo\
us)g(programmer)f(who)g(w)o(an)o(ts)g(to)g(learn)i(more)262 846 y(ab)q(out)13
b(ob)r(ject-orien)o(ted)j(op)q(erating)f(systems.)324 896 y(An)k(API)g(is)h
(an)f(abstract)h(in)o(terface)g(to)f(the)g(underlying)i(op)q(erating)f(system)
g(that)262 946 y(allo)o(ws)e(y)o(ou)f(to)g(program)g(applications)j(without)e
(kno)o(wing)f(its)i(in)o(ternal)g(details.)31 b(F)m(or)262 996 y(example,)15 b
(the)g(Unix)g(API)g(will)h(let)g(y)o(ou)e(use)i fe(stdout)p fk(,)f fe(stdin)h
fk(together)g(with)f fe(p)o(rintf\(\))i fk(and)262 1046 y fe(scanf\(\))h fk
(to)g(prin)o(t)g(and)g(read)g(from)f(the)h(terminal.)31 b(Whether)19 b(the)g
(terminal)g(is)f(a)g(VT-)262 1095 y(100)h(or)i(a)f(w)o(orkstation)h(console,)
i(the)e(functions)g(are)g(called)h(in)f(the)g(same)g(manner.)262 1145 y(Simil\
arly)m(,)c(\014le)f(I/O)g(is)h(p)q(erformed)f(through)g(streams)h(declared)h
fe(FILE)d fk(and)g(op)q(erations)262 1195 y(lik)o(e)f fe(fop)q(en\(\))p fk
(,)g fe(fwrite\(\))h fk(and)e fe(fread\(\))p fk(.)19 b(The)13 b(application)i
(programmer)e(do)q(es)h(not)f(ha)o(v)o(e)g(to)262 1245 y(program)g(detailed)j
(co)q(de)e(to)g(store)h(\014les)g(nor)f(to)g(pro)o(vide)g(I/O)g(redirection.)
324 1295 y(The)k(underlying)i(structure)g(of)d(Choices)j(is)e(di\013eren)o
(t)i(from)e(most)f(op)q(erating)i(sys-)262 1345 y(tems)12 b(y)o(ou)f(will)j
(ha)o(v)o(e)e(encoun)o(tered.)19 b(It)12 b(is)h(built)g(as)f(an)f(ob)r(ject-o\
rien)o(ted)k(system)d(and)g(the)262 1394 y(API)j(is)g(ob)r(ject-orien)o(ted.)
24 b(Th)o(us,)15 b(Choices)h(pro)o(vides)g(a)f(v)o(ery)g(di\013eren)o(t)i(API)
e(from,)f(sa)o(y)m(,)262 1444 y(Unix)h(or)g(MS-DOS.)f(The)h(ob)r(ject-orien)o
(ted)j(nature)d(of)f(Choices)j(allo)o(ws)e(a)g(programmer)262 1494 y(to)h(pro\
gram)h(in)o(teractions)i(b)q(et)o(w)o(een)f(the)g(application)h(and)d(the)i
(op)q(erating)g(system)g(as)262 1544 y(in)o(teractions)g(b)q(et)o(w)o(een)g
(ob)r(jects.)26 b(In)16 b(addition,)h(b)q(ecause)h(of)d(ob)r(ject-)p fg(orien)
o(tation)p fk(,)g(the)262 1594 y(programmer)10 b(can)h(c)o(ho)q(ose)h(b)q(et)
o(w)o(een)g(sev)o(eral)h(di\013eren)o(t)g(lev)o(els)g(of)d(abstraction)i(when)
g(pro-)262 1643 y(gramming)h(these)j(in)o(teractions.)21 b(Th)o(us,)14 b(in)h
(one)f(mo)q(dule,)h(the)g(programmer)f(ma)o(y)f(treat)262 1693 y(all)f(op)q
(erating)h(system)g(comp)q(onen)o(ts)g(as)f(`ob)r(jects')h(that)f(ha)o(v)o
(e)g(names)g(lik)o(e)h(`idlePro)q(cess)q('.)262 1743 y(In)19 b(another)g(mo)q
(dule,)i(the)f(programmer)f(ma)o(y)f(use)i(the)g(sp)q(ecialized)j(prop)q(erti\
es)e(of)e(a)262 1793 y(particular)c(ob)r(ject.)262 1930 y fb(2)69 b(Ob)t(ject\
s)21 b(in)i(Choices)262 2029 y fc(2.1)55 b(In)n(tro)r(duction)262 2106 y fk
(Choices)13 b(is)f(built)h(from)e(ob)r(jects.)19 b(Eac)o(h)12 b(ob)r(ject)g
(is)h(de\014ned)g(b)o(y)e(a)h(class)h(that)e(sp)q(eci\014es)k(the)262 2156 y
(set)h(of)f(messages)i(that)e(the)i(ob)r(ject)f(can)g(receiv)o(e.)25 b(An)16 b
(ob)r(ject)g(encapsulates)i(data)e(that)262 2206 y(represen)o(ts)g(its)f(in)o
(ternal)g(state.)k(A)14 b(message)h(ma)o(y)d(b)q(e)j(sen)o(t)f(to)g(an)g(ob)r
(ject)g(to)g(in)o(v)o(ok)o(e)g(the)262 2255 y(execution)j(of)e(one)h(of)f(its)
h(metho)q(ds.)24 b(Choices)17 b(is)g(written)g(in)f(the)g(C++)g(programming)
262 2305 y(language.)k(Eac)o(h)15 b(class)h(that)f(is)g(used)h(in)f(Choices)h
(is)g(represen)o(ted)h(as)e(an)f(ob)r(ject)i(in)f(the)262 2355 y(system.)j
(In)13 b(particular,)h(it)g(is)f(p)q(ossible)j(to)c(send)i(a)f(message)g(to)g
(a)f(class)j(in)e(order)h(to)e(\014nd)262 2405 y(out)g(more)g(ab)q(out)h(the)
g(prop)q(erties)h(of)e(an)g(ob)r(ject)i(de\014ned)f(b)o(y)f(the)h(class.)19 b
(Ob)r(jects)14 b(can)f(b)q(e)967 2574 y(2)g eop bop 262 307 a fk(created,)13 b
(deleted,)h(stored)f(in)f(\014les,)h(passed)g(in)g(messages)g(to)e(other)i
(ob)r(jects,)g(or)f(returned)262 357 y(from)h(metho)q(ds.)324 407 y(Standard)
i(input)h(and)g(output)f(are)h(ob)r(jects)g(that)g(ma)o(y)e(b)q(e)i(accessed)
i(b)o(y)d(the)h(appli-)262 457 y(cation)f(through)f(the)h(p)q(oin)o(ter)h(v)n
(ariables)g fe(Standa)o(rdInput)h fk(and)d fe(Standa)o(rdOutput)p fk(.)22 b
(These)262 506 y(v)n(ariables)16 b(are)g(assigned)g(v)n(alues)g(for)f(the)h
(standard)g(input)g(and)f(output)g(ob)r(jects)i(at)e(ap-)262 556 y(plication)
21 b(startup)f(time.)35 b(F)m(or)19 b(example,)i(supp)q(ose)g(w)o(e)f(wish)g
(to)g(prin)o(t)g(the)g(message)262 606 y(`Hello)c(Sailor!')22 b(on)15 b(the)h
(standard)g(output.)22 b(W)m(e)15 b(send)h(the)g(message)f fe(fo)o(rmattedW)o
(rite\(\))262 656 y fk(together)k(with)h(a)f(`Hello)g(Sailor!')34 b(string)20
b(argumen)o(t)f(to)f fe(Standa)o(rdOutput)j fk(using)f(the)262 706 y(follo)o
(wing)14 b(program)f(fragmen)o(t:)392 797 y ff(StandardOutput)19 b(->)j(forma\
ttedWrite)c(\("Hello)j(Sailor!\\n"\);)324 888 y fk(Access)12 b(to)d(the)i(man)
o(y)d(ob)r(jects)j(pro)o(vided)g(b)o(y)e(Choices)i(is)g(v)o(ery)f(useful)h
(in)f(applications.)262 938 y(In)k(order)i(to)f(send)h(them)f(messages,)h(w)o
(e)f(need)h(to)e(acquire)j(p)q(oin)o(ters)f(to)f(them.)21 b(Section)262 988 y
(3)13 b(will)j(explain)f(ho)o(w)e(to)h(obtain)g(these)h(p)q(oin)o(ters.)262
1104 y fc(2.2)55 b(Smart)19 b(p)r(oin)n(ters)262 1181 y fk(The)c(k)o(ernel)h
(is)g(a)f(dynamic)g(collection)i(of)e(ob)r(jects)h(represen)o(ting)i(pro)q
(cesses,)f(protected)262 1231 y(memory)9 b(spaces)i(and)f(resources.)19 b(In)
10 b(C++,)h(it)g(is)f(di\016cult)i(to)d(manage)h(a)f(large)i(collection)262
1280 y(of)i(ob)r(jects)h(e\016cien)o(tly)i(without)e(m)o(uc)o(h)g(programming)
f(e\013ort.)18 b(In)c(Choices,)h(w)o(e)f(pro)o(vide)262 1330 y(smart)c(p)q
(oin)o(ters)i(that)e(supp)q(ort)h(garbage)f(collection)j(using)e(reference)h
(coun)o(ting.)18 b(As)11 b(long)262 1380 y(as)j(applications)i(can)f(still)i
(reference)g(a)d(particular)i(ob)r(ject,)f(the)g(ob)r(ject)g(will)h(remain)f
(in)262 1430 y(existence.)k(Ho)o(w)o(ev)o(er,)11 b(when)g(the)f(last)h(refere\
nce)i(to)d(that)g(ob)r(ject)h(is)g(remo)o(v)o(ed,)g(the)g(ob)r(ject)262 1480 y
(is)j(deleted)i(automatically)m(.)324 1529 y(Tw)o(o)9 b(sets)i(of)f(classes,)
i(named)e fe(Sta)o(r)g fk(and)f fe(Ref)h fk(classes,)j(are)d(used)h(to)e(auto\
mate)h(garbage)262 1579 y(collection.)25 b(In)15 b(general,)i(whenev)o(er)g
(w)o(e)e(need)i(a)e(lo)q(cal)i(or)e(global)h(v)n(ariable)g(that)g(p)q(oin)o
(ts)262 1629 y(to)f(a)g(Choices)i(ob)r(ject)f(in)g(an)g(application)h(program\
,)e(w)o(e)g(use)i(a)e fe(Sta)o(r)g fk(p)q(oin)o(ter)i(v)n(ariable.)262 1679 y
(F)m(or)c(example,)h(instead)h(of)f(using)g(the)h(follo)o(wing)f(C++)g(co)q
(de)h(to)f(reference)i(an)e(ob)r(ject:)262 1770 y ff(#include)20 b("Whatsoeve\
rObjec)o(t.h")262 1870 y(WhatsoeverObjec)o(t)f(*MyPointer;)262 1920 y(Mypoint\
er)g(=)j(\(WhatsoeverObject)c(*\))k(\(..something..\);)324 2011 y fk(w)o(e)14
b(reference)i(a)e(Choices)h(ob)r(ject)g(using:)262 2102 y ff(#include)20 b
("WhatsoeverObjec)o(t.h")262 2152 y(#include)g("WhatsoeverObjec)o(tStar)o(.h")
262 2252 y(WhatsoeverObjec)o(tStar)e(MyPointer;)262 2302 y(Mypointer)h(=)j
(\(WhatsoeverObjectS)o(tar\))c(\(..something..\);)324 2393 y fk(Returning)e
(a)f(reference)i(from)e(a)g(function)h(can)f(lead)h(to)f(v)o(ery)h(ine\016cie\
n)o(t)h(reference)262 2443 y(coun)o(ting)d(co)q(de)g(in)g(an)g(automatic)f
(garbage)h(collection)i(sc)o(heme)f(implemen)o(ted)g(without)967 2574 y(3)g
eop bop 262 307 a fk(the)15 b(supp)q(ort)h(of)e(a)g(compiler.)23 b(Ho)o(w)o
(ev)o(er,)15 b(a)g(function)g(ma)o(y)f(return)i(a)f(smart)g(p)q(oin)o(ter)h
(to)262 357 y(a)c(Choices)j(ob)r(ject)f(v)o(ery)g(e\016cien)o(tly)h(using)f
(the)f(standard)h(C++)g(compiler)g(b)o(y)f(follo)o(wing)262 407 y(the)h(Choic\
es)h(co)q(ding)g(con)o(v)o(en)o(tions.)324 457 y(The)f(function)g(is)g(co)q
(ded)g(to)f(return)i(a)e fe(Ref)j fk(p)q(oin)o(ter.)j(The)14 b fe(Ref)i fk
(p)q(oin)o(ter)e(m)o(ust)g(not)f(b)q(e)262 506 y(used)k(directly)i(in)e(the)g
(application)h(co)q(de)g(to)e(access)i(a)f(Choices)h(ob)r(ject.)26 b(Instead,)
18 b(the)262 556 y(p)q(oin)o(ter)d(should)f(b)q(e)h(assigned)g(\014rst)f(to)g
(a)f fe(Sta)o(r)h fk(lo)q(cal)h(v)n(ariable)g(and)e(the)i(ob)r(ject)f(accesse\
d)262 606 y(through)f(that)h(v)n(ariable.)19 b(The)c(follo)o(wing)f(applicati\
on)h(co)q(de)g(is)g(correct:)262 697 y ff(#include)20 b("WhatsoeverObjec)o
(t.h")262 747 y(#include)g("WhatsoeverObjec)o(tStar)o(.h")262 847 y(extern)g
(WhatsoeverObjectRe)o(f)f(TrickyFunction\(\);)262 946 y(WhatsoeverObjec)o(tSt\
ar)f(MyPointer;)262 996 y(Mypointer)h(=)j(TrickyFunction\(\);)262 1046 y(Mypo\
inter)d(->)j(something\(\);)324 1137 y fk(But)14 b(this)h(is)g(not:)262 1229 y
ff(#include)20 b("WhatsoeverObjec)o(t.h")262 1279 y(#include)g("WhatsoeverObj\
ec)o(tStar)o(.h")262 1378 y(extern)g(WhatsoeverObjectRe)o(f)f(TrickyFunction\
\(\);)262 1478 y(TrickyFunction\()o(\))g(->)i(something\(\);)324 1569 y fk
(In)10 b(addition,)i(the)f(Choices)i(con)o(v)o(en)o(tion)e(requires)i(the)e
(formal)f(parameters)i(of)e(a)h(func-)262 1619 y(tion)h(to)g(b)q(e)g(normal)g
(p)q(oin)o(ters,)i(not)e(declared)h(of)f(t)o(yp)q(e)g fe(Sta)o(r)p fk(.)18 b
(Although)12 b(normal)g(p)q(oin)o(ters)262 1669 y(to)k(Choices)i(ob)r(jects)g
(are)e(used)i(for)e(formal)g(parameters,)i(the)f(actual)g(parameters)g(can)
262 1719 y(b)q(e)d(of)f(t)o(yp)q(e)i fe(Sta)o(r)p fk(.)j(F)m(or)13 b(example,)
h(this)h(will)h(w)o(ork:)262 1810 y ff(#include)k("WhatsoeverObjec)o(t.h")262
1860 y(#include)g("WhatsoeverObjec)o(tStar)o(.h")262 1959 y(extern)g(void)h
(TrickyFunction)e(\(WhatsoeverObject)f(*\);)262 2059 y(WhatsoeverObjec)o(tSta\
r)g(MyPointer;)262 2109 y(TrickyFunction)g(\(MyPointer\);)324 2200 y fk(But)c
(this)h(will)h(not:)262 2291 y ff(#include)k("WhatsoeverObjec)o(t.h")262 2341
y(#include)g("WhatsoeverObjec)o(tStar)o(.h")262 2441 y(extern)g(void)h(Tricky\
Function)e(\(WhatsoeverObject)o(Star\))o(;)967 2574 y fk(4)g eop bop 262 357 a
ff(WhatsoeverObjec)o(tStar)18 b(MyPointer;)262 407 y(TrickyFunction)g(\(MyPoi\
nter\);)324 498 y fk(Because)c(the)f(ob)r(jects)h(in)f(Choices)h(are)f(automa\
tically)h(garbage)e(collected,)j(it)e(is)h(not)262 548 y(necessary)19 b(to)d
(call)j(the)e(destructor)i(of)d(an)h(ob)r(ject)h(p)q(oin)o(ted)g(to)f(b)o(y)g
(a)f fe(Sta)o(r)p fk(.)28 b(Moreo)o(v)o(er,)262 598 y(b)q(ecause)14 b(Choices)
g(supp)q(orts)g(m)o(ultipro)q(cessing,)h(shared)e(memory)f(and)h(ligh)o(t)o
(w)o(eigh)o(t)h(pro-)262 648 y(cesses,)f(directly)h(in)o(v)o(oking)e(the)g
(destructor)i(of)d(an)g(ob)r(ject)h(can)g(result)h(in)g(an)e(inconsisten)o
(t)262 697 y(system)k(state)h(in)o(v)o(olving)g(dangling)f(p)q(oin)o(ters.)23
b(That)15 b(is,)h(calling)g(a)f(Choices)i(ob)r(ject)e(de-)262 747 y(structor)
g(directly)h(can)e(cause)h(the)g(application)g(to)f(fail.)19 b(Finally)m(,)14
b fe(Sta)o(r)g fk(p)q(oin)o(ters)i(can)e(b)q(e)262 797 y(assigned)i(to)g(norm\
al)f(p)q(oin)o(ters)i(within)g(an)e(application)i(but)f(care)g(m)o(ust)g(b)q
(e)g(tak)o(en)g(not)262 847 y(to)f(use)i(a)f(dangling)h(reference;)i(the)d
(lifetime)i(of)e(an)f(ob)r(ject)i(is)g(guaran)o(teed)g(only)f(when)262 897 y
fe(Sta)o(r)e fk(p)q(oin)o(ters)h(are)g(used.)324 946 y(The)h(w)o(a)o(y)f(smar\
t)h(p)q(oin)o(ters)h(ha)o(v)o(e)f(b)q(een)h(describ)q(ed)h(is)f(rather)g(simp\
listic)i(and)c(there)262 996 y(are)h(some)g(exceptions)i(to)e(these)h(rules.)
26 b(Nev)o(ertheless)q(,)19 b(these)e(rules)h(are)e(applicable)i(in)262 1046 y
(most)d(of)g(the)h(cases.)25 b(It)16 b(is)h(sometimes)f(useful)h(to)f(impleme\
n)o(t)h(a)e(mo)q(dule)h(with)h(normal)262 1096 y(p)q(oin)o(ters)e(\014rst)g
(and)e(add)h(the)h(smart)f(p)q(oin)o(ters)h(when)f(the)h(system)g(is)f(alread\
y)h(w)o(orking.)262 1233 y fb(3)69 b(The)22 b(Standard)j(Nameserv)n(er)262
1324 y fk(Choices)15 b(is)g(built)g(assuming)g(the)f(principle)j(that)d(an)g
(application)h(should)g(only)f(b)q(e)h(able)262 1374 y(to)i(access)j(those)f
(ob)r(jects)g(it)g(needs.)32 b(When)18 b(an)g(application)i(is)f(\014rst)f
(executed,)j(it)e(is)262 1424 y(supplied)d(with)e(a)g(small)g(n)o(um)o(b)q
(er)h(of)e(references)k(to)d(Choices)h(ob)r(jects)g(that)f(most)g(appli-)262
1474 y(cations)h(need.)k(These)c(references)i fe(Standa)o(rdOutput)p fk(,)f fe
(Standa)o(rdInput)p fk(,)f fe(Standa)o(rdFile)q(Sys-)262 1523 y(temInterface)
h fk(and)f(the)g fe(Standa)o(rdNameServe)q(r)q fk(.)24 b(References)17 b(to)d
(other)i(Choices)g(ob)r(jects)262 1573 y(ma)o(y)i(b)q(e)i(acquired)h(b)o(y)f
(sending)g(a)g fe(lo)q(okup\(\))h fk(message)f(to)g(the)g fe(Standa)o(rdNameS\
erver)r fk(.)262 1623 y(The)14 b fe(lo)q(okup\(\))h fk(message)f(includes,)i
(as)e(parameters,)g(an)f(iden)o(ti\014er)j(for)e(an)f(ob)r(ject)h(and)g(a)262
1673 y(sp)q(eci\014cation)i(of)e(its)h(class.)20 b(The)15 b(nameserv)o(er)g fe
(lo)q(okup\(\))i fk(metho)q(d)d(returns)i(a)d(p)q(oin)o(ter)j(to)262 1723 y
(that)f(ob)r(ject)h(if)g(it)g(b)q(oth)f(\014nds)h(the)g(ob)r(ject)h(and)e(the)
h(application)h(has)f(the)g(appropriate)262 1772 y(p)q(ermission)d(to)f(use)h
(it.)18 b(In)11 b(certain)j(cases,)f(the)f(nameserv)o(er)h(will)h(return)f
(a)e(p)q(oin)o(ter)i(to)f(an)262 1822 y(ob)r(ject)i(that)g(is)g(a)g(sub)q(cla\
ss)h(of)f(the)g(one)g(required,)h(but)f(this)h(should)f(not)g(b)q(e)g(a)f(pro\
blem.)324 1872 y(The)k fe(Standa)o(rdNameServer)j fk(con)o(tains)e(references)
h(to)e(man)o(y)f(ob)r(jects)h(that)g(ma)o(y)f(b)q(e)262 1922 y(used)f(b)o(y)f
(applications.)21 b(F)m(or)14 b(example,)g(to)h(access)h(a)e(Choices)h(ob)r
(ject)h(named)e(`John')f(of)262 1972 y(class)i(`Whatso)q(ev)o(erOb)r(ject')g
(w)o(e)f(co)q(de:)262 2063 y ff(#include)20 b("WhatsoeverObjec)o(t.h")262 2113
y(#include)g("WhatsoeverObjec)o(tStar)o(.h")262 2212 y(WhatsoeverObjec)o(tSta\
r)e(MyObject;)262 2312 y(MyObject)i(=)h(\(WhatsoeverObjectSt)o(ar\))d(Standar\
dNameServer)h(->)349 2362 y(lookup)h(\("John",)g("WhatsoeverObject"\))o(;)967
2574 y fk(5)g eop bop 324 307 a fk(If)13 b(the)g(nameserv)o(er)i(cannot)e(\
\014nd)h(an)f(ob)r(ject)h(to)f(matc)o(h)g(the)g(lo)q(okup)h(request,)g(it)g
(will)262 357 y(return)i(zero.)22 b(W)m(e)15 b(recommend)g(alw)o(a)o(ys)g(c)o
(hec)o(king)i(that)e(the)g(address)i(returned)f(b)o(y)f(the)262 407 y(nameser\
v)o(er)g(is)g(non-zero.)324 457 y(The)20 b fe(Standa)o(rdNameServer)j fk(incl\
udes)f(the)e fe(Class)g fk(ob)r(jects)g(that)g(represen)o(t)h(classes)262 506
y(used)15 b(in)f(the)h(construction)h(of)e(Choices.)20 b(W)m(e)14 b(can)h(wri\
te)g(the)g(previous)g(example)g(in)g(the)262 556 y(follo)o(wing)f(w)o(a)o(y:)
262 646 y ff(#include)20 b("WhatsoeverObjec)o(t.h")262 696 y(#include)g("What\
soeverObjec)o(tStar)o(.h")262 746 y(#include)g("Class.h")63 b(//)43 b(ClassSt\
ar.h)20 b(is)h(automatically)e(included)262 846 y(WhatsoeverObjec)o(tStar)f
(MyObject;)262 895 y(ClassStar)h(WhatsoeverObjectClas)o(s;)262 995 y(Whatsoev\
erObjec)o(tClas)o(s)g(=)j(\(ClassStar\))d(StandardNameServer)f(->)349 1045 y
(lookup)i(\("WhatsoeverObject")o(,)f("Class"\);)262 1095 y(MyObject)h(=)h(\(W\
hatsoeverObjectSt)o(ar\))d(StandardNameServer)h(->)349 1144 y(lookup)h(\("Joh\
n",)g(WhatsoeverObjectCla)o(ss\);)324 1234 y fk(The)12 b(previous)i(example)e
(do)q(es)h(not)f(sho)o(w)g(the)h(adv)n(an)o(tages)e(of)h(ha)o(ving)g fe(Class)
g fk(ob)r(jects.)262 1284 y fe(Class)i fk(ob)r(jects)i(can)f(resp)q(ond)g(to)
g(messages)g(lik)o(e)h fe(pa)o(rent\(\))g fk(and)f fe(child\(\))j fk(that)c
(will)i(return)262 1334 y(p)q(oin)o(ters)11 b(to)e(the)i(sup)q(erclass)h(and)
d(sub)q(class)j(ob)r(jects.)18 b(They)10 b(also)g(can)g(\014nd)g(all)g(the)g
(ob)r(jects)262 1384 y(that)i(are)i(of)e(that)h(class)h(using)g(the)f fe(getK\
indred\(\))j fk(message.)j(Ev)o(ery)13 b(Choices)i(ob)r(ject)e(has)262 1434 y
(a)19 b(metho)q(d)i(that)f(allo)o(ws)h(one)f(to)g(enquire)i(the)e(ob)r(ject)h
(ab)q(out)f(its)i(class.)38 b(When)20 b(the)262 1484 y fe(classOf\(\))d fk
(message)h(is)g(sen)o(t)g(to)f(an)o(y)f(Choices)j(ob)r(ject,)f(the)g fe(Class)
f fk(ob)r(ject)h(represen)o(ting)262 1533 y(the)12 b(class)i(of)d(the)i(ob)r
(ject)g(will)g(b)q(e)g(returned.)19 b(This)13 b(w)o(a)o(y)m(,)e(it)h(is)h(p)q
(ossible)i(to)d(implemen)o(t)h(an)262 1583 y(application)f(that)f(will)h(try)
f(to)g(obtain)g(an)g(ob)r(ject)g(of)f(a)h(particular)i(class)f(and,)f(if)g
(it)g(fails)h(to)262 1633 y(do)h(so,)g(to)h(use)g(an)g(ob)r(ject)g(of)f(a)g
(sup)q(erclass.)21 b(\(The)14 b(resulting)i(application)f(ma)o(y)e(run)h(less)
262 1683 y(e\016cien)o(tly)e(than)f(with)h(the)f(actual)h(sub)q(class,)h(but)
e(it)g(will)i(ha)o(v)o(e)d(the)i(same)f(functionalit)o(y)m(.\))262 1733 y(Bec\
ause)j(of)e(the)i(supp)q(ort)g(for)e(classes)j(and)e(ob)r(jects)h(in)f(Choice\
s,)h(the)g(class)g(hierarc)o(h)o(y)g(of)262 1782 y(Choices)e(do)q(es)f(not)f
(ha)o(v)o(e)h(to)f(b)q(e)h(compiled)h(in)o(to)f(the)g(application)h(co)q(de)g
(\(that)e(is,)i(the)f(class)262 1832 y(hierarc)o(h)o(y)16 b(of)f(Choices)i
(do)q(es)f(not)f(ha)o(v)o(e)g(to)h(b)q(e)g(statically)h(b)q(ound)e(in)o(to)h
(the)g(application)262 1882 y(co)q(de\).)262 2019 y fb(4)69 b(Input/Output)23
b(from)f(the)g(terminal)262 2110 y fk(In)c(Section)i(2,)f(w)o(e)g(in)o(tro)q
(duced)i(the)e(input)g(and)g(output)g(ob)r(jects)g(p)q(oin)o(ted)h(to)f(b)o
(y)f(the)262 2160 y(v)n(ariables)h fe(Standa)o(rdOutput)i fk(and)e fe(Standa)
o(rdInput)p fk(.)34 b(These)20 b(ob)r(jects)g(are)f(of)f(class)i fe(Out-)262
2210 y(putStream)g fk(and)g fe(InputStream)g fk(resp)q(ectiv)o(el)q(y)m(.)37 b
(The)20 b(messages)g fe(fo)o(rmattedW)o(rite\(\))i fk(and)262 2259 y fe(fo)o
(rmattedRead\(\))16 b fk(are)f(used)i(lik)o(e)f(the)g(p)q(opular)g(C)f fe(p)o
(rintf\(\))i fk(and)e fe(scanf\(\))g fk(functions.)23 b(An)262 2309 y(example)
14 b(of)f(their)j(use)e(is)h(the)g(follo)o(wing:)262 2399 y ff(#include)20 b
("OutputStream.h")262 2449 y(#include)g("InputStream.h")967 2574 y fk(6)g eop
bop 262 357 a ff(int)21 b(main)g(\(int,)f(char)h(**\))262 407 y({)349 457 y
(//)43 b(This)21 b(program)f(asks)h(for)g(your)g(age,)g(inputs)g(it)g(and)g
(prints)g(how)g(many)g(months)349 506 y(//)43 b(old)21 b(you)g(are.)43 b(Call\
ing)20 b(formattedWrite\(\))f(on)i(the)g(StandardOutput)e(does)i(not)349 556 y
(//)43 b(necessarily)19 b(mean)i(that)g(the)g(text)g(will)g(appear)g(on)g(the)
h(screen)e(immediately.)349 606 y(//)43 b(So)21 b(we)h(call)f(flush\(\))f(on)
h(StandardOutput)e(to)j(force)e(the)i(text)e(to)i(appear)e(on)349 656 y(//)43
b(the)21 b(screen)g(right)f(away.)43 b(StandardOutput)19 b(and)i(StandardInpu\
t)e(are)i(special)349 706 y(//)43 b(variables)20 b(that)h(are)g(always)f(avai\
lable)g(to)i(applications)d(and)i(are)g(always)349 756 y(//)43 b(set)21 b(to)
g(the)h(screen)e(output)h(and)g(keyboard)f(input)h(respectively.)349 805 y
(int)g(age;)349 855 y(StandardOutput)e(->)i(formattedWrite)e(\("What's)h(your)
h(age?\\n"\);)349 905 y(StandardOutput)e(->)i(flush)g(\(\);)349 955 y(Standar\
dInput)e(->)i(formattedRead)e(\("%d",)i(&age\);)349 1005 y(StandardOutput)e
(->)i(formattedWrite)e(\("you)i(are)g(%d)g(months)g(old\\n",)f(12*age\);)349
1054 y(StandardOutput)f(->)i(flush)g(\(\);)349 1104 y(return)f(0;)262 1154 y
(})324 1237 y fk(The)f fj(<<)g fk(op)q(erator)h(pro)o(vides)g(a)e(more)h(con)
o(v)o(enien)o(t)h(w)o(a)o(y)e(to)h(write)h(output)f(to)g(an)262 1287 y fe(Out\
putStream)p fk(.)g(The)14 b(example)h(ab)q(o)o(v)o(e)f(is)g(equiv)n(alen)o
(t)h(to)f(the)h(follo)o(wing)f(one:)262 1370 y ff(#include)20 b("OutputStream\
.h")262 1420 y(#include)g("InputStream.h")262 1519 y(int)h(main)g(\(int,)f
(char)h(**\))262 1569 y({)349 1619 y(//)43 b(This)21 b(program)f(asks)h(for)g
(your)g(age,)g(inputs)g(it)g(and)g(prints)g(how)g(many)g(months)349 1669 y
(//)43 b(old)21 b(you)g(are.)43 b(We)21 b(print)g(text)g(by)g(using)g(the)g
("<<")g(operator)f(with)h(the)349 1719 y(//)43 b(StandardOutput.)d(Calling)21
b("<<)g(eor")g(has)g(the)g(same)g(effect)g(as)g(calling)349 1768 y(//)43 b
(flush\(\))20 b(on)i(the)f(StandardOutput.)40 b(We)22 b(call)f("<<)g(eor")g
(on)g(the)g(StandardOutput)349 1818 y(//)43 b(so)21 b(that)g(whatever)f(text)
h(we)h(have)f(just)g(printed)f(will)h(appear)f(on)i(the)f(screen)349 1868 y
(//)43 b(right)21 b(away.)42 b(StandardOutput)19 b(and)i(StandardInput)e(are)
j(special)e(variables)349 1918 y(//)43 b(that)21 b(are)g(always)g(available)e
(to)j(applications)d(and)i(are)h(always)e(set)h(to)h(the)349 1968 y(//)43 b
(screen)20 b(output)h(and)g(keyboard)f(input)h(respectively.)349 2017 y(int)g
(age;)349 2067 y(*StandardOutput)d(<<)k("What's)e(your)h(age?\\n")f(<<)i(eor;)
349 2117 y(StandardInput)d(->)i(formattedRead)e(\("%d",)i(&age\);)349 2167 y
(*StandardOutput)d(<<)k("you)f(are)g(")g(<<)h(12*age)e(<<)i(")f(months)g(old\
\\n")f(<<)i(eor;)349 2217 y(return)e(0;)262 2267 y(})324 2350 y fk(Note)14 b
(that)f(`)p fj(<<)h fk(eor')f(has)h(the)g(same)f(e\013ect)i(as)f(calling)h fe
(\015ush\(\))p fk(.)k fe(OutputStream)c fk(and)262 2399 y fe(InputStream)j fk
(also)f(supp)q(ort)g(simpler)i(messages)e fe(read\(\))h fk(and)f fe(write\(\))
i fk(when)e(formatted)262 2449 y(input/output)g(is)h(not)f(required.)29 b(In)
17 b(this)h(case,)g(the)g(parameters)g(are)f(a)g(p)q(oin)o(ter)h(to)f(a)967
2574 y(7)g eop bop 262 307 a fk(bu\013er)19 b(and)f(the)g(n)o(um)o(b)q(er)h
(of)e(b)o(ytes)i(to)f(read)h(or)f(write.)32 b(The)18 b(example)h(b)q(elo)o
(w)g(writes)262 357 y(ev)o(ery)14 b(c)o(haracter)h(t)o(yp)q(ed)g(and)f(stops)
g(when)h(#)e(is)i(t)o(yp)q(ed.)262 448 y ff(//)43 b(sample1.cc:)19 b(Echo)i
(keyboard)f(input.)43 b(Stops)20 b(when)h('#')h(is)f(typed.)262 498 y(#includ\
e)f("OutputStream.h")262 548 y(#include)g("InputStream.h")262 648 y(int)h(mai\
n)g(\(int,)f(char)h(**\))262 697 y({)305 747 y(//)43 b(This)21 b(program)g
(repeatedly)e(reads)i(keypresses)f(and)h(prints)g(them)f(until)h(you)305 797 y
(//)43 b(press)21 b('#'.)43 b(To)21 b(read)g(a)h(single)e(keypress,)g(we)i
(call)f(the)g(read\(\))f(method)h(on)305 847 y(//)43 b(the)21 b(StandardInput\
,)e(the)j(arguments)d(being)i(an)h(array)e(to)i(hold)f(the)g(character)305 897
y(//)43 b(typed)21 b(\(array)g(c\),)g(and)g(the)g(number)g(1,)g(to)g(indicate)
g(that)g(we)g(want)g(to)g(read)g(only)305 946 y(//)43 b(one)21 b(character)f
(from)h(the)h(keyboard.)41 b(read\(\))21 b(will)g(return)f(the)h(number)g(of)
305 996 y(//)43 b(characters)20 b(read.)43 b(StandardInput)19 b(\(of)i(type)g
(InputStream\))e(and)i(StandardOutput)305 1046 y(//)43 b(\(of)21 b(type)g(Out\
putStream\))f(are)h(special)f(global)h(variables)f(used)g(for)i(reading)305
1096 y(//)43 b(characters)20 b(from)h(the)g(keyboard)f(and)h(for)h(writing)e
(characters)g(to)h(the)g(screen.)305 1146 y(*StandardOutput)e(<<)i("Type)g
(a)h(sequence)e(of)h(keys)g(ending)g(with)g(#\\n")f(<<)i(eor;)305 1196 y(char)
f(c)h([1];)305 1245 y(int)f(charsRead)f(=)i(StandardInput)d(->)i(read)g(\(c,)
g(1\);)305 1295 y(while)g(\(\(c)g([0])g(!=)h('#'\))f(&&)g(\(charsRead)f(>)h
(0\)\))305 1345 y({)349 1395 y(StandardOutput)e(->)i(write)g(\(c,)g(1\);)349
1445 y(*StandardOutput)d(<<)k(eor;)349 1494 y(charsRead)e(=)h(StandardInput)e
(->)j(read)f(\(c,)g(1\);)305 1544 y(})305 1594 y(return)g(0;)262 1644 y(})324
1785 y fk(This)e(section)g(discusses)i(the)e(MS-DOS)f(stream-orien)o(ted)i
(\014le)f(system)f(supp)q(orted)262 1835 y(b)o(y)13 b(Choices,)i(although)f
(Choices)i(also)e(supp)q(orts)h(sev)o(eral)g(di\013eren)o(t)h(\014le)f(system\
s.)324 1885 y(The)k(\014le)i(system)e(is)h(accessed)i(through)d(an)g(ob)r(jec\
t)h(of)e(class)j fe(FileSystemInterface)262 1934 y fk(accessible)d(through)d
(the)h(global)f(v)n(ariable)h fe(Standa)o(rdFileSyste)q(mInterface)q fk(.)24 b
(This)16 b(ob)r(ject)262 1984 y(enables)i(the)f(programmer)g(to)f(create)j
(new)e(\014les,)h(op)q(en)f(existing)i(\014les)f(with)g(a)e(certain)262 2034 y
(mo)q(de)i(of)h(access,)i(c)o(hange)e(the)h(curren)o(t)g(directory)h(and)e
(p)q(erform)g(other)g(familiar)h(\014le)262 2084 y(system)14 b(op)q(erations.)
324 2134 y(A)f(\014le)h(is)g(op)q(ened)g(b)o(y)f(sending)h(an)f fe(op)q(en\(\
\))h fk(message)g(to)f(the)g fe(FileSystemInterfac)q(e)j fk(ob-)262 2183 y
(ject.)i(The)13 b(metho)q(d)g(returns)h(a)e fe(FileStream)j fk(ob)r(ject)f
(that)f(ma)o(y)e(b)q(e)i(sen)o(t)h fe(read\(\))g fk(or)e fe(write\(\))262 2233
y fk(messages.)18 b(In)11 b(the)h(follo)o(wing)f(examples,)h(w)o(e)g(use)g
(the)f(strong)h(t)o(yp)q(e)f(c)o(hec)o(king)i(of)d(C++)i(to)262 2283 y(ensure)
k(that)f(\014les)h(are)g(used)g(with)f(the)h(correct)h(access)f(mo)q(de.)22 b
(The)15 b(t)o(w)o(o)g(ma)r(jor)f(access)262 2333 y(mo)q(des)19 b(are)h(repres\
en)o(ted)i(b)o(y)e(classes)h fe(W)o(riteFile)q(Stre)q(am)h fk(and)d fe(ReadFi\
leStream)p fk(,)24 b(whic)o(h)262 2383 y(are)13 b(sub)q(classes)i(of)d fe(Fil\
eStream)p fk(.)20 b(They)13 b(supp)q(ort)h(write-only)g(and)f(read-only)g(acc\
ess)h(to)f(a)262 2433 y fe(FileStream)p fk(,)i(resp)q(ectiv)o(el)q(y)m(.)967
2574 y(8)g eop bop 324 307 a fk(The)16 b(basic)h(messages)g(supp)q(orted)g
(b)o(y)f(the)g fe(FileStreams)i fk(are)e fe(read\(\))h fk(or)f fe(write\(\))i
fk(\(de-)262 357 y(p)q(ending)g(on)e(the)i(access)h(mo)q(de\),)e fe(setO\013s\
et\(\))h fk(and)f fe(o\013set\(\))p fk(.)28 b(The)17 b fe(read\(\))i fk(and)d
fe(write\(\))262 407 y fk(messages)g(are)f(used)h(in)g(the)g(same)f(manner)h
(as)f(for)g fe(InputStreams)h fk(and)f fe(OutputStreams)262 457 y fk(\(Sectio\
n)g(4\).)k(A)14 b fe(FileStream)i fk(con)o(tains)f(a)f(p)q(oin)o(ter)h(to)f
(the)h(curren)o(t)h(read/write)f(p)q(osition)262 506 y(in)g(the)g(\014le.)21 b
(The)15 b(p)q(oin)o(ter)h(ma)o(y)d(b)q(e)j(mo)o(v)o(ed)e(b)o(y)g(using)h(the)
g fe(setO\013set\(\))h fk(message,)f(whic)o(h)262 556 y(b)q(eha)o(v)o(es)g
(lik)o(e)h(the)f(Unix)g(v)o(ersion)h(of)e fe(fseek\(\))i fk(as)e(sho)o(wn)h
(in)g(T)m(able)g(1.)20 b(The)15 b(programmer)262 606 y(ma)o(y)10 b(inquire)j
(a)e fe(FileStream)j fk(ab)q(out)d(the)h(lo)q(cation)g(of)f(its)h(p)q(oin)o
(ter)h(b)o(y)e(sending)h(the)g fe(o\013set\(\))262 656 y fk(message.)262 743 y
ff(int)21 b(setOffset\(int)e(delta,)h(int)i(mode\);)408 835 y 1140 2 v 407 885
a 2 50 v 433 870 a fg(Mo)q(de)576 885 y 2 50 v 602 870 a(In)o(terpretat)o(ion)
921 885 y 2 50 v 1014 870 a(New)16 b(p)q(oin)o(ter)f(p)q(osition)1547 885 y 2
50 v 408 886 a 1140 2 v 407 936 a 2 50 v 482 921 a fk(0)576 936 y 2 50 v 601
921 a(Beginning)h(of)d(\014le)921 936 y 2 50 v 1192 921 a fh(delta)1547 936 y
2 50 v 407 986 a 2 50 v 482 971 a fk(1)576 986 y 2 50 v 623 971 a(Curren)o
(t)i(o\013set)921 986 y 2 50 v 947 971 a fh(curr)n(ent)f(p)n(ointer)h(p)n(osi\
tion)g(+)g(delta)1547 986 y 2 50 v 407 1036 a 2 50 v 482 1021 a fk(2)576 1036
y 2 50 v 655 1021 a(End)f(of)g(\014le)921 1036 y 2 50 v 1094 1021 a fh(\014le)
h(size)g(+)f(delta)1547 1036 y 2 50 v 408 1038 a 1140 2 v 560 1114 a fk(T)m
(able)g(1:)k(Argumen)o(ts)c(for)g fe(FileStream::setO\013set\(\))324 1217 y fk
(In)g(the)g(next)g(example,)g(a)g(\014le)g(is)h(op)q(ened)g(in)f(write-only)h
(mo)q(de)f(if)g(it)g(already)g(exists.)262 1267 y(Characters)i(are)g(read)g
(from)f(the)h(terminal)h(and)e(app)q(ended)i(at)e(the)h(end)g(of)f(the)h(\014\
le.)24 b(If)262 1316 y(the)14 b(\014le)h(did)f(not)g(already)g(exist)h(when)g
(it)f(is)h(op)q(ened,)f(it)g(is)h(created.)k(This)c(b)q(eha)o(viour)g(is)262
1366 y(similar)g(to)f(a)f(Unix)i(\014le)g(op)q(ened)f(in)h(app)q(end)f(mo)q
(de.)262 1453 y ff(//)43 b(sample2.cc:)19 b(Write)i(keyboard)f(input)h(into)g
(the)g(file)g("out.1".)42 b(If)21 b("out.1")262 1503 y(//)43 b(already)20 b
(exists,)g(the)i(keyboard)e(input)g(is)i(appended)e(to)h(the)h(file.)42 b(Sto\
ps)21 b(when)262 1553 y(//)43 b('#')21 b(is)g(typed.)262 1602 y(#include)f
("OutputStream.h")262 1652 y(#include)g("InputStream.h")262 1702 y(#include)g
("FileSystemInter)o(face.)o(h")262 1752 y(#include)g("WriteFileStream)o(.h")
262 1802 y(#include)g("WriteFileStream)o(Star.)o(h")262 1901 y(int)h(main)g
(\(int,)f(char)h(**\))262 1951 y({)305 2001 y(//)43 b(This)21 b(program)g(ope\
ns)f(the)i(file)e("out.1",)h(repeatedly)e(reads)i(keypresses)f(and)305 2051 y
(//)43 b(appends)21 b(them)g(to)g(the)g(file)g(until)g('#')g(is)g(typed.)43 b
(The)21 b(file)g("out.1")f(is)305 2100 y(//)43 b(created)21 b(if)g(it)g(doesn\
't)g(exist.)42 b(To)21 b(find)g(out)h(whether)e(it)h(exists,)g(we)g(call)305
2150 y(//)43 b(open\(\))21 b(on)g(the)g(StandardFileSystemI)o(nterf)o(ace,)d
(telling)j(it)g(to)g(open)g(the)305 2200 y(//)43 b(file)21 b("out.1")g(for)g
(writing.)42 b(If)21 b(the)g(StandardFileSystemI)o(nter)o(face)d(returns)j
(an)305 2250 y(//)43 b(error)21 b(code,)g(we)g(assume)g(that)g(the)g(file)g
(doesn't)f(exist,)h(and)g(we)g(can)g(go)h(ahead)305 2300 y(//)43 b(to)22 b
(create)e(it.)43 b(To)22 b(create)e(the)h(file,)g(we)g(call)g(create\(\))g
(on)g(the)g(Standard)305 2350 y(//)43 b(FileSystemInterface)o(,)19 b(and)i
(abort)g(with)g(an)g(error)g(message)f(if)i(create\(\))e(fails.)305 2399 y
(//)305 2449 y(//)43 b(If)22 b(the)f(file)g(was)g(opened)g(or)g(created)f(suc\
cessfully,)f(open\(\))i(or)g(create\(\))967 2574 y fk(9)g eop bop 305 307 a ff
(//)43 b(returns)21 b(a)g(WriteFileStream)e(object)h(\(call)h(it)h(outf\).)42
b(If)21 b(open\(\))g(succeeded,)305 357 y(//)43 b(the)21 b(file)g(must)g(alre\
ady)g(exist,)f(and)h(we)h(should)e(append)h(data)g(to)g(it.)43 b(To)305 407 y
(//)g(prepare)21 b(the)g(file)g(for)g(appending)f(data,)h(we)g(set)g(the)g
(file)g(pointer)g(to)g(the)305 457 y(//)43 b(end)21 b(of)h(the)f(file;)g(this)
g(is)g(done)g(by)g(calling)g(setOffset\(\))e(on)j(outf.)42 b(After)305 506 y
(//)h(that,)21 b(we)g(can)h(read)f(keypresses)e(and)i(write)g(them)g(into)g
(the)g(file)g(by)h(calling)305 556 y(//)43 b(write\(\))21 b(on)g(outf.)305 606
y(//)305 656 y(//)43 b(We)22 b(do)f(not)g(have)g(to)h(close)e(outf)h(explicit\
ly)f(because)g(we)i(are)f(using)g(smart)305 706 y(//)43 b(pointers)20 b(here)
h(-)h(outf)f(is)g(a)h(WriteFileStreamSt)o(ar)d(that)i(contains)f(a)h(pointer)
305 756 y(//)43 b(to)22 b(a)f(WriteFileStream)e(object,)h(and)h(when)g(outf)g
(goes)g(out)h(of)f(scope,)f(it)i(will)305 805 y(//)43 b(be)22 b(destroyed,)d
(along)i(with)g(the)g(WriteFileStream)e(object)i(that)f(it)i(references.)305
855 y(//)43 b(When)21 b(the)g(WriteFileStream)e(object)i(is)g(destroyed,)f
(the)h(file)g(will)g(be)g(closed.)305 905 y(//)43 b(The)21 b(StandardFileSyst\
emIn)o(terf)o(ace)e(is)i(a)h(special)e(global)h(variable)f(of)h(type)305 955 y
(//)43 b(FileSystemInterface)18 b(used)j(for)g(accessing)f(file)h(services.)
305 1054 y(int)g(error;)305 1104 y(//)43 b(Open)21 b(the)g(file)g("out.1")g
(for)g(writing.)305 1154 y(WriteFileStreamSta)o(r)e(outf)i(=)h(StandardFileSy\
s)o(temIn)o(terfa)o(ce)d(->)349 1204 y(open)i(\("out.1",)f(WriteFileStream)o
(Class)o(,)f(error\);)305 1254 y(if)i(\(error\))305 1303 y({)349 1353 y(//)43
b(If)21 b(file)g(can't)g(be)g(opened,)g(assume)f(it)i(doesn't)e(exist.)42 b
(Now)21 b(create)g(it.)349 1403 y(outf)g(=)g(StandardFileSystemI)o(nter)o(fac\
e)d(->)k(create)e(\("out.1",)392 1453 y(WriteFileStreamClas)o(s,)f(0666,)h
(error\);)43 b(//)g(0666:)21 b(permissions)e(on)i(the)h(file.)349 1503 y(if)f
(\(error\))349 1553 y({)392 1602 y(//)43 b(Can't)21 b(create)g(the)g(file.)
392 1652 y(*StandardOutput)e(<<)i("***)g(error)g(")h(<<)f(error)g(<<)g(")h
(while)f(openning)f(outfile\\n")436 1702 y(<<)h(eor;)392 1752 y(return)g(0;)
349 1802 y(})305 1851 y(})305 1901 y(else)305 1951 y({)349 2001 y(//)43 b(See\
k)21 b(to)g(the)g(end)h(of)f(the)g(file:)g(2)g(means)g(use)g(end-of-file)f
(as)h(the)g(origin,)349 2051 y(//)43 b(0)21 b(is)h(the)f(offset)g(from)g(the)
g(origin.)349 2100 y(if)g(\(outf)g(->)g(setOffset)f(\(0,)h(2\))h(==)f(-1\))
349 2150 y({)436 2200 y(//)43 b(Can't)21 b(seek.)436 2250 y(*StandardOutput)e
(<<)i("***)g(error)g(while)f(setting)h(offset\\n")f(<<)h(eor;)436 2300 y(retu\
rn)f(0;)349 2350 y(})305 2399 y(})305 2449 y(*StandardOutput)f(<<)i("Type)g
(a)h(sequence)e(of)h(keys)g(ending)g(with)g(#\\n")f(<<)i(eor;)957 2574 y fk
(10)g eop bop 305 307 a ff(char)21 b(c)h([1];)305 357 y(int)f(charsRead)f(=)i
(StandardInput)d(->)i(read)g(\(c,)g(1\);)305 407 y(while)g(\(\(c)g([0])g(!=)h
('#'\))f(&&)g(\(charsRead)f(>)h(0\)\))305 457 y({)349 506 y(outf)g(->)g(write)
g(\(c,)g(1\);)349 556 y(charsRead)f(=)h(StandardInput)e(->)j(read\(c,1\);)305
606 y(})305 656 y(//)43 b(outf)21 b(goes)g(out)g(of)h(scope)f(here)f(and)i
(the)f(file)g(is)g(automatically)e(closed.)305 706 y(return)i(0;)262 756 y
(})324 894 y fk(In)11 b(this)h(example,)f(it)h(is)g(p)q(ossible)h(to)d(close)
j(the)e(\014le)h(b)o(y)f(assigning)h(another)f fe(FileStream)262 944 y fk(ob)
r(ject)18 b(to)f(the)h(smart)g(p)q(oin)o(ter)h fe(outf)s fk(,)e(or)h(b)o(y)f
(lea)o(ving)i(the)f(blo)q(c)o(k)g(in)g(whic)o(h)g(the)h(smart)262 994 y(p)q
(oin)o(ter)13 b(is)f(declared.)20 b(The)12 b(smart)g(p)q(oin)o(ter)h(will)g
(close)h(the)e(\014le)h(automatically)g(when)f(the)262 1044 y(references)k
(to)e(the)g(\014le)h(are)g(deleted.)324 1093 y(A)d(sligh)o(tly)i(more)e(compl\
icated)i(example)f(is)g(sho)o(wn)g(in)f(Section)i(A.)k(In)12 b(this)h(case,)g
(w)o(e)262 1143 y(ha)o(v)o(e)i(implemen)o(ted)i(a)f(class)h fe(Line)h fk(that)
e(is)g(basically)i(a)d(string)i(of)e(c)o(haracters)j(that)d(has)262 1193 y
(metho)q(ds)f(to)g(write)h(and)f(read)g(itself)i(from)d(\014les)i(or)f(a)g
(terminal.)19 b(The)c(message)f fe(equals\(\))262 1243 y fk(compares)k(t)o
(w)o(o)f(strings.)30 b(This)19 b(class)g(is)f(used)h(to)e(implemen)o(t)i(a)e
(simple)i(t)o(yping)f(tutor)262 1293 y(program.)f(A)c(`teac)o(her')h(line)h
(is)f(read)g(from)f(a)g(\014le)h(and)g(presen)o(ted)h(on)e(the)h(screen.)20 b
(Then)262 1342 y(a)14 b(`studen)o(t')h(line)h(is)g(read)f(from)f(the)h(termin\
al)h(and)f(if)g(they)g(are)g(equal)h(a)e(new)h(`teac)o(her')262 1392 y(line)h
(is)f(read)h(from)e(the)h(\014le.)22 b(Otherwise)17 b(the)e(same)g(`teac)o
(her')g(line)i(is)e(presen)o(ted)i(again.)262 1442 y(This)c(pro)q(cess)h(is)f
(rep)q(eated)h(un)o(til)f(w)o(e)g(reac)o(h)g(the)g(end)g(of)e(the)i(\014le)h
(or)e(the)h(studen)o(t)g(decides)262 1492 y(that)g(he)i(had)f(enough)g(and)f
(k)o(eys)i(#.)262 1629 y fb(5)69 b(Using)23 b(Timers)262 1720 y fk(Timers)18 b
(are)h(ob)r(jects)g(in)f(Choices.)31 b(Timers)19 b(are)g(useful)g(for)e(measu\
ring)i(p)q(erformance)262 1769 y(and)12 b(reco)o(v)o(ering)i(from)d(errors.)
19 b(In)13 b(this)g(section)h(w)o(e)f(will)h(discuss)g(t)o(w)o(o)e(particular)
i(classes)262 1819 y(of)f(timers:)19 b(free)c(running)f(timers)i(and)d(timeou\
t)i(timers.)262 1935 y fc(5.1)55 b(F)-5 b(ree)18 b(Running)i(Timers)262 2012 y
fk(The)h(nameserv)o(er)h(pro)o(vides)g(access)h(to)d(the)i(Choices)g(ob)r(jec\
t)g fe(SystemTimer)h fk(of)d(class)262 2061 y fe(F)o(reeRunningTi)q(mer)p fk
(.)37 b(This)20 b(ob)r(ject)g(resp)q(onds)h(to)e(the)h(message)f fe(time\(\))
i fk(b)o(y)e(returning)262 2111 y(the)d(time)g(in)g(microseconds)h(since)h
(Choices)f(w)o(as)e(started.)24 b(The)16 b(system)g(timer)g(can)g(b)q(e)262
2161 y(used)e(to)f(measure)h(the)f(time)h(sp)q(en)o(t)g(on)f(a)g(particular)i
(part)e(of)g(an)g(application)i(program,)262 2211 y(as)e(in)i(the)f(follo)o
(wing)h(example:)262 2300 y ff(#include)20 b("FreeRunningTime)o(r.h")262 2350
y(#include)g("FreeRunningTime)o(rStar)o(.h")262 2399 y(...)262 2449 y(unsigne\
d)g(int)h(start,)f(timespent;)957 2574 y fk(11)g eop bop 262 307 a ff(FreeRun\
ningTime)o(rStar)18 b(SystemTimer)i(=)h(\(FreeRunningTimerSt)o(ar\))305 357 y
(StandardNameServer)d(->)k(lookup)e(\("SystemTimer",)f("FreeRunningTime)o(r"\
\);)262 407 y(...)262 457 y(start)h(=)i(SystemTimer)d(->)j(time\(\);)262 556 y
(...)f(Some)g(computation)e(...)262 656 y(timespent)g(=)j(SystemTimer)e(->)h
(time\(\))f(-)i(start;)262 706 y(*StandardOutput)c(<<)k("Time)e(spent:)h(")g
(<<)h(timespent)e(<<)h(")h(microseconds\\n")c(<<)k(eor;)262 756 y(...)324 845
y fk(The)15 b(problem)h(with)f(the)h(system)f(timer)h(is)g(that)f(it)g(rolls)
i(o)o(v)o(er)e(ev)o(ery)g(4294)f(seconds)262 895 y(\(or)f(ab)q(out)g(an)f(hou\
r\).)18 b(The)c(limitation)g(is)g(caused)g(b)o(y)f(using)h(a)f(32-bit)g(unsig\
ned)h(in)o(teger)262 945 y(to)f(store)i(the)g(time.)262 1060 y fc(5.2)55 b
(Timeout)19 b(Timers)262 1137 y fk(Our)d(application)i(program)e(can)g(create)
i(\(without)e(using)h(the)g(nameserv)o(er\))h(timers)f(of)262 1187 y(class)e
fe(TimeoutTimer)p fk(.)21 b(The)15 b(main)e(metho)q(ds)i(in)f(this)h(class)h
(are:)324 1276 y fi(\017)k fe(unsigned)13 b(int)f(sta)o(rt\(unsigned)h(int)e
(microseconds\))p fk(:)19 b(Starts)11 b(the)g(timeout)g(timer)g(with)365 1326
y(lapse)k fe(microseconds)p fk(.)21 b(Returns)15 b(the)f(actual)h(n)o(um)o
(b)q(er)f(of)f(microseconds)j(set.)324 1408 y fi(\017)k fe(unsigned)c(int)e
(stop\(\))p fk(:)k(Stops)13 b(the)g(timer.)19 b(Returns)14 b(the)f(n)o(um)o
(b)q(er)g(of)g(microseconds)365 1458 y(left.)324 1540 y fi(\017)20 b fe(unsig\
ned)d(int)e(residual\()q(\))p fk(:)21 b(Returns)14 b(the)h(remaining)g(n)o
(um)o(b)q(er)f(of)f(microseconds.)324 1623 y fi(\017)20 b fe(void)15 b(a)o
(w)o(ait\(\))p fk(:)20 b(The)14 b(curren)o(t)h(pro)q(cess)h(w)o(aits)e(un)o
(til)h(the)g(timer)g(expires.)324 1712 y(In)10 b(the)g(follo)o(wing)h(example)
f(a)g fe(TimeoutTimer)k fk(is)c(used)h(to)f(prin)o(t)h(`Hello')f(on)g(the)h
(screen)262 1762 y(ev)o(ery)j fe(lapse)i fk(seconds.)262 1851 y ff(//)43 b
(sample3.cc:)19 b(Read)i(a)h(number)e("lapse")h(from)g(StandardInput)e(and)i
(print)g("Hello")262 1901 y(//)43 b(10)21 b(times)g(after)g(waiting)f("lapse")
g(seconds)h(each)g(time.)262 1951 y(#include)f("OutputStream.h")262 2001 y
(#include)g("InputStream.h")262 2051 y(#include)g("TimeoutTimer.h")262 2100 y
(#include)g("TimeoutTimerSta)o(r.h")262 2200 y(int)h(main)g(\(int,)f(char)h
(**\))262 2250 y({)305 2300 y(//)43 b(In)22 b(order)e(to)i(wait)f("lapse")f
(seconds,)g(we)i(create)e(a)i(TimeoutTimer)d(object,)305 2350 y(//)43 b(call)
21 b(start\(\))g(to)g(tell)g(it)g(how)g(long)g(to)h(wait,)f(and)g(then)g(call)
g(await\(\))f(to)305 2399 y(//)43 b(actually)20 b(do)i(the)f(waiting;)f(await\
\(\))g(will)h(not)h(return)e(until)h(the)g(timer)g(has)305 2449 y(//)43 b(exp\
ired.)f(The)21 b(argument)g(to)g(start\(\))f(is)i(expressed)e(in)h(microsecon\
ds,)e(so)957 2574 y fk(12)g eop bop 305 307 a ff(//)43 b(we)22 b(have)f(to)g
(multiply)f("lapse")g(by)i(100000)e(and)i(pass)f(the)g(result)f(as)i(the)305
357 y(//)43 b(argument.)f(We)21 b(use)h(the)f(TimeoutTimerStar)d(smart)j(poin\
ter)f(here)h(so)h(that)305 407 y(//)43 b(we)22 b(don't)e(have)h(to)h(destroy)
e(the)h(timer)g(explicitly.)305 506 y(//)43 b(Make)21 b(a)h(new)f(timer.)305
556 y(TimeoutTimerStar)e(timer)h(=)i(new)f(TimeoutTimer;)305 606 y(int)g(laps\
e;)305 656 y(*StandardOutput)e(<<)i("Time)g(between)f(hellos)h(in)g(seconds:\
\\n")f(<<)h(eor;)305 706 y(StandardInput)e(->)j(formattedRead)d(\("%d",)h(&la\
pse\);)305 756 y(for)h(\(int)g(i)h(=)f(0;)h(i)f(<)h(10;)f(i++\))305 805 y({)
349 855 y(//)43 b(Start)21 b(the)g(timer.)349 905 y(timer)f(->)i(start)f(\(la\
pse*1000000\))o(;)349 955 y(//)43 b(Wait)21 b(for)g(the)g(timer)g(to)g(expire\
.)349 1005 y(timer)f(->)i(await)f(\(\);)349 1054 y(//)43 b(Timer)21 b(has)g
(expired.)42 b(Print)20 b(a)i(message.)349 1104 y(*StandardOutput)c(<<)k("Hel\
lo\\n")e(<<)h(eor;)305 1154 y(})305 1204 y(return)g(0;)262 1254 y(})262 1441 y
fb(6)69 b(Pro)r(cess)36 b(creation,)41 b(comm)m(unication)35 b(and)i(syn-)365
1515 y(c)n(hronization)262 1606 y fk(An)16 b(adv)n(an)o(tage)f(of)g(Choices)j
(o)o(v)o(er)e(man)o(y)f(other)i(op)q(erating)g(systems)g(is)g(that)f(it)h(is)
f(p)q(os-)262 1656 y(sible)f(to)f(express)i(concurrency)g(using)f(ligh)o(t)o
(w)o(eigh)o(t)g(pro)q(cesses.)21 b(Ligh)o(t)o(w)o(eigh)o(t)15 b(pro)q(cesses)
262 1706 y(can)j(b)q(e)i(created)g(with)f(a)g(small)g(o)o(v)o(erhead)g(b)q
(ecause)h(they)g(share)f(the)g(memory)g(space)262 1756 y(of)c(the)h(pro)q(ces\
s)i(that)e(created)i(them)e(and)f(can)i(access)g(the)g(same)f(global)g(v)n
(ariables.)26 b(A)262 1806 y(c)o(hange)12 b(made)g(to)g(a)g(global)g(v)n(aria\
ble)h(b)o(y)f(one)h(of)e(the)i(pro)q(cesses)i(is)e(visible)h(to)e(the)h(other\
s.)262 1855 y(Comm)o(unication)g(b)q(et)o(w)o(een)h(ligh)o(t)o(w)o(eigh)o(t)h
(pro)q(cesses)g(can)f(b)q(e)g(implemen)o(ted)g(in)g(this)g(w)o(a)o(y)m(.)324
1905 y(It)g(is)h(also)f(p)q(ossible)j(to)d(create)h(Unix-st)o(yle)h(hea)o(vyw)
o(eigh)o(t)e(pro)q(cesses)j(in)e(Choices)g(us-)262 1955 y(ing)h(the)g fe(Appl\
icati)q(onDi)q(spatch)q(er)j fk(metho)q(ds.)24 b(In)16 b(this)h(case,)f(eac)o
(h)h(hea)o(vyw)o(eigh)o(t)f(pro)q(cess)262 2005 y(has)h(its)h(o)o(wn)f(protec\
ted)i(memory)e(space)h(and)g(indep)q(enden)o(t)h(set)f(of)f(global)h(v)n(aria\
bles.)262 2055 y(Suc)o(h)d(pro)q(cesses)j(can)d(p)q(erform)h(in)o(terpro)q
(cess)i(comm)o(unication)e(through)f(shared)h(mem-)262 2104 y(ory)g(or)h(mess\
ages,)h(but)e(the)i(set)f(up)g(costs)h(are)f(higher)g(and)g(the)g(API)g(is)g
(a)g(little)i(more)262 2154 y(complicated.)324 2204 y(Whenev)o(er)j(shared)h
(memory)e(is)h(used)h(for)e(comm)o(unication,)i(a)f(sync)o(hronization)262
2254 y(mec)o(hanism)17 b(is)h(required)i(to)d(pro)o(vide)h(critical)h(section\
s)h(and)d(signalling.)30 b(In)17 b(order)h(to)262 2304 y(sync)o(hronize)e(pro)
q(cesses,)g(Choices)f(supp)q(orts)g(semaphores.)957 2574 y(13)g eop bop 262
307 a fc(6.1)55 b(Pro)r(cess)18 b(Creation)262 384 y fk(In)12 b(Choices,)h
(pro)q(cesses)i(are)d(ob)r(jects)h(of)f(class)h fe(Pro)q(cess)g fk(or)f(one)g
(of)f(its)i(sub)q(classes.)20 b(Appli-)262 434 y(cation)14 b(pro)q(cesses)j
(are)e(ob)r(jects)g(of)e(class)j fe(Applicati)q(onPro)q(cess)p fk(.)22 b(The)
14 b fe(Applicati)q(onPro)q(ce)q(ss)262 483 y fk(constructor)19 b(can)f(b)q
(e)h(used)f(to)g(build)h(a)f(pro)q(cess)h(and)f(it)h(requires)h(as)e(an)f(arg\
umen)o(t)h(a)262 533 y(p)q(oin)o(ter)c(to)g(a)f(main)g(`function')h(that)f
(will)i(b)q(e)g(executed)g(b)o(y)e(the)h(pro)q(cess.)20 b(A)14 b(`command)262
583 y(line')i(to)g(b)q(e)h(passed)g(to)e(the)i(pro)q(cess)g(ma)o(y)e(also)i
(b)q(e)f(sp)q(eci\014ed)i(if)e(one)h(is)f(desired.)26 b(Once)262 633 y(the)15
b(pro)q(cess)i(is)e(created,)h(it)g(can)f(b)q(e)g(dispatc)o(hed)i(on)d(the)i
(pro)q(cessor)g(b)o(y)f(placing)h(it)f(in)o(to)262 683 y(the)g(Choices)i(pro)
q(cess)f(sc)o(heduler.)24 b(Sending)16 b(the)g(message)f fe(ready\(\))i fk
(to)e(the)g(pro)q(cess)i(ob-)262 732 y(ject)d(will)g(put)g(the)g(pro)q(cess)h
(in)o(to)f(the)g(pro)q(cess)h(sc)o(heduler.)20 b(A)14 b(simple)g(example)g
(is)h(sho)o(wn)262 782 y(b)q(elo)o(w.)262 855 y ff(//)43 b(sample4.cc:)19 b
(Create)i(a)g(lightweight)f(process,)g(print)h(something)f(in)h(the)g(current)
262 905 y(//)43 b(process)20 b(and)h(in)h(the)f(new)g(process.)262 955 y(#inc\
lude)f("OutputStream.h")262 1005 y(#include)g("Process.h")262 1054 y(#include)
g("ProcessStar.h")262 1154 y(int)h(main2)f(\(int,)h(char)g(**\))262 1204 y
({)305 1254 y(//)43 b(This)21 b(function)f(is)i(the)f(entry)g(point)f(of)i
(the)f(lightweight)f(process)g(created)305 1303 y(//)43 b(in)22 b(main\(\).)
42 b(When)21 b(the)g(process)f(exits)h(from)g(this)g(function,)f(the)h(proces\
s)305 1353 y(//)43 b(will)21 b(be)h(terminated.)305 1453 y(//)43 b(The)21 b
(new)h(lightweight)d(process)h(will)h(start)g(here...)305 1503 y(*StandardOut\
put)e(<<)i("hello)g(sailor)f(2!\\n")h(<<)g(eor;)305 1553 y(//)43 b(...and)21 b
(die)g(here.)305 1602 y(return)g(0;)262 1652 y(})262 1752 y(int)g(main)g(\(in\
t,)f(char)h(**\))262 1802 y({)305 1851 y(//)43 b(We)22 b(create)e(a)i(lightwe\
ight)d(process)i(by)g(making)g(a)g(new)g(ApplicationProcess.)305 1901 y(//)43
b(The)21 b(ApplicationProcess)e(constructor)g(accepts)h(an)i(argument)e(that)
h(specifies)305 1951 y(//)43 b(which)21 b(function)f(to)i(be)f(executed)f(whe\
n)h(the)g(new)g(process)g(runs.)42 b(The)21 b(process)305 2001 y(//)43 b(will)
21 b(not)g(run)h(automatically)d(when)i(we)g(create)g(it;)g(we)g(have)g(to)g
(call)g(ready\(\))305 2051 y(//)43 b(on)22 b(the)f(process)f(to)i(make)f(it)g
(run)g(\(when)g(the)g(CPU)g(is)h(available\).)41 b(We)21 b(use)g(the)305 2100
y(//)43 b(ProcessStar)20 b(smart)h(pointer)f(here)h(so)g(that)g(we)h(don't)e
(have)h(to)h(destroy)e(the)305 2150 y(//)43 b(process)21 b(explicitly.)305
2250 y(//)43 b(Create)21 b(a)g(new)h(lightweight)d(process)h(that)h(will)g
(start)g(at)h(main2\(\).)305 2300 y(ProcessStar)e(proc)h(=)g(new)g(Applicatio\
nProcess)d(\(main2\);)305 2350 y(if)j(\(proc)g(==)h(0\))305 2399 y({)349 2449
y(//)43 b(Can't)21 b(create)f(process.)957 2574 y fk(14)g eop bop 349 307 a ff
(*StandardOutput)18 b(<<)k("***)f(error)f(while)h(creating)f(a)i(process\\n")
e(<<)h(eor;)349 357 y(return)f(0;)305 407 y(})305 457 y(//)43 b(The)21 b(new)
h(process)e(won't)h(run)g(until)g(we)g(say)g(ready\(\).)305 506 y(proc)g(->)g
(ready\(\);)305 556 y(//)43 b(At)22 b(this)f(point,)f(the)h(new)h(process)e
(will)h(run)g(when)g(it)g(gets)g(the)g(CPU.)305 606 y(*StandardOutput)e(<<)i
("hello)g(sailor)f(1!\\n")h(<<)g(eor;)305 656 y(return)g(0;)262 706 y(})324
847 y fk(This)e(example)g(ab)q(o)o(v)o(e)f(ma)o(y)f(exhibit)j(in)o(terference)
h(b)q(et)o(w)o(een)e(the)g(t)o(w)o(o)f(concurren)o(t)262 897 y(pro)q(cesses.)
29 b(The)17 b fe(Standa)o(rdOutput)i fk(ob)r(ject)f(is)g(shared)g(b)o(y)e(b)q
(oth)h(pro)q(cesses)j(b)q(ecause)e(of)262 946 y(the)d(shared)g(memory)m(.)k
(The)c(pro)q(cesses)j(can)d(b)q(e)g(sync)o(hronized)i(to)d(use)h fe(Standa)o
(rdOutput)262 996 y fk(in)f(a)g(co)q(ordinated)h(w)o(a)o(y)e(using)i(semaphor\
es.)262 1112 y fc(6.2)55 b(Pro)r(cess)18 b(Sync)n(hronization)262 1189 y fk
(Semaphores)10 b(ma)o(y)f(b)q(e)h(used)h(in)f(the)h(previous)g(example)f(to)g
(ensure)h(that)f(only)g(one)g(pro)q(cess)262 1239 y(is)16 b(using)g fe(Standa)
o(rdOutput)h fk(at)e(a)g(time.)23 b(Semaphores)16 b(in)g(Choices)h(are)f(ob)r
(jects)g(of)f(class)262 1289 y fe(Semapho)o(re)p fk(.)24 b(The)15 b(construct\
or)i(allo)o(ws)f(the)g(programmer)g(to)f(sp)q(ecify)i(an)e(initial)i(v)n(alue)
262 1339 y(for)e(the)i(semaphore)g(and)g(the)g(maxim)o(um)e(v)n(alue)h(\(defa\
ult)h(65535\).)25 b(The)16 b fe(P\(\))h fk(and)f fe(V\(\))262 1388 y fk(messa\
ges)e(of)g(a)f(semaphore)i(are)f(used)h(in)f(the)h(con)o(v)o(en)o(tional)g
(w)o(a)o(y)m(.)262 1480 y ff(//)43 b(sample5.cc:)19 b(Create)i(a)g(lightweigh\
t)f(process,)g(print)h(something)f(in)h(the)g(current)262 1529 y(//)43 b(proc\
ess)20 b(and)h(in)h(the)f(new)g(process)f(in)i(a)f(synchronized)f(manner.)262
1579 y(#include)g("OutputStream.h")262 1629 y(#include)g("Semaphore.h")262
1679 y(#include)g("Process.h")262 1729 y(#include)g("ProcessStar.h")262 1828 y
(//)43 b(This)21 b(semaphore)f(is)h(for)g(controlling)f(access)g(to)i(the)f
(StandardOutput.)40 b(Each)262 1878 y(//)j(process)20 b(must)h(P\(\))g(this)g
(semaphore)f(before)h(using)f(the)i(StandardOutput,)c(and)262 1928 y(//)43 b
(V\(\))21 b(it)g(StandardOutput.)41 b(Note)21 b(that)g(this)g(semaphore)f(liv\
es)g(in)i(global)e(variable)262 1978 y(//)43 b(space,)20 b(and)h(is)h(hence)f
(accessible)e(by)j(lightweight)d(processes,)h(since)h(they)262 2028 y(//)43 b
(share)20 b(the)i(same)f(global)f(variable)g(space.)43 b(The)21 b(semaphore)f
(is)h(allocated)f(in)262 2077 y(//)43 b(main\(\).)262 2127 y(Semaphore)19 b
(*sem;)262 2227 y(int)i(main2)f(\(int,)h(char)g(**\))262 2277 y({)305 2326 y
(//)43 b(This)21 b(function)f(is)i(the)f(entry)g(point)f(of)i(the)f(lightweig\
ht)f(process)g(created)305 2376 y(//)43 b(in)22 b(main\(\).)42 b(When)21 b
(the)g(process)f(exits)h(from)g(this)g(function,)f(the)h(process)305 2426 y
(//)43 b(will)21 b(be)h(terminated.)41 b(When)21 b(we)g(want)g(to)h(print)e
(something,)g(we)h(call)g(P\(\))957 2574 y fk(15)g eop bop 305 307 a ff(//)43
b(on)22 b(the)f(semaphore)f(to)h(enter)g(the)g(critical)f(section,)g(then)h
(use)g(the)305 357 y(//)43 b(StandardOutput,)19 b(and)i(call)g(V\(\))g(on)h
(the)f(semaphore)f(to)h(leave)g(the)g(critical)305 407 y(//)43 b(section.)305
506 y(//)g(Grab)21 b(the)g(semaphore)f(for)i(the)f(StandardOutput.)305 556 y
(sem)g(->)h(P)f(\(\);)305 606 y({)43 b(//)h(Start)20 b(of)i(critical)e(sectio\
n.)349 656 y(*StandardOutput)e(<<)k("hello)e(sailor)h(2!\\n")g(<<)g(eor;)305
706 y(})43 b(//)h(End)21 b(of)g(critical)f(section.)305 756 y(//)43 b(Release)
21 b(it.)305 805 y(sem)g(->)h(V)f(\(\);)305 855 y(return)g(0;)262 905 y(})262
1005 y(int)g(main)g(\(int,)f(char)h(**\))262 1054 y({)305 1104 y(//)43 b(We)
22 b(first)e(create)h(a)h(semaphore)d(to)j(control)e(access)h(to)g(the)g(Stan\
dardOutput.)305 1154 y(//)43 b(We)22 b(do)f(that)g(by)g(allocating)f(a)i(new)
f(Semaphore)f(object,)g(and)h(pass)g(the)g(value)305 1204 y(//)43 b(1)22 b
(to)f(the)g(Semaphore)f(constructor)g(as)h(the)g(initial)g(counter)f(value)h
(in)g(the)305 1254 y(//)43 b(Semaphore.)f(\(P\(\))21 b(will)g(decrement)f(the)
h(counter)f(and)h(block)g(the)g(current)305 1303 y(//)43 b(process)21 b(if)g
(the)g(decremented)f(value)g(is)i(less)f(than)g(0.\))305 1353 y(//)305 1403 y
(//)43 b(We)22 b(create)e(a)i(lightweight)d(process)i(by)g(making)g(a)g(new)g
(ApplicationProcess.)305 1453 y(//)43 b(The)21 b(ApplicationProcess)e(constru\
ctor)g(accepts)h(an)i(argument)e(that)h(specifies)305 1503 y(//)43 b(which)21
b(function)f(to)i(be)f(executed)f(when)h(the)g(new)g(process)g(runs.)42 b(The)
21 b(process)305 1553 y(//)43 b(will)21 b(not)g(run)h(automatically)d(when)i
(we)g(create)g(it;)g(we)g(have)g(to)g(call)g(ready\(\))305 1602 y(//)43 b(on)
22 b(the)f(process)f(to)i(make)f(it)g(run)g(\(when)g(the)g(CPU)g(is)h(availab\
le\).)41 b(We)21 b(use)g(the)305 1652 y(//)43 b(ProcessStar)20 b(smart)h(poin\
ter)f(here)h(so)g(that)g(we)h(don't)e(have)h(to)h(destroy)e(the)305 1702 y
(//)43 b(process)21 b(explicitly.)305 1752 y(//)305 1802 y(//)43 b(After)21 b
(that,)g(whenever)f(the)h(old)g(process)g(or)g(the)g(new)g(process)g(wishes)f
(to)305 1851 y(//)43 b(print)21 b(something,)f(it)h(calls)g(P\(\))g(on)g(the)
h(semaphore)e(to)h(enter)g(the)g(critical)305 1901 y(//)43 b(section)21 b(to)
g(use)g(the)g(StandardOutput,)e(and)i(calls)g(V\(\))g(to)h(exit)e(the)i(criti\
cal)305 1951 y(//)43 b(section.)305 2051 y(//)g(Create)21 b(the)g(semaphore.)
42 b(1)21 b(means)g(the)g(resource)f(is)i(initially)d(available.)305 2100 y
(sem)i(=)h(new)f(Semaphore)f(\(1\);)305 2150 y(ProcessStar)g(proc)h(=)g(new)g
(ApplicationProcess)d(\(main2\);)305 2200 y(if)j(\(proc)g(==)h(0\))305 2250 y
({)349 2300 y(*StandardOutput)c(<<)k("***)f(error)f(while)h(creating)f(a)i
(process\\n")e(<<)h(eor;)349 2350 y(return)f(0;)305 2399 y(};)305 2449 y(proc)
h(->)g(ready)g(\(\);)957 2574 y fk(16)g eop bop 305 307 a ff(//)43 b(Grab)21 b
(the)g(semaphore)f(for)i(the)f(StandardOutput.)305 357 y(sem)g(->)h(P)f(\(\);)
305 407 y({)43 b(//)h(Start)20 b(of)i(critical)e(section.)349 457 y(*Standard\
Output)e(<<)k("hello)e(sailor)h(1!\\n")g(<<)g(eor;)305 506 y(})43 b(//)h(End)
21 b(of)g(critical)f(section.)305 556 y(//)43 b(Release)21 b(it.)305 606 y
(sem)g(->)h(V)f(\(\);)305 656 y(return)g(0;)262 706 y(})324 847 y fk(Note)e
(that)f(in)h(the)g(previous)h(example)f(the)g(semaphore)h(is)f(declared)h(as)
f(a)f(global)262 897 y(v)n(ariable)g(b)o(y)g(the)g(main)g(program)g(so)g(that)
f(it)i(ma)o(y)e(b)q(e)h(shared)h(with)g(the)f(ligh)o(t)o(w)o(eigh)o(t)262 946
y(pro)q(cess.)262 1063 y fc(6.3)55 b(Pro)r(cess)18 b(Comm)n(unication)262 1139
y fk(Ligh)o(t)o(w)o(eigh)o(t)j(pro)q(cesses)j(can)d(comm)o(unicate)h(through)
f(shared)h(v)n(ariables)h(lo)q(cated)f(in)262 1189 y(shared)d(memory)m(.)29 b
(The)19 b(example)g(that)f(w)o(e)g(are)h(going)f(to)f(discuss)k(is)e(a)f(dual\
-pro)q(cess)262 1239 y(v)o(ersion)e(of)f(the)h(t)o(yping)g(tutor)g(program)f
(in)o(tro)q(duced)j(in)e(Section)h fg(??)p fk(.)22 b(Its)16 b(source)h(co)q
(de)262 1289 y(is)j(sho)o(wn)f(in)h(Section)h(B.)35 b(In)19 b(this)i(case)f
(the)g(functionalit)o(y)h(of)e(the)g(application)i(has)262 1339 y(b)q(een)e
(divided)h(in)o(to)e(t)o(w)o(o)g(comm)o(unicating)h(pro)q(cesses)h(represen)o
(ting)h(the)e(teac)o(her)h(and)262 1388 y(the)14 b(studen)o(t.)19 b(It)14 b
(is)h(imp)q(ortan)o(t)f(to)g(p)q(oin)o(t)g(out)g(the)g(follo)o(wing:)324 1480
y fi(\017)20 b fe(Line.h)c fk(and)e(the)h(class)g fe(Line)h fk(remain)f(unc)o
(hanged.)324 1563 y fi(\017)20 b fk(Only)15 b(one)g(pro)q(cess)h(is)f(using)g
fe(Standa)o(rdOutput)h fk(at)e(a)g(time.)20 b(Whenev)o(er)15 b(a)f(pro)q(cess)
365 1613 y(signals)g(the)e(other,)h(the)f(signalling)i(pro)q(cess)g(either)g
(\014nishes)g(or)e(w)o(aits)g(for)g(a)g(signal)365 1662 y(to)i(return)h(from)
e(the)i(signalled)h(pro)q(cess.)324 1745 y fi(\017)k fk(The)12 b(v)n(ariable)
g fe(NotEnd)h fk(is)f(global)f(and)h(is)g(used)g(to)f(comm)o(unicate)h(the)g
(termination)365 1795 y(condition)j(to)f(the)h(other)f(pro)q(cess.)324 1878 y
fi(\017)20 b fe(teacherli)q(ne)h fk(do)q(es)d(not)f(need)h(to)f(b)q(e)h(globa\
l)g(b)q(ecause)h(the)f(studen)o(t)g(pro)q(cess)h(do)q(es)365 1928 y(not)d(nee\
d)h(to)f(access)h(it.)25 b(Ho)o(w)o(ev)o(er,)16 b fe(studentli)q(ne)j fk(is)e
(global)f(b)q(ecause)i(the)e(teac)o(her)365 1978 y(pro)q(cess)g(compares)f
(it)f(with)h fe(teacherlin)q(e)p fk(.)324 2061 y fi(\017)20 b fk(As)e(in)h
(the)f(previous)h(example,)g(the)f(semaphore)g(used)h(for)e(signalling)i(m)o
(ust)f(b)q(e)365 2111 y(global.)957 2574 y(17)g eop bop 262 307 a fb(A)68 b
(Learning)25 b(to)e(t)n(yp)r(e)262 406 y fc(A.1)55 b(Line.h)262 483 y ff(//)
43 b(line.h:)20 b(Defines)g(the)i(class)e(Line.)262 533 y(const)g(MAXLINE)h
(=)g(160;)43 b(//)g(Maximum)20 b(number)h(of)g(characters)f(in)i(a)f(line.)
262 583 y(const)f(ENDCHAR)h(=)g('#';)43 b(//)g(Character)20 b(to)h(signify)g
(end)g(of)g(line.)262 682 y(class)f(Line)262 732 y({)305 782 y(//)43 b(This)
21 b(class)g(represents)f(a)h(line)g(of)h(text.)42 b(Operations)20 b(are)h
(provided)f(to)i(read)305 832 y(//)43 b(and)21 b(write)g(the)g(text,)g(and)g
(also)g(to)h(compare)e(lines.)262 882 y(public:)305 931 y(//)43 b(Initialize)
20 b(my)h(line)g(-)h(set)f(it)g(empty.)305 981 y(Line)g(\(\))g({)h(length)f
(=)g(0;)h(})305 1031 y(//)43 b(Repeatedly)20 b(read)h(characters)f(from)h("in\
")g(and)g(write)g(them)g(into)f(my)i(line)305 1081 y(//)43 b(until)21 b(a)h
(newline)e(or)h(ENDCHAR)g(is)g(read.)43 b(Set)21 b("end")g(to)g(true)g(if)g
(a)h(newline)e(has)305 1131 y(//)43 b(been)21 b(read.)43 b(Return)20 b(the)i
(number)e(of)h(characters)f(read,)h(not)g(counting)f(the)305 1180 y(//)43 b
(newline.)f(My)22 b(old)f(line)g(is)g(wiped)g(out)g(before)g(reading)f(any)h
(characters.)305 1230 y(//)43 b(Will)21 b(not)g(work)g(if)h(there)f(are)g(mor\
e)g(than)g(MAXLINE)f(characters)g(to)h(be)g(read.)305 1280 y(int)g(ReadfromKe\
yboard)e(\(InputStream)g(*in,)i(int)g(&end\);)305 1330 y(//)43 b(Repeatedly)
20 b(read)h(characters)f(from)h("in")g(and)g(write)g(them)g(into)f(my)i(line)
305 1380 y(//)43 b(until)21 b(a)h(newline)e(or)h(ENDCHAR)g(is)g(read,)g(or)g
(until)g(there)g(are)g(no)g(more)305 1429 y(//)43 b(characters)20 b(to)h(be)h
(read.)42 b(Set)21 b("end")g(to)h(true)f(if)g(a)h(newline)e(has)305 1479 y
(//)43 b(been)21 b(read.)43 b(Return)20 b(the)i(number)e(of)h(characters)f
(read,)h(not)g(counting)f(the)305 1529 y(//)43 b(newline.)f(My)22 b(old)f(lin\
e)g(is)g(wiped)g(out)g(before)g(reading)f(any)h(characters.)305 1579 y(//)43 b
(Will)21 b(not)g(work)g(if)h(there)f(are)g(more)g(than)g(MAXLINE)f(characters)
g(to)h(be)g(read.)305 1629 y(int)g(ReadfromFile)f(\(ReadFileStream)e(*in,)j
(int)g(&end\);)305 1679 y(//)43 b(Write)21 b(my)g(line)g(and)h(a)f(newline)f
(to)i("out".)42 b(Return)21 b(the)g(number)f(of)i(characters)305 1728 y(//)43
b(written,)20 b(including)g(the)i(newline.)305 1778 y(int)f(WriteToScreen)e
(\(OutputStream)g(*out\);)305 1828 y(//)43 b(Write)21 b(my)g(line)g(and)h(a)f
(newline)f(to)i("out".)42 b(Return)21 b(the)g(number)f(of)i(characters)305
1878 y(//)43 b(written,)20 b(including)g(the)i(newline.)305 1928 y(int)f(Writ\
eToFile)f(\(WriteFileStream)e(*out\);)305 1977 y(//)43 b(Return)21 b(the)g
(length)g(of)g(my)g(line,)g(not)g(counting)f(the)i(newline)e(at)h(the)g(end.)
305 2027 y(int)g(Length)g(\(\))g({)h(return)e(length;)h(})305 2077 y(//)43 b
(Return)21 b(true)g(if)g(l1)h(has)f(the)g(same)g(contents)f(as)h(l2.)305 2127
y(friend)g(int)g(equal)g(\(Line)f(*l1,)h(Line)g(*l2\);)262 2177 y(private:)
305 2226 y(char)g(linechar)f([MAXLINE];)42 b(//)h(The)21 b(characters)f(in)h
(my)h(line.)305 2276 y(int)f(length;)42 b(//)i(The)21 b(number)f(of)i(charact\
ers)d(in)j(my)f(line,)g(not)g(counting)f(newline.)262 2326 y(};)262 2426 y
(inline)g(int)h(equal)g(\(Line)g(*l1,)g(Line)g(*l2\))957 2574 y fk(18)g eop
bop 262 307 a ff({)305 357 y(//)43 b(This)21 b(function)f(returns)h(true)g
(if)g(lines)g(l1)g(and)g(l2)h(are)f(equal,)f(that)h(is,)h(they)305 407 y(//)
43 b(have)21 b(the)g(same)g(length)g(and)g(all)g(their)g(characters)f(are)h
(equal.)305 457 y(if)g(\(l1)h(->)f(Length)g(\(\))g(!=)g(l2)h(->)f(Length)g
(\(\)\))349 506 y(return)f(0;)305 556 y(else)305 606 y({)349 656 y(int)43 b
(=)21 b(l1)h(->)f(Length)g(\(\);)349 706 y(for)g(\(int)g(i)g(=)h(0;)f(i)h(<)g
(;)f(i++\))392 756 y(if)h(\(l1)f(->)g(linechar)f([i])i(!=)f(l2)g(->)h(linecha\
r)e([i]\))436 805 y(return)g(0;)349 855 y(return)g(1;)305 905 y(})262 955 y
(})262 1121 y fc(A.2)55 b(T)n(yp)r(e1.cc)262 1197 y ff(//)43 b(type1.cc:)20 b
(Typing)g(tutor)h(-)h(you)f(type)g(whatever)f(you)h(see)g(on)h(the)f(screen,)
f(and)h(the)262 1247 y(//)43 b(program)20 b(will)h(ask)g(you)g(to)h(try)f(aga\
in)g(if)g(the)g(text)g(that)g(you)g(typed)g(isn't)262 1297 y(//)43 b(the)21 b
(same)g(as)g(the)g(text)g(that)g(appeared)f(on)i(the)f(screen.)42 b(The)21 b
(program)g(stops)262 1347 y(//)43 b(when)21 b(you)g(type)g('#'.)43 b(The)21 b
(text)g(to)g(be)g(typed)g(comes)g(from)g(the)g(file)g("in.1".)262 1397 y(#inc\
lude)f("OutputStream.h")262 1446 y(#include)g("InputStream.h")262 1496 y(#inc\
lude)g("FileSystemInter)o(face.)o(h")262 1546 y(#include)g("ReadFileStream.)o
(h")262 1596 y(#include)g("ReadFileStreamS)o(tar.h)o(")262 1646 y(#include)g
("WriteFileStream)o(.h")262 1696 y(#include)g("WriteFileStream)o(Star.)o(h")
262 1745 y(#include)g("line.h")262 1845 y(int)h(Line::ReadfromKe)o(yboar)o
(d)e(\(InputStream)g(*in,)i(int)g(&end\))262 1895 y({)305 1945 y(//)43 b(Repe\
atedly)20 b(read)h(characters)f(from)h("in")g(and)g(write)g(them)g(into)f(my)
i(line)305 1994 y(//)43 b(until)21 b(a)h(newline)e(or)h(ENDCHAR)g(is)g(read.)
43 b(Set)21 b("end")g(to)g(true)g(if)g(a)h(newline)e(has)305 2044 y(//)43 b
(been)21 b(read.)43 b(Return)20 b(the)i(number)e(of)h(characters)f(read,)h
(not)g(counting)f(the)305 2094 y(//)43 b(newline.)f(My)22 b(old)f(line)g(is)g
(wiped)g(out)g(before)g(reading)f(any)h(characters.)305 2144 y(//)43 b(Will)
21 b(not)g(work)g(if)h(there)f(are)g(more)g(than)g(MAXLINE)f(characters)g(to)
h(be)g(read.)305 2194 y(length)g(=)g(0;)305 2243 y(int)g(charsRead)f(=)i(in)f
(->)h(read)f(\(&linechar)e([length],)h(1\);)305 2293 y(while)h(\(\(linechar)f
([length])g(!=)h(ENDCHAR\))f(&&)i(\(charsRead)d(>)j(0\))f(&&)349 2343 y(\(lin\
echar)f([length])g(!=)h('\\n'\)\))305 2393 y({)349 2443 y(length++;)957 2574 y
fk(19)g eop bop 349 307 a ff(charsRead)20 b(=)h(in)h(->)f(read)g(\(&linechar)
f([length],)g(1\);)305 357 y(})305 407 y(if)h(\(linechar[length])e(!=)i('\\n'\
\))349 457 y(end)g(=)g(0;)305 506 y(else)349 556 y(end)g(=)g(1;)305 606 y(ret\
urn)g(length;)262 656 y(})262 756 y(int)g(Line::ReadfromFi)o(le)e(\(ReadFileS\
tream)f(*in,)j(int)h(&end\))262 805 y({)305 855 y(//)43 b(Repeatedly)20 b(rea\
d)h(characters)f(from)h("in")g(and)g(write)g(them)g(into)f(my)i(line)305 905 y
(//)43 b(until)21 b(a)h(newline)e(or)h(ENDCHAR)g(is)g(read,)g(or)g(until)g
(there)g(are)g(no)g(more)305 955 y(//)43 b(characters)20 b(to)h(be)h(read.)42
b(Set)21 b("end")g(to)h(true)f(if)g(a)h(newline)e(has)305 1005 y(//)43 b(been)
21 b(read.)43 b(Return)20 b(the)i(number)e(of)h(characters)f(read,)h(not)g
(counting)f(the)305 1054 y(//)43 b(newline.)f(My)22 b(old)f(line)g(is)g(wiped)
g(out)g(before)g(reading)f(any)h(characters.)305 1104 y(//)43 b(Will)21 b(not)
g(work)g(if)h(there)f(are)g(more)g(than)g(MAXLINE)f(characters)g(to)h(be)g
(read.)305 1154 y(length)g(=)g(0;)305 1204 y(int)g(charsRead)f(=)i(in)f(->)h
(read)f(\(&linechar)e([length],)h(1\);)305 1254 y(while)h(\(\(linechar)f([len\
gth])g(!=)h(ENDCHAR\))f(&&)i(\(charsRead)d(>)j(0\))f(&&)349 1303 y(\(linechar)
f([length])g(!=)h('\\n'\)\))305 1353 y({)349 1403 y(length++;)349 1453 y(char\
sRead)f(=)h(in)h(->)f(read)g(\(&linechar)f([length],)g(1\);)305 1503 y(})305
1553 y(if)h(\(linechar)f([length])h(!=)g('\\n'\))349 1602 y(end)g(=)g(0;)305
1652 y(else)349 1702 y(end)g(=)g(1;)305 1752 y(return)g(length;)262 1802 y
(})262 1901 y(int)g(Line::WriteToScr)o(een)e(\(OutputStream)g(*out\))262 1951
y({)305 2001 y(//)43 b(Write)21 b(my)g(line)g(and)h(a)f(newline)f(to)i("out".)
42 b(Return)21 b(the)g(number)f(of)i(characters)305 2051 y(//)43 b(written,)
20 b(not)i(counting)e(the)h(newline.)305 2100 y(int)g(charWritten;)305 2150 y
(if)g(\(length)g(!=)g(0\))305 2200 y({)349 2250 y(charWritten)e(=)j(out)f(->)
g(write)g(\(linechar,)f(length)g(+)i(1\);)43 b(//)g(Outputs)20 b('\\n')h(also\
.)349 2300 y(out)g(->)g(flush)g(\(\);)349 2350 y(return)f(charWritten;)305
2399 y(})305 2449 y(else)h(return)g(0;)957 2574 y fk(20)g eop bop 262 307 a ff
(})262 407 y(int)21 b(Line::WriteToFil)o(e)e(\(WriteFileStream)f(*out\))262
457 y({)305 506 y(//)43 b(Write)21 b(my)g(line)g(and)h(a)f(newline)f(to)i("ou\
t".)42 b(Return)21 b(the)g(number)f(of)i(characters)305 556 y(//)43 b(written\
,)20 b(including)g(the)i(newline.)305 606 y(if)f(\(length)g(!=)g(0\))349 656 y
(return)f(out)h(->)h(write)f(\(linechar,)e(length)i(+)g(1\);)43 b(//)h(Output\
s)20 b('\\n')h(also.)305 706 y(else)349 756 y(return)f(0;)262 805 y(};)262 905
y(int)h(main\(int,)f(char)h(**\))262 955 y({)305 1005 y(//)43 b(This)21 b(pro\
gram)g(first)f(calls)h(open\(\))g(on)g(StandardFileSystem)o(Inte)o(rface)d
(to)k(open)305 1054 y(//)43 b(the)21 b(file)g("in.1")g(for)g(reading.)42 b
(If)21 b(the)h(call)f(was)g(successful,)e(open\(\))305 1104 y(//)43 b(returns)
21 b(a)g(ReadFileStream)e(object)i(\(call)f(it)i(inf\).)42 b(We)22 b(then)f
(read)g(a)g(line)305 1154 y(//)43 b(from)21 b(inf,)g(print)g(it,)g(repeatedly)
f(read)h(lines)g(from)g(the)g(keyboard)f(and)h(print)305 1204 y(//)43 b(them)
21 b(until)g(we)g(have)g(read)g(a)h(line)f(from)g(the)g(keyboard)f(that)h(mat\
ches)f(the)i(line)305 1254 y(//)43 b(read)21 b(from)g(inf.)43 b(We)21 b(keep)
g(on)h(doing)e(this)h(until)g(the)g(user)g(presses)g('#')g(or)305 1303 y(//)
43 b(inf)21 b(has)h(run)f(out)g(of)g(lines.)305 1353 y(//)305 1403 y(//)43 b
(In)22 b(greater)e(detail:)305 1453 y(//)43 b(teacherline)20 b(contains)g(the)
h(line)g(read)g(from)g(inf,)g(and)g(studentline)f(contains)305 1503 y(//)43 b
(the)21 b(line)g(read)g(from)g(the)h(keyboard.)41 b(We)22 b(read)f(a)g(line)g
(from)g(inf)g(into)305 1553 y(//)43 b(teacherline)20 b(by)h(calling)g(Readfro\
mFile\(\))d(on)k(teacherline;)d(we)i(print)305 1602 y(//)43 b(teacherline)20 b
(by)h(calling)g(WriteToScreen\(\))d(on)k(teacherline;)d(we)i(read)g(a)h(line)
305 1652 y(//)43 b(from)21 b(the)g(keyboard)g(into)g(studentline)e(by)i(calli\
ng)g(ReadfromKeyboard)o(\(\))e(on)305 1702 y(//)43 b(studentline;)20 b(we)h
(print)g(studentline)e(by)j(calling)e(WriteToScreen\(\))f(on)305 1752 y(//)43
b(studentline;)20 b(we)h(compare)f(studentline)g(and)h(teacherline)f(by)h(cal\
ling)305 1802 y(//)43 b(equal\(\).)f(NotEnd)21 b(is)g(set)g(to)h(false)e(if)i
('#')f(is)g(typed)g(or)h(if)f(inf)g(has)g(run)305 1851 y(//)43 b(out)21 b(of)
h(lines.)305 1901 y(//)305 1951 y(//)43 b(The)21 b(smart)g(pointer)g(ReadFile\
StreamS)o(tar)e(\(inf\))h(is)i(used)f(here)g(so)g(that)g(we)g(don't)305 2001 y
(//)43 b(have)21 b(to)h(explicitly)d(close)i(the)g(file)g(-)h(the)f(file)g
(will)g(be)g(closed)305 2051 y(//)43 b(automatically)19 b(when)i(the)h(smart)
e(pointer)h(goes)g(out)g(of)g(scope.)42 b(Standard)305 2100 y(//)h(FileSystem\
Interface)18 b(\(of)j(type)g(FileSystemInterface)o(\))e(is)i(a)h(special)e
(global)305 2150 y(//)43 b(variable)20 b(used)h(for)h(accessing)d(file)i(serv\
ices.)42 b(StandardInput)19 b(and)i(Standard)305 2200 y(//)43 b(Output)21 b
(are)g(special)f(global)h(variables)f(for)h(performing)f(I/O)h(to)g(and)g(fro\
m)305 2250 y(//)43 b(the)21 b(keyboard)g(and)g(the)g(screen,)f(respectively.)
305 2350 y(int)h(error;)305 2399 y(//)43 b(Open)21 b("in.1")g(for)g(reading.)
305 2449 y(ReadFileStreamStar)d(inf)j(=)h(StandardFileSyste)o(mInte)o(rface)c
(->)k(open)957 2574 y fk(21)g eop bop 349 307 a ff(\("in.1",)20 b(ReadFileStr\
eamCla)o(ss,)e(error\);)305 357 y(if)j(\(error\))305 407 y({)349 457 y(//)43 b
(Can't)21 b(open)g("in.1",)f(maybe)h(because)f(it)h(doesn't)g(exist.)42 b(Sim\
ply)21 b(give)g(up.)349 506 y(*StandardOutput)d(<<)k("***)f(error)f(opening)h
(file)g(in.1\\n")f(<<)i(eor;)349 556 y(return)e(0;)305 606 y(})305 706 y(*Sta\
ndardOutput)f(<<)i("Type)g(a)h(sequence)e(of)h(keys)g(ending)g(with)g(#\\n")f
(<<)i(eor;)305 756 y(int)f(NotEnd;)305 805 y(Line)g(*teacherline)e(=)j(new)f
(Line;)305 855 y(Line)g(*studentline)e(=)j(new)f(Line;)305 905 y(//)43 b(Read)
21 b(the)g(first)g(line)g(from)g(the)g(file)g(and)g(print)g(it)h(for)f(the)g
(user)g(to)g(type)g(in.)305 955 y(teacherline)f(->)h(ReadfromFile)e(\(inf,)i
(NotEnd\);)305 1005 y(teacherline)f(->)h(WriteToScreen)e(\(StandardOutput\);)
305 1054 y(while)i(\(NotEnd\))305 1104 y({)349 1154 y(//)43 b(Read)21 b(what)
g(the)g(user)g(types)g(in)g(and)g(print)g(it)g(to)h(the)f(screen.)42 b(NotEnd)
21 b(is)349 1204 y(//)43 b(set)21 b(to)g(false)g(if)h(user)f(types)f('#'.)349
1254 y(studentline)f(->)j(ReadfromKeyboar)o(d)d(\(StandardInput,)g(NotEnd\);)
349 1303 y(studentline)g(->)j(WriteToScreen)d(\(StandardOutput\))o(;)349 1353
y(if)i(\(NotEnd\))349 1403 y({)392 1453 y(//)43 b(If)22 b(user)f(didn't)f(typ\
e)h('#',)g(check)g(whether)f(the)i(displayed)d(line)i(and)h(the)392 1503 y
(//)43 b(typed)21 b(line)g(are)g(equal.)392 1553 y(if)h(\(equal)e(\(studentli\
ne,)f(teacherline\)\))392 1602 y({)436 1652 y(//)43 b(If)21 b(the)h(user)f
(typed)f(in)i(exactly)e(the)h(same)g(line)g(as)h(the)f(line)g(displayed,)436
1702 y(//)43 b(then)21 b(read)g(another)f(line)h(from)g(the)g(file)g(and)h
(print)e(it.)43 b(NotEnd)21 b(is)g(set)436 1752 y(//)43 b(to)21 b(false)g(if)
h(inf)f(has)g(run)g(out)g(of)h(characters.)436 1802 y(teacherline)d(->)j(Read\
fromFile)d(\(inf,)i(NotEnd\);)436 1851 y(teacherline)e(->)j(WriteToScreen)d
(\(StandardOutput\);)392 1901 y(})392 1951 y(else)436 2001 y(//)43 b(The)21 b
(lines)g(didn't)g(match;)f(tell)h(the)g(user)g(to)h(type)f(again.)436 2051 y
(*StandardOutput)e(<<)i("Try)g(again\\n")f(<<)h(eor;)349 2100 y(})305 2150 y
(})305 2200 y(delete)g(teacherline;)305 2250 y(delete)g(studentline;)305 2300
y(return)g(0;)262 2350 y(})957 2574 y fk(22)g eop bop 262 311 a fb(B)68 b(Lea\
rning)24 b(to)g(t)n(yp)r(e:)30 b(t)n(w)n(o)23 b(pro)r(cesses)f(\(T)n(yp)r(e2.\
cc\))262 401 y ff(//)43 b(type2.cc:)20 b(Typing)g(tutor,)h(dual-process)e(ver\
sion.)42 b(You)21 b(type)g(whatever)f(you)h(see)262 451 y(//)43 b(on)21 b(the)
g(screen,)g(and)g(the)g(program)f(will)h(ask)g(you)h(to)f(try)g(again)g(if)g
(the)g(text)g(that)262 501 y(//)43 b(you)21 b(typed)g(isn't)f(the)i(same)f
(as)g(the)g(text)g(that)g(appeared)f(on)i(the)f(screen.)42 b(The)262 551 y
(//)h(program)20 b(stops)h(when)g(you)g(type)g('#'.)43 b(The)21 b(text)g(to)g
(be)h(typed)e(comes)h(from)g(the)262 601 y(//)43 b(file)21 b("in.1".)42 b(One)
21 b(process)f(reads)h(lines)g(from)g(the)g(file)g(and)g(prints)g(them)g(whil\
e)262 650 y(//)43 b(another)20 b(process)g(reads)h(lines)g(from)g(the)g(keybo\
ard)f(and)h(compares)f(them)h(with)g(the)262 700 y(//)43 b(lines)20 b(read)h
(from)g(the)h(file.)42 b(This)21 b(program)f(also)h(computes)g(the)g(time)g
(taken)262 750 y(//)43 b(to)21 b(run)g(the)g(entire)g(session.)262 800 y(#inc\
lude)f("OutputStream.h")262 850 y(#include)g("InputStream.h")262 900 y(#inclu\
de)g("NameServer.h")262 949 y(#include)g("FileSystemInter)o(face.)o(h")262 999
y(#include)g("ReadFileStream.)o(h")262 1049 y(#include)g("ReadFileStreamS)o
(tar.h)o(")262 1099 y(#include)g("WriteFileStream)o(.h")262 1149 y(#include)g
("WriteFileStream)o(Star.)o(h")262 1198 y(#include)g("FreeRunningTime)o(r.h")
262 1248 y(#include)g("FreeRunningTime)o(rStar)o(.h")262 1298 y(#include)g
("Process.h")262 1348 y(#include)g("ProcessStar.h")262 1398 y(#include)g("Sem\
aphore.h")262 1448 y(#include)g("line.h")262 1547 y(int)h(Line::ReadfromKe)o
(yboar)o(d)e(\(InputStream)g(*in,)i(int)g(&end\))262 1597 y({)305 1647 y(//)
43 b(Repeatedly)20 b(read)h(characters)f(from)h("in")g(and)g(write)g(them)g
(into)f(my)i(line)305 1697 y(//)43 b(until)21 b(a)h(newline)e(or)h(ENDCHAR)g
(is)g(read.)43 b(Set)21 b("end")g(to)g(true)g(if)g(a)h(newline)e(has)305 1746
y(//)43 b(been)21 b(read.)43 b(Return)20 b(the)i(number)e(of)h(characters)f
(read,)h(not)g(counting)f(the)305 1796 y(//)43 b(newline.)f(My)22 b(old)f(lin\
e)g(is)g(wiped)g(out)g(before)g(reading)f(any)h(characters.)305 1846 y(//)43 b
(Will)21 b(not)g(work)g(if)h(there)f(are)g(more)g(than)g(MAXLINE)f(characters)
g(to)h(be)g(read.)305 1896 y(length)g(=)g(0;)305 1946 y(int)g(charsRead)f(=)i
(in)f(->)h(read)f(\(&linechar)e([length],)h(1\);)305 1995 y(while)h(\(\(linec\
har)f([length])g(!=)h(ENDCHAR\))f(&&)i(\(charsRead)d(>)j(0\))f(&&)349 2045 y
(\(linechar)f([length])g(!=)h('\\n'\)\))305 2095 y({)349 2145 y(length++;)349
2195 y(charsRead)f(=)h(in)h(->)f(read)g(\(&linechar)f([length],)g(1\);)305
2245 y(})305 2294 y(if)h(\(linechar)f([length])h(!=)g('\\n'\))349 2344 y(end)
g(=)g(0;)305 2394 y(else)349 2444 y(end)g(=)g(1;)957 2574 y fk(23)g eop bop
305 307 a ff(return)21 b(length;)262 357 y(})262 457 y(int)g(Line::ReadfromFi)
o(le)e(\(ReadFileStream)f(*in,)j(int)h(&end\))262 506 y({)305 556 y(//)43 b
(Repeatedly)20 b(read)h(characters)f(from)h("in")g(and)g(write)g(them)g(into)
f(my)i(line)305 606 y(//)43 b(until)21 b(a)h(newline)e(or)h(ENDCHAR)g(is)g
(read,)g(or)g(until)g(there)g(are)g(no)g(more)305 656 y(//)43 b(characters)20
b(to)h(be)h(read.)42 b(Set)21 b("end")g(to)h(true)f(if)g(a)h(newline)e(has)
305 706 y(//)43 b(been)21 b(read.)43 b(Return)20 b(the)i(number)e(of)h(charac\
ters)f(read,)h(not)g(counting)f(the)305 756 y(//)43 b(newline.)f(My)22 b(old)
f(line)g(is)g(wiped)g(out)g(before)g(reading)f(any)h(characters.)305 805 y
(//)43 b(Will)21 b(not)g(work)g(if)h(there)f(are)g(more)g(than)g(MAXLINE)f
(characters)g(to)h(be)g(read.)305 855 y(length)g(=)g(0;)305 905 y(int)g(chars\
Read)f(=)i(in)f(->)h(read)f(\(&linechar)e([length],)h(1\);)305 955 y(while)h
(\(\(linechar)f([length])g(!=)h(ENDCHAR\))f(&&)i(\(charsRead)d(>)j(0\))f(&&)
349 1005 y(\(linechar)f([length])g(!=)h('\\n'\)\))305 1054 y({)349 1104 y(len\
gth++;)349 1154 y(charsRead)f(=)h(in)h(->)f(read)g(\(&linechar)f([length],)g
(1\);)305 1204 y(})305 1254 y(if)h(\(linechar)f([length])h(!=)g('\\n'\))349
1303 y(end)g(=)g(0;)305 1353 y(else)349 1403 y(end)g(=)g(1;)305 1453 y(return)
g(length;)262 1503 y(})262 1652 y(int)g(Line::WriteToScr)o(een)e(\(OutputStre\
am)g(*out\))262 1702 y({)305 1752 y(//)43 b(Write)21 b(my)g(line)g(and)h(a)f
(newline)f(to)i("out".)42 b(Return)21 b(the)g(number)f(of)i(characters)305
1802 y(//)43 b(written,)20 b(not)i(counting)e(the)h(newline.)305 1851 y(int)g
(charWritten;)305 1901 y(if)g(\(length)g(!=)g(0\))305 1951 y({)349 2001 y(cha\
rWritten)e(=)j(out)f(->)g(write)g(\(linechar,)f(length)g(+)i(1\);)43 b(//)g
(Output)21 b('\\n')g(also.)349 2051 y(out)g(->)g(flush\(\);)349 2100 y(return)
f(charWritten;)305 2150 y(})305 2200 y(else)h(return)g(0;)262 2250 y(})262
2350 y(int)g(Line::WriteToFil)o(e)e(\(WriteFileStream)f(*out\))262 2399 y({)
305 2449 y(//)43 b(Write)21 b(my)g(line)g(and)h(a)f(newline)f(to)i("out".)42 b
(Return)21 b(the)g(number)f(of)i(characters)957 2574 y fk(24)g eop bop 305 307
a ff(//)43 b(written,)20 b(including)g(the)i(newline.)305 357 y(if)f(\(length)
g(!=)g(0\))349 407 y(return)f(out)h(->)h(write)f(\(linechar,)e(length)i(+)g
(1\);)h(//)43 b(Output)20 b('\\n')h(also.)305 457 y(else)349 506 y(return)f
(0;)262 556 y(})262 656 y(//)43 b(This)21 b(semaphore)f(is)h(used)g(for)g(syn\
chronizing)e(the)i(two)h(processes.)41 b(The)21 b(teacher)262 706 y(//)43 b
(process)20 b(V\(\)'s)h(this)g(semaphore)f(to)h(tell)g(the)g(student)g(proces\
s)f(to)h(read)g(a)h(line)262 756 y(//)43 b(from)21 b(the)g(keyboard,)f(and)h
(then)g(the)g(teacher)f(process)h(P\(\)'s)g(this)f(semaphore.)262 805 y(//)43
b(The)21 b(student)f(process)h(V\(\)'s)f(this)h(semaphore)f(to)i(tell)f(the)g
(teacher)f(process)262 855 y(//)43 b(that)21 b(it)g(has)g(finished)f(reading)
h(a)g(line)g(from)g(the)g(keyboard,)f(and)h(the)h(student)262 905 y(//)43 b
(process)20 b(P\(\)'s)h(this)g(semaphore.)262 955 y(Semaphore)e(*sem;)262 1054
y(//)43 b(Variables)20 b(shared)g(by)i(both)f(lightweight)e(processes:)h(NotE\
nd)g(is)i(false)e(if)262 1104 y(//)43 b(the)21 b(file)g(ran)g(out)g(of)h(line\
s)e(or)i(if)f(the)g(user)g(typed)g('#'.)43 b(studentline)19 b(is)262 1154 y
(//)43 b(the)21 b(line)g(typed)g(by)g(the)g(user.)43 b(The)21 b(student)f(pro\
cess)h(sets)g(this)f(variable)h(when)262 1204 y(//)43 b(the)21 b(user)g(types)
g(a)g(line,)g(and)g(the)g(teacher)g(process)f(compares)g(studentline)262 1254
y(//)43 b(with)21 b(the)g(line)g(read)g(from)g(the)g(file.)42 b(The)22 b(two)
f(global)f(variables)g(together)g(with)262 1303 y(//)43 b(sem)21 b(are)g(acce\
ssible)f(to)h(both)g(processes)f(because)g(they)h(are)h(lightweight)262 1353 y
(//)43 b(processes)20 b(which)g(share)h(the)g(same)g(global)g(variable)f(spac\
e.)262 1403 y(int)h(NotEnd;)262 1453 y(Line)f(*studentline)g(=)h(new)h(Line;)
262 1553 y(int)f(main2)f(\(int,)h(char)g(**\))262 1602 y({)305 1652 y(//)43 b
(This)21 b(function)f(runs)h(as)h(the)f(teacher)f(process,)g(and)i(the)f(proc\
ess)f(dies)h(when)305 1702 y(//)43 b(this)21 b(function)f(returns.)42 b(The)
21 b(teacher)g(process)f(is)i(created)e(in)h(main\(\).)305 1752 y(//)43 b(Thi\
s)21 b(process)g(opens)f(the)i(file)e("in.1")h(for)g(reading)g(by)g(calling)f
(open\(\))h(on)305 1802 y(//)43 b(the)21 b(StandardFileSystemIn)o(terf)o(ace,)
d(which)j(returns)g(a)g(ReadFileStream)e(object.)305 1851 y(//)43 b(We)22 b
(then)f(repeated)f(read)h(a)g(line)g(from)g(the)g(file)g(\(by)h(calling)e(Rea\
dfromFile\(\)\),)305 1901 y(//)43 b(print)21 b(it)g(\(by)h(calling)e(WriteToS\
creen\(\)\),)e(signal)j(the)g(student)f(process)h(to)305 1951 y(//)43 b(read)
21 b(a)h(line)f(from)g(the)g(keyboard,)f(wait)h(for)g(the)g(line)g(to)h(be)f
(read)g(and)g(compare)305 2001 y(//)43 b(the)21 b(line)g(read)g(from)g(the)h
(keyboard)e(with)h(the)g(line)g(from)g(from)g(the)g(file.)305 2051 y(//)43 b
(We)22 b(continue)e(to)h(read)g(lines)g(from)g(the)g(keyboard)f(and)h(compare)
g(them)g(with)305 2100 y(//)43 b(the)21 b(line)g(read)g(from)g(the)h(file)e
(until)h(they)g(match.)305 2150 y(//)305 2200 y(//)43 b(We)22 b(quit)f(when)g
(the)g(file)g(runs)g(out)g(of)g(lines)g(or)g(when)g(the)h(user)e(presses)h
('#')305 2250 y(//)43 b(\(the)21 b(student)g(process)f(signals)g(this)h(by)h
(storing)e(false)h(in)g(NotEnd\).)42 b(Just)305 2300 y(//)h(before)21 b(we)g
(quit,)g(we)g(wake)g(up)h(the)f(student)f(process.)305 2350 y(//)305 2399 y
(//)43 b(The)21 b(StandardFileSystemIn)o(terf)o(ace)e(is)i(a)h(special)e(glob\
al)h(variable)f(that)305 2449 y(//)43 b(is)22 b(used)f(for)g(accessing)f(file)
h(services.)957 2574 y fk(25)g eop bop 305 357 a ff(//)43 b(Lightweight)20 b
(process)g(created)g(in)i(main\(\))e(starts)h(here.)305 407 y(int)g(error;)
305 457 y(//)43 b(Open)21 b(the)g(file)g("in.1")g(for)g(reading.)305 506 y
(ReadFileStreamStar)d(inf)j(=)h(StandardFileSyste)o(mInte)o(rface)c(->)k(open)
349 556 y(\("in.1",)e(ReadFileStreamCla)o(ss,)e(error\);)305 606 y(if)j(\(err\
or\))305 656 y({)349 706 y(*StandardOutput)d(<<)k("***)f(error)f(opening)h
(file)g(\\n")g(<<)g(eor;)349 756 y(return)f(0;)305 805 y(})305 905 y(*Standar\
dOutput)f(<<)i("Type)g(a)h(sequence)e(of)h(keys)g(ending)g(with)g(#\\n")f(<<)
i(eor;)305 955 y(Line)f(*teacherline)e(=)j(new)f(Line;)305 1005 y(//)43 b(Rea\
d)21 b(the)g(first)g(line)g(from)g(the)g(file)g(and)g(print)g(it.)305 1054 y
(teacherline)f(->)h(ReadfromFile)e(\(inf,)i(NotEnd\);)305 1104 y(teacherline)
f(->)h(WriteToScreen)e(\(StandardOutput\);)305 1154 y(sem)i(->)h(V\(\);)42 b
(//)i(Wake)21 b(up)g(the)g(student)f(process)h(to)g(read)g(a)h(line)f(from)g
(keyboard.)305 1204 y(sem)g(->)h(P\(\);)42 b(//)i(Wait)21 b(for)g(the)g(stude\
nt)f(process)h(to)g(finish)g(reading)f(the)h(line.)305 1254 y(while)g(\(NotEn\
d\))305 1303 y({)349 1353 y(//)43 b(NotEnd)20 b(is)i(true)f(if)g(user)g(didn'\
t)g(type)g('#'.)42 b(Check)21 b(whether)f(the)i(line)f(that)349 1403 y(//)43 b
(the)21 b(user)g(has)g(typed)g(is)g(equal)g(to)g(the)h(line)f(we)g(have)g(jus\
t)g(read.)349 1453 y(if)g(\(equal)g(\(studentline,)e(teacherline\)\))349 1503
y({)392 1553 y(//)43 b(If)22 b(so,)f(read)g(the)g(next)g(line)g(from)g(the)g
(file)g(and)g(print)g(it.)43 b(NotEnd)21 b(is)392 1602 y(//)43 b(set)22 b(to)
f(false)g(if)g(there)g(are)g(no)g(more)g(lines)g(to)h(be)f(read)g(from)g(the)
g(file.)392 1652 y(teacherline)f(->)h(ReadfromFile)e(\(inf,)i(NotEnd\);)392
1702 y(teacherline)f(->)h(WriteToScreen)e(\(StandardOutput\);)349 1752 y(})
349 1802 y(else)392 1851 y(//)43 b(The)22 b(lines)e(don't)h(match;)g(tell)g
(the)g(user)g(to)g(type)g(again.)392 1901 y(*StandardOutput)e(<<)i("Try)g(aga\
in\\n")f(<<)i(eor;)349 1951 y(if)f(\(NotEnd\))349 2001 y({)392 2051 y(sem)g
(->)h(V\(\);)43 b(//)g(Wake)21 b(up)g(student)f(process)h(to)g(read)g(a)h(lin\
e)f(from)g(keyboard.)392 2100 y(sem)g(->)h(P\(\);)43 b(//)g(Wait)21 b(for)g
(student)f(process)h(to)g(finish)g(reading)f(the)h(line.)349 2150 y(})305 2200
y(})305 2250 y(sem)g(->)h(V\(\);)42 b(//)i(Wake)21 b(up)g(student)f(process)h
(in)g(case)g(it's)g(still)g(waiting.)305 2300 y(delete)g(teacherline;)305 2350
y(//)43 b(This)21 b(process)g(dies)g(here.)305 2399 y(return)g(0;)262 2449 y
(})957 2574 y fk(26)g eop bop 262 357 a ff(int)21 b(main)g(\(int,)f(char)h
(**\))262 407 y({)305 457 y(//)43 b(This)21 b(process)g(runs)g(as)g(the)g(stu\
dent)f(process,)h(reading)f(lines)h(from)g(the)305 506 y(//)43 b(keyboard)20 b
(and)i(waking)e(up)i(the)f(teacher)f(process)g(when)h(the)h(lines)e(are)h(rea\
dy.)305 556 y(//)43 b(In)22 b(this)f(process,)f(we)h(first)g(create)f(a)i(sem\
aphore)e(for)h(synchronizing)e(the)305 606 y(//)43 b(two)21 b(processes.)42 b
(We)21 b(then)g(fetch)g(the)g(SystemTimer)f(from)h(the)g(StandardName)305 656
y(//)43 b(Server)21 b(by)g(calling)g(lookup\(\).)41 b(We)22 b(create)e(the)h
(teacher)g(process)f(and)305 706 y(//)43 b(make)21 b(it)h(runnable)e(by)h(cal\
ling)f(ready\(\))h(on)g(the)g(process.)42 b(By)22 b(calling)305 756 y(//)43 b
(time\(\))21 b(on)g(the)g(SystemTimer,)f(we)h(obtain)g(the)g(current)f(system)
h(time)g(in)305 805 y(//)43 b(microseconds;)19 b(this)i(value)g(is)g(stored)g
(in)g("start".)305 855 y(//)305 905 y(//)43 b(After)21 b(that,)g(we)g(repeate\
dly)f(read)h(lines)g(from)g(the)g(keyboard,)f(print)g(them,)305 955 y(//)43 b
(signal)21 b(the)g(teacher)f(process)h(to)g(process)f(the)i(line)f(and)g(wait)
g(for)g(the)g(teacher)305 1005 y(//)43 b(process)21 b(to)g(finish)g(processin\
g)e(the)i(line.)43 b(We)21 b(stop)g(when)g(the)g(user)g(presses)305 1054 y
(//)43 b('#')21 b(or)h(when)f(the)g(file)g(runs)g(out)g(of)g(lines)g(\(parent)
g(process)f(indicates)g(this)305 1104 y(//)43 b(by)22 b(storing)e(false)h(in)
g(NotEnd\).)42 b(Next,)21 b(we)g(signal)g(the)g(teacher)f(process)305 1154 y
(//)43 b(to)22 b(wake)f(up.)43 b(Finally)20 b(we)h(print)g(out)g(the)g(durati\
on)g(of)g(the)g(session)f(by)305 1204 y(//)43 b(subtracting)20 b(the)h(starti\
ng)f(time)h(\("start"\))f(from)h(the)g(current)f(time)305 1254 y(//)43 b(\(ob\
tained)20 b(by)i(calling)e(time\(\))g(on)i(the)f(SystemTimer\).)305 1303 y
(//)305 1353 y(//)43 b(Lines)21 b(read)g(from)g(the)g(keyboard)f(are)h(stored)
g(in)g(the)h(global)e(variable)305 1403 y(//)43 b(studentline.)e(studentline)
20 b(is)h(read)g(from)g(the)g(keyboard)g(by)g(calling)305 1453 y(//)43 b(Read\
fromKeyboard\(\);)18 b(studentline)i(is)h(printed)f(by)i(calling)e(WriteToScr\
een\(\).)305 1503 y(//)305 1553 y(//)43 b(StandardNameServer)18 b(is)k(a)f
(special)g(global)f(variable)g(used)h(for)g(fetching)305 1602 y(//)43 b(syste\
m)21 b(objects.)305 1702 y(//)43 b(Create)21 b(a)g(semaphore)f(and)i(set)f
(its)g(counter)f(to)i(0.)305 1752 y(sem)f(=)h(new)f(Semaphore)f(\(0\);)305
1802 y(unsigned)g(int)h(start,)g(duration;)305 1851 y(//)43 b(Fetch)21 b(the)
g(system)g(timer)g(from)f(the)i(StandardNameServ)o(er.)305 1901 y(FreeRunning\
TimerSt)o(ar)d(SystemTimer)g(=)j(\(FreeRunningTimer)o(Star\))349 1951 y(Stand\
ardNameServ)o(er)d(->)i(lookup)g(\("SystemTimer",)d("FreeRunningTimer")g(\);)
305 2051 y(//)43 b(Create)21 b(the)g(teacher)f(process)h(which)f(will)h(start)
g(execution)f(at)h(main2\(\).)305 2100 y(ProcessStar)f(proc)h(=)g(new)g(Appli\
cationProcess)d(\(main2\);)305 2150 y(//)43 b(Process)21 b(will)g(not)g(run)g
(until)g(we)g(ready\(\))f(it.)305 2200 y(proc)h(->)g(ready)g(\(\);)305 2250 y
(//)43 b(Remember)20 b(the)i(time)f(now.)305 2300 y(start)g(=)g(SystemTimer)f
(->)h(time)g(\(\);)305 2350 y(//)43 b(Wait)21 b(for)g(teacher)g(process)f(to)
h(read)g(a)h(line)f(from)g(the)g(file)g(and)g(print)g(it.)305 2399 y(sem)g
(->)h(P)f(\(\);)305 2449 y(while)g(\(NotEnd\))957 2574 y fk(27)g eop bop 305
307 a ff({)349 357 y(//)43 b(NotEnd)20 b(is)i(true)f(if)g(the)g(file)g(hasn't)
g(run)g(out)g(of)h(lines.)42 b(Read)21 b(a)g(line)349 407 y(//)43 b(from)21 b
(the)g(keyboard)f(and)h(set)g(NotEnd)g(to)g(false)g(if)h(user)f(types)f('#'.)
349 457 y(studentline)f(->)j(ReadfromKeyboar)o(d)d(\(StandardInput,)g(NotEnd\
\);)349 506 y(studentline)g(->)j(WriteToScreen)d(\(StandardOutput\))o(;)349
556 y(if)i(\(NotEnd\))349 606 y({)392 656 y(sem)g(->)h(V)f(\(\);)43 b(//)h
(If)21 b(user)g(didn't)f(type)h('#',)g(wake)g(up)h(the)f(teacher)f(process.)
392 706 y(sem)h(->)h(P)f(\(\);)43 b(//)h(Wait)21 b(for)g(teacher)f(process)g
(to)i(read)f(a)g(line)g(from)g(the)g(file.)349 756 y(})305 805 y(})305 855 y
(sem)g(->)h(V)f(\(\);)43 b(//)g(Wake)21 b(up)h(the)f(teacher)f(in)i(case)f
(it's)g(still)f(waiting.)305 955 y(delete)h(studentline;)305 1005 y(//)43 b
(Print)21 b(the)g(total)g(duration)f(of)h(this)g(session.)305 1054 y(duration)
f(=)i(SystemTimer)d(->)j(time)f(\(\))g(-)h(start;)305 1104 y(*StandardOutput)
d(<<)i("Time)g(typing)f(")i(<<)f(duration)g(<<)g(")h(microseconds\\n")c(<<)k
(eor;)305 1154 y(return)f(0;)262 1204 y(})957 2574 y fk(28)g eop eos @end


  3 Responses to “Category : Alternate Operating Systems - Quarterdeck DesqView, CP/M, etc
Archive   : PCCAPP.ZIP
Filename : PROGAPP.PS

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/