%!PS-Adobe-2.0 %%Creator: dvipsk 5.58c Copyright 1986, 1994 Radical Eye Software %%Title: /tmp/ilu/src/doc/@14515.2.dvi %%Pages: 350 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentFonts: Times-Bold Courier Times-Roman Helvetica %%+ Courier-Oblique %%EndComments %DVIPSCommandLine: /import/tex/bin/dvips /tmp/ilu/src/doc/@14515.2.dvi %+ -o /tmp/ilu/src/doc/@14515.2.ps %DVIPSParameters: dpi=300, compressed, comments removed %DVIPSSource: TeX output 1998.11.05:1027 %%BeginProcSet: texc.pro /TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N /X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if} forall round exch round exch]setmatrix}N /@landscape{/isls true N}B /@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{ /nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{ /sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0] N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{ 128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N /cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add /gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{ dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1 adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2 idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg} {adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{ adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{] }if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{ cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict /eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V {}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail {dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M} B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{ 4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{ p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro TeXDict begin /rf{findfont dup length 1 add dict begin{1 index /FID ne 2 index /UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics exch def dict begin Encoding{exch dup type /integertype ne{pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def} ifelse}forall Metrics /Metrics currentdict end def[2 index currentdict end definefont 3 -1 roll makefont /setfont load]cvx def}def /ObliqueSlant{dup sin S cos div neg}B /SlantFont{4 index mul add}def /ExtendFont{3 -1 roll mul exch}def /ReEncodeFont{/Encoding exch def}def end %%EndProcSet %%BeginProcSet: special.pro TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N /vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B /@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{ /CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{ 10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B /@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale true def end /@MacSetUp{userdict /md known{userdict /md get type /dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{} N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{itransform lineto} }{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{ itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{ closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N /txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp {pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray} N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict maxlength dict begin /magscale true def normalscale currentpoint TR /psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts /psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR /showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{ psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict begin /SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial {CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR }{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath }N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{ end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin} N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{ /SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X /startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet TeXDict begin 40258431 52099146 1000 300 300 (/tmp/ilu/src/doc/@14515.2.dvi) @start /Fa 1 59 df<127012F8A3127005057C 840D>58 D E /Fb 1 59 df<127812FCA4127806067B8510>58 D E /Fc 134[19 4[10 15 1[19 19 19 4[10 4[17 2[19 13[23 10[12 22[19 50[{.167 SlantFont}12 37.500000 /Times-Roman rf /Fd 129[22 3[22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 7[22 22 22 22 22 22 22 22 1[22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 2[22 3[22 6[22 22 1[22 1[22 22 1[22 22 22 22 22 39[{}63 37.500000 /Courier rf /Fe 1 59 df<126012F0A2126004047D830B> 58 D E /Ff 133[17 19 19 27 19 19 10 15 12 19 19 19 19 29 10 19 10 10 19 19 12 17 19 17 19 17 9[35 27 27 23 21 25 1[21 27 27 33 23 27 15 12 27 27 21 23 27 25 25 27 6[10 19 19 19 19 19 19 19 19 19 19 1[9 12 9 2[12 12 40[{}64 37.500000 /Times-Roman rf /Fg 138[27 2[27 1[27 27 27 27 27 2[27 7[27 38[27 12[27 45[{}11 45.624989 /Courier rf /Fh 146[36 36 36 1[36 1[36 36 36 36 1[36 36 19[36 3[36 29[36 43[{}13 59.999973 /Courier rf /Fi 212[43 43[{}1 72.000000 /Courier rf /Fj 133[25 25 25 25 25 25 25 25 25 1[25 25 25 25 25 25 1[25 25 25 25 25 25 25 25 25 1[25 4[25 2[25 25 25 1[25 25 2[25 1[25 25 2[25 25 25 25 25 25 25 5[25 2[25 6[25 25 25 25 25 25 25 2[25 25 25 25 25 1[25 36[{}56 41.666668 /Courier-Oblique rf /Fk 214[15 15 40[{}2 45.624989 /Helvetica rf /Fl 138[30 1[30 4[30 30 30 30 1[30 3[30 30 30 1[30 12[30 1[30 1[30 30 6[30 4[30 30 30 30 13[30 6[30 43[{}22 50.000000 /Courier rf /Fm 5 54 df<120C121C12EC120CAFEAFFC00A137D9211>49 D<121FEA60C01360EAF070 13301260EA0070A2136013C012011380EA02005AEA08101210EA2020EA7FE012FF0C137E 9211>II<136013E0A2EA016012021206120C12081210 1220126012C0EAFFFCEA0060A5EA03FC0E137F9211>II E /Fn 133[20 23 23 33 23 25 15 18 20 25 25 23 25 38 13 25 15 13 25 23 15 20 25 20 25 23 15 2[15 1[15 1[33 33 45 33 33 30 25 33 1[28 35 33 43 30 35 23 18 35 35 28 30 33 33 30 33 3[26 1[15 15 23 23 23 23 23 23 23 23 23 23 13 11 15 11 2[15 15 15 39[{}73 45.624989 /Times-Bold rf /Fo 133[22 25 25 36 25 28 17 19 22 28 28 25 28 41 14 28 17 14 28 25 17 22 28 22 28 25 7[36 36 50 36 36 33 28 36 39 30 39 36 47 33 39 25 19 39 39 30 33 36 36 33 36 6[17 25 25 25 25 25 25 25 25 25 25 14 12 17 2[25 17 17 17 39[{}69 50.000000 /Times-Bold rf /Fp 133[20 23 23 33 23 23 13 18 15 23 23 23 23 35 13 23 13 13 23 23 15 20 23 20 23 20 3[15 1[15 1[33 33 43 33 33 28 25 30 1[25 33 33 40 28 33 18 15 33 33 25 28 33 30 30 33 3[26 2[13 23 4[23 23 23 23 23 13 11 15 11 1[23 15 15 15 39[{.167 SlantFont}68 45.624989 /Times-Roman rf /Fq 133[32 36 36 52 36 40 24 28 32 1[40 36 40 60 20 40 1[20 40 36 24 32 40 32 40 36 7[52 1[72 52 52 48 40 52 1[44 56 52 68 48 1[36 28 56 56 44 48 52 52 48 52 7[36 36 36 36 36 36 36 36 36 36 1[18 1[18 2[24 24 40[{}60 72.000000 /Times-Bold rf /Fr 4 106 df13 D15 D<134013C0EA0180A3EA0300A31206A35AA25AA35AA35AA35AA21260A37EA37EA37EA27E A37EA3EA0180A3EA00C013400A2E7CA112>104 D<12C0A21260A37EA37EA37EA27EA37E A3EA0180A3EA00C0A2EA0180A3EA0300A31206A35AA25AA35AA35AA35AA20A2E7DA112> I E /Fs 133[20 23 23 33 23 23 13 18 15 23 23 23 23 35 13 23 13 13 23 23 15 20 23 20 23 20 15 2[15 1[15 28 33 33 43 33 33 28 25 30 33 25 33 33 40 28 33 18 15 33 33 25 28 33 30 30 33 1[20 1[26 1[13 13 23 23 23 23 23 23 23 23 23 23 13 11 15 11 1[23 15 15 15 35 1[23 23 1[15 33[{}81 45.624989 /Times-Roman rf /Ft 129[25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 33[{}94 41.666668 /Courier rf /Fu 133[27 30 30 43 30 33 20 23 27 33 33 30 33 50 17 33 20 17 33 30 20 27 33 27 33 30 20 6[43 43 60 43 43 40 33 43 47 37 47 43 56 40 47 30 23 47 47 37 40 43 43 40 43 7[30 30 30 30 30 30 30 30 30 30 17 15 20 15 2[20 20 20 39[{}69 59.999973 /Times-Bold rf /Fv 138[48 2[38 1[48 1[48 1[24 3[48 1[29 38 1[38 1[43 11[62 2[62 4[81 57 2[33 21[43 43 43 43 1[22 46[{}20 86.416626 /Times-Bold rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 300dpi TeXDict begin %%EndSetup %%Page: 1 1 1 0 bop 0 693 a Fv(ILU)23 b(2.0alpha13)e(Reference)h(Manual)p 0 744 1950 17 v 0 1826 a Fu(Bill)14 b(Janssen)h Ft ()0 1892 y Fu(Mike)g(Spreitzer)d Ft()0 1959 y Fu(Dan)j(Larner)f Ft()0 2025 y Fu(Chris)h(Jacobi)f Ft()0 2174 y Fs(\(with)c(contributions)f(from)i (Doug)g(Cutting,)f(Frank)h(Halasz,)h(and)f(Denis)f(Seversen\))0 2324 y(\(typeset)g(5)h(November)h(1998\))0 2473 y(Copyright)208 2472 y(c)196 2473 y Fr(\015)g Fs(1991--1998)d(Xerox)i(Corporation)0 2536 y(All)f(Rights)h(Reserved.)p 0 2570 1950 9 v eop %%Page: 1 2 1 1 bop 1927 -58 a Fs(1)62 183 y(This)10 b(document)h(describes)g (version)f(2.0alpha13)g(of)h(the)g(Inter-Language)g(Unification)e (\(ILU\))i(system.)62 270 y(Lots)j(of)h(people)f(contributed)g (significant)f(amounts)h(of)h(code)g(to)f(the)h(ILU)g(system,)g (including)e(\(alphabetically\):)0 333 y(Joachim)c(Achtzehnter,)g(Judy) f(Anderson,)g(Antony)g(Courtney,)h(Doug)f(Cutting,)g(Mark)i(Davidson,)e (Ken)h(Fishkin,)f(Frank)0 395 y(Halasz,)i(Scott)f(Hassan,)g(Rob)h (Head,)g(Chris)f(Jacobi,)g(Bill)g(Janssen,)g(Swen)g(Johnson,)f(Dan)i (Larner,)g(Martin)f(von)g(Loewis,)0 457 y(Bill)g(Nell,)h(Paula)g (Newman,)h(Ansgar)e(Rademacher,)j(Dennis)d(Seversen,)i(Bridget)e (Spitznagel,)h(Mike)g(Spreitzer,)g(Owen)0 519 y(Taylor,)h(Farrell)g (Wymore,)h(and)f(Rick)g(Yardumian.)62 607 y(Many)g(others)f(have)h (contributed)d(in)j(other)f(ways,)g(including)f(our)h(reviewers,)h (alpha)g(and)f(beta)g(testers,)h(and)f(regular)0 669 y(users.)24 b(The)15 b(list)f(includes)g(\(but)h(is)g(not)g(limited)f (to\):)19 b(Shridhar)c(Acharya,)i(Joachim)e(Achtzehnter,)h(Judy)f (Anderson,)0 731 y(Maria)i(Perez)h(Ayo,)g(Mike)e(Beasley,)j(Erik)d (Bennett,)i(Dan)e(Brotsky,)h(David)f(Brownell,)i(Bruce)f(Cameron,)i (George)0 793 y(Carrette,)c(Philip)e(Chou,)h(Daniel)f(W.)i(Connolly,)e (Antony)f(Courtney,)i(Doug)f(Cutting,)g(Mark)i(Davidson,)e(Jim)h (Davis,)0 856 y(Larry)k(Edelstein,)g(Paul)g(Everitt,)g(Bill)f(Fenner,)j (Josef)d(Fink,)j(Jeanette)d(Figueroa,)i(James)f(Flagg,)i(Steve)e (Freeman,)0 918 y(Mark)12 b(Friedman,)f(Jim)g(Gettys,)f(Gabriel)h (Sanchez)g(Gutierrez,)h(Jun)e(Hamano,)h(Bruno)g(Haible,)g(Scott)g(W.)g (Hassan,)g(Carl)0 980 y(Hauser,)19 b(Rob)e(Head,)j(Michi)d(Henning,)h (Andrew)f(Herbert,)i(Angie)e(Hinrichs,)g(Ben)h(Hurwitz,)h(Roberto)e (Invernici,)0 1043 y(Christian)e(Jacobi,)h(Swen)g(Johnson,)g(Gabor)g (Karsai,)h(Nobu)e(Katayama,)j(Dan)d(`Bud')i(Keith,)f(Sangkyun)f(Kim,)i (Ted)0 1105 y(Kim,)f(Don)e(Kimber,)i(Steve)f(Kirsch,)g(Dan)g(Larner,)h (Carsten)f(Malischewski,)g(Larry)g(Masinter,)g(Fernando)g(D.)g(Mato)0 1167 y(Mira,)20 b(Fazal)f(Majid,)g(Steven)f(D.)g(Majewski,)h(Fernando)e (D.)i(Mato)e(Mira,)k(Michael)c(McIlrath,)j(Scott)e(Minneman,)0 1229 y(Masashige)f(Mizuyama,)k(Curtis)c(McKelvey,)j(Chet)e(Murthy,)h (Farshad)f(Nayeri,)i(Bill)d(Nell,)j(Les)d(Niles,)i(T.)f(Owen)0 1292 y(O'Malley,)11 b(Annrai)e(O'Toole,)h(Andreas)g(Paepcke,)i(Jan)e (Pedersen,)h(Karin)e(Petersen,)i(Steve)g(Putz,)g(George)f(Robertson,)0 1354 y(Joerg)g(Schreck,)h(Ian)f(Smith,)g(Bridget)g(Spitznagel,)f(Peter) i(Swain,)f(Marvin)g(Theimer,)h(Lindsay)d(Todd,)i(P.)h(B.)g(Tune,)f (Bill)0 1416 y(Tutt,)g(Kevin)h(Tyson,)f(Bill)h(van)g(Melle,)h(Guido)e (van)h(Rossum,)g(Brent)g(Welch,)h(Jody)e(Winston,)g(Rick)h(Yardumian.)p eop %%Page: 2 3 2 2 bop 0 -58 a Fs(Chapter)11 b(1:)g(ILU)g(Concepts)1468 b(2)0 183 y Fq(1)36 b(ILU)14 b(Concepts)0 389 y Fu(1.1)30 b(What)15 b(ILU)g(Does)62 495 y Fs(ILU)e(is)f(primarily)g(about)g (interfaces)g(between)g(units)f(of)i(program)g(structure;)f(we)h(call)f (these)g(units)f Fp(modules)p Fs(.)k(The)0 557 y(notion)i(is)g(that)h (each)g(module)g(enscapsulates)f(some)h(logical)f(part)h(of)h(a)f (program,)j(that)c(has)h(high)f(`cohesiveness')0 620 y(internally,)11 b(and)g(low)h(`coupling')e(to)h(other)h(parts)f(of)h (the)g(program.)h(ILU)f(provides)f(you)g(with)g(a)h(way)g(of)g(writing) e(down)0 682 y(an)17 b(object-oriented)e Fp(interface)k Fs(to)d(the)h(module;)h(that)e(is,)i(a)f(set)f(of)h(object)f(types)g (and)g(other)g(types,)i(constants,)e(and)0 744 y(exceptions)10 b(that)i(another)f(module)g(would)g(use)h(to)f(communicate)h(with)f (it.)i(This)e(interface)h(can)g(then)f(be)h(processed)g(by)0 806 y(various)e(ILU)h(tools)f(to)h(implement)g(that)f(communication.)62 896 y(ILU)15 b(allows)g(many)g(different)g(binding)f(relationships)e (between)j(modules.)23 b(The)16 b(modules)e(can)i(be)f(parts)g(of)g (one)0 958 y(program)c(instance,)g(all)g(written)f(in)g(the)h(same)h (language;)e(they)g(can)i(be)f(parts)f(written)g(in)h(different)g (languages,)f(sharing)0 1020 y(runtime)g(support)f(in)g(one)i(memory)g (image;)f(they)g(can)g(be)h(parts)e(running)g(in)h(different)g(program) h(instances)e(on)h(different)0 1083 y(machines)j(\(on)g(different)g (sides)f(of)h(the)g(planet\).)k(A)c(module)f(could)h(even)g(be)g(a)h (distributed)c(system)j(implemented)g(by)0 1145 y(many)e(program)f (instances)f(on)h(many)h(machines.)g(A)f(particular)g(module)g(might)g (be)g(part)g(of)h(several)f(different)g(program)0 1207 y(instances)16 b(at)i(the)f(same)i(time.)30 b(ILU)18 b(does)f(all)g(the)h(translating)d(and)j(communicating)e(necessary)i (to)f(use)g(all)h(these)0 1269 y(kinds)11 b(of)i(modules)f(in)h(a)g (single)f(program.)k(It)d(optimizes)f(calls)g(across)h(module)f (interfaces)h(to)f(involve)f(only)h(as)h(much)0 1332 y(mechanism)f(as)f(necessary)g(for)h(the)f(calling)f(and)h(called)g (modules)g(to)g(interact.)h(In)f(particular,)g(when)g(the)g(two)g (modules)0 1394 y(are)k(in)e(the)h(same)h(memory)f(image)h(and)e(use)h (the)g(same)h(data)f(representations,)f(the)h(calls)f(are)i(direct)f (local)f(procedure)0 1456 y(calls)e(---)i(no)e(stubs)g(or)g(other)h (RPC)h(mechanisms)e(are)i(involved.)e(The)h(notion)e(of)i(a)g(`module') g(should)e(not)h(be)h(confused)0 1518 y(with)g(the)g(independent)f (concept)h(of)h(a)g Fp(program)f(instance)s Fs(;)g(by)g(which)g(we)h (mean)g(the)g(combination)e(of)h(code)h(and)f(data)0 1581 y(running)h(in)g(one)h(memory)h(image.)21 b(A)14 b(UNIX)g(process)f(is)h(\(modulo)f(the)h(possibilities)d(introduced)h (by)i(the)g(ability,)g(in)0 1643 y(some)d(UNIX)g(sytems,)g(to)g(share)g (memory)h(between)f(processes\))g(an)g(example)g(of)g(a)h(program)f (instance.)62 1733 y(Because)i(ILU)f(standardizes)f(many)h(of)g(the)g (issues)f(involved)f(in)i(providing)e(proper)i(inter-module)f (independence,)0 1795 y(such)g(as)h(memory)h(management)f(and)g(error)h (detection)d(and)i(recovery)g(strategies,)g(it)f(can)h(be)g(used)g(to)f (build)g(language-)0 1857 y(independent)f Fp(class)g(libraries)p Fs(,)h(collections)f(of)h(re-usable)g(object)f(definitions)f(and)i (implementations.)f(Because)i(one)f(of)0 1919 y(the)f(design)e(goals)h (of)h(ILU)g(was)f(to)h(use)f(existing)f(standards)h(for)h(various)f (pieces,)h(rather)g(than)f(inventing)f(anything)g(new,)0 1982 y(ILU)14 b(can)g(be)g(used)f(to)g(implement)h(ONC)g(RPC)g(or)g (Xerox)g(Courier)g(services,)g(or)g(clients)e(for)i(existing)e(ONC)i (RPC)h(or)0 2044 y(Xerox)c(Courier)h(services.)g(ILU)g(also)f(includes) f(an)i(implementation)e(of)h(the)h(Object)f(Management)h(Group's)e (CORBA)0 2106 y(Internet)h(Inter-Orb)g(Protocol)f(\()p Fp(IIOP)t Fs(\),)j(and)e(can)g(be)h(used)e(to)h(write)g(CORBA)h (services)f(or)g(clients,)f(as)h(well.)0 2253 y Fu(1.2)30 b(How)14 b(ILU)i(Works)62 2359 y Fs(The)c(approach)g(used)f(by)h(ILU)g (is)g(one)f(common)i(to)e(standard)g(RPC)j(systems)d(such)g(as)h(Sun's) g(ONC)g(RPC,)i(Xerox's)0 2421 y(Courier,)e(and)g(most)f (implementations)f(of)i(OMG's)g(CORBA.)h(An)e(interface)h(is)g (described)f(once)g(in)h(some)g(`language-)0 2483 y(neutral')17 b(interface)g(specification)f(language.)29 b(Types)16 b(and)h(exceptions)f(are)i(described;)h(exported)e(functionality)e(is)0 2545 y(specified)j(by)f(defining)g Fp(methods)j Fs(on)d(object)h (types.)32 b(Tools)17 b(are)i(then)f(run)g(against)f(the)h(interface)g (description)f(to)0 2608 y(produce)11 b Fp(stubs)h Fs(for)f(particular) g(programming)g(languages;)f(these)h(stubs)f(can)i(bind)f(to,)g(call,)h (and)f(be)g(called)h(from)g(stubs)0 2670 y(generated)g(from)g(the)g (same)g(interface)g(description)e(for)i(a)g(different)g(programming)f (language.)i(The)f(stub)f(code)g(is)h(then)p eop %%Page: 3 4 3 3 bop 0 -58 a Fs(Chapter)11 b(1:)g(ILU)g(Concepts)1468 b(3)0 183 y(linked)14 b(with)g(the)h(application)e(code,)j(some)g (language-specific)d(code)i(containing)f(any)g(necessary)h(ILU)g (support)f(for)0 246 y(that)f(programming)h(language,)h(and)e(the)h Fp(ILU)g(kernel)g(library)p Fs(,)h(which)e(is)g(code)h(written)f(in)h (ANSI)g(C.)h(The)f(following)0 308 y(diagram)d(illustrates)e(the)i (process:)56 1878 y @beginspecial 106 @llx 273 @lly 547 @urx 631 @ury 4410 @rwi @setspecial %%BeginDocument: two-ilu-modules.idraw /arrowHeight 10 def /arrowWidth 5 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 /Times-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 /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 %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.799705 0 0 0.799705 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 285.687 381 ] concat %I [ (Two ILU modules in different languages) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 322.187 357 ] concat %I [ (and different address spaces) ] Text End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t u Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Green 0 1 0 SetCBg %I p 1 SetP %I t [ 1.28235 0 0 1.22549 -214.707 -224.796 ] concat %I 548 541 48 24 Elli End Begin %I Rect %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Yellow 1 1 0 SetCBg %I p 1 SetP %I t [ 1 0 0 1 12 163 ] concat %I 124 469 204 517 Rect End Begin %I Rect %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Yellow 1 1 0 SetCBg %I p 1 SetP %I t [ 1 0 0 1 12 187 ] concat %I 412 469 516 517 Rect End Begin %I Rect %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Yellow 1 1 0 SetCBg %I p 1 SetP %I t [ 1 0 0 1 12 211 ] concat %I 124 293 204 341 Rect End Begin %I Rect %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Yellow 1 1 0 SetCBg %I p 1 SetP %I t [ 0.981481 0 0 0.833333 21.5741 243.667 ] concat %I 412 293 516 349 Rect End Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Green 0 1 0 SetCBg %I p 1 SetP %I t [ 1.78 0 0 0.944444 178.34 208.556 ] concat %I 148 405 48 16 Elli End Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Green 0 1 0 SetCBg %I p 1 SetP %I t [ 1 0 0 1 36 187 ] concat %I 148 405 48 16 Elli End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 144 669 ] concat %I [ (Modula-3) (stubber) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 152 541 ] concat %I [ (C++) (stubber) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 448 701 ] concat %I [ (Compile) (Link) (Run) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 448 533 ] concat %I [ (Compile) (Link) (Run) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 160 597 ] concat %I [ (Foo.isl) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 384 597 ] concat %I [ (ILU runtime kernel) ] Text End Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.752941 0.752941 0.752941 SetCBg %I p 1 SetP %I t [ 1 0 0 1 36 163 ] concat %I 276 565 48 16 Elli End Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.752941 0.752941 0.752941 SetCBg %I p 1 SetP %I t [ 1 0 0 1 60 155 ] concat %I 244 525 40 16 Elli End Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.752941 0.752941 0.752941 SetCBg %I p 1 SetP %I t [ 1 0 0 1 68 147 ] concat %I 244 525 40 16 Elli End Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.752941 0.752941 0.752941 SetCBg %I p 1 SetP %I t [ 1 0 0 1 76 139 ] concat %I 244 525 40 16 Elli End Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.752941 0.752941 0.752941 SetCBg %I p 1 SetP %I t [ 1 0 0 1 84 131 ] concat %I 244 525 40 16 Elli End Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.752941 0.752941 0.752941 SetCBg %I p 1 SetP %I t [ 1 0 0 1 36 -29 ] concat %I 276 565 48 16 Elli End Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.752941 0.752941 0.752941 SetCBg %I p 1 SetP %I t [ 1 0 0 1 60 -37 ] concat %I 244 525 40 16 Elli End Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.752941 0.752941 0.752941 SetCBg %I p 1 SetP %I t [ 1 0 0 1 68 -45 ] concat %I 244 525 40 16 Elli End Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.752941 0.752941 0.752941 SetCBg %I p 1 SetP %I t [ 1 0 0 1 76 -53 ] concat %I 244 525 40 16 Elli End Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.752941 0.752941 0.752941 SetCBg %I p 1 SetP %I t [ 1 0 0 1 84 -61 ] concat %I 244 525 40 16 Elli End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 288 733 ] concat %I [ (Foo.i3) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 288 541 ] concat %I [ (Foo.hh) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 265.255 438.083 ] concat %I [ (other C++ stub files) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 262.252 630.083 ] concat %I [ (other M3 stub files) ] Text End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 436.48 68.2338 ] concat Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Green 0 1 0 SetCBg %I p 1 SetP %I t [ 1.28235 0 0 1.22549 -518.387 -223.368 ] concat %I 548 541 48 24 Elli End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 148.341 445 ] concat %I [ (Application) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 163.341 429 ] concat %I [ (Source) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 171.841 461 ] concat %I [ (C++) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 422.4 -64.9846 ] concat Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Green 0 1 0 SetCBg %I p 1 SetP %I t [ 1.28235 0 0 1.22549 -510.387 80.6317 ] concat %I 548 541 48 24 Elli End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 156.342 749 ] concat %I [ (Application) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 171.342 733 ] concat %I [ (Source) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 161.842 765 ] concat %I [ (Modula-3) ] Text End End %I eop Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Green 0 1 0 SetCBg none SetP %I p n %I t [ 1 0 0 1 12 187 ] concat %I 204 493 268 533 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Green 0 1 0 SetCBg none SetP %I p n %I t [ 1 0 0 1 12 187 ] concat %I 348 541 412 509 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Green 0 1 0 SetCBg none SetP %I p n %I t [ 1 0 0 1 12 187 ] concat %I 348 485 412 493 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Green 0 1 0 SetCBg none SetP %I p n %I t [ 1 0 0 1 12 187 ] concat %I 428 421 452 469 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Green 0 1 0 SetCBg none SetP %I p n %I t [ 1 0 0 1 12 187 ] concat %I 428 389 460 349 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Green 0 1 0 SetCBg none SetP %I p n %I t [ 1 0 0 1 12 187 ] concat %I 348 349 412 333 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Green 0 1 0 SetCBg none SetP %I p n %I t [ 1 0 0 1 12 187 ] concat %I 204 349 252 349 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Green 0 1 0 SetCBg none SetP %I p n %I t [ 1 0 0 1 12 187 ] concat %I 172 389 172 365 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Green 0 1 0 SetCBg none SetP %I p n %I t [ 1 0 0 1 12 187 ] concat %I 172 421 172 445 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Green 0 1 0 SetCBg none SetP %I p n %I t [ 1 0 0 1 12 187 ] concat %I 332 301 412 325 Line %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 0 -16.2462 ] concat Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Green 0 1 0 SetCBg %I p 1 SetP %I t [ 1.28235 0 0 1.22549 -229.87 110.958 ] concat %I 548 541 48 24 Elli End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 429 786 ] concat %I [ (ILU Modula-3) (Runtime) ] Text End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 461 449 ] concat %I [ (ILU C++) (Runtime) ] Text End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 1.08308 -0 -0 1.08308 94.2277 316.258 ] concat %I 429 178 402 178 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 1.08308 -0 -0 1.08308 94.2277 316.258 ] concat %I 423 335 401 335 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 1.08308 -0 -0 1.08308 94.2277 316.258 ] concat %I 349 381 349 359 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 1.08308 -0 -0 1.08308 92.0615 317.341 ] concat %I 364 137 351 157 Line %I 1 End End %I eop End %I eop showpage end %%EndDocument @endspecial 62 2118 a(Several)f(modules)f(may)h(be)g(linked)f (together,)g(for)h(a)g(standalone)e(use.)j(ILU)f(stubs)e(are)i (generated)g(in)f(such)g(a)h(way)g(that)0 2181 y(applications)h(which)i (link)f(a)i(caller)f(and)g(callee)h(written)e(in)h(the)g(same)h (language)e(directly)g(together)h(suffer)g(no)g(calling)0 2243 y(overhead.)e(This)f(makes)h(ILU)g(useful)f(for)h(defining)f (interfaces)g(between)h(modules)f(even)h(in)f(programs)h(that)f(do)g (not)g(use)0 2305 y(RPC.)62 2483 y(Different)h(modules)g(of)g(the)h (program)f(may)h(be)f(written)g(in)g(different)g(programming)g (languages.)g(These)g(can)g(either)0 2545 y(be)i(linked)f(together)g (in)h(the)g(same)h(address)e(space,)j(if)e(the)f(runtimes)h(of)g(the)g (different)g(languages)f(allow)g(that,)i(or)f(they)0 2608 y(can)i(be)g(used)f(to)h(make)g(separate)g(network)f(servers)h (and)g(clients.)21 b(In)15 b(the)g(case)g(of)g(a)g(network)f(service,)i (the)f(memory)0 2670 y(layout)10 b(for)h(the)g(program)h(would)e(be)h (something)f(like)p eop %%Page: 4 5 4 4 bop 0 -58 a Fs(Chapter)11 b(1:)g(ILU)g(Concepts)1468 b(4)190 1346 y @beginspecial 106 @llx 299 @lly 483 @urx 622 @ury 3770 @rwi @setspecial %%BeginDocument: ilu-addr-space.idraw /arrowHeight 10 def /arrowWidth 5 def /IdrawDict 52 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 /Times-Bold reencodeISO def /Helvetica 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 /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 %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.799705 0 0 0.799705 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Rect none SetB %I b n %I cfg Black 0 0 0 SetCFg %I cbg Yellow 1 1 0 SetCBg %I p 1 SetP %I t [ 1 -0 -0 1 10 172 ] concat %I 126 252 494 484 Rect End Begin %I Rect none SetB %I b n %I cfg Black 0 0 0 SetCFg %I cbg Orange 1 0.647059 0 SetCBg %I p 1 SetP %I t [ 1 -0 -0 1 10 172 ] concat %I 126 484 494 604 Rect End Begin %I Rect %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 10 172 ] concat %I 178 603 178 604 Rect End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 10 188 ] concat %I 126 532 494 532 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 10 204 ] concat %I 126 484 494 484 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 10 212 ] concat %I 126 444 494 444 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 10 212 ] concat %I 126 404 494 404 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.5 -0 -0 0.186567 164.5 533.978 ] concat %I 262 444 262 180 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 10 172 ] concat %I 286 396 494 396 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.726415 -0 -0 0.5 145.425 341.5 ] concat %I 286 356 494 356 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.726415 -0 -0 0.5 143.972 313.5 ] concat %I 286 316 494 316 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.5 -0 -0 0.663636 180.5 305.536 ] concat %I 342 396 342 180 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 203 758 ] concat %I [ (Application Code \(in Language X\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 214.5 710 ] concat %I [ (Module Stubs \(in Language X\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 236.5 678 ] concat %I [ (Language X ILU runtime) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 220.5 646 ] concat %I [ (ILU Kernel generic functions) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 352 598 ] concat %I [ (RPC Protocol) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 369 550 ] concat %I [ (Transport filter A) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 369 502 ] concat %I [ (Transport filter B) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 360 454 ] concat %I [ (Transport Endpoint) ] Text End Begin %I Pict %I b u %I cfg u %I cbg u %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I p u %I t u Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.12837 -0 -0 0.72432 7.6842 292.483 ] concat %I 190 404 56 32 Elli End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 192 595 ] concat %I [ (Object) (Databases) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I p u %I t u Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.598684 -0 -0 0.87877 82.6726 205.918 ] concat %I 174 356 72 32 Elli End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 160 531 ] concat %I [ (Threading) (Interface) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I p u %I t [ 1 0 0 1 59 4 ] concat Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.66479 -0 -0 0.695915 75.1547 258.517 ] concat %I 174 284 56 32 Elli End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 168 467 ] concat %I [ (Type) (Registry) ] Text End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 512 765 ] concat %I [ (User Code) ] Text End Begin %I MLine %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 10 172 ] concat %I 4 502 548 518 524 518 276 502 252 4 MLine %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 544 589 ] concat %I [ (ILU Code) ] Text End Begin %I Rect %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Orange 1 0.647059 0 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 10 172 ] concat %I 126 252 494 604 Rect End Begin %I Elli %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -47 171 ] concat %I 335 357 48 24 Elli End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 256 541 ] concat %I [ (``main loop'') ( interface) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 264 390 ] concat %I [ (An ILU address space) ] Text End End %I eop showpage end %%EndDocument @endspecial 0 1491 a Fu(1.3)30 b(Core)14 b(ILU)h(Concepts)0 1638 y Fo(1.3.1)26 b(Objects)62 1744 y Fs(ILU)10 b(is)f Fp(object-oriented)p Fs(.)g(By)h(this,)f(we)h(mean)g(that)f(object)g (types)g(serve)h(as)f(the)h(primary)f(encapsulation)f(mechanism)0 1807 y(in)17 b(ILU.)g(All)g(functionality)e(is)i(exported)f(from)i(a)g (module)f(as)g(methods)g(that)f(can)i(be)f(invoked)f(on)h(an)h (instance)e(of)0 1869 y(some)d(object)f(type,)g(rather)h(than)f(as)h (simple)f(procedures.)j(The)e(object)f(instance)g(provides)f(the)h (context)g(within)f(which)0 1931 y(methods)f(are)h(executed.)g(The)g (object)e(type)i(system)f(provides)f(subtyping)f(\(`inheritance')i(of)h (interfaces)f(\(ILU)h(does)f(not)0 1993 y(address)h(object)f (implementation\)\),)g(to)h(aid)g(in)g(structuring)e(of)i(interfaces.) 62 2083 y(With)17 b(respect)h(to)f(a)h(particular)f(ILU)g(object)g (instance,)i(a)f(module)f(is)g(called)h(the)f Fp(server)22 b Fs(if)17 b(it)g(implements)g(the)0 2145 y(methods)9 b(of)h(that)f(object,)h(or)f(a)i Fp(client)i Fs(if)d(it)f(calls,)h(but) f(does)g(not)g(implement,)h(the)g(methods)f(of)g(that)h(object.)g(One)g (module)0 2207 y(can)i(thus)e(be)i(a)g(client)f(of)g(one)g(object,)h (and)f(the)g(server)h(of)g(another.)g(An)f(ILU)h(object)e(can)i(be)g (passed)f(as)g(a)h(parameter)h(to)0 2269 y(or)i(result)e(of)i(a)g (method)f(call,)h(and)g(can)f(be)h(\(in\))f(the)h(parameter)g(to)f(an)h (exception.)20 b(An)14 b(object)g(may)h(be)g(passed)f(from)0 2332 y(its)h(server)h(to)f(a)h(client,)h(from)f(a)g(client)f(to)g(its)g (server,)j(or)d(between)h(two)f(clients,)h(in)f(any)h(of)g(the)f(above) h(three)g(kinds)0 2394 y(of)e(position.)19 b(Unlike)13 b(some)h(RPC)h(systems,)g(there)f(can)h(be)f(multiple)f(ILU)h(objects)f (of)i(the)f(same)g(type,)h(even)f(on)g(one)0 2456 y(machine,)e(even)f (within)e(one)i(program)h(instance.)62 2545 y(For)f(a)f(given)f(ILU)h (object,)g(there)h(will,)e(in)h(general,)g(be)h(multiple)d Fp(language-specific)h(objects)r Fs(;)g(each)i(is)e(an)h(``object'')0 2608 y(in)h(one)g(of)h(the)f(programming)g(languages)f(used)h(in)g(the) h(system.)f(One)h(language-specific)e(object,)h(designated)f(the)h Fp(true)0 2670 y(object)p Fs(,)f(actually)g(provides)g(the)g (implementation)g(of)h(the)f(ILU)h(object;)f(it)g(is)g(thus)g(part)g (of)h(the)g(server)g(module.)g(The)f(true)p eop %%Page: 5 6 5 5 bop 0 -58 a Fs(Chapter)11 b(1:)g(ILU)g(Concepts)1468 b(5)0 183 y(object's)10 b(methods)f(are)j(written)d(by)h(the)g (programmer,)i(not)e(generated)g(by)h(ILU.)f(The)h(other)f (language-specific)f(objects)0 246 y(are)k Fp(surrogate)e(objects)r Fs(;)g(their)h(methods)f(are)i(actually)e(RPC)i(stubs)e(\(generated)h (by)g(ILU\))g(that)g(call)g(on)g(the)g(true)g(object.)0 308 y(A)g(surrogate)g(object)f(is)h(used)g(by)g(a)g(client)g(module)f (when)h(the)g(server)h(module)e(is)h(in)g(a)g(different)g(program)h (instance)e(or)0 370 y(uses)g(different)f(data)i(representations.)0 493 y Fn(1.3.1.1)23 b(Kernel)16 b(Servers)62 597 y Fs(Each)d(instance)g (in)f(an)h(ILU)g(address)g(space)g(is)g(associated)f(with)g(a)h Fp(kernel)g(server)p Fs(,)h(a)f(construct)f(which)h(manages)g(a)0 659 y(group)c(of)h(objects.)g(Kernel)g(servers)g(are)h(found)e(in)h (both)f(client)g(and)h(server)g(modules.)h(Each)f(kernel)f(server)i (has)f(a)g Fp(server)0 722 y(ID)p Fs(,)i(a)h(universally)d(unique)g (string)h(ID.)h(The)g(server)g(ID)g(makes)g(up)f(part)h(of)g(the)g (object)f(ID)h(of)g(the)f(instances)g(supported)0 784 y(by)f(the)h(server.)h(Some)f(kernel)g(servers)g(contain)f(only)f (surrogate)i(instances,)f(and)g(are)i(called)f Fp(surrogate)f(servers)r Fs(;)g(others)0 846 y(contain)g(both)g(surrogate)h(and)g(true)g (instances,)f(and)h(are)h(called)f Fp(true)g(servers)p Fs(.)62 933 y(Kernel)f(servers)g(serve)g(as)g(the)g(locus)f(of)i (communication)e(between)g(two)h(address)f(spaces.)i(A)f(true)g(server) h(may)f(have)0 996 y(a)i(number)f(of)g Fp(ports)i Fs(associated)d(with) g(it;)h(a)g(port)g(is)g(a)h(mechanism)f(by)g(which)g(other)g(address)g (spaces)g(can)g(interact)g(with)0 1058 y(objects)f(in)g(this)g(address) g(space.)i(Other)e(address)g(spaces)h(use)f(the)h(port)f(by)h(creating) f(a)h(surrogate)f(server)h(which)f(mirrors)0 1120 y(the)i(true)f (server,)i(and)f(opening)f(a)h Fp(connection)h Fs(from)g(the)e (surrogate)h(server)g(to)f(the)h(true)g(server.)i(Calls)d(from)i (surrogate)0 1182 y(instances)d(on)g(true)h(instances)f(are)h(carried)g (along)f(this)g(connection.)g(A)h(true)g(server)g(may)g(have)g (multiple)e(ports,)i(each)g(of)0 1245 y(which)f(may)i(provide)e (connectability)f(via)i(different)g(RPC)h(protocols)e(or)h(transport)f (mechanisms.)0 1368 y Fn(1.3.1.2)23 b(Subtyping)15 b(\(interface)h (inheritance\))62 1472 y Fs(The)9 b(object)f(model)h(specified)f(here)h (provides)f(for)h(multiple)e(interface)i(inheritance.)h(It)f(is)f (intended)g(that)g(the)h(subtype)0 1534 y(provide)k(all)g(the)h (methods)e(described)i(by)f(its)g(supertypes,)g(plus)g(possibly)e (other)i(methods)g(described)g(directly)g(in)g(the)0 1596 y(subtype)d(description.)h(It)g(is)g(expected)g(that)g(in)g (languages)g(which)f(support)g(multiple-inheritance)g(object)g(models,) i(that)0 1658 y(an)j(ILU)f(inheritance)g(tree)g(will)g(be)g(reflected)h (in)f(the)g(language-specific)g(inheritance)f(tree.)22 b(In)14 b(a)h(single-inheritance)0 1721 y(language,)10 b(or)h(a)g(non-object-oriented)d(one,)j(an)f(ILU-specific)g (multiple-\(interface-\)inheritance)f(object)h(system)g(must)0 1783 y(be)h(embedded.)0 1906 y Fn(1.3.1.3)23 b(Subtype)16 b(Relationships)62 2010 y Fs(In)f(the)f(ILU)g(type)g(system,)h(the)g (only)e(subtyping)f(questions)g(that)i(arise)h(are)g(between)f(two)g (object)g(types.)20 b(This)14 b(is)0 2072 y(because)d(ILU)g(employs)g (only)f(those)g(OOP)h(features)h(common)f(to)g(all)g(languages)f (supported.)62 2159 y(Subtyping)h(in)h(ILU)g(is)g(based)g(on)g (structure)g(and)g(name;)h(we)g(include)e(the)h(names)h(in)f(the)g (structure,)h(and)f(thus)f(need)0 2222 y(only)h(talk)g(about)g (structure.)17 b(An)12 b(object)g(type)h(declaration)f(of)h(the)g(form) g(defined)g(later)f(constructs)g(a)h(structure)f(of)h(the)0 2284 y(form)120 2371 y(\(OBJTYPE)177 2421 y(SINGLETON:)d Fp(singleton-protoco)o(l-info)177 2471 y Fs(OPTIONAL:)g Ft(Boolean)177 2521 y Fs(COLLECTIBLE:)g Ft(Boolean)177 2570 y Fs(AUTHENTICATION:)f Fp(authentication-type)177 2620 y Fs(SUPERTYPES:)i Fp(supertype-structure,)f(...)177 2670 y Fs(METHODS:)g Fp(method-structure,)h(...)p eop %%Page: 6 7 6 6 bop 0 -58 a Fs(Chapter)11 b(1:)g(ILU)g(Concepts)1468 b(6)177 183 y(LEVEL-BRANDS:)10 b(\()p Fp(interface-name)p Fs(,)j Fp(interface-brand)p Fs(,)302 233 y Fp(type-name)p Fs(,)e Fp(type-brand)5 b Fs(\)\))62 345 y(Structure)12 b(A)g(is)g(a)g(subtype)e(of)i(structure)g(B)g(iff)g(either)g(\(1\))g(A) g(and)g(B)g(are)h(equal)f(structures,)f(or)h(\(2\))g(one)g(member)h(of) 0 407 y(A's)e Fp(supertype-structure)s Fs(s)e(is)h(a)i(subtype)e(of)h (B.)62 495 y(Note)16 b(that)g(the)h(level-brands)e(include)h(the)g (interface)h(name)h(and)e(\(optional\))f(brand,)j(as)f(well)f(as)h(the) f(name)h(and)0 557 y(\(optional\))11 b(brand)i(of)g(the)f(type)h(being) f(declared.)17 b(Thus,)12 b(two)h(declarations)e(of)i(subtypes)e(of)i (the)g(same)h(type)e(normally)0 619 y(create)f(distinct)e(subtypes,)h (because)h(they)f(would)g(declare)h(types)f(of)h(different)f(names,)i (or)f(in)f(interfaces)h(with)f(different)0 681 y(names.)i(When)e(the)h (interface)f(name)i(and)e(the)h(type)f(name)h(are)h(the)e(same,)i(this) d(does)i(not)f(cause)h(a)g(distinction,)d(although)0 744 y(other)13 b(structural)f(differences)h(might.)18 b(If)13 b(the)g(programmer)h(wants)f(to)g(indicate)f(that)h(there's)g (a)h(semantic)f(distinction,)0 806 y(even)i(though)f(it)h(doesn't)f (otherwise)h(show)f(up)h(in)g(the)g(structure,)h(s/he)f(can)g(use)h (different)f(interface)g(brands)g(and/or)0 868 y(different)f(type)h (brands.)22 b(These)14 b(distinctions)e(can)j(be)g(made)g(between)g (declarations)e(in)i(different)f(files,)i(or)f(between)0 930 y(successive)10 b(versions)g(of)h(a)h(declaration)e(in)h(a)g(file)g (that's)g(been)g(edited.)0 1049 y Fn(1.3.1.4)23 b(Singleton)15 b(Object)h(Types)62 1153 y Fs(Many)h(existing)d(RPC)j(protocols)d(and)i (servers)g(do)g(not)g(have)g(the)f(notion)g(of)h(multiple)f(instances)g (of)h(a)g(type)g(co-)0 1215 y(existing)10 b(at)i(the)g(same)h(server,)g (so)e(cannot)h(use)g(the)f(instance)g(discrimination)f(information)h (passed)h(in)f(ILU)h(procedure)0 1277 y(calls.)i(To)d(support)g(the)h (use)f(of)h(these)g(protocols)e(and)i(servers,)h(we)f(introduce)f(the)h (notion)e(of)i(a)g Fp(singleton)h Fs(object)e(type,)0 1339 y(of)j(which)f(there)h(is)f(only)g(one)g(instance)g(\(of)h(each)g (singleton)e(type\))h(at)h(a)g(kernel)g(server.)19 b(Note)13 b(that)g(because)h(a)g(single)0 1402 y(address)e(space)h(may)g(support) e(multiple)g(kernel)i(servers,)g(this)e(means)i(that)f(in)g(a)h(single) f(address)g(space,)h(there)g(may)g(be)0 1464 y(multiple)e(instances)g (of)h(the)f(same)i(singleton)d(type.)k(When)d(a)i(method)e(is)h(being)f (called)h(on)g(an)g(instance)f(of)h(a)g(singleton)0 1526 y(type,)f(no)g(instance)f(discrimination)f(information)h(is)h(passed.)g (Singleton)e(types)i(may)g(not)g(be)g(subclassed.)0 1645 y Fn(1.3.1.5)23 b(Instantiation)62 1748 y Fs(To)12 b(use)f(\(e.g.,)i (call)f(the)f(methods)g(of\))h(an)g(ILU)f(object,)h(a)g(client)f(must)g (first)g(obtain)g(a)h(language-specific)e(object)h(for)0 1811 y(that)h(ILU)g(object.)k(This)11 b(can)i(be)g(done)f(in)g(one)g (of)h(two)f(ways:)h(\(1\))g(the)f(client)g(can)h(call)f(on)h(a)g (language-specific)e(object)0 1873 y(of)h(a)h(different)f(ILU)h(object) e(to)h(return)h(the)f(object)f(in)h(question)f(\(or)i(receive)f(the)h (object)e(in)h(a)h(call)f(made)h(on)f(the)h(client,)0 1935 y(or)g(in)f(the)h(parameter)g(of)g(an)g(exception)e(caught)i(and)f (handled)g(by)g(the)h(client\);)f(or)h(\(2\))g(certain)g(standard)e (facilities)h(can)0 1998 y(be)g(used)g(to)f(acquire)h(a)g (language-specific)f(object)h(given)f(either)g(addressing)g(or)h (naming)g(information)e(about)i(the)f(ILU)0 2060 y(object.)22 b(The)15 b(addressing)e(information)h(is)g(called)h(a)g Fp(string)e(binding)g(handle)k Fs(\(SBH\),)f(and)f(the)g(ILU)f(runtime) h(library)0 2122 y(includes)d(a)h(procedure)f(to)h(acquire)g(a)g (language-specific)e(object)h(given)g(a)i(string)d(binding)g(handle)h (for)h(an)g(ILU)g(object)0 2184 y(\(in)d(strongly-typed)e(languages,)j (this)e(procedure)i(is)f(typed)g(to)g(return)h(an)g(object)f(of)g(the)h (base)f(type)h(common)g(to)f(all)g(ILU)0 2247 y(objects)g(in)h(that)f (language\).)62 2334 y(Every)g(creation)f(of)g(a)h(surrogate)f (instance)g(implies)g(communication)f(with)h(the)g(server)h(module,)g (and)f(binding)f(of)h(the)0 2396 y(surrogate)i(instance)g(to)g(the)h (true)f(instance.)h(ILU)g(may)g(attempt)f(to)h(perform)g(this)f (communication)f(when)i(it)f(is)g(actually)0 2458 y(necessary,)g (rather)h(than)e(immediately)h(on)g(surrogate)f(instance)h(creation.)62 2545 y(The)g(process)f(of)h(creating)g(an)g(instance)f(may)h (bootstrapped)e(via)i(a)g Fp(name)h(service)p Fs(,)f(such)f(as)h(the)g (PARC)h(Name-and-)0 2608 y(Maintenance-Server)f(\()p Ft(NMS)p Fs(\),)f(which)g(allows)f(servers)h(to)f(register)h(instances) e(on)i(a)g(net-wide)g(basis.)g(A)g(server)g(registers)0 2670 y(a)19 b(mapping)e(from)i(naming)f(information)f(to)h(a)h(string)e (binding)f(handle.)33 b(The)18 b(client-side)f(stubs)g(for)i(an)f (interface)p eop %%Page: 7 8 7 7 bop 0 -58 a Fs(Chapter)11 b(1:)g(ILU)g(Concepts)1468 b(7)0 183 y(include)15 b(a)i(procedure)f(that)g(takes)g(naming)f (information,)i(looks)e(up)h(the)g(corresponding)f(string)g(binding)f (handle)i(in)0 246 y(the)g(name)h(service,)i(and)d(calls)g(the)g (above-mentioned)g(library)f(routine)h(to)g(map)h(the)f(SBH)h(to)g(a)f (language-specific)0 308 y(object.)d(Alternatively,)d(a)j(client)e(can) h(do)f(those)g(steps)g(itself,)h(using)e(an)i(ILU)g(runtime)g(library)f (procedure)h(to)f(acquire)h(a)0 370 y(language-specific)e(object)g(for) i(the)f(name)g(service.)0 501 y Fn(1.3.1.6)23 b(String)15 b(Binding)g(Handle)62 607 y Fs(In)f(ILU,)g(there)g(is)f(a)h (string-based)e(representation)h(for)h(a)g(reference)h(to)e(an)h (object.)k(That)c(representation)e(consists)0 669 y(of)h(a)f(single)g (string,)f(called)i(a)f Fp(string)g(binding)e(handle)p Fs(.)15 b(ILU)d(uses)g(string)f(binding)g(handles)h(when)g(marshalling) f(object)0 732 y(references)f(for)g(RPC.)g(ILU)f(also)g(allows)f (applications)f(to)i(interconvert)f(between)h(objects)f(and)h(string)f (binding)g(handles.)0 794 y(This)i(is)h(necessary)g(when)g(dealing)f (with)g(name)i(services,)f(and)g(useful)f(in)h(other)g(circumstances.) 62 883 y(A)g(string)f(binding)g(handle)g(contains)g(several)h (different)g(pieces)g(of)g(information:)37 973 y Fr(\017)30 b Fs(The)16 b Fp(server)h(ID)p Fs(,)g(a)f(string)f(which)h(identifies)f (the)h(particular)g Fp(kernel)g(server)k Fs(that)c(the)g(object)f (belongs)g(to;)j(any)90 1035 y(program)11 b(can)g(separate)f(its)g (objects)g(into)f(one)h(or)h(more)g(groups,)f(each)h(group)f (associated)g(with)f(a)i(different)f(kernel)90 1097 y(server.)i(Two)e (objects)h(from)g(the)g(same)h(kernel)f(server)g(are)h(called)f Fp(sibling)g Fs(objects.)37 1174 y Fr(\017)30 b Fs(The)11 b Fp(instance)f(handle)p Fs(,)h(identifies)f(which)g(object)h(on)g(the) f(particular)h(kernel)g(server)g(is)g(being)f(specified.)37 1251 y Fr(\017)30 b Fs(The)11 b Fp(most)g(specific)f(type)h(ID)k Fs(\(also)10 b(called)h(the)g Fp(MSTID)s Fs(\),)h(a)g(type)f (fingerprint)e(for)j(the)e(most)h(specific)g(type)f(of)h(the)90 1313 y(object.)37 1390 y Fr(\017)30 b Fs(The)13 b Fp(contact)g(info)p Fs(,)g(specifies)f(one)h(or)h(more)f(of)h(the)e(ways)h(by)g(which)f(a)i (client)e(of)h(the)g(object)g(can)g(communicate)90 1453 y(with)d(it.)0 1569 y(The)i(server)h(ID,)g(instance)f(handle,)h(and)f (MSTID)h(may)g(each)g(contain)f(any)g(ASCII)i(character)f(other)f(than) g(NUL.)h(They)0 1631 y(are)i(composed)e(into)g(the)h(string)f(binding)f (handle)h(according)g(the)h(the)g(IETF)g(rules)g(for)g(URLs,)h(but)e (the)h(precise)g(form)0 1694 y(of)g(the)f(URL)g(is)g(not)g(specified)g (here.)19 b(\(In)14 b(versions)e(of)i(ILU)f(before)h(2.0,)g(string)f (binding)e(handles)i(had)g(a)h(completely)0 1756 y(different)d (syntax.\))62 1845 y(The)h(pair)g Ft(\()p Fp(server)g(ID)p Ft(,)g Fp(instance)f(handle)s Ft(\))g Fs(are)h(also)g(known)f(as)h(the) g Fp(object)f(ID)16 b Fs(\(or)c Fp(OID)s Fs(\))g(of)g(the)g(object,)g (because)0 1908 y(together)e(they)h(form)h(a)f(universally)f(unique)g (ID)h(for)g(the)g(object.)62 1997 y(The)i Fp(contact)g(info)i Fs(part)e(contains)f(one)h(or)h(more)g(contact)e(info)h(sequences,)h (each)g(describing)d(one)j(particular)e(way)0 2059 y(of)g (communicating)f(with)g(the)h(object's)f(kernel)g(server.)j(Each)e (contact)g(info)f(sequence)h(consists)e(of)i(a)g(series)g(of)g(fields.) 0 2122 y(The)k(first)g(field)g(is)g(known)f(as)h(the)g Fp(protocol)f(info)p Fs(,)j(and)e(names)h(a)f(particular)g(RPC)i (protocol,)e(and)g(any)h(parameters)0 2184 y(that)12 b(might)f(influence)h(the)g(way)g(in)g(which)f(this)h(protocol)f(would) g(be)h(used.)i(Each)f(of)f(the)g(succeeding)f(fields)h(specifies)0 2246 y Fp(transport)k(info)p Fs(,)i(which)e(defines)h(a)g(way)g(of)g (transforming)f(or)h(communicating)f(data,)j(and)e(any)f(parameters)i (which)0 2308 y(might)d(influence)h(that)g(transport)f(method.)26 b(There)16 b(may)h(be)f(many)g(sequences)g(of)g(contact)g(info)g(in)f (any)h(one)g(string)0 2371 y(binding)9 b(handle)i(\(but)f(ILU)h (currently)g(ignores)f(all)h(but)f(the)h(first\).)0 2502 y Fn(1.3.1.7)23 b(Siblings)62 2608 y Fs(Some)c(ILU)f(object)f (instances)g(may)i(have)f(implementation)f(dependencies)g(on)h(private) f(communication)g(with)0 2670 y(other)d(instances.)k(For)d(example,)g (imagine)f(an)g(object)f(type)g Ft(time-share-system)p Fs(,)h(which)f(provides)g(the)h(method)p eop %%Page: 8 9 8 8 bop 0 -58 a Fs(Chapter)11 b(1:)g(ILU)g(Concepts)1468 b(8)0 183 y Ft(ListUsers\(\))p Fs(,)10 b(which)g(returns)g(a)h(list)e (of)i(``user'')g(instances.)f(Imagine)g(that)g Ft(time-share-system)g Fs(also)f(provides)0 246 y(the)i(method)h Ft(SetUserPriority\(u)e(:)h (user,)g(priority)f(:)i(integer\))p Fs(.)g(We)g(would)f(like)g(to)g(be) h(able)g(to)f(provide)0 308 y(some)k(assurance)f(that)g(the)h(user)g (instance)e(used)i(as)f(a)h(parameter)h(to)e Ft(SetUserPriority)g Fs(is)g(an)h(instance)f(returned)0 370 y(from)i(a)h(call)e(to)h Ft(ListUsers)f Fs(on)h(the)f(same)i(instance)e(of)h(a)g Ft(time-share-system)p Fs(,)g(because)g(the)g(way)f(in)h(which)0 432 y Ft(SetUserPriority)8 b Fs(is)h(implemented)f(relies)h(on)g(the)g (user)g(being)f(a)i(user)f(of)g(that)g(particular)f Ft (time-share-system)p Fs(.)62 533 y(The)13 b(ILU)g(model)g(provides)f (the)g(notion)g(of)h(a)g Fp(sibling)e(object)p Fs(.)16 b(Two)d(instances)f(are)h(siblings)e(if)i(their)f(methods)g(are)0 595 y(handled)k(by)g(the)h(same)g(kernel)f(server.)29 b(Instances)16 b(that)g(are)h(non-discriminator)e(parameters)i(to)f (methods)g(may)h(be)0 658 y(specified)10 b(in)h(ISL)h(as)f(having)f(to) h(be)g(siblings)e(of)i(the)g(discriminator.)0 823 y Fn(1.3.1.8)23 b(Object)16 b(Tables)f(\(or,)h(Just-in-Time)f(Objects\))62 940 y Fs(True)h(objects)e(may)i(either)f(be)g(created)h(explicitly,)f (or)g(upon)g(arrival)g(of)h(calls)f(on)g(them.)24 b(The)15 b(second)g(option)f(is)0 1003 y(exercised)k(via)f(a)h(feature)g (currently)f(called)h Fp(object)f(tables)i Fs(\(from)f Ft(")p Fs(hash)f(tables)p Ft(")p Fs(,)i(since)e(they)h(map)g(a)g (string,)g(the)0 1065 y(instance)13 b(handle,)i(to)f(an)g(object)g(--)g Ft(")p Fs(object)g(factories)p Ft(")f Fs(might)h(be)g(a)h(less)e (surprising)g(term\).)21 b(After)14 b(the)g(object)g(table)0 1127 y(creates)e(an)g(object,)g(the)f(server)h(module)g(then)f (continues)f(to)i(manage)g(the)g(object's)e(existence)i(---)g(in)f(the) h(same)g(way\(s\))0 1189 y(it)g(manages)h(other)f(objects)f(it)h (creates.)k(This)11 b(means)i(a)g(server)g(need)f(not)g(hold)f(in)h (memory)i(all)e(of)g(its)g(objects)f(at)i(once,)0 1252 y(which)d(may)i(be)f(quite)g(important.)62 1352 y(A)g(true)h(kernel)f (server)g(may)h(optionally)c(include)j(an)g(object)f(table,)h(whose)g (job)f(is)h(to)g(map)h(an)f(instance)f(handle)h(\(see)0 1415 y(Section)i(1.3.1.6)g([String)g(Binding)f(Handle],)h(page)h(7\))f (to)g(the)g(object)f(it)h(identifies.)j(ILU's)d(runtime)g(will)f (consult)f(the)0 1477 y(object)g(table)g(when)g(a)i(call)e(is)g (received)h(for)g(an)g(object)f(not)f(currently)h(reified.)i(The)f (object)f(table)g(can)h(either)f(explicitly)0 1539 y(create)h(the)f (named)g(object,)g(or)g(refuse)h(\(thus)e(declaring)h(the)f(instance)h (handle)f(invalid\).)62 1640 y(This)e(mapping)g(operation)f(is)i (invoked)e(with)h(certain)g(of)h(the)f(ILU)h(runtime's)f(mutexes)g (\(see)h(Section)g(12.1.4)f([Thread)0 1702 y(Synchronization],)j(page)h (188\))f(held,)h(because)g(it)f(is)g(an)h(extension)f(of)h(a)g (delicate)f(part)h(of)g(that)f(runtime.)i(The)f(server's)0 1765 y(mutex)f(is)f(held)h(in)f(all)h(cases,)g(and)g(the)g(global)f (mutex)h Ft(")p Fs(gcmu)p Ft(")g Fs(is)f(also)h(held)f(if)h(the)g (resulting)e(object)h(is)h(expected)g(to)f(be)0 1827 y(of)k(a)h Ft(COLLECTIBLE)e Fs(type.)20 b(The)13 b(fact)i(that)e(these) h(mutexes)g(are)h(held)e(restricts)g(what)h(an)g(application)e(can)j (do)e(inside)0 1889 y(this)d(mapping)g(procedure.)0 2054 y Fn(1.3.1.9)23 b(Server)16 b(Relocation)62 2172 y Fs(It)g(is)f (sometimes)g(useful)f(to)i(have)f(a)h(`dummy')g(true)f(kernel)g (server,)i(that)e(will)g(redirect)g(any)g(requests)g(to)g(it)g(to)g(a)0 2234 y(real)d(true)g(kernel)g(server)g(somewhere)g(else.)h(This)e(can)h (be)g(used)f(for)h(load)g(balancing,)f(automatic)g(start-up)g(of)h (services,)0 2296 y(implementation)h(of)i(a)g(redirecting)f(name)h (service,)h(code)e(migration,)h(and)g(other)f(various)g(purposes.)20 b(ILU)15 b(supports)0 2359 y(this)f(via)g(a)h(mechanism)g(called)f Fp(server)h(relocation)p Fs(.)21 b(This)14 b(mechanism)h(allows)e(a)i (function)f(to)g(be)g(associated)g(with)g(a)0 2421 y(true)i(kernel)g (server,)j(which)c(is)h(called)g(when)g(a)h(request)f(arrives)g(at)g (that)g(kernel)g(server)h(over)f(a)h(connection)e(which)0 2483 y(uses)e(a)i Fp(relocating)d(protocol)p Fs(.)19 b(A)13 b(relocating)g(protocol)g(is)g(a)h(protocol)f(that)g(carries)h (relocation)f(requests,)h(such)g(as)f(the)0 2545 y(CORBA)h Ft(IIOP)p Fs(,)h(or)f(the)f(HTTP-NG)g Ft(w3ng)h Fs(protocol.)j(The)d (relocation)e(function)h(returns)g(new)g(contact)h(info)f(for)g(the)0 2608 y(kernel)h(server,)h(which)e(is)g(sent)g(back)h(to)g(the)f (caller.)20 b(The)14 b(caller)g(then)f(closes)g(the)h(existing)e (connection)g(and)i(opens)f(a)0 2670 y(new)e(connection)f(according)g (to)h(the)g(specified)g(contact)f(info.)p eop %%Page: 9 10 9 9 bop 0 -58 a Fs(Chapter)11 b(1:)g(ILU)g(Concepts)1468 b(9)0 183 y Fo(1.3.2)26 b(Garbage)14 b(Collection)62 289 y Fs(A)i(simple)f(form)h(of)g Fp(garbage)f(collection)i Fs(is)e(defined)g(for)h(ILU)g(objects.)24 b(If)16 b(an)f(object)g(type) g(is)g(tagged)g(as)h(being)0 351 y(collectible,)j(a)g(server)f(that)g (implements)f(objects)g(of)i(that)e(type)h(expects)g(clients)f(holding) f(surrogate)i(instances)f(to)0 413 y(register)10 b(with)f(it,)i (passing)e(an)h(instance)g(of)g(a)h(callback)f(object.)h(When)f(a)g (client)g(finishes)f(with)g(the)i(surrogate,)f(the)g(client)0 475 y(unregisters)i(itself.)19 b(Thus)13 b(the)g(server)h(may)h (maintain)e(a)h(list)e(of)i(clients)f(that)g(hold)g(surrogate)g (instances.)18 b(If)d(no)e(client)0 538 y(is)h(registered)f(for)i(an)f (object,)h(and)f(the)g(object)g(has)g(been)g(dormant)g(\(had)g(no)g (methods)g(called)g(on)g(it\))f(for)i(a)g(period)e(of)0 600 y(time)f Fp(T1)p Fs(,)g(the)g(server)g(may)h(feel)f(free)h(to)e (garbage)i(collect)e(the)h(instance.)h Fp(T1)f Fs(is)f(determined)h(by) g(human)g(concerns,)g(not)0 662 y(network)e(performance:)i Fp(T1)f Fs(is)g(set)g(long)f(enough)g(to)h(allow)f(useful)h(debugging)e (of)i(a)h(client.)62 751 y(To)f(deal)f(with)g(possible)f(failure)i(of)g (a)g(client)f(process,)h(we)g(introduce)e(another)i(time-out)f (parameter.)i(If)f(an)g(instance)0 813 y(with)17 b(registered)f (clients)h(has)g(been)h(dormant)f(for)h(a)g(period)e(of)i(time)f Fp(T2)p Fs(,)j(the)d(server)h(uses)f(the)g(callback)g(instance)0 876 y(associated)11 b(with)h(each)h(client)e(to)h(see)h(if)f(the)g (client)g(still)e(exists.)k(If)f(the)f(client)g(cannot)f(be)i (contacted)f(for)g(the)g(callback,)0 938 y(the)f(server)g(may)h(remove) g(it)e(from)i(the)f(list)f(of)h(registered)g(clients)f(for)h(that)g (instance.)62 1027 y(If)16 b(a)f(client)f(calls)g(a)h(method)f(on)h(a)g (surrogate)f(instance)g(of)h(a)g(true)g(instance)f(which)g(has)g(been)h (garbage-collected)0 1089 y(\(typically)f(because)i(of)g (partitioning\),)e(it)i(will)e(receive)j(the)e Ft(ilu.ProtocolError)f Fs(exception,)i(with)f(detail)g(code)0 1151 y Ft (ilu.NoSuchInstanceAtServer)p Fs(.)0 1281 y Fo(1.3.3)26 b(Connections)62 1386 y Fs(ILU)11 b(does)g(not)f(\(directly\))g(expose) h(to)f(the)h(application)e(programmer)j(any)f(notion)f(of)h (``connections''.)f(That)h(is,)f(the)0 1448 y(called)j(module)g(has)g (no)f(pointer)g(back)i(to)e(the)h(caller,)h(and)f(no)g(notion)f(of)h (how)f(to)h(do)g(anything)e(with)h(the)h(caller)h(aside)0 1510 y(from)g(returning)d(a)j(result)e(message.)17 b(Credentials)c (passed)f(in)h(the)f(request)h(message)g(can)g(identify)f(the)h (caller,)h(but)e(not)0 1573 y(necessarily)e(the)g(location)g(the)g (call)h(is)f(made)i(from.)g(Protocols)e(that)g(need)h(such)f (information)g(should)f(pass)h(it)g(explicitly)0 1635 y(as)h(an)g(argument)h(\(an)f(instance)f(of)h(an)h(object)e(type)h (with)f(methods)g(defined)h(on)g(it\))g(to)f(the)h(method.)0 1764 y Fo(1.3.4)26 b(Pipelining)62 1870 y Fs(ILU's)11 b(mechanisms)h(avoid)e(introducing)f(blocking)h(into)g(a)i(distributed) d(program.)j(This)f(is)f(because)i(ILU)f(does)g(not)0 1932 y(try)h(to)h(track)f(the)h(identity)d(of)j(a)g(thread)g(of)f (execution)g(as)h(it)f(crosses)g(program)h(boundaries.)h(So)f(if)g(ILU) f(were)h(to)g(make)0 1994 y(one)e(call)g(wait)g(for)g(the)g(completion) f(of)h(another,)g(this)f(would)g(be)h(a)h(potential)d(cause)j(of)f (deadlock.)62 2083 y(It)i(is)f(possible)e(for)j(the)f(programmer)h(to)f (explicitly)e(inform)j(ILU)f(that)g(one)g(call's)g(execution)f(is)h (not)g(necessary)g(for)0 2145 y(the)j(completion)f(of)h(another.)22 b(This)14 b(is)h(done)f(indirectly,)h(via)g(a)g(concept)g(called)f(a)i Fp(pipeline)p Fs(.)22 b(A)15 b(client)f(can)h(create)h(a)0 2208 y(pipeline)8 b(\(any)i(number,)g(actually\),)g(and)f(associate)g (any)h(collection)e(of)h(its)g(calls)g(with)g(a)h(pipeline)e(\(at)i (most)f(one)h(pipeline)0 2270 y(per)j(call\).)i(Making)d(such)g (associations)e(asserts)i(to)g(ILU)g(that)g(none)g(of)g(the)h(calls)f (is)f(needed)i(for)f(any)h(other)f(of)g(them)h(to)0 2332 y(complete.)e(This)g(allows)f(ILU)h(to)f(block)h(some)g(of)g(them)h (until)d(others)i(complete.)62 2421 y(Which)19 b(will)g(be)h(blocked,)h (and)e(why)h(would)e(a)i(client)f(want)g(to)h(do)f(this)f(to)i(itself?) 36 b(The)19 b(answer)h(has)f(to)h(do)0 2483 y(with)13 b(connections.)20 b(You)14 b(remember,)j(those)c(things)g(the)h (previous)f(section)h(says)g(are)h(not)e(exposed)h(to)g(applications.)0 2545 y(It's)i(true)g(that)f(they're)h(not)f(directly)g(exposed.)25 b(But)16 b(we'll)g(admit)g(here)g(that)f(they)h(exist,)g(and)g(consume) g(resources.)0 2608 y(Sometimes)f(it's)e(important)h(to)g(minimize)g (those)g(resources.)21 b(When)14 b(using)f(a)i(non-concurrent)e(RPC)j (protocol,)e(ILU)0 2670 y(avoids)f(introducing)e(blocking)h(by)i (opening)e(as)i(many)g(parallel)g(connections)e(as)i(the)f(client)g (has)h(concurrent)f(calls)h(to)p eop %%Page: 10 11 10 10 bop 0 -58 a Fs(Chapter)11 b(1:)g(ILU)g(Concepts)1446 b(10)0 183 y(the)14 b(same)h(server.)21 b(Some)15 b(clients)f(would)f (prefer)i(that)f(their)f(concurrent)h(calls)g(block)g(instead)f(of)h (consume)g(multiple)0 246 y(connections.)c(Such)h(clients)f(can)i(use)f (pipelines)e(to)i(enable)g(this)f(behavior.)0 479 y Fo(1.3.5)26 b(Call)14 b(Order)h(Preservation)62 619 y Fs(ILU)d(does)f(not)g (normally)g(guarantee)h(that)f(the)h(server)g(application)e(will)h (receive)h(calls)f(in)g(the)h(same)g(order)g(that)f(the)0 681 y(client)j(makes)h(them)g(\(of)g(course,)h(ILU)f(doesn't)f(promise) h(to)f(violate)g(causality)f(---)j(it)e(just)g(doesn't)g(do)g(any)h (work)g(to)0 743 y(give)10 b(you)g(anything)f(more\).)j(This)d(is)h(a)h (particularly)e(interesting)g(issue)g(when)h(making)g(a)h(series)g(of)f (asynchronous)f(calls)0 805 y(\(because)j(there)f(are)h(no)f(replies)g (to)g(carry)h(causality\).)f(You)g(might)g(think)f(that)g(when)h(using) g(a)g(transport,)g(such)g(as)g(TCP,)0 868 y(that)g(guarantees)g (ordering,)h(call)f(order)h(preservation)f(will)f(follow)h(as)h(a)g (consequence.)g(But)g(it's)f(not)g(that)g(simple)g(\(i.e.,)0 930 y(ILU)g(may)g(use)f(multiple)g(connections)f(in)h(parallel)g(and)h (series,)g(and)f(TCP)i(provides)d(no)h(ordering)g(guarantees)h(between) 0 992 y(connections\).)62 1116 y(However,)g(it's)g(possible)e(for)i(a)g (client)f(application)g(to)g(explicitly)f(request)h(a)i(guarantee)e(of) h(call)g(order)g(preservation)0 1178 y(for)i(a)h(given)e(collection)f (of)j(its)e(calls.)k(This)c(is)h(done)g(indirectly)e(through)h(an)h (object)f(called)h(a)g Fp(serializer)p Fs(.)k(A)c(serializer)0 1240 y(represents)h(an)h(instance)f(of)h(the)f(serialization)g (guarantee.)22 b(This)14 b(guarantee)g(is)h(with)f(respect)g(to)h(a)g (particular)f(server)0 1302 y(and)f(collection)e(of)i(calls.)j(It)c (guarantees)h(that)f(those)g(calls)g(will)g(be)h(received)g(by)f(the)h (server)g(application)e(in)h(the)h(same)0 1365 y(order)h(as)g(they)f (were)h(made)g(by)g(the)f(client)g(application)f(---)i(except)g(that)f (client)f(calls)i(that)f(return)g(after)h(a)g Fp(barrier)g(call)0 1427 y Fs(may)f(be)f(received)g(before)g(client)g(calls)f(that)h (return)f(before)i(that)e(same)i(barrier)f(call.)i(A)e(barrier)h(call)f (is)f(one)h(that)g(raises)0 1489 y(the)g(BARRIER)h(exception,)f(which)f (is)h(an)g(ILU-specific)f(system)h(exception.)h(Remember)h(that)d (ASYNCHRONOUS)0 1552 y(calls)g Fp(do)i Fs(return,)e(they)f(just)h(do)f (so)h(particularly)f(quickly.)62 1675 y(Special)i(considerations)d (apply)i(when)g(these)g(calls)g(are)h(issued)f(concurrently.)g(Two)g (calls)g(are)h(considered)f(to)g(have)0 1737 y(been)h(issued)g (concurrently)f(if)i(each)g(call)f(is)g(initiated)e(before)j(the)f (other)g(returns.)j(In)e(a)g(multi-threaded)e(runtime,)i(they)0 1799 y(client)c(may)h(issue)f(concurrent)g(calls)g(under)h(the)f(same)i (instance)d(of)i(the)g(serialization)e(guarantee,)i(and)g(the)f(ILU)h (runtime)0 1862 y(will)i(put)g(them)i(in)e(some)h(serial)g(order.)k (Note)c(that)g(for)g(two)f(concurrently)g(issued)g(calls,)i(either:)g (\(a\))g(the)f(one)f(put)h(first)0 1924 y(is)e(ASYNCHRONOUS,)h(\(b\))f (they)g(both)f(are)j(in)e(the)g(same)h(pipeline,)e(or)i(\(c\))g(the)f (one)g(put)g(second)g(is)g(delayed)f(until)g(the)0 1986 y(one)15 b(put)f(first)h(returns.)23 b(In)15 b(a)h(single-threaded)d (runtime,)j(the)f(client)f(may)i(issue)e(two)h(calls)f Ft(")p Fs(concurrently)p Ft(")g Fs(\(taking)0 2048 y(advantage)e(of)i (a)f(nested)f(main)h(loop\),)g(but)g(both)f(will)f(execute)i (successfully)f(only)g(if)h(the)f(client)h(is)f(lucky;)h(otherwise,)0 2111 y(the)g(second)g(one)g(will)f(raise)i(the)f(system)g(exception)f (BAD)p 970 2111 14 3 v 16 w(PARAM)i(with)f(minor)g(code)g(ilu)p 1526 2111 V 16 w(bpm)p 1623 2111 V 16 w(serialConcurrent.)0 2173 y(Furthermore,)18 b(when)e(single-threaded,)g(issuing)e (concurrent)i(calls)f(under)h(the)g(same)h(instance)e(of)h(the)g (serialization)0 2235 y(guarantee)11 b(but)f(different)h(pipelines)f (will)g(also)h(cause)g(some)g(to)g(raise)g(BAD)p 1230 2235 V 16 w(PARAM/serialConcurrent.)62 2359 y(A)19 b(client)e(can)i (create)f(any)h(number)f(of)g(serializers,)i(and)e(associate)g(each)g (one)g(of)h(its)e(calls)h(with)f(at)i(most)e(one)0 2421 y(serializer.)26 b(This)15 b(guarantee)g(is)h(only)f(available)g(for)h (servers)g(exported)f(over)h(non-concurrent)f(RPC)i(protocols)d(and)0 2483 y(reliable)d(transports.)f(Due)h(to)f(current)h(implementation)f (limitations,)f(the)i(default)g(port)f(of)h(the)g(server)h(must)e (satisfy)g(the)0 2545 y(protocol)g(and)h(transport)f(restriction.)g(If) i(that)e(port)h(does)g(not)f(meet)i(the)f(protocol)f(restriction,)g (serialized)h(calls)f(will)g(fail)0 2608 y(with)h(the)g(system)h (exception)e(INV)p 571 2608 V 17 w(OBJREF)i(with)f(a)h(minor)f(code)h (of)g(ilu)p 1206 2608 V 15 w(iom)p 1292 2608 V 17 w(conc)p 1395 2608 V 16 w(serial)f(\(where)h(no)g(other)f(error)i(is)0 2670 y(noticed)d(first\))p eop %%Page: 11 12 11 11 bop 0 -58 a Fs(Chapter)11 b(1:)g(ILU)g(Concepts)1446 b(11)0 183 y Fo(1.3.6)26 b(Batching)62 288 y Fs(In)15 b(ILU,)g(a)h(call)e(between)h(address)f(spaces)h(involves)e(sending)h (an)h Fp(call)g(message)i Fs(from)f(the)e(caller)i(to)e(the)h(callee.)0 350 y(The)d(call)h(message)f(is)g(usually)f(sent)h(immediately)g(upon)g (initiation)d(of)k(the)f(call.)j(However,)e(there)g(is)f(a)h(way)f(for) h(these)0 412 y(call)h(messages)f(to)g(be)h(delayed)g(and)f(gathered)h (into)e Fp(batches)j Fs(under)e(application)f(control.)19 b(An)13 b(application)f(specifies)0 475 y(this)f(by)g(use)h(of)f(a)h (meta-object)g(called)f(a)i Fp(batcher)p Fs(.)g(A)f(given)f(call)g(may) h(optionally)e(be)h(associated)g(with)g(a)h(batcher,)g(and)0 537 y(a)g(batcher)g(may)g(use)g(either)f(or)h(both)f(of)h(two)f(ways)h (to)f(specify)g(when)h(delivery)f(of)h(its)e(buffered)i(call)g (messages)g(should)0 599 y(be)h(initiated.)h(The)e(first)g(method)g(is) g(by)h(explicit)e(application)g(call)h(to)g Fp(push)k Fs(the)d(batcher.)j(The)c(second)g(is)g(by)g(timeout:)0 661 y(a)k(call)g(message's)g(delivery)f(is)g(initiated)f(at)i(most)g (some)g(time)g(constant)e(past)i(the)f(time)h(when)g(composition)e(of)h (the)0 724 y(call)e(message)g(completed.)18 b(Which)12 b(of)h(these)g(two)g(ways)g(are)g(applicable)g(is)f(specified)h(when)g (the)g(batcher)g(is)f(created,)0 786 y(as)i(is)f(the)h(timeout)f(value) g(\(if)h(any\).)19 b(Note)14 b(that)f(we)h(speak)f(here)i(only)d(of)i Fp(initiation)g Fs(of)g(delivery,)g(not)f(receipt)h(by)f(any)0 848 y(particular)e(layer)h(of)g(the)f(receiver.)j(This)d(feature)h (involves)e(only)h(client-side)f(mechanism,)j(and)e(so)h(may)g(be)g (used)f(with)0 910 y(non-ILU)f(servers.)0 1037 y Fo(1.3.7)26 b(Simple)14 b(Binding)62 1142 y Fs(ILU)f(includes)e(a)h(simple)g (binding/naming)e(facility.)k(It)e(allows)f(a)i(module)f(to)g Fp(publish)j Fs(an)e(object,)f(so)g(that)g(another)0 1204 y(module)e(can)h(import)f(that)g(object)g(knowing)f(only)h(its)g (object)f(ID)i(\(as)g(defined)f(in)g(Chapter)h(1)g([ILU)f(Concepts],)h (page)g(2\).)0 1266 y(It)g(is)f(essentially)e(just)i(a)h(way)g(of)f (binding)f(a)i(URN)g(\(the)f(object's)g(ID\))h(to)f(a)h(URL)g(\(the)f (object's)g(string)g(binding)e(handle\).)0 1329 y(The)j(interface)g(to) g(this)f(facility)g(is)h(deliberately)f(quite)g(simple;)g(one)h(reason) g(is)g(to)g(allow)f(various)g(implementations.)62 1417 y(The)21 b(interface)h(consists)d(of)i(three)g(operations:)29 b Fp(Publish)p Fs(,)23 b Fp(Withdraw)p Fs(,)g(and)e Fp(Lookup)p Fs(.)40 b Ft(Publish)21 b Fs(takes)f(one)0 1479 y(argument,)h(an)e(ILU) f(object.)34 b Ft(Publish)18 b Fs(returns)h(a)g(string)e(that)h(is)h (needed)f(to)h(successfully)e(invoke)g Ft(Withdraw)p Fs(.)0 1541 y Ft(Withdraw)11 b Fs(undoes)f(the)h(effects)h(of)g Ft(Publish)p Fs(,)f(and)g(takes)g(two)g(arguments:)g(\(1\))h(the)f (object)g(in)f(question,)h(and)g(\(2\))g(the)0 1603 y(string)e (returned)g(from)h Ft(Publish)p Fs(.)h(In)f(some)g(langauge)f (mappings,)g(the)g(string)g(is)g(not)g(explicitly)f(passed,)i(but)f (conveyed)0 1666 y(in)k(the)g(language)g(mapping's)f(representation)h (of)g(ILU)g(objects.)18 b Ft(Lookup)13 b Fs(takes)g(two)g(arguments:)i (an)e(object)g(ID)g(and)0 1728 y(a)f(type)g(the)g(identified)e(object)h (should)g(have.)j(If)e(the)g(object)f(with)g(that)g(ID)h(is)g (currently)f(being)g(published,)g(and)h(has)f(the)0 1790 y(given)f(type)h(\(among)g(others\),)g Ft(Lookup)g Fs(returns)g(that)f (object.)62 1878 y(The)17 b(implementation)e(of)i(simple)f(binding)f (shipped)h(with)f(ILU)i(can)g(use)g(either)f(an)h(ILU)g(service,)h(or)f (a)g(shared)0 1940 y(filesystem)11 b(directory,)h(to)f(store)h (information)f(on)g(the)h(currently)f(published)f(objects.)j(This)e (choice)h(must)g(be)g(specified)0 2003 y(at)g(system)g(configuration)e (time.)15 b(If)d(the)g(shared)g(filesystem)g(approach)f(is)h(used,)g (this)g(directory)f(must)h(be)g(available)g(by)0 2065 y(the)f(same)h(name,)h(on)e(all)g(machines)h(which)f(wish)f(to)h (interoperate.)h(The)g(way)f(in)g(which)g(clients)f(interact)i(with)e (binding)0 2127 y(is)i(the)f(same,)j(regardless)d(of)h(which)g (approach)g(is)f(selected.)j(See)f(Section)e(11.1)h([Binding)f(Names)i (in)e(ILU],)i(page)f(182)0 2190 y(for)f(more)h(information)e(on)h (these)g(implementations.)0 2316 y Fo(1.3.8)26 b(Error)15 b(Signalling)62 2421 y Fs(ILU)c(uses)g(the)f(notion)g(of)h(an)g Fp(exception)i Fs(to)d(signal)g(errors)i(between)e(modules.)h(An)g (exception)f(is)g(a)i(way)f(of)g(passing)0 2483 y(control)j(outside)f (the)h(normal)h(flow)f(of)h(control.)20 b(It)15 b(is)f(typically)f (used)h(for)h(handling)e(of)i(errors.)22 b(The)14 b(routine)g(which)0 2545 y(detects)f(the)f(error)i(signals)d(an)j(exception,)f(which)f(is)h (caught)f(by)h(some)g(error-handling)f(mechanism.)17 b(The)c(exception)0 2608 y(type)g(supported)e(in)i(ILU)g(is)f(a)i (termination-model)e(exception,)h(in)f(which)h(the)f(calling)h(stack)f (is)h(unrolled)f(back)h(to)f(the)0 2670 y(frame)h(which)e(defined)g (the)g(exception)g(handler.)h(Exceptions)e(are)i(signalled)e(and)i (caught)f(using)f(the)h(native)g(exception)p eop %%Page: 12 13 12 12 bop 0 -58 a Fs(Chapter)11 b(1:)g(ILU)g(Concepts)1446 b(12)0 183 y(mechanisms)14 b(for)h(the)f(servers)g(and)h(clients.)20 b(A)14 b(raised)g(exception)g(may)h(carry)f(a)h(single)e(parameter)j (value,)f(which)f(is)0 246 y(typed.)0 382 y Fu(1.4)30 b(ILU)15 b(and)h(OMG)e(CORBA)62 486 y Fs(The)j(type)f(and)g(exception)g (model)g(used)g(by)g(ILU)h(is)f(quite)f(similar)h(to)g(that)g(used)g (by)g(the)h(Object)f(Management)0 549 y(Group's)d(Common)i(Object)f (Request)f(Broker)i(Architecture)f(\(CORBA\).)h(We)g(have)f(in)g(fact)g (changed)g(ILU)g(in)g(some)0 611 y(ways)k(to)h(more)g(closely)f(match)h (CORBA.)h(Our)f(tools)f(will)g(optionally)e(parse)j(the)g(OMG's)g (Interface)g(Definition)0 673 y(Language)11 b(\(OMG)g(IDL\))g(as)h (well)e(as)h(ILU's)g(ISL.)62 760 y(ILU)17 b(also)g(attempts)f(to)g (address)h(issues)f(that)g(are)i(already)e(upon)h(us,)h(but)e(are)i (not)e(addressed)h(in)f(CORBA)i(2.0,)0 823 y(particularly)10 b(a)h(uniform)g(way)g(of)h(indicating)d(optional)g(values,)i(and)g (distributed)e(garbage)i(collection.)62 910 y(ILU)f(provides)e(two)h (different)g(interface)h(definition)e(languages,)h(OMG)h(IDL)f(and)g (ILU)h(ISL)g(to)f(enhance)h(portability)0 972 y(of)j(ILU)f(modules.)j (The)d(OMG)h(IDL)f(subset)g(understood)f(by)h(ILU)g(is)g(a)h(strict)f (subset)f(of)i(OMG)f(IDL;)h(this)e(means)i(that)0 1034 y(any)i(ILU)f(modules)g(developed)g(using)g(OMG)h(IDL)g(interfaces)f (should)g(be)h(interoperable)e(with)h(any)h(other)f(CORBA)0 1096 y(system.)19 b(Any)13 b(non-CORBA)h(extensions)e(may)j(only)e(be)h (expressed)f(in)g(ILU)h(ISL,)h(so)e(that)g(any)h(modules)f(which)g(use) 0 1159 y(these)8 b(extensions)f(must)i(use)f(ILU)h(ISL)g(to)f(express)g (their)h(interfaces,)g(thereby)f(underlining)f(the)h(fact)h(that)g (these)f(modules)0 1221 y(are)15 b(not)f(CORBA-compliant.)20 b(We)15 b(feel)f(that)g(this)f(dual-interface-language)g(approach)h (will)f(tend)h(to)g(enhance)g(both)0 1283 y(portability)9 b(and)i(CORBA-compliance)g(of)h(ILU)f(modules.)62 1370 y(ILU)j(does)g(not)g(yet)g(provide)f(some)i(of)f(the)g(features)g (required)g(by)g(a)h(full)e(CORBA)i(implementation.)20 b(Notably)13 b(it)0 1433 y(does)d(not)g(provide)f(a)i(Dynamic)f (Invocation)f(Interface)i(or)g(Dynamic)f(Server)h(Interface,)h(or)e (implementations)f(of)h(either)0 1495 y(Interface)i(Repository)e(or)h (Implementation)g(Repository.)f(It)i(does)f(not)f(provide)g(the)i (Basic)f(Object)g(Adapter)g(interface,)0 1557 y(either,)i(but)f(does)g (provide)g(an)g(object)g(adapter)h(with)e(most)i(of)f(the)h(BOA's)f (capabilities,)g(except)g(for)h(those)f(connected)0 1620 y(with)e(the)h(Interface)h(Repository)e(and/or)g(Implementation)h (Repository.)62 1707 y(A)16 b(number)f(of)h(concepts)f(in)g(CORBA)h (that)f(seem)h(to)f(require)h(further)f(thought)f(are)i(not)f(yet)g (directly)g(supported)0 1769 y(in)f(ILU:)f(the)h(use)g(of)g Ft(#include)f Fs(\(ILU)h(uses)g(a)g(more)h(limited)e(notion)f(of)i (``import''\);)h(the)f(notion)e(of)i(using)f(an)h(IDL)0 1831 y(``interface'')g(as)f(both)f(an)i(object)e(type)h(and)g(a)g(name) h(space)f(\(this)f(seems)i(to)f(be)g(a)g(``tramp)h(idea'')f(from)h(the) f(language)0 1893 y(C)p Ft(++)p Fs(;)h(in)f(ILU)g(the)g(``interface'')g (defines)g(a)h(name)f(space,)h(and)f(the)g(object)g(type)f(defines)h(a) g(type\);)h(the)f(notion)e(that)i(all)0 1956 y(BOA)f(objects)e(are)i (persistent)e(\(in)h(ILU,)h(the)f(question)f(of)i(whether)f(an)g (object)g(is)g(persistent)f(is)h(left)g(up)g(to)g(that)g(object's)0 2018 y(implementation\);)d(the)i(notion)e(that)h(type)g(definitions)e (can)j(exist)f(outside)f(the)h(scope)g(of)h(any)f(module)h(or)f (namespace)h(\(in)0 2080 y(ILU,)h(all)g(definitions)e(occur)i(in)g (some)g(interface\).)h(Currently,)f(there)g(is)g(no)g(support)f(in)g (ILU)i(for)f(CORBA)h Ft(context)p Fs(s.)p eop %%Page: 13 14 13 13 bop 0 -58 a Fs(Chapter)11 b(2:)g(Defining)f(Interfaces)1351 b(13)0 183 y Fq(2)36 b(Defining)14 b(Interfaces)62 354 y Fs(Module)e(interfaces)g(may)h(be)f(defined)g(in)g(either)g(the)g (Object)g(Management)h(Group's)e(CORBA)i(OMG)g(IDL,)f(or)h(in)0 416 y(ILU's)c(native)g(Interface)i(Specification)e(Language)g(\(aka)h (ISL\).)g(This)f(document)g(describes)g(the)h(syntax)e(and)i(semantics) 0 479 y(of)g(ISL,)h(and)f(how)g(to)f(translate)h(OMG)g(IDL)g (interfaces)g(into)f(ISL;)h(see)h Fp(CORBA)g(2.0)j Fs(for)c(a)h (specification)d(of)i(the)g(syntax)0 541 y(and)h(semantics)g(of)g(OMG)g (IDL.)0 705 y Fu(2.1)30 b(General)13 b(Syntax)i(of)g(ISL)62 815 y Fs(The)e(conventional)d(file)j(suffix)f(for)h(ISL)g(files)f(is)g (`)p Ft(.isl)p Fs('.)k(Some)d(of)g(the)f(ILU)h(tools)e(rely)h(on)h(the) f(name)h(of)g(the)f(file)0 878 y(being)g(the)h(same)h(as)f(the)f(name)i (of)f(the)g(interface)g(defined)g(in)f(it,)i(and)e(rely)h(on)g(having)f (only)g(one)h(interface)g(defined)g(in)0 940 y(each)f(`)p Ft(.isl)p Fs(')f(file.)62 1034 y(An)k(ISL)g(interface)h(contains)d (four)i(kinds)f(of)h(statements:)j(the)d(interface)g(header,)i(type)d (declarations,)h(exception)0 1096 y(declarations,)10 b(and)h(constant)f(declarations.)h(Each)g(statement)f(is)h(terminated)g (with)f(a)i(semi-colon.)62 1190 y(Many)h(statements)e(in)h(ISL)g (contain)f(lists:)h(lists)e(of)j(the)f(fields)f(in)h(a)g(record,)h(the) f(types)f(in)h(a)h(union,)e(the)h(methods)g(in)0 1252 y(an)h(object)f(type.)j(All)d(lists)f(in)h(ISL)h(are)g(terminated)g (with)e(an)i Ft(END)f Fs(keyword,)h(and)f(the)h(items)f(in)g(the)h (list)e(are)i(separated)0 1315 y(by)e(commas.)62 1408 y(Comments)18 b(may)f(be)h(placed)f(in)g(an)g(ISL)h(file.)29 b(They)17 b(are)h(introduced)e(with)g(the)h(character)h(sequence)f Ft(\(*)p Fs(,)i(and)0 1471 y(terminated)11 b(with)f Ft(*\))p Fs(.)h(Comments)h(nest.)0 1615 y Fo(2.1.1)26 b(Identifiers)62 1726 y Fs(All)11 b(identifiers)e(that)i(appear)h(in)e(ISL)i(are)g (alphanumeric,)f(begin)f(with)h(an)g(alphabetic)f(character,)i(and)g (may)f(contain)0 1788 y(hyphens.)164 1772 y Fm(1)193 1788 y Fs(Differences)g(in)f(case)i(are)f(not)f(sufficient)g(to)h (distinguis)o(h)d(between)j(two)f(identifiers;)f(however,)i(the)g(case) g(of)0 1851 y(an)g(identifier)f(may)i(be)f(preserved)g(in)g(its)f (mapping)h(to)f(a)i(specific)f(programming)g(language.)62 1944 y(All)j(ILU)g(type)g(names,)i(exception)e(names,)i(and)e(constant) f(names)i(have)g(two)f(parts,)h(an)f(interface)h(identifier)e(and)0 2007 y(a)j(local)f(identifier.)22 b(When)15 b(writing)f(the)h(full)g (name,)i(the)e(interface)h(identifier)e(comes)i(first,)g(followed)e(by) h(a)h(period,)0 2069 y(followed)11 b(by)g(the)h(local)g(identifier.)g (If)h(the)e(interface)i(identifier)d(is)i(ommitted)f(in)h(a)g(name,)h (it)f(defaults)f(to)g(the)h(interface)0 2131 y(identifier)e(of)h(the)g (most)g(recently)g(encountered)f(interface)i(header.)62 2225 y(Interface)f(names,)g(type)e(names,)i(exception)e(names,)i(and)f (constant)e(names)i(occur)g(in)g(different)g(name)g(spaces.)h(Thus)0 2287 y(is)g(is)f(possible)g(to)g(have)i(a)f(type)g(and)g(an)g (exception)f(with)g(the)h(same)h(name.)1201 2271 y Fm(2)p 0 2363 600 2 v 21 2496 a(1)62 2512 y Fs(We)g(might)e(forbid)h(two)f (consecutive)g(hyphens)g(or)h(add)g(other)g(restrictions.)21 2652 y Fm(2)62 2669 y Fs(We)h(may)f(change)g(this.)p eop %%Page: 14 15 14 14 bop 0 -58 a Fs(Chapter)11 b(2:)g(Defining)f(Interfaces)1351 b(14)0 183 y Fo(2.1.2)26 b(Reserved)15 b(Words)62 287 y Fs(The)26 b(following)e(words)i(are)g(reserved)g(words)g(in)f(ISL:)h Ft(ALIASED)p Fs(,)k Ft(ALLOWS)p Fs(,)g Ft(ARRAY)p Fs(,)g Ft(ASYNCHRONOUS)p Fs(,)0 349 y Ft(AUTHENTICATION)p Fs(,)12 b Ft(BOOLEAN)p Fs(,)h Ft(BRAND)p Fs(,)g Ft(BYTE)p Fs(,)g Ft(CARDINAL)p Fs(,)f Ft(CHARACTER)p Fs(,)h Ft(CHARSET)p Fs(,)g Ft(CLASS)p Fs(,)g Ft(COLLECTIBLE)p Fs(,)0 412 y Ft(CONSTANT)p Fs(,)c Ft(DEFAULT)p Fs(,)g Ft(DENOMINATOR)p Fs(,)g Ft(DOCUMENTATION)p Fs(,)f Ft(END)p Fs(,)i Ft(ENUMERATION)p Fs(,)f Ft(EXCEPTION)p Fs(,)g Ft(EXTENSIBLE)p Fs(,)0 474 y Ft(FALSE)p Fs(,)27 b Ft(FIXED)p Fs(,)g Ft(FIXEDPOINT)p Fs(,)f Ft(FROM)p Fs(,)h Ft(FUNCTIONAL)p Fs(,)f Ft(ILUSTRING)p Fs(,)h Ft(IMPORTS)p Fs(,)f Ft(IN)p Fs(,)h Ft(INOUT)p Fs(,)g Ft(INTEGER)p Fs(,)0 536 y Ft(INTERFACE)p Fs(,)34 b Ft(LATIN1-CHARSET)p Fs(,)f Ft(LANGUAGE)p Fs(,)h Ft(LIMIT)p Fs(,)g Ft(LOCAL)p Fs(,)h Ft(LONG)p Fs(,)f Ft(METHODS)p Fs(,)g Ft(MAX-NUMERATOR)p Fs(,)0 598 y Ft(MIN-NUMERATOR)p Fs(,)j Ft(OBJECT)p Fs(,)h Ft(OF)p Fs(,)g Ft(OPTIONAL)p Fs(,)g Ft(OTHERS)p Fs(,)g Ft(OUT)p Fs(,)g Ft(PICKLE)p Fs(,)f Ft(RAISES)p Fs(,)h Ft(REAL)p Fs(,)g Ft(RECORD)p Fs(,)0 661 y Ft(REFERENCE)p Fs(,)13 b Ft(SEALED)p Fs(,)g Ft(SEQUENCE)p Fs(,)f Ft(SHORT)p Fs(,)h Ft(SIBLING)p Fs(,)g Ft(SINGLETON)p Fs(,)g Ft(SINK)p Fs(,)g Ft(SOURCE)p Fs(,)g Ft(STATE)p Fs(,)g Ft(SUPERCLASS)p Fs(,)0 723 y Ft(SUPERCLASSES)p Fs(,)e Ft(SUPERTYPES)p Fs(,)f Ft(TRUE)p Fs(,)i Ft(TYPE)p Fs(,)f Ft(TYPEID)p Fs(,)g Ft(UNICODE-CHARSET)p Fs(,)g Ft(UNION)p Fs(.)62 810 y(Reserved)j(words)f(may)h(be)g(used)g(as)f (identifiers,)h(by)f(placing)g(them)g(in)h(double)e(quotes,)i(but)f (may)h(not)f(be)h(used)f(as)0 872 y(identifiers)d(without)f(quoting.)62 959 y(Other)f(identifiers)e(are)i(worth)f(avoiding,)g(as)h(they)f(may)h (cause)g(problems)f(with)f(specific)i(language)f(implementations.)0 1022 y(The)15 b(identifier)e Ft(t)i Fs(or)g Ft(T)p Fs(,)i(for)e (instance,)g(causes)g(problems)f(with)g(Common)h(Lisp.)22 b(Language-specific)13 b(mappings)h(of)0 1084 y(ISL)e(should)d(try)i (to)g(avoid)f(these)h(problems.)0 1219 y Fu(2.2)30 b(Statement)14 b(Syntax)0 1358 y Fo(2.2.1)26 b(The)15 b(Interface)f(Header)62 1462 y Fs(Each)d(interface)h(is)f(introduced)e(with)h(exactly)h(one)g (interface)g(header)h(of)f(the)g(form)120 1549 y Ft(INTERFACE)g Fp(interface-name)j Fs([)e Ft(BRAND)e Fp(brand)16 b Fs(])c([)f Ft(IMPORTS)g Fp(list-of-imported-interfaces)f Ft(END)i Fs(])f Ft(;)62 1661 y Fs(The)g Fp(interface-name)j Fs(is)c(used)g(by)g (various)g(language-specific)f(productions)f(to)j(create)g(name)g (spaces)f(in)h(which)e(the)0 1724 y(types,)i(exceptions,)f(and)h (constants)e(defined)i(in)g(the)g(interface)g(are)h(declared.)62 1811 y(The)i(optional)d Fp(brand)18 b Fs(is)13 b(a)h(quoted)f(string)f (of)h(printable)g(US-ASCII)h(characters)g(\(using)f(the)g(codes)g(from) h(0x20)f(to)0 1873 y(0x7E,)d(inclusive\).)g(It)h(is)f(included)f(into)h (the)g(type)h(UID)f(hash)h(for)f(types)g(and)h(exceptions)e(defined)h (in)h(the)f(interface,)h(and)0 1935 y(can)g(be)h(used)e(to)h(make)h (the)f(type)f(UIDs)h(for)h(otherwise-identical)c(interfaces)j (distinct.)62 2022 y(The)g(optional)f Fp(list-of-imported-interfaces)g Fs(is)h(a)h(comma-separated)g(list)d(of)j(fields,)e(each)i(of)f(the)g (form)120 2110 y Fp(interface-name)k Fs([)c Ft(FROM)g Fp(interface-file)j Fs(])0 2222 y(where)d Fp(interface-file)j Fs(is)c(the)h(name)g(of)g(the)g(file)f(containing)f(the)i(interface)g (definition.)e(Importing)h(an)h(interface)g(allows)0 2284 y(the)j(current)f(interface)h(to)g(mention)f(the)g(types,)h (exceptions,)f(and)h(constants)e(defined)i(in)f(the)g(imported)h (interface,)h(by)0 2346 y(referring)c(to)g(them)g(as)120 2433 y Fp(interface-name)s Ft(.)p Fp(type-or-value-name)0 2545 y Fs(The)i(graph)g(of)g(imported)g(interfaces)g(must)g(be)h (acyclic;)f(that)g(is,)h(interfaces)f(may)h(not)e(mutually)g(refer)j (to)d(each)i(other,)0 2608 y(either)9 b(directly)f(or)h(through)f(some) i(other)e(interfaces.)j(If)f(the)f(optional)e Ft(")p Fs(FROM)j Fp(interface-file)s Ft(")f Fs(is)g(not)f(specified)h(for)g (an)0 2670 y(imported)h(interface,)i(a)f(sensible)e(site-dependent)g (search)i(policy)f(is)g(followed)g(in)g(an)h(attempt)g(to)f(locate)g (that)h(interface,)p eop %%Page: 15 16 15 15 bop 0 -58 a Fs(Chapter)11 b(2:)g(Defining)f(Interfaces)1351 b(15)0 183 y(typically)11 b(looking)f(down)i(a)g(path)g(\(environment)f (variable)h Ft(ILUPATH)g Fs(on)g(POSIX)h(systems\))e(of)i(directories)e (for)i(a)f(file)0 246 y(with)e(the)h(name)h(`)p Fp(interface-name)p Ft(.isl)p Fs('.)0 375 y Fo(2.2.2)26 b(Type)15 b(Declarations)62 481 y Fs(In)c(general,)h(a)g(type)e(is)h(defined)g(with)f(a)h (statement)g(of)g(the)g(form)120 570 y Ft(TYPE)g Fp(type-name)j Ft(=)d Fp(type-reference)j Ft(|)e Fp(construction)g Fs([)f Ft(TYPEID)g Fp(type-id-string)g Fs(])g Ft(;)62 685 y Fs(The)h(form)h Ft(TYPE)e Fp(type-name)j Ft(=)d Fp(type-reference)16 b Fs(is)11 b(used)h(when)g(you)g(want)f(to)h(rename)h(an)g(existing)d (type)i(to)g(make)0 747 y(its)e(usage)h(clear)g(or)g(give)f(it)g(a)i (name)f(in)f(the)h(current)g(interface.)g(A)g Fp(type-reference)j Fs(is)d(just)e(a)j Fp(type-name)p Fs(,)f(or)g(a)g(reference)0 810 y(to)g(a)g(type)g(name)h(defined)e(in)h(another)g(interface:)g Fp(interface-name)p Fs(.)p Fp(type-name)p Fs(.)h(The)f(new)g(name)h(is) f(then)f(a)i(`nickname')0 872 y(for)f(the)g(previously)f(defined)g (type.)62 961 y(The)15 b(optional)d Ft(TYPEID)i Fs(attribute)g(is)g (provided)f(for)i(use)f(with)f(CORBA)j(interfaces,)f(which)f(allow)g (specification)0 1023 y(of)g(type)g(ID)g(information.)20 b(Type)13 b(IDs)h(should)f(conform)h(to)g(the)g(syntax)f(for)i(URIs.)20 b(It's)14 b(probably)f(safest)h Fn(not)h Fs(to)e(use)0 1085 y Ft(TYPEID)p Fs(,)e(as)g(ILU)g(will)g(automatically)e(generate)j (unique)e(type)g(ID's)i(for)f(your)g(types.)0 1215 y Fn(2.2.2.1)23 b(Primitive)14 b(types)62 1321 y Fs(The)d(following)e (type)i(``names'')h(are)g(pre-defined:)37 1410 y Fr(\017)30 b Ft(INTEGER,)11 b Fs(a)g(32-bit)f(signed)g(integer)h(value;)37 1486 y Fr(\017)30 b Ft(SHORT)11 b(INTEGER,)g Fs(a)g(16-bit)f(signed)g (integer)h(value;)37 1562 y Fr(\017)30 b Ft(LONG)11 b(INTEGER,)g Fs(a)g(64-bit)f(signed)g(integer)h(value;)37 1639 y Fr(\017)30 b Ft(CARDINAL,)11 b Fs(a)g(32-bit)f(unsigned)g(integer)g(value;)37 1715 y Fr(\017)30 b Ft(SHORT)11 b(CARDINAL)p Fs(,)g(a)g(16-bit)f (unsigned)g(integer)g(value;)37 1792 y Fr(\017)30 b Ft(LONG)11 b(CARDINAL)p Fs(,)g(a)h(64-bit)d(unsigned)h(integer)h(value;)37 1868 y Fr(\017)30 b Ft(BYTE)p Fs(,)11 b(an)h(unsigned)d(8-bit)h(byte)h (value;)37 1945 y Fr(\017)30 b Ft(BOOLEAN)p Fs(,)11 b(a)h(logical)e (value)h(either)f(True)i(or)f(False;)37 2021 y Fr(\017)30 b Ft(REAL)p Fs(,)11 b(an)h(IEEE)e(64-bit)g(double-precision)f (floating-point)g(value;)37 2098 y Fr(\017)30 b Ft(SHORT)11 b(REAL)p Fs(,)g(an)h(IEEE)e(32-bit)g(single-precision)f(floating-point) f(value;)37 2174 y Fr(\017)30 b Ft(LONG)11 b(REAL)p Fs(,)g(a)h(128-bit) e(quadruple-precision)e(floating-point)h(value;)37 2250 y Fr(\017)30 b Ft(CHARACTER)p Fs(,)11 b(a)g(16-bit)f(UNICODE/IS-10646)g (character;)i(and)37 2327 y Fr(\017)30 b Ft(SHORT)11 b(CHARACTER)p Fs(,)g(an)g(8-bit)f(ISO)i(8859-1)e(character)i(code)f (\(but)g(excluding)e(the)i(octet)g(8)p 1592 2327 14 3 v 16 w(000\).)37 2403 y Fr(\017)30 b Ft(PICKLE)p Fs(,)11 b(an)g(opaque)g(value)g(containing)e(some)i(other)g(value)g(\(see)h (below\).)62 2519 y(There)g(is)e(also)h(a)g(special)g(type)g Ft(NULL)p Fs(,)g(which)f(cannot)h(be)g(used)g(directly;)f(it)g(has)h(a) h(single)e(value,)h(NULL.)62 2608 y Ft(PICKLE)h Fs(is)f(an)g(abstract)h (type,)f(values)g(of)h(which)f(contain)g(a)h(`pickled')f(or)g(`frozen') i(value)e(of)h(any)f(other)g(ISL)h(type,)0 2670 y(and)e(is)f(thus)g (used)h(when)g(a)g(dynamically)f(typed)g(element)h(is)g(needed)g(in)f (an)i(interface.)g(Functionally,)e(it)g(is)h(quite)f(similar)p eop %%Page: 16 17 16 16 bop 0 -58 a Fs(Chapter)11 b(2:)g(Defining)f(Interfaces)1351 b(16)0 183 y(to)17 b(the)g(CORBA)h Ft(any)f Fs(type,)h(but)f(has)g (more)h(efficient)f(semantics.)29 b Ft(PICKLE)16 b Fs(is)h(only)f (available)h(if)g(ILU)g(has)g(been)0 246 y(configured)10 b(with)g(VARIANT)h(support.)0 381 y Fn(2.2.2.2)23 b(Constructor)15 b(overview)62 489 y Fs(The)10 b(form)f Ft(TYPE)i Fp(type-name)j Ft(=)d Fp(construction)g Fs(is)d(used)h(when)g(a)h(user)f(needs)g(to)g (define)g(a)h(new)g(type.)g(Several)g(simple)0 551 y(constructors)g (for)h(more)h(complex)f(data)g(types)f(are)i(specified:)37 642 y Fr(\017)30 b Ft(ARRAY)p Fs(,)11 b(a)h(fixed-length)d (N-dimensional)h(array)i(of)f(some)g(specified)g(type;)37 720 y Fr(\017)30 b Ft(SEQUENCE)p Fs(,)11 b(a)h(variable-length)d (one-dimensional)g(array)j(of)f(some)h(specified)e(type;)37 799 y Fr(\017)30 b Ft(RECORD)p Fs(,)11 b(a)h(sequence)f(of)g(typed)f (fields,)h(each)h(of)f(which)f(may)i(be)f(of)g(a)h(different)f(type;)37 877 y Fr(\017)30 b Ft(UNION)p Fs(,)11 b(one)g(of)g(a)h(set)f(of)g (specified)g(types;)37 956 y Fr(\017)30 b Ft(OPTIONAL)p Fs(,)11 b(a)h(union)d(with)i Ft(NULL)p Fs(;)37 1034 y Fr(\017)30 b Ft(ENUMERATION)p Fs(,)11 b(a)g(type)g(consisting)e(of)i (an)g(explicitly)e(enumerated)j(set)e(of)i(values;)37 1113 y Fr(\017)30 b Ft(OBJECT)p Fs(,)11 b(an)g(ILU)h(object)e(type.)37 1191 y Fr(\017)30 b Ft(FIXEDPOINT)p Fs(,)11 b(a)g(rational)g(type)f (with)g(a)i(fixed)f(denominator)f(value)h(\()p Fp(not)f(yet)h (implemented)5 b Fs(\);)62 1311 y(In)19 b(addition,)g(the)f (automatically-imported)e(interface)j(ILU)f(defines)g(the)g(short)f (sequence)i Ft(CString)f Fs(of)g(short)0 1373 y(character.)0 1509 y Fn(2.2.2.3)23 b(Array)15 b(Declarations)62 1616 y Fs(An)g Ft(ARRAY)f Fs(is)g(a)h(fixed-length)e(N-dimensional)g(array)i (of)f(some)h(type.)21 b(It)15 b(is)f(defined)g(with)f(a)i(declaration)f (of)g(the)0 1678 y(form)120 1769 y Ft(TYPE)d Fp(type-name)j Ft(=)d(ARRAY)g(OF)g Fp(dimension-list)i(base-type-reference)h Ft(;)62 1889 y Fs(where)j Fp(dimension-list)h Fs(is)e(a)h (comma-separated)g(list)e(of)i(non-negative)e(integers,)i(each)g (integer)e(specifying)g(the)0 1951 y(size)e(of)h(a)g(dimension)e(of)i (the)f(array,)i(and)e Fp(base-type-reference)k Fs(is)c(a)h Fp(type-reference)j Fs(to)c(some)g(other)g(ILU)h(type.)k(For)0 2013 y(example,)120 2104 y Ft(TYPE)25 b(SymbolTable)e(=)i(ARRAY)g(OF)f (400)h(Symbol;)120 2154 y(TYPE)g(Matrix3030)f(=)g(ARRAY)h(OF)f(30,)h (30)g(REAL;)62 2274 y Fs(The)11 b(total)f(number)i(of)f(elements)g(in)g (the)g(array)g(may)h(not)e(exceed)i(4294967295)d(\(2)p Ft(^)p Fs(32-1\).)0 2409 y Fn(2.2.2.4)23 b(Sequence)17 b(Declarations)62 2517 y Fs(A)c(sequence)f(is)g(a)h(variable-length)e (one-dimensional)g(array)i(of)g(some)g(type.)i(It)e(is)f(defined)g (with)f(a)i(declaration)f(of)0 2579 y(the)f(form)120 2670 y Ft(TYPE)g Fp(type-name)j Ft(=)d Fs([)h Ft(SHORT)e Fs(])i Ft(SEQUENCE)f(OF)g Fp(base-type-reference)j Fs([)e Ft(LIMIT)e Fp(size)k Fs(])e Ft(;)p eop %%Page: 17 18 17 17 bop 0 -58 a Fs(Chapter)11 b(2:)g(Defining)f(Interfaces)1351 b(17)62 183 y(where)14 b Fp(base-type-reference)j Fs(is)c(a)i Fp(type-reference)i Fs(to)c(some)h(other)f(ILU)h(type.)19 b(If)14 b(the)f Ft(LIMIT)h Fs(parameter)g Fp(size)j Fs(is)0 246 y(used,)11 b(it)g(limits)g(the)g(sequences)g(to)g(having)f(at)i (most)f Fp(size)j Fs(elements;)d(otherwise)f(the)i(sequences)f(are)h (limited)e(to)h(having)0 308 y(at)16 b(most)f(4294967295)e(\(2)p Ft(^)p Fs(32-1\))i(elements.)25 b(Use)16 b(of)g(the)f Ft(SHORT)g Fs(modifier)h(is)f(shorthand)f(for)i(a)g Ft(LIMIT)g Fs(of)f(65535)0 370 y(\(2)p Ft(^)p Fs(16-1\).)c(Use)g(of)g(the)g Ft(LONG)g Fs(modifier)g(is)g(not)f(defined)h(for)g(sequences.)0 522 y Fn(2.2.2.5)23 b(Generalized)16 b(Array)e(Declarations)62 634 y Fs(This)9 b(is)g(a)h(proposed)f(language)g(change,)h(not)f(yet)h (accepted.)h Fp(It)f(is)f(not)g(supported)f(in)h(any)h(of)g(the)f (language)g(bindings.)62 731 y Fs(The)k(existing)f(language)g(has)i(a)f (weakness:)i(it)d(cannot)h(express)g(coordinated)f(multidimensional)f (variable-length)0 793 y(arrays.)h(Coordinated)d(means)i(that)f(there)h (is)f(only)g(one)h(length)e(per)i(dimension,)f(regardless)g(of)h(how)f (many)h(arrays)g(there)0 855 y(are)h(at)g(that)f(level.)i(An)f(example) g(is)f(a)h(bitmap)f(of)h(variable)g(height)e(and)i(width:)f(all)g(rows) g(are)i(the)e(same)i(length,)e(and)h(all)0 917 y(columns)e(are)i(the)f (same)h(length.)62 1014 y(A)f(generalized)g(array)h(type)f(is)f (defined)h(with)f(a)i(declaration)e(of)h(the)g(form)120 1110 y Ft(TYPE)g Fp(type-name)j Ft(=)d(ARRAY)g Fp(dim)j Fs(,)e(...)h Fp(dim)h Ft(OF)d Fp(base-type-reference)k Ft(;)62 1240 y Fs(where)d(each)f Fp(dim)k Fs(is)10 b(of)i(the)f(form) 120 1336 y Fp(length)k Ft(|)c Fs([)g Ft(LIMIT)g Fp(maxlen)j Ft(|)e(SHORT)e Fs(])62 1466 y(A)i(dimension)f(can)h(be)g(given)f(a)h (fixed)f(length)g(by)h(simply)e(specifying)h(that)g(length.)h(A)g (variable-length)f(dimension)0 1528 y(is)h(either)f(left)h(blank)f (\(meaning)h(the)g(maximum)g(length)f(is)h(2**32-1\),)f(specified)g(as) h Ft(SHORT)g Fs(\(meaning)g(the)g(maximum)0 1591 y(length)e(is)h (2**16-1\),)f(or)h(given)g(an)g(explicit)f(maximum)h(length.)62 1687 y(Note)21 b(that)g(putting)e(the)j(dimensions)d(after)j(the)f Ft(OF)h Fs(would)e(create)i(a)g(syntactic)e(ambiguity)g(in)h(some)h (cases,)0 1749 y(concerning)10 b(grouping)g(of)h(a)h Ft(SHORT)p Fs(.)0 1901 y Fn(2.2.2.6)23 b(Record)15 b(Declarations)120 2014 y Ft(TYPE)c Fp(type-name)j Ft(=)25 b(RECORD)10 b Fp(fields...)i Ft(END)25 b(;)62 2144 y Fs(where)12 b Fp(fields)g Fs(is)e(a)i(comma-separated)g(list)e(of)h Fp(field)p Fs(,)g(which)g(has)f(the)h(form)120 2240 y Fp(field-name)j Ft(:)d Fp(field-type-reference)62 2370 y Fs(A)g(sample)h(record)f(declaration:)120 2466 y Ft(TYPE)25 b(Symbol)f(=)h(RECORD)170 2516 y(name)f(:)h(string,)170 2566 y(ltype)f(:)h(TypeInfo,)170 2616 y(address)f(:)h(cardinal)120 2665 y(END;)p eop %%Page: 18 19 18 18 bop 0 -58 a Fs(Chapter)11 b(2:)g(Defining)f(Interfaces)1351 b(18)0 183 y Fn(2.2.2.7)23 b(Union)15 b(Declarations)62 288 y Fs(A)10 b(union)f(is)h(a)h(type)e(which)h(may)g(take)g(on)g (values)g(of)g(several)g(different)g(types.)g(To)g(be)g(compliant)f (with)h(the)f(CORBA)0 351 y(notion)g(of)i(unions,)f(the)h(union)f (declaration)g(is)g(much)h(more)h(baroque)f(and)f(complicated)h(than)f (it)h(really)f(should)g(be.)h(The)0 413 y(declaration)f(has)h(the)g (form:)120 502 y Ft(TYPE)g Fp(type-name)j Ft(=)d Fs([)h Fp(tag-type)g Fs(])g Ft(UNION)f Fp(arm-list)k Ft(END)c Fs([)h Ft(OTHERS)e Fs(])i Ft(;)62 617 y Fs(where)g Fp(arm-list)j Fs(is)c(a)g(comma-separated)h(list)e(of)h Fp(arm)p Fs(,)i(each)e(of)h (the)e(form:)120 705 y([)h Fp(union-case-name)j Ft(:)d Fs(])h Fp(type-name)i Fs([)d Fp(arm-valuator)k Fs(])62 820 y(where)d(each)f Fp(arm-valuator)k Fs(is)c(either)g(of)g(the)g (form)120 909 y Ft(=)g(DEFAULT)62 1024 y Fs(or)g(of)h(the)f(form)120 1113 y Ft(=)g Fp(value-list)j Ft(END)62 1228 y Fs(and)g(where)g(a)g Fp(value-list)i Fs(is)d(a)h(comma-separated)h(list)d(of)i(constant)e (values)h(of)h(the)f(tag)g(type.)19 b(The)13 b(tag)h(type)f(must)0 1290 y(be)f(one)g(of:)h Ft(SHORT)e(INTEGER)p Fs(,)h Ft(SHORT)f (CARDINAL)p Fs(,)h Ft(INTEGER)p Fs(,)g Ft(CARDINAL)p Fs(,)g Ft(BYTE)p Fs(,)g Ft(BOOLEAN)p Fs(,)h(or)f(an)g(enumerated)0 1352 y(type.)i(\(We)f(should)e(also)h(allow)f Ft(SHORT)g(CHARACTER)h Fs(and)g Ft(CHARACTER)p Fs(.\))i(The)e(tag)g(type)g(is)g Ft(SHORT)f(INTEGER)h Fs(if)g(not)0 1414 y(explicitly)d(specified.)62 1503 y(A)14 b Fp(arm-valuator)j Fs(must)c(be)h(given)e(for)i(either)f (all)h(or)f(none)g(of)h(the)f Fp(arm)s Fs(s;)j(if)d(none,)h(the)f Fp(arm)s Fs(s)i(are)f(assigned)e(single)0 1565 y(integral)h(values,)i (starting)d(with)i(0.)20 b Fp(arm-valuator)t Fs(s)13 b(must)h(be)g(given)g(if)g(the)f(tag)h(type)g(isn't)f(numeric.)21 b(All)13 b(the)h(values)0 1628 y(appearing)d(in)h(the)g Fp(value-list)t Fs(s)e(of)j(a)f(union)f(must)g(be)i(different)e(from)i (one)f(another.)i Ft(DEFAULT)d Fs(can)i(appear)f(in)g(at)g(most)0 1690 y(one)f(arm)h(of)f(a)h(union)e(type)g(construction.)g Ft(DEFAULT)h Fs(and)g Ft(OTHERS)f Fs(cannot)h(both)f(appear)i(in)e(the) h(same)h(union.)62 1778 y(A)i(union)e(value)i(consists)e(of)h(a)h(tag)g (value,)g(possibly)e(paired)h(with)g(a)h(second)f(value.)19 b(When)13 b(the)g(tag)h(value)f(is)g(one)0 1841 y(that)d(appears)h(in,) g(or)f(is)h(implicitly)d(assigned)i(to,)h(an)g(arm)g(of)g(the)f(union)g (type)g(construction,)f(the)i(second)f(value)g(is)h(of)f(the)0 1903 y(type)h(named)i(in)e(that)h(arm.)j(Otherwise,)d(the)f(union)g (value)h(is)f(well-formed)h(only)f(if)h Ft(DEFAULT)g Fs(or)g Ft(OTHERS)g Fs(appears)g(in)0 1965 y(the)h(union)g(type)g (construction.)k(If)d(an)g(arm)h(is)e(valued)g(with)g Ft(DEFAULT)p Fs(,)h(the)f(second)g(value)h(is)f(of)h(that)f(arm's)h (type.)19 b(If)0 2028 y Ft(OTHERS)12 b Fs(appears,)h(there)f(is)g(no)g (second)f(value;)h(it)g(is)g(as)g(if)g(there)h(were)f(a)h(default)f (arm)h(of)f(some)g(trivial)f(type)h(\(like)g(C's)0 2090 y Ft(void)f Fs(or)g(ML's)h Ft(unit)p Fs(\).)62 2178 y(A)f(simple)g (example:)120 2267 y Ft(TYPE)25 b(StringOrInt)e(=)i(UNION)g (ilu.CString,)e(CARDINAL)i(END;)62 2382 y Fs(A)11 b(more)h(complex)f (example,)h(that)e(uses)h(an)g(explicit)f(tag)h(type,)g(union)f(case)h (names,)h(and)f(a)h(default)e(arm:)120 2471 y Ft(TYPE)25 b(ColorType)f(=)g(ENUMERATION)g(RGB,)h(CMY,)f(HSV,)h(YIQ,)f(HLS)h(END;) 120 2521 y(TYPE)g(U2)f(=)h(ColorType)170 2570 y(UNION)220 2620 y(rgb-field)f(:)h(RGBObject)f(=)g(RGB)h(END,)220 2670 y(others)f(:)h(COLORObject)f(=)g(DEFAULT)p eop %%Page: 19 20 19 19 bop 0 -58 a Fs(Chapter)11 b(2:)g(Defining)f(Interfaces)1351 b(19)170 183 y Ft(END;)62 310 y Fs(The)11 b(union)f(case)i(name)g(is)e (not)h(guaranteed)g(to)f(be)i(present)e(in)h(language-specific)f (mappings.)62 405 y(ISL)17 b(unions)e(are)j(logically)d(\(and)h (sometimes)h(actually,)g(depending)e(on)i(the)f(programming)g (language\))g(tagged.)0 467 y(There)11 b(is)g(a)h(difference)f(between) 120 562 y Ft(TYPE)25 b(T1)f(=)h(UNION)g(Bar,)f(Baz)h(END;)120 612 y(TYPE)g(T2)f(=)h(UNION)g(Foo,)f(T1)h(END;)62 739 y Fs(and)120 834 y Ft(TYPE)g(T1)f(=)h(UNION)g(Bar,)f(Baz)h(END;)120 884 y(TYPE)g(T2)f(=)h(UNION)g(Foo,)f(Bar,)h(Baz)f(END;)0 1031 y Fn(2.2.2.8)f(Optional)15 b(Declarations)62 1142 y Fs(A)c(variable)e(of)i(type)f Ft(OPTIONAL)g(Foo)g Fs(can)h(have)f (either)g(a)h(value)f(of)g Ft(Foo)g Fs(or)h(of)f(type)g Ft(NULL)p Fs(.)h(It)f(is)g(declared)g(with)f(the)0 1205 y(form)120 1299 y Ft(TYPE)i Fp(type-name)j Ft(=)25 b(OPTIONAL)10 b Fp(base-type-reference)15 b Ft(;)62 1427 y Fs(This)10 b(should)g(be)h(thought)f(of)h(as)g(roughly)f(equivalent)g(to)g(the)h (declaration)120 1521 y Ft(TYPE)g Fp(type-name)j Ft(=)d(BOOLEAN)g (UNION)g Fp(base-type-reference)j Ft(=)25 b(TRUE)11 b(END)g(END)g (OTHERS)g(;)62 1649 y Fs(The)19 b(difference)f(is)g(that)g Ft(OPTIONAL)g Fs(types)f(are)i(logically)e(un-tagged.)32 b(An)18 b(optional)f(value)h(is)g(not)f(a)i(pair)f(of)0 1711 y(\()p Ft(BOOLEAN)p Fs(,)11 b Fp(base-type-reference)s Fs(\);)g(rather)g(it)g(is)f(a)i(single)d(value,)i(either)g(a)h (special,)e(distinguished,)e Ft(")p Fs(null)p Ft(")i Fs(value)h(or)g(a)0 1773 y(value)g(of)g(the)g Fp(base-type-reference)p Fs(.)h(There)f(is)g(thus)f(no)h(difference)h(between)120 1868 y Ft(TYPE)25 b(Bar)f(=)h(OPTIONAL)f(Foo;)120 1918 y(TYPE)h(Baz)f(=)h(OPTIONAL)f(Bar;)62 2045 y Fs(and)120 2140 y Ft(TYPE)h(Bar)f(=)h(OPTIONAL)f(Foo;)120 2189 y(TYPE)h(Baz)f(=)h (OPTIONAL)f(Foo;)62 2317 y Fp(This)10 b(type)h(is)g(not)f(yet)h (implemented.)0 2464 y Fn(2.2.2.9)23 b(Enumeration)15 b(Declarations)62 2575 y Fs(An)c(enumeration)g(is)f(an)i(abstract)e (type)h(whose)g(values)f(are)i(explicitly)d(enumerated.)j(It)f(is)g (declared)g(with)f(the)h(form)120 2670 y Ft(TYPE)g Fp(type-name)j Ft(=)d(ENUMERATION)f Fp(values...)i Ft(END)f(;)p eop %%Page: 20 21 20 20 bop 0 -58 a Fs(Chapter)11 b(2:)g(Defining)f(Interfaces)1351 b(20)62 183 y(where)15 b Fp(values)g Fs(is)e(a)i(comma-separated)f (list)f(of)h(value)g(names,)i(with)d(optional)f(value)i(ID's)g(that)f (are)i(constants)d(of)0 246 y(type)f Ft(SHORT)g(CARDINAL)h Fs(that)f(specify)h(the)f(value)h(used)f(to)h(represent)g(the)g (enumeration)f(value)h Ft(")p Fs(on)f(the)h(wire)p Ft(")p Fs(.)1847 229 y Fm(3)1879 246 y Fp(Use)0 308 y(of)f(value)g(ID's)g(is)g (deprecated.)120 397 y(value-name)j Fs([)d Ft(=)h Fp(value-id)j Fs(])62 513 y(For)d(example,)120 602 y Ft(TYPE)25 b(TapeAction)f(=)g (ENUMERATION)170 652 y(SkipRecord)g(=)h(1,)170 702 y(Rewind)f(=)h(23,) 170 752 y(Backspace)f(=)h(49,)170 802 y(WriteEOF)f(=)h(0)120 851 y(END;)62 967 y Fs(All)14 b Fp(value-name)s Fs(s)g(and)h Fp(value-ID)s Fs(s)f(must)g(be)h(unique)e(within)g(an)i(enumeration.)21 b(If)15 b Fp(value-ID)s Fs(s)f(are)i(not)d(assigned)0 1030 y(explicitly,)c(appropriate)g(values)h(will)f(be)h(assigned)g (automatically)e(in)i(some)h(unspecified)e(way.)i(An)f(enumeration)g (may)0 1092 y(have)h(at)g(most)g(65535)f(\(2)p Ft(^)p Fs(16-1\))h(values.)0 1223 y Fn(2.2.2.10)22 b(Object)17 b(Type)f(Declarations)62 1328 y Fs(Object)11 b(types)f(are)i(described) f(in)f(the)h(following)e(way:)120 1418 y Ft(TYPE)i Fp(type-name)j Ft(=)d(OBJECT)393 1467 y Fs([)g Ft(SINGLETON)g Fp(protocol-description) o(-strin)o(g)g Fs(])393 1517 y([)g Ft(DOCUMENTATION)f Fp(documentation-string)h Fs(])393 1567 y([)g Ft(COLLECTIBLE)g Fs(])393 1617 y([)g Ft(OPTIONAL)g Fs(])393 1667 y([)g Ft(TYPEID)g Fp(type-id-string)g Fs(])393 1716 y([)g Ft(SUPERTYPES)g Fp(supertype-list)i Ft(END)e Fs(])393 1766 y([)g Ft(METHODS)g Fp(method-list...)f Ft(END)i Fs(])393 1816 y([)f Ft(BRAND)g Fp(brand-string)h Fs(])f Ft(;)62 1932 y Fs(The)e(keyword)f Ft(CLASS)h Fs(is)f(a)h(deprecated)g(synonym)f(for)h Ft(OBJECT)p Fs(,)g(and)g Ft(SUPERCLASSES)f Fs(is)g(a)h(deprecated)g(synonym)0 1994 y(for)i Ft(SUPERTYPES)p Fs(.)g(Also,)393 2084 y([)g Ft(SUPERCLASS)g Fp(supertype-name)i Fs(])62 2200 y(is)e(a)g(deprecated) h(equivalent)d(to)393 2289 y([)i Ft(SUPERTYPES)g Fp(supertype-name)i Ft(END)e Fs(])62 2405 y(The)g Ft(SINGLETON)g Fs(keyword)g(specifies)f (that)h(instances)f(of)h(this)g(type)f(are)i(singleton)e(servers,)h (and)g(implies)g(that)f(the)0 2467 y(discriminator)h(object)g(\(the)h (subject)f(of)h(the)g(call\))g(should)e(not)h(be)i(implicitly)d (marshalled)h(as)h(the)g(first)g(argument)g(in)f(an)p 0 2524 600 2 v 21 2652 a Fm(3)62 2669 y Fs(Same)i(integer)d(in)h(all)g (protocols?)e(Yep)j(--)f(for)h(now.)p eop %%Page: 21 22 21 21 bop 0 -58 a Fs(Chapter)11 b(2:)g(Defining)f(Interfaces)1351 b(21)0 183 y(RPC.)12 b(This)e(is)g(typically)f(used)h(in)h(describing)e (an)i(instance)f(of)h(an)f(existing)f(RPC)j(service,)f(which)f(is)g(to) h(be)g(modelled)f(in)0 246 y(ILU.)g(The)f(argument)h(to)f Ft(SINGLETON)g Fs(is)g(a)h(string)f(in)g(the)h(form)g(of)f(ILU)h (``protocol-info'',)f(which)g(specifies)g(particular)0 308 y(protocol-specific)f(parameters)i(to)g(be)f(used)h(in)f (implementing)f(this)h(object)g(type)g(`on)h(the)f(wire'.)i(For)f (example,)h(the)e(Sun)0 370 y(RPC)i(calendar)e(manager)h(would)f(use)g (a)h Fp(protocol-description-s)o(tring)e Fs(of)i Ft ("sunrpc_2_100068_3")p Fs(,)e(indicating)g(that)0 432 y(it)j(uses)f(a)i(Sun)f(RPC)h(program)g(number)f(of)g(100068)f(and)h(a) g(Sun)g(RPC)i(version)d(of)h(3.)62 524 y(The)i(optional)e Fp(documentation-string)g Fs(is)i(a)g(quoted)e(string,)h(which)g(is)g (passed)g(on)h(to)f(language-specific)f(bindings)0 587 y(where)g(possible,)f(such)h(as)g(with)f(the)h(doc-string)f(capability) f(in)i(Common)h(Lisp.)62 679 y(The)e Ft(COLLECTIBLE)f Fs(keyword)h(specifies)f(that)g(instances)g(of)h(this)f(type)g(are)i (meant)f(to)g(be)g(garbage)g(collectible,)f(and)0 741 y(that)j(methods)f(necessary)h(for)h(this)e(should)g(be)h (automatically)f(added)h(to)g(its)f(method)h(suite.)i(For)f(an)f (object)g(type)f(to)h(be)0 803 y(collectible,)e(all)h(ancestor)g (object)f(types)g(must)h(also)g(be)g(collectible.)62 895 y(The)16 b Ft(OPTIONAL)e Fs(keyword)h(specifies)g(that)f(the)h (language-specific)g Ft(nil)g Fs(value)g(may)h(be)f(passed,)h(instead)f (of)g(an)0 957 y(instance)c(of)h(this)f(object)g(type,)i(anywhere)e (this)g(object)h(type)f(is)h(used.)h Fp(This)e(is)h(a)g(CORBA)h (mis-feature,)g(and)f(its)f(use)h(is)0 1020 y(strongly)d(deprecated.)j (Better)f(to)g(explicitly)e(use)i(a)h(different)f(type)f(constructed)g (with)g(the)h(ILU)g Ft(OPTIONAL)g Fp(keyword.)62 1112 y Fs(The)f(optional)e Fp(supertype-list)13 b Fs(defines)c(an)h (inheritance)g(relationship)d(between)j(the)g(object)f(types)h(named)g (in)g(the)f(list)0 1174 y(and)i(the)g(type)g Fp(type-name)p Fs(.)62 1266 y(The)16 b(optional)f Fp(type-id-string)h Fs(can)g(be)h(used)f(to)f(explicitly)g(assign)g(an)h(MSTID)h(for)f(an)h (object)e(type.)26 b(Doing)16 b(so)0 1328 y(effectively)c Fp(seal)t Fs(s)h(the)g(object)f(type;)h(that)f(is,)h(changes)g(to)f (the)h(structure)f(of)h(the)g(object)f(type)g(will)g(not)h(be)g (reflected)g(in)0 1391 y(the)h(MSTID,)i(so)e(version)f(mismatches)i (will)e(not)h(be)h(caught)f(automatically)f(by)h(ILU.)h(This)e(is)h(a)h (dangerous)f(feature)0 1453 y(\(mandated)d(by)g(CORBA\).)62 1545 y(The)k Fp(brand-string)g Fs(in)g(the)f Ft(BRAND)h Fs(clause,)g(if)g(any,)h(contributes)d(an)i(arbitrary)f(tag)h(to)f(the) h(structure)f(of)h(the)f(type;)0 1607 y(omitting)e(the)h Ft(BRAND)g Fs(clause)g(is)g(equivalent)f(to)h(giving)e(one)j(with)e (the)h(empty)g(string.)k(The)c(brand)h(is)e(included)h(in)f(the)0 1669 y(type)h(UID)h(hash)f(of)h(the)g(type,)g(and)g(thus)f(gives)g(the) g(programmer)i(a)f(way)g(to)f(make)i(two)e(types)g(distinct)f(despite)h (their)0 1732 y(otherwise)i(having)f(the)i(same)g(structure.)25 b(The)15 b Fp(brand-string)h Fs(should)f(be)g(a)i(quoted)d(string)h(of) h(printable)e(US-ASCII)0 1794 y(characters.)62 1886 y(The)e Fp(method-list)k Fs(is)11 b(a)i(comma-separated)g(list)e(of)i (procedure)f(descriptions.)h(All)f(the)g(methods)f(of)i(an)f(object)g (type)0 1948 y(have)f(distinct)e(names.)j(This)e(means)i(that)e (independently-developed)e(supertypes)i(might)h(not)f(be)h(usable)g (together.)62 2040 y(Methods)g(have)g(the)g(syntax:)120 2132 y([)g Ft(FUNCTIONAL)g Fs(])g([)h Ft(ASYNCHRONOUS)e Fs(])i Fp(method-name)i Ft(\()d Fs([)g Fp(args...)i Fs(])e Ft(\))211 2182 y Fs([)g Ft(:)h Fp(return-type-reference)i Fs(])211 2232 y([)d Ft(RAISES)g Fp(exceptions...)g Ft(END)g Fs(])211 2282 y([)g Ft(=)h Fp(procedure-id)j Fs(])211 2332 y([)c Fp(documentation-string)g Fs(])62 2453 y(where)h(the)f (discriminator)f(\(the)i(implicit)e(first)h(argument)g(to)g(the)g (method,)h(the)f(subject)f(of)i(the)f(call,)h(an)g(instance)e(of)0 2516 y(the)g(object)f(type)h(in)g(question\))e(is)i(not)f(explicitly)f (listed)h(in)h(the)f(signature.)h(Each)h(method)e(has)h(zero)h(or)f (more)h(arguments)0 2578 y(in)g(a)g(comma-separated)h(list,)f(each)g (element)g(of)h(which)e(is)h(a)g(colon-separated)f(two-ple)120 2670 y([)h Fp(argument-direction)i Fs(])f Fp(argument-name)i Ft(:)d Fs([)h Ft(SIBLING)e Fs(])i Fp(argument-type-reference)p eop %%Page: 22 23 22 22 bop 0 -58 a Fs(Chapter)11 b(2:)g(Defining)f(Interfaces)1351 b(22)62 183 y(The)13 b Ft(SIBLING)g Fs(keyword)f(may)i(only)e(appear)h (on)g(arguments)f(of)h(an)h(object)e(type,)h(to)g(indicate)f(that)h (the)f(argument)0 246 y(should)e(be)i(a)g(sibling)e(object)h(to)g(the)h (discriminator)e(of)i(the)f(method.)i(The)f Ft(FUNCTIONAL)f Fs(keyword)g(indicates)f(that)h(the)0 308 y(method,)16 b(for)f(a)g(given)f(set)h(of)g(arguments,)h(is)e(idempotent)g(\(i.e.,)j (the)e(side)f(effects)h(of)g(one)g(call)g(are)g(the)g(same)g(as)g(the)0 370 y(side)c(effects)h(of)f(more)h(than)f(one)g(call\))h(and)f(will)f (always)h(return)g(the)g(same)h(result)f(\(or)g(raise)h(the)f(same)h (exception\);)e(this)0 432 y(information)d(may)i(be)f(used)g(for)g (caching)g(of)g(return)g(values)f(in)h(the)g(client)f(side)h(stubs.)h (The)f(optional)f Fp(argument-direction)0 495 y Fs(information)12 b(is)g(one)g(of)h(the)g(three)f(keywords)g Ft(IN)p Fs(,)h Ft(OUT)p Fs(,)h Ft(INOUT)p Fs(,)f(specifying)e(whether)h(the)h (parameter)h(is)e(being)g(used)0 557 y(as)f(an)g(input)f(parameter,)j (an)e(output)f(parameter,)i(or)f(both.)62 649 y(A)f(method)g(return)g (type)f(is)h(allowed)f(\(again)h(separated)g(from)g(the)g(procedure)g (argument)g(list)f(by)h(a)g(colon\),)g(and)g(a)g(list)0 711 y(of)j(possible)e(exceptions)g(may)i(be)g(specified)f(as)h(a)g (comma-separated)g(list)f(of)h(exception)e(names,)j(bracketed)f(with)e (the)0 774 y(keywords)f(RAISES)i(and)f(END.)62 866 y(The)j(optional)d Fp(procedure-id)18 b Fs(field)13 b(allows)g(a)h(service)f(description)f (to)h(specify)g(the)h(procedure)f(code)h(that)f(is)g(used)0 928 y(in)g(the)g(RPC)h(request)f(packet)g(for)g(this)f(method.)17 b(Procedure)d(ID's)f(are)h(restricted)e(to)h(the)g(range)g([0,65279],)h (and)f(must)0 990 y(be)g(unique)f(within)f(an)i(interface.)k(This)12 b(may)i(only)e(be)h(used)f(in)h(methods)f(on)h(objects)f(marked)h(with) f(the)h Ft(SINGLETON)0 1053 y Fs(attribute.)62 1145 y(If)20 b(a)h(method)e(is)g(marked)h(with)f(the)h Ft(ASYNCHRONOUS)f Fs(keyword)g(and)g(does)g(not)g(return)h(a)g(value)g(or)f(raise)h(an)0 1207 y(exception,)14 b(the)g(RPC)h(method)e(call)h(of)g(a)h(surrogate)e (instance)g(will)g(return)h(after)g(sending)f(the)h(request)f(packet)h (to)f(the)0 1270 y(RPC)j(partner,)g(as)e(the)h(success)f(of)h(the)f (call)h(does)f(not)g(depend)g(on)h(the)f(completion)f(of)i(the)g (associated)e(code.)23 b(Other)0 1332 y(RPC)14 b(methods)e(will)g (block)g(in)g(such)h(a)g(way)g(as)f(to)h(allow)f(the)g(scheduler)h(to)f (handle)g(other)h(events)f(while)g(it)g(is)h(waiting)0 1394 y(for)e(the)g(call)g(to)g(complete,)g(if)g(the)g(user)g(has)g (registered)g(the)g(appropriate)f(scheduler)h(hooks)f(with)g(the)h(ILU) g(runtime.)62 1486 y(The)g(optional)d Fp(documentation-string)i Fs(is)g(a)h(quoted)e(string,)h(which)f(is)h(passed)g(on)g(to)g (language)g(bindings)e(for)j(which)0 1549 y(it)g(is)f(meaningful,)h (such)g(as)g(the)g(doc-string)f(capability)f(in)i(Common)h(Lisp.)62 1641 y(For)g(example:)120 1733 y Ft(TYPE)25 b(FancyString)e(=)i(OBJECT) 170 1783 y(METHODS)220 1833 y(FUNCTIONAL)f(Length)g(\(\))h(:)f (cardinal,)220 1883 y(Substring)g(\(start)g(:)h(cardinal,)f(end)h(:)f (cardinal\))g(:)h(string)269 1932 y(RAISES)g(StartGreaterThanEnd,)e (StartTooLarge,)g(EndTooLarge)h(END,)220 1982 y(Char)g(\(index)h(:)f (cardinal\))g(:)h(character)269 2032 y(RAISES)g(BadIndex)f(END)170 2082 y(END;)62 2204 y Fs(Note)12 b(that)f(the)g(object)g(language)g(in) g(ILU)h(is)f(not)g(intended)f(to)i(be)f(used)h(to)f(fully)g Fp(define)j Fs(an)d(object)g(type,)h(but)f(rather)0 2266 y(to)h Fp(describe)i Fs(it)d(in)h(a)g(simple)g(language)f(that)h(can)g (be)g(transformed)g(into)f(the)h(different)f(object)h(type)f (definition)f(systems)0 2329 y(of)h(several)g(other)g(languages.)0 2468 y Fn(2.2.2.11)22 b(Fixed-point)15 b(Declarations)62 2577 y Fs(A)e Ft(FIXEDPOINT)f Fs(type)g(is)g(a)h(rational)f(type)g (with)f(a)i(fixed)g(denominator.)i(It)d(is)g(defined)g(with)g(a)h (declaration)f(of)g(the)0 2640 y(form)p eop %%Page: 23 24 23 23 bop 0 -58 a Fs(Chapter)11 b(2:)g(Defining)f(Interfaces)1351 b(23)120 183 y Ft(TYPE)16 b Fp(type-name)j Ft(=)d(FIXEDPOINT)f([)i (MIN-NUMERATOR)e Fp(min-num-value)j Ft(])e([)g(MAX-NUMERATOR)g Fp(max-)120 233 y(num-value)d Ft(])f([)f Fs(DENOMINATOR)g Fp(denom-value)i Ft(])e(;)62 359 y Fs(where)18 b Fp(denom-value)h Fs(specifies)d(the)h(denominator)f(of)h(all)f(values)h(of)g(the)f (type,)j(the)e(optional)e Fp(min-num-value)0 421 y Fs(specifies)g(the)g (minimum)g(numerator)h(value)f(allowed)f(for)i(values)e(of)i(the)f (type,)h(and)f(the)h(optional)d Fp(max-num-value)0 484 y Fs(specifies)k(the)g(maximum)h(numerator)f(value)g(allowed)g(for)h (values)e(of)i(the)f(type.)30 b(If)18 b Fp(denom-value)h Fs(is)e(negative,)i(it)0 546 y(is)e(interpreted)f(as)h(the)g (reciprocal)g(of)g(its)g(absolute)e(value.)30 b(If)17 b(either)g Fp(min-num-value)i Fs(or)e Fp(max-num-value)j Fs(is)d(not)0 608 y(specified,)9 b(the)g(numerator)h(value)f(is)g(not)f (bounded)g(in)h(that)g(direction.)g(If)h(the)f(denominator)g(is)f(not)h (specified,)g(it)g(defaults)0 670 y(to)i(1.)62 764 y Fp(This)f(type)h(is)g(still)e(experimental)i(and)g(may)h(not)e(be)h (supported)f(in)h(any)g(of)g(the)g(ILU)g(language)f(bindings.)0 910 y Fo(2.2.3)26 b(Exception)14 b(Declarations)62 1020 y Fs(Exceptions)e(in)h(ILU)g(are)h(raised)f(by)g(ILU)g(methods.)k(They) c(allow)f(error)i(conditions)d(to)h(be)i(signalled)d(back)j(to)e(the)0 1083 y(calling)e(code.)i(They)e(are)i(declared)g(with)e(a)h(statement)g (of)g(the)g(form:)120 1177 y Ft(EXCEPTION)g Fp(exception-name)i Fs([)e Ft(:)h Fp(type-reference)i Fs(])d([)h Fp(documentation-string)e Fs(])i Ft(;)62 1303 y Fs(The)h(optional)d Fp(type-reference)16 b Fs(part)c(of)h(the)f(declaration)g(allows)f(the)h(exception)f(to)h (have)h(an)f(associated)g(value,)h(to)0 1365 y(be)j(used)f(in)g (interpretation)e(of)j(the)f(exception.)24 b(For)16 b(example,)h(an)f (exception)e(BadFilename)i(might)f(have)g(the)h(type)0 1427 y Ft(ilu.CString)p Fs(,)11 b(so)f(that)h(the)g(actual)g(bad)g (filename)g(can)h(be)f(associated)f(with)g(the)h(exception:)62 1521 y(The)g(optional)d Fp(documentation-string)i Fs(is)g(a)h(quoted)e (string,)h(which)f(is)h(passed)g(on)g(to)g(language)g(bindings)e(for)j (which)0 1584 y(it)g(is)f(meaningful,)h(such)g(as)g(the)g(doc-string)f (capability)f(in)i(Common)h(Lisp.)120 1678 y Ft(TYPE)25 b(Filename)f(=)h(ilu.CString;)120 1728 y(EXCEPTION)f(BadFileName)g(:)h (Filename)f("The)g(value)h(is)g(the)f(bad)h(filename";)62 1854 y Fs(Because)7 b(of)g(the)g(uncertain)g(nature)g(of)g(life)g(in)f (dis)o(trib)o(uted)g(syst)o(ems,)g(the)h(pre-defined)g(exception)g Ft(ilu)o(.ProtocolEr)o(ror)0 1916 y Fs(\(defined)18 b(in)f(the)h(ILU)g (interface\))g(may)g(be)g(raised)g(by)f(any)h(method,)i(to)d(indicate)g (that)h(the)f(method)h(could)f(not)g(be)0 1978 y(handled,)11 b(for)g(some)g(reason.)h(It)f(has)g(the)g(following)e(form:)120 2072 y Ft(TYPE)25 b(ProtocolErrorDetail)e(=)h(ENUMERATION)519 2122 y(NoSuchClassAtServer)f(=)h(1,)519 2172 y(BrandMismatch)f(=)i(2,) 519 2222 y(NoSuchMethodOnClass)e(=)h(3,)519 2271 y(InvalidArguments)f (=)i(4,)519 2321 y(UnknownObjectInstance)d(=)j(5,)519 2371 y(UnreachableModule)e(=)i(6,)519 2421 y(RequestRejectedByModule)d (=)j(7,)519 2471 y(TimeoutOnRequest)e(=)i(8,)519 2521 y(UnknownError)e(=)i(9)319 2570 y(END;)120 2670 y(EXCEPTION)f (ProtocolError)g(:)h(ProtocolErrorDetail;)p eop %%Page: 24 25 24 24 bop 0 -58 a Fs(Chapter)11 b(2:)g(Defining)f(Interfaces)1351 b(24)62 183 y(Signalling)10 b(of)i Ft(ProtocolError)f Fs(is)h(never)g(done)f(by)h(user-written)f(server)h(code;)g(it)g(is)f (reserved)h(to)g(the)f(transport)0 246 y(and)g(runtime)g(layers)g(of)g (ILU.)0 380 y Fo(2.2.4)26 b(Constant)13 b(Declarations)62 488 y Fs(For)e(convenience)e(of)i(interface)f(design,)g(constant)f (values)g(for)i(certain)f(simple)g(types)f(may)i(be)f(defined)g(in)g (ISL)g(with)0 550 y(statements)g(of)h(the)g(form)120 641 y Ft(CONSTANT)g Fp(constant-name)i Ft(:)e Fp(constant-type)h Ft(=)f Fp(constant-value)h Ft(;)0 776 y Fn(2.2.4.1)23 b(Integer,)16 b(Cardinal,)e(and)i(Byte)f(Constants)62 883 y Fs(A)h Fp(constant-value)g Fs(for)g(types)f(that)f(are)j (sub-types)d(of)h Ft(INTEGER)p Fs(,)i Ft(CARDINAL)p Fs(,)f(or)g Ft(BYTE)f Fs(is)g(specified)g(with)f(the)0 945 y(syntax)120 1036 y([)d Fp(sign)i Fs(])f([)f Fp(base-indicator)j Fs(])d Fp(digits)62 1155 y Fs(where)g(the)f(optional)f Fp(base-indicator)j Fs(allows)d(selection)h(of)g(bases)g(2,)h(8,)g(10)f(or)g(16.)h(It)f(is) g(a)h(digit)e('0')h(\(zero\))h(followed)0 1217 y(by)i(either)f(the)h (character)g('B')h(for)f(base)g(2,)h('X')f(for)g(base)g(16,)g('O')g (\(oh\))g(for)g(base)g(8,)h(or)f('D')g(for)g(base)g(10.)j(The)d Fp(sign)i Fs(is)0 1279 y(only)9 b(valid)f(for)i(subtypes)e(of)i Ft(INTEGER)p Fs(;)f(it)g(is)g(either)g(')p Ft(+)p Fs(')h(or)g('-';)g (if)g(not)f(specified,)g(')p Ft(+)p Fs(')h(is)f(assumed.)i(The)f Fp(base-indicator)0 1342 y Fs(and)h Fp(digits)g Fs(fields)f(are)i (case-insensitive.)0 1477 y Fn(2.2.4.2)23 b(Real)14 b(Constants)62 1584 y Fs(A)d Fp(constant-value)h Fs(for)g(subtypes)d(of)j Ft(REAL)f Fs(has)f(the)h(syntax:)120 1675 y([)g Fp(sign)i Fs(])f Fp(integer)t Ft(.)p Fp(fraction)g Fs([)g Ft(e)f Fp(exponent)j Fs(])62 1794 y(where)g Fp(integer)i Fs(and)d Fp(fraction)j Fs(are)e(sequences)f(of)g(decimal)g(digits,)g Fp(sign)i Fs(is)e(either)g(')p Ft(+)p Fs(')g(or)h('-')g(\(')p Ft(+)p Fs(')f(is)g(the)g(default\),)0 1856 y(and)e Fp(exponent)j Fs(is)d(the)g(power)g(of)g(10)g(which)f(the)h(rest)g(of)h(the)f(value)f (is)h(multiplied)e(by)i(\(defaults)g(to)f(0\).)0 1991 y Fn(2.2.4.3)23 b(ilu.CString)15 b(Constants)62 2098 y Fs(A)c Fp(constant-value)h Fs(for)g(a)f(sub-type)f(of)i Ft(ilu.CString)e Fs(has)h(the)g(form)120 2189 y Ft(")p Fp(characters)r Ft(")62 2308 y Fs(where)h Fp(characters)h Fs(are)f(any)f(ISO-Latin-1)f(characters)i(except)f(for)g(8)p 1175 2308 14 3 v 16 w(000.)g(The)g(escape)g(character)h(is)f(defined)f (to)h(be)0 2370 y('#')g(\(hash\).)h(The)f(escape)g(character)h(may)g (occur)f(in)g(the)g(string)f(only)g(in)h(the)f(following)g(ways:)120 2461 y(#)p Ft(")h Fs(--)h(a)f(single)f(double-quote)f(character)120 2511 y(##)i(--)g(a)h(single)e(escape)h(character)120 2560 y(#)p Fp(hex-digit)t(hex-digit)h Fs(--)g(the)f(octet)g(16)p 749 2560 V 15 w Fp(hex-digit)t(hex-digit)120 2610 y Fs(#n)g(--)g (newline)120 2660 y(#r)g(--)h(carriage)g(return)p eop %%Page: 25 26 25 25 bop 0 -58 a Fs(Chapter)11 b(2:)g(Defining)f(Interfaces)1351 b(25)0 183 y Fn(2.2.4.4)23 b(Examples)14 b(of)h(Constants)120 357 y Ft(CONSTANT)24 b(Newline)g(:)h(byte)g(=)g(10;)120 407 y(CONSTANT)f(Pi)h(:)g(short)f(real)h(=)f(3.14159;)120 457 y(CONSTANT)g(Big)h(:)g(long)f(real)h(=)f(-1.1349e27;)49 b(\(*)h(-1.1349)24 b(*)h(10**27)74 b(*\))120 507 y(TYPE)25 b(Filename)f(=)h(ilu.CString;)120 557 y(CONSTANT)f(MyLogin)g(:)h (Filename)f(=)h("~/.login";)120 606 y(CONSTANT)f(Prompt)h(:)f (ilu.CString)g(=)h("OK#n)f(";)120 656 y(CONSTANT)g(HeapBound)g(:)h (cardinal)f(=)h(0xFFFF39a0;)120 706 y(CONSTANT)f(Pattern1)g(:)h (cardinal)f(=)h(0b000001000001;)0 1124 y Fu(2.3)30 b(ilu.isl)62 1298 y Fs(The)23 b(standard)f(interface)h Ft(ilu)f Fs(can)h(be)g(found) f(in)g(the)g(file)h(`)p Fp(ILUHOME)t Ft(/interfaces/ilu.isl)p Fs(';)k(it)22 b(is)0 1360 y(maintained)10 b(as)i(`)p Fp(ILUHOME)t Ft(/src/stubbers/parser/ilu.isl)p Fs('.)d(Here)j(are)f (its)g(contents:)120 1518 y Ft(INTERFACE)24 b(ilu)h(BRAND)f("version)g (2";)120 1617 y(\(*)120 1667 y(Copyright)g(\(c\))h(1991-1997)f(Xerox)g (Corporation.)49 b(All)25 b(Rights)f(Reserved.)120 1767 y(Unlimited)g(use,)h(reproduction,)e(and)i(distribution)f(of)g(this)h (software)f(is)120 1817 y(permitted.)49 b(Any)25 b(copy)f(of)h(this)f (software)g(must)h(include)f(both)h(the)f(above)120 1866 y(copyright)g(notice)g(of)h(Xerox)g(Corporation)e(and)i(this)g (paragraph.)48 b(Any)120 1916 y(distribution)24 b(of)h(this)f(software) g(must)h(comply)f(with)h(all)f(applicable)g(United)120 1966 y(States)g(export)h(control)f(laws.)49 b(This)25 b(software)f(is)h(made)f(available)g(AS)h(IS,)120 2016 y(and)g(XEROX)f(CORPORATION)g(DISCLAIMS)g(ALL)h(WARRANTIES,)f(EXPRESS)g (OR)g(IMPLIED,)120 2066 y(INCLUDING)g(WITHOUT)g(LIMITATION)g(THE)h (IMPLIED)f(WARRANTIES)g(OF)h(MERCHANTABILITY)120 2116 y(AND)g(FITNESS)f(FOR)h(A)f(PARTICULAR)g(PURPOSE,)g(AND)h (NOTWITHSTANDING)f(ANY)g(OTHER)120 2165 y(PROVISION)g(CONTAINED)g (HEREIN,)g(ANY)h(LIABILITY)f(FOR)h(DAMAGES)f(RESULTING)g(FROM)120 2215 y(THE)h(SOFTWARE)f(OR)h(ITS)f(USE)h(IS)f(EXPRESSLY)h(DISCLAIMED,)e (WHETHER)i(ARISING)f(IN)120 2265 y(CONTRACT,)g(TORT)h(\(INCLUDING)f (NEGLIGENCE\))f(OR)i(STRICT)g(LIABILITY,)e(EVEN)i(IF)120 2315 y(XEROX)f(CORPORATION)g(IS)h(ADVISED)f(OF)h(THE)g(POSSIBILITY)f (OF)g(SUCH)h(DAMAGES.)120 2414 y($Id:)g(isl.tim,v)f(1.47)g(1998/10/31)g (00:22:46)g(janssen)h(Exp)f($)120 2464 y(*\))120 2564 y(TYPE)h(CString)f(=)h(SEQUENCE)f(OF)g(SHORT)h(CHARACTER;)120 2663 y(TYPE)g(CORBA-Object)e(=)i(OBJECT)f(OPTIONAL)h(TYPEID)f ("IDL:omg.com/CORBA/Object:1.0";)p eop %%Page: 26 27 26 26 bop 0 -58 a Fs(Chapter)11 b(2:)g(Defining)f(Interfaces)1351 b(26)0 183 y Fu(2.4)30 b(Using)15 b(OMG)f(IDL)i(with)f(ILU)62 293 y Fs(ILU)c(allows)f(the)g(use)h(of)g(CORBA)g(OMG)g(IDL)826 277 y Fm(4)856 293 y Fs(instead)e(of)i(ILU)g(ISL.)h(It)e(does)h(this)e (by)i(translating)e(the)h(OMG)h(IDL)0 355 y(to)g(its)h(equivalent)e (form)j(in)e(ISL.)i(Most)e(ILU)h(tools)f(will)f(do)i(this)f (automatically,)g(based)h(on)f(whether)h(the)f(suffix)g(of)h(the)0 418 y(filename)j(argument)g(is)g(`)p Ft(.isl)p Fs(')g(or)g(`)p Ft(.idl)p Fs('.)24 b(In)15 b(addition,)g(the)f(program)i Ft(idl2isl)e Fs(can)i(be)f(invoked)f(explicitly)f(to)0 480 y(create)e(an)g(ISL)g(version)f(of)h(an)g(OMG)g(IDL)f(interface)h (file.)h(The)e(program)h(idl2isl)e(translates)g(from)j(IDL)e(to)h(ISL.) g(IDL)g(is)0 542 y(the)g(Interface)h(Definition)d(Language)i(defined)f (by)h(the)g(Object)g(Management)g(Group.)1409 526 y Fm(5)0 685 y Fo(2.4.1)26 b(Translation)62 794 y Fs(On)14 b(the)g(whole,)g(the) g(translation)e(from)j(IDL)e(to)h(ISL)g(is)g(a)g(straightforward)f (change)h(of)g(syntax.)19 b(There)14 b(are)g(a)h(few)0 857 y(cases,)d(however,)f(where)g(a)h(bit)e(more)i(is)f(needed.)0 999 y Fn(2.4.1.1)23 b(Anonymous)14 b(types)62 1109 y Fs(OMG)c(IDL)f(allows)g(type)g(declarators)g(to)g(be)g(used)g(in)g (certain)h(places)f(in)g(the)g(syntax)g(\(for)g(example,)i(struct)d (members)0 1171 y(and)i(operation)f(parameters\).)j(ISL)e(does)g(not;)f (it)h(requires)f(a)i(type)e(name)i(in)f(the)f(corresponding)g (situations.)f(As)i(a)h(result,)0 1234 y(it)j(is)f(sometimes)h (necessary)g(for)h(the)f(translator)f(to)g(introduce)h(a)g(name)h(in)f (the)g(ISL)g(output)f(for)h(those)g(types)f(that)h(are)0 1296 y(anonymous)c(in)g(the)h(OMG)g(IDL)g(input.)f(These)h(names)h(are) f(always)g(of)g(the)g(form)g Ft(AnonType-)p Fp(nnn)p Ft(-)p Fs(,)f(where)h Fp(nnn)j Fs(is)c(an)0 1358 y(integer.)62 1451 y(For)i(example,)f(the)g(OMG)h(IDL)f(declaration)120 1545 y Ft(struct)24 b(str)h({)120 1594 y(long)g(f1;)120 1644 y(long)g(f2[5];)120 1694 y(};)62 1818 y Fs(is)11 b(translated)f(into)g(the)h(following)e(ISL:)120 1911 y Ft(TYPE)25 b(AnonType-1-)e(=)i(ARRAY)g(OF)f(5)h(INTEGER;)120 1961 y(TYPE)g(str)f(=)h(RECORD)120 2011 y(f1)g(:)g(INTEGER,)120 2061 y(f2)g(:)g(AnonType-1-)120 2110 y(END;)p 0 2178 600 2 v 21 2310 a Fm(4)62 2326 y Fs(OMG)15 b(IDL)f(is)g(defined)f(in:)k (The)d(Common)h(Object)e(Request)h(Broker:)k(Architecture)13 b(and)i(Specification,)f(OMG)62 2389 y(Document)d(Number)g(91.12.1,)g (Revision)f(1.1)21 2528 y Fm(5)62 2544 y Fs(The)15 b(program's)f(front) g(end)h(is)f(derived)g(from)h(the)f(Interface)h(Definition)e(Language)h (Compiler)g(Front)h(End)f(from)62 2606 y(SunSoft,)j(Inc.)25 b(See)16 b(the)g(file)f(`)p Ft (src/stubbers/idl2isl/Sun-parser/docs/COP)o(YRIGHT)p Fs(')e(in)i(the)g(ILU)62 2669 y(distribution.)p eop %%Page: 27 28 27 27 bop 0 -58 a Fs(Chapter)11 b(2:)g(Defining)f(Interfaces)1351 b(27)0 183 y Fn(2.4.1.2)23 b(Topmodules)15 b(mode)62 288 y Fs(When)c(the)g(translator)f(is)g(in)h(this)f(mode)h(\(which)f (it)h(is)f(by)h(default\),)g(only)f Ft(module)h Fs(declarations)f(are)h (allowed)f(at)h(the)0 351 y(topmost)h(level.)k(Each)d Ft(module)g Fs(translates)f(into)f(an)i Ft(INTERFACE)g Fs(declaration)f(in)g(ISL,)i(and)f(the)g(declarations)e(inside)0 413 y(each)h Ft(module)e Fs(go)h(into)f(the)h(corresponding)f(ISL)h Ft(INTERFACE)p Fs(.)62 501 y(If)17 b(the)e(translator)g(is)g(not)g(in)h (this)f(mode,)i(all)f(the)f(declarations)g(in)h(the)f(IDL)h(file)g(go)f (into)g(one)h(ISL)g Ft(INTERFACE)0 564 y Fs(whose)10 b(name)i(is)f(taken)g(from)h(the)e(OMG)i(IDL)f(input)f(filename,)i (less)e(the)h(`)p Ft(.idl)p Fs(')g(suffix.)0 692 y Fn(2.4.1.3)23 b(Imports)14 b(mode)62 797 y Fs(When)j(the)g(translator)g(is)f(in)h (this)g(mode)g(\(which)g(it)g(is)g(by)g(default\),)h Ft(#include)f Fs(preprocessor)g(directives)f(are,)0 859 y(roughly)e(speaking,)i(turned)f(into)g(ISL)h Ft(IMPORT)g Fs(statements.)24 b(This)15 b(mode)h(allows)e(for)i(separate)g (compilation)e(\(stub)0 921 y(generation\))i(of)h(interfaces.)30 b(There)17 b(are)h(some)f(restrictions:)k(the)c Ft(#include)f Fs(directives)g(must)h(occur)g(before)g(any)0 984 y(declarations)11 b(in)h(the)h(file,)g(and)f(the)g(files)g(that)g(are)h(included)e(must)i (not)e(be)i(fragments.)i(That)d(is,)h(each)g(must)f(consist)f(of)0 1046 y(a)j(sequence)f(of)h(whole)f(declarations)g(\(more)h (specifically,)f Ft(module)h Fs(declarations)e(if)i(in)f Ft(topmodules)g Fs(mode\).)19 b(The)0 1108 y(included)10 b(files)h(may)g(in)g(turn)f(include)h(other)f(files.)62 1197 y(If)i(the)g(translator)e(is)i(not)f(in)g(this)f(mode,)j(the)e (input)f(is)i(considered)e(to)i(be)g(the)f(result)g(of)h(preprocessing) e(the)h(file)h(first)0 1259 y(and)f(textually)e(substituting)f(the)j (included)f(files,)h(following)e(the)i(usual)f(behavior)h(of)g(C)g(and) g(C)p Ft(++)h Fs(compilers.)0 1387 y Fn(2.4.1.4)23 b(Unsupported)16 b(constructs)62 1492 y Fs(If)c(VARIANT)f(support)e(has)i(not)g(been)g (configured)f(in,)h(the)g(IDL)g(type)g Ft(any)g Fs(is)g(disallowed)e (by)i(the)g(translator.)62 1581 y(Use)g(of)h Ft(context)e Fs(clauses)h(on)g(operations)e(is)i(not)g(supported.)0 1709 y Fo(2.4.2)26 b(Manual)14 b(Invocation)g(of)h Fl(idl2isl)62 1814 y Fs(The)h(program)g(is)f(run)g(automatically)f(as)i(an)g (intermediate)f(step)g(by)g(any)g(of)h(the)f(ILU)h(tools)e(that)h(take) h(ISL)g(files)0 1877 y(\(normally)11 b(ending)f(in)g(`)p Ft(.isl)p Fs('\))i(if)f(the)g(filename)g(ends)g(in)g(`)p Ft(.idl)p Fs('.)62 1965 y(The)g(program)h(may)f(also)g(be)g(run)g (directly,)g(with)f(the)h(following)e(arguments:)120 2053 y Ft(idl2isl)i({)g(-Wb,)p Fp(toggle)h Ft(|)f(-Wb,!)p Fp(toggle)i Ft(})p Fs(*)e Fp(source)p Ft(.idl)62 2168 y Fs(In)j(this)f(case,)i(it)e(writes)g(the)h(ISL)g(to)f(its)g(standard) g(output.)k(A)d(toggle)f(is)g(set)g(with)g(an)h(argument)g Ft(-Wb,)p Fp(toggle)g Fs(and)0 2230 y(cleared)h(with)e(an)i(argument)f Ft(-Wb,!)p Fp(toggle)s Fs(.)19 b(Toggle)14 b(settings)e(may)j(also)f (be)g(effected)h(by)f(setting)f(the)h(environment)0 2293 y(variable)e(`)p Ft(IDL2ISL_OPTS)p Fs(')g(to)f(a)i(comma-separated)g (list)e(of)i(toggle)e(names,)i(each)g(of)f(which)g(is)g(either)g (preceded)h(by)0 2355 y(a)g(`)p Ft(!)p Fs(')h(character)f(\(which)g (clears)g(it\))g(or)g(not)f(\(which)g(sets)h(it\).)j(Command-line)d (arguments)g(take)g(precedence)g(over)g(the)0 2417 y(environment)d (variable)h(settings.)62 2506 y(The)g(toggles)f(are:)37 2594 y Fr(\017)30 b Ft(dump)10 b Fs(\(default)g(off\):)g(produce)g(a)h (dump)f(of)g(the)g(abstract)g(syntax)f(tree.)i(Used)f(for)g(debugging)f (the)h(translator)f(itself.)37 2670 y Fr(\017)30 b Ft(imports)11 b Fs(\(default)f(on\):)h(set)g(the)g Ft(imports)g Fs(mode)g(on)g (\(explained)f(below\).)p eop %%Page: 28 29 28 28 bop 0 -58 a Fs(Chapter)11 b(2:)g(Defining)f(Interfaces)1351 b(28)37 183 y Fr(\017)30 b Ft(topmodules)10 b Fs(\(default)h(on\):)g (set)g(the)g Ft(topmodules)f Fs(mode)h(on)g(\(explained)f(below\).)0 316 y Fu(2.5)30 b(ISL)15 b(Grammar)62 420 y Fs(In)i(this)e(grammar,)k (parentheses)d(are)h(used)f(for)g(grouping,)h(vertical-bar)f(indicates) f(selection,)i(braces)f(indicated)0 482 y(optionality,)9 b(quotation)g(marks)i(indicate)g(literal)f(keywords)g(or)h(literal)g (punctuation.)62 569 y(No)16 b(whitespace)f(is)h(allowed)f(between)g (the)h(parts)g(of)g(a)g Ft(radix)p Fs(,)h Ft(number)p Fs(,)g(or)f Ft(quoted-string)p Fs(.)25 b(Aside)16 b(from)0 632 y(that,)h(whitespace)e(is)h(used)f(to)h(separate)g(fields)f(where)i (necessary,)g(and)f(excess)g(whitespace)f(is)g(ignored)h(outside)e(of)0 694 y Ft(quoted-string)p Fs(s.)62 781 y(Three)e(primitives)d(are)j (used:)37 868 y Fr(\017)30 b Fp(name-string)p Fs(,)12 b(which)f(is)h(a)g(string)f(consisting)e(of)j(decimal)g(digits,)f (upper)h(and)f(lower-case)i(letters,)e(and)h(hyphens,)90 931 y(beginning)d(with)h(a)i(letter.)f(It)g(may)h(not)e(be)i(a)f (keyword,)g(unless)f(it)g(is)h(quoted)f(with)g(double-quotes.)37 1003 y Fr(\017)30 b Fp(string)p Fs(,)10 b(which)h(is)f(any)h(sequence)g (of)h(characters.)37 1076 y Fr(\017)30 b Fp(digits)p Fs(,)10 b(which)h(is)g(a)h(sequence)g(of)f(digits)f(drawn)i(from)g(the) f(digits)f(for)i(the)f(particular)g(radix.)i(The)e(default)g(radix)h (is)90 1138 y(decimal.)120 1225 y Ft(interface)24 b(=)h(interface-def)f (|)g(interface)g(interface-def)120 1325 y(interface-def)g(=)h (interface-declaration)d(other-declarations)120 1425 y(interface-declaration)h(=)i("INTERFACE")f Fp(name-string)718 1474 y Ft([)h("BRAND")f(brand-string)g(])718 1524 y([)h("IMPORTS")f (import-list)g("END")g(])718 1574 y(";")120 1674 y(import-name)g(=)h Fp(name-string)h Ft([)f("FROM")f(filename)g(])120 1773 y(import-list)g(=)h(import-name)f(|)g(import-list)g(",")h(import-name) 120 1873 y(other-declarations)e(=)i([)g(other-declaration)e (other-declarations)g(])120 1973 y(other-declaration)g(=)i (constant-decl)f(|)h(exception-decl)e(|)i(type-decl)120 2072 y(constant-decl)f(=)h("CONSTANT")e Fp(name-string)k Ft(":")d(\()h(integer-const)1191 2122 y(|)g(cardinal-const)1191 2172 y(|)g(boolean-const)1191 2222 y(|)g(byte-const)1191 2271 y(|)g(float-const)1191 2321 y(|)g(string-const)f(\))g(";")120 2421 y(integer-const)g(=)h([)f("SHORT")h(|)f("LONG")h(])g("INTEGER")f ("=")g([)h(sign)g(])f(number)120 2521 y(boolean-const)g(=)h("BOOLEAN")f ("=")g(boolean-value)120 2620 y(cardinal-const)g(=)g([)h("SHORT")f(|)h ("LONG")g(])f("CARDINAL")g("=")h(number)p eop %%Page: 29 30 29 29 bop 0 -58 a Fs(Chapter)11 b(2:)g(Defining)f(Interfaces)1351 b(29)120 183 y Ft(byte-const)24 b(=)h("BYTE")f("=")h(number)120 283 y(float-const)f(=)h([)g("SHORT")f(|)h("LONG")f(])h("REAL")f("=")469 333 y([sign])g Fp(digits)h Ft([)f(".")h Fp(digits)g Ft(])f([)h("e")g Fp(digits)f Ft(])120 432 y(number)g(=)h([)g(radix)f(])h Fp(digits)120 532 y Ft(radix)f(=)h("0")g(\()g(binary)f(|)h(octal)f(|)h (hexadecimal)f(\))120 632 y(binary)g(=)h("b")120 731 y(octal)f(=)h("o")120 831 y(hexadecimal)f(=)h("x")120 930 y(string-const)f(=)h("ilu.CString")e("=")i(quoted-string)120 1030 y(exception-decl)f(=)g("EXCEPTION")g(excp-name)g([)h(":")g(type)f (])h([)g(doc-string)f(])h(";")120 1130 y(excp-name)f(=)h Fp(name-string)120 1229 y Ft(type-decl)f(=)h("TYPE")f Fp(name-string)i Ft("=")f(\()g(type)f(|)h(type-cons)f(\))h([)g(typeid)f (]";")120 1329 y(type)h(=)f(primitive-type-name)f(|)i([)g Fp(name-string)h Ft(".")f(])g Fp(name-string)120 1429 y Ft(typeid)f(=)h("TYPEID")f(type-id-string)120 1528 y(primitive-type-name)f(=)i("BYTE")618 1578 y(|)g([)g("SHORT")f(|)h ("LONG")f(])h("CARDINAL")618 1628 y(|)g([)g("SHORT")f(|)h("LONG")f(])h ("INTEGER")618 1678 y(|)g([)g("SHORT")f(|)h("LONG")f(])h("REAL")618 1727 y(|)g([)g("SHORT")f(])h("CHARACTER")618 1777 y(|)g("BOOLEAN")618 1827 y(|)g("PICKLE")120 1927 y(type-cons)f(=)75 b(record-cons)519 1977 y(|)24 b(array-cons)519 2026 y(|)g(sequence-cons)519 2076 y(|)g(union-cons)519 2126 y(|)g(optional-cons)519 2176 y(|)g(enum-cons)519 2226 y(|)g(object-cons)120 2325 y(record-cons)g(=)h("RECORD")f(field-list)g("END")120 2425 y(field-list)g(=)h(field)f(|)h(field-list)f(",")h(field)120 2524 y(field)f(=)h Fp(name-string)h Ft(":")f(type)120 2624 y(sequence-cons)f(=)h([)f("SHORT")h(])f("SEQUENCE")g("OF")h(type)f ([)h("LIMIT")f(number)h(])p eop %%Page: 30 31 30 30 bop 0 -58 a Fs(Chapter)11 b(2:)g(Defining)f(Interfaces)1351 b(30)120 233 y Ft(array-cons)24 b(=)h("ARRAY")f("OF")h(dimensions-list) e(type)120 333 y(dimensions-list)h(=)g(number)h(|)f(dimensions-list)g (",")h(number)120 432 y(union-cons)f(=)h([)g Fp (int-enum-or-boolean-type)g Ft(])f("UNION")h(union-field-list)e("END") 120 532 y(union-field-list)g(=)i(union-field)f(|)h(union-field-list)e (",")i(union-field)120 632 y(union-field)f(=)h([)g Fp (field-name-string)g Ft(":")g(])g(type)f([)h("=")g(const-list)e("END")i (])120 731 y(const-list)f(=)h(const)f(|)h(const-list)f(",")h(const)120 831 y(const)f(=)h(number)g(|)f(enum-field-name)g(|)h(boolean-value)120 930 y(enum-cons)f(=)h("ENUMERATION")f(enum-field-list)120 1030 y(enum-field-list)g(=)g(enum-field)g(|)h(enum-field-list)f(",")g (enum-field)120 1130 y(enum-field)g(=)h Fp(string)120 1229 y Ft(boolean-value)f(=)h("TRUE")f(|)h("FALSE")120 1329 y(optional-cons)f(=)h("OPTIONAL")e(type)120 1429 y(object-cons)h(=)h("OBJECT")f(object-attributes)120 1528 y(object-attributes)f(=)i(object-feature)f(|)h(object-attributes)e (object-feature)120 1628 y(object-feature)h(=)49 b("SINGLETON")24 b(singleton-protocol-info)519 1678 y(|)g("COLLECTIBLE")519 1727 y(|)g("OPTIONAL")519 1777 y(|)g("DOCUMENTATION")g(doc-string)519 1827 y(|)g("BRAND")h(brand-string)519 1877 y(|)f("SUPERTYPES")g (supertype-list)g("END")519 1927 y(|)g("METHODS")g(method-list)g("END") 120 2026 y(supertype-list)g(=)g(type)h(|)g(supertype-list)e(",")i(type) 120 2126 y(singleton-protocol-info)e(=)i(quoted-string)120 2226 y(method-list)f(=)h(method)f(|)h(method-list)f(",")g(method)120 2325 y(method)g(=)h([)g("FUNCTIONAL")f(|)h("ASYNCHRONOUS")e(])i Fp(name-string)344 2375 y Ft(arguments)f([)h(":")g(return-type)f(])g([) h("RAISES")f(exception-list)g("END"])344 2425 y([)h(doc-string)f(])120 2524 y(return-type)g(=)h(type)120 2624 y(exception-list)f(=)g (excp-name)g(|)h(exception-list)f(",")h(excp-name)p eop %%Page: 31 32 31 31 bop 0 -58 a Fs(Chapter)11 b(2:)g(Defining)f(Interfaces)1351 b(31)120 233 y Ft(arguments)24 b(=)h("\(")g([)f(argument-list)g(])h ("\)")120 333 y(argument-list)f(=)h(argument)f(|)g(argument-list)g(",") h(argument)120 432 y(argument)f(=)h([)g("IN")f(|)h("OUT")g(|)f("INOUT") h(])f Fp(name-string)j Ft(":")d([)h("SIBLING")f(])h(type)120 532 y(brand-string)f(=)h(printable-ascii-quoted-string)120 632 y(doc-string)f(=)h(quoted-string)120 731 y(quoted-string)f(=)h ("\\"")f Fp(string)i Ft("\\"")120 831 y(printable-ascii-quoted-string)c (=)j("\\"")g Fp(string)13 b(consisting)f(of)i(only)g(printable)f(ASCII) i(charac-)120 881 y(ters)26 b Ft("\\"")120 980 y(type-id-string)e(=)g ("\\"")h(scheme-name)f(":")g Fp(string)i Ft("\\"")120 1080 y(scheme-name)e(=)h Fp(string-without)o(-colon)o(-char)p eop %%Page: 32 33 32 32 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(32)0 183 y Fq(3)36 b(Using)14 b(ILU)h(with)g(Standard)f(C)0 370 y Fu(3.1)30 b(Introduction)62 474 y Fs(This)12 b(document)g(is)g (for)h(the)g(C)g(programmer)g(who)f(wishes)g(to)g(use)h(ILU.)g(\(By)g (C,)g(we)g(mean)g(the)g(language)f(defined)0 536 y(in)i(the)g(ISO/ANSI) h(standard,)g(not)f(`K&R)h(C',)h(or)f(`Portable)f(C'.\))i(The)e (following)f(sections)g(will)g(show)h(how)g(ILU)h(is)0 598 y(mapped)c(into)f(C)i(constructs)e(and)h(how)f(both)h(C)g(clients)f (and)h(servers)g(are)h(generated)f(and)g(built.)62 686 y(Using)g(ILU)h(with)f(C)h(is)f(intended)g(to)g(be)h(compatible)f(with) g(the)h(OMG)g(CORBA)h(specification.)f(That)f(is,)h(all)g(of)f(the)0 748 y(naming)g(and)g(stub)f(generation)g(comply)h(with)f(the)h(Common)g (Object)g(Request)g(Broker)g(Architecture,)g(revision)f(2.0.)1906 731 y Fm(1)62 835 y Fs(Note)j(that)f(ILU)h(does)g(not)f(support)g (non-ANSI)g(variants)g(of)h(the)g(C)h(language.)i(In)d(particular,)g (it)g(relies)g(on)f(having)0 897 y(prototypes,)e(all)g(C)i(library)f (functions,)f(and)h(the)f(capabilities)g(of)h(the)g(C)h(pre-processor.) 62 984 y(When)22 b(functions)f(are)i(described)f(in)g(this)f(section,)j (they)e(are)h(sometimes)f(accompanied)h(by)f Fp(locking)f(com-)0 1047 y(ments)p Fs(,)i(which)d(describe)g(the)g(locking)f(invariants)g (maintained)h(by)g(ILU)h(on)f(a)h(threaded)f(system.)39 b(See)21 b(the)f(file)0 1109 y(`)p Fp(ILUHOME)t Ft(/include/iluxport.h) p Fs(')e(for)i(more)h(information)d(on)i(this)e(locking)g(scheme,)23 b(and)d(the)f(types)g(of)0 1171 y(locking)10 b(comments)h(used.)62 1258 y(A)i(number)g(of)g(macros)g(are)h(used)e(in)h(function)e (descriptions,)h(to)g(indicated)g(optional)f(arguments,)i(and)g (ownership)0 1321 y(of)i(potentially)e(malloc'ed)i(objects.)22 b(The)15 b(macro)h Ft(OPTIONAL\()p Fp(type)s Ft(\))e Fs(means)h(that)g(the)f(value)h(is)g(either)g(of)g(the)g(type)0 1383 y(indicated)j(by)h Fp(type)p Fs(,)i(or)e(the)g(value)g Ft(NULL)p Fs(.)36 b(This)18 b(macro)i(may)g(only)e(be)h(used)g(with)f (pointer)g(types.)35 b(The)19 b(macro)0 1445 y Ft(RETAIN\()p Fp(type)s Ft(\))8 b Fs(indicates,)h(when)g(used)f(on)h(a)h(parameter,)h (that)e(the)g(caller)g(retains)g(ownership)f(of)i(the)f(value,)g(and)h (when)0 1507 y(used)i(in)g(the)g(result)g(position,)f(that)g(the)h (called)h(function)e(retains)h(ownership)f(of)h(the)g(value.)j(The)d (macro)i Ft(PASS\()p Fp(type)s Ft(\))0 1570 y Fs(indicates,)9 b(when)f(used)h(on)g(a)g(parameter,)i(that)e(the)g(caller)g(is)g (passing)e(ownership)h(of)h(the)g(storage)g(to)f(the)h(called)g (function,)0 1632 y(and)i(when)g(used)g(in)g(the)h(result)e(position,)g (that)h(the)g(called)g(function)f(is)h(passing)f(ownership)g(of)i(the)f (called)g(value)g(to)g(the)0 1694 y(caller.)h(The)f(macro)h Ft(GLOBAL\()p Fp(type)s Ft(\))d Fs(means)j(that)e(neither)h(the)g (caller)g(nor)g(the)g(calling)f(function)g(owns)g(the)h(storage.)p 0 2526 600 2 v 21 2652 a Fm(1)62 2669 y Fs(The)g(Common)h(Object)e (Request)h(Broker:)g(Architecture)g(and)g(Specification,)g(revision)e (2.0,)j(Draft)f(July)f(1995)p eop %%Page: 33 34 33 33 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(33)0 183 y Fu(3.2)30 b(The)14 b(ISL)i(Mapping)g(to)f(C)0 345 y Fo(3.2.1)26 b(Names)62 455 y Fs(In)9 b(general,)h(ILU)f (constructs)f(C)h(names)h(from)f(ISL)h(names)f(by)g(replacing)f (hyphens)g(with)g(underscores.)i(Type)f(names)0 517 y(and)i(class)h (names)g(are)g(prepended)f(with)g(their)g(interface)g(name.)j(For)e (example,)g(for)g(the)f(ISL)h(type)f Ft(T-1)h Fs(in)f(interface)h Ft(I)p Fs(,)0 580 y(the)f(generated)g(name)h(of)f(the)g(C)h(type)e (would)g(be)h Ft(I_T_1)p Fs(.)62 673 y(Method)g(name)h(prefixes)f(are)h (specified)f(by)g(CORBA)h(to)f(be)h Fp(module-name)s Ft(_)p Fp(interface-name)s Fs(.)g(C)g(function)e(names)0 736 y(for)h(ISL)h(methods)f(are)h(composed)e(of)i(the)f(generated)g (class)g(name)h(prepended)f(to)f(the)h(method)g(name.)i(For)e(example,) h(if)0 798 y(the)d(interface)h(name)g(is)e Ft(X)i Fs(and)f(the)g(class) g(type)g(name)h(is)f Ft(Y)g Fs(and)g(the)g(ISL)h(method)f(name)h(is)f Ft(Z)g Fs(then)g(the)g(C)h(callable)f(method)0 860 y(name)j(will)e(be)h Ft(X_Y_Z)p Fs(.)g(ILU)h(C)f(servers)g(for)h(this)e(method)g(must)h (implement)g(a)h(function)d(called)i Ft(server_X_Y_Z)p Fs(.)62 954 y(For)h(field)e(names)i(within)d(records)j(and)f(unions,)f (hyphens)f(are)j(replaced)g(with)e(underscores.)0 1099 y Fo(3.2.2)26 b(Interface)62 1209 y Fs(The)11 b(ISL)h Ft(interface)f Fs(is)g(mapped)g(to)g(a)h(prefix)f(for)g(all)g (generated)g(type)g(names,)h(constant)e(names,)i(and)f(exception)0 1272 y(names,)h(by)f(replacing)f(all)h(hyphens)f(in)h(the)f(interface)i (name)g(with)e(underscore)h(characters.)0 1416 y Fo(3.2.3)26 b(Basic)15 b(Types)62 1527 y Fs(The)e(following)e(basic)i(ISL)g(types)f (have)h(the)g(corresponding)e(mappings)h(in)h(C,)h(as)f(specified)f(by) h(the)f(CORBA)i(2.0)0 1589 y(standard)c(mapping)h(for)g(C:)37 1683 y Fr(\017)30 b Fs(ISL)12 b Ft(BOOLEAN)e Fs(maps)i(to)e(C)i Ft(CORBA_boolean)37 1764 y Fr(\017)30 b Fs(ISL)12 b Ft(BYTE)f Fs(maps)g(to)g(C)g Ft(CORBA_octet)37 1846 y Fr(\017)30 b Fs(ISL)12 b Ft(CHARACTER)e Fs(maps)h(to)g(C)h Ft(CORBA_wchar)37 1927 y Fr(\017)30 b Fs(ISL)12 b Ft(SHORT)e(CHARACTER)h Fs(maps)g(to)g(C)h Ft(CORBA_char)37 2009 y Fr(\017)30 b Fs(ISL)12 b Ft(CARDINAL)e Fs(maps)h(to)g(C)h Ft(CORBA_unsigned_long) 37 2090 y Fr(\017)30 b Fs(ISL)12 b Ft(SHORT)e(CARDINAL)h Fs(maps)g(to)g(C)h Ft(CORBA_unsigned_short)37 2172 y Fr(\017)30 b Fs(ISL)12 b Ft(LONG)f(CARDINAL)f Fs(maps)h(to)g(C)h Ft(CORBA_unsigned_long_long)37 2253 y Fr(\017)30 b Fs(ISL)12 b Ft(INTEGER)e Fs(maps)i(to)e(C)i Ft(CORBA_long)37 2334 y Fr(\017)30 b Fs(ISL)12 b Ft(SHORT)e(INTEGER)h Fs(maps)g(to)g(C)h Ft(CORBA_short)37 2416 y Fr(\017)30 b Fs(ISL)12 b Ft(LONG)f(INTEGER)f Fs(maps)i(to)e(C)i Ft(CORBA_long_long)37 2497 y Fr(\017)30 b Fs(ISL)12 b Ft(REAL)f Fs(maps)g(to)g(C)g Ft(CORBA_double)37 2579 y Fr(\017)30 b Fs(ISL)12 b Ft(SHORT)e(REAL)h Fs(maps)h(to)e(C)i Ft(CORBA_float)37 2660 y Fr(\017)30 b Fs(ISL)12 b Ft(LONG)f(REAL)g Fs(maps)g(to)g(C)g Ft(CORBA_long_double)p eop %%Page: 34 35 34 34 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(34)0 183 y Fo(3.2.4)26 b(Constants)62 293 y Fs(ISL)14 b(constants)d(are)j(translated)e(to)h(C)h Ft(const)f Fs(expressions)e(initialized)g(to)i(the)g(specified)g(value.)k (Constant)12 b(names)0 355 y(are)g(prepended)f(with)f(their)g (interface)i(name,)g(separated)f(from)h(the)f(name)g(of)h(the)f (constant)e(with)i(a)g(hyphen)f(character.)0 498 y Fo(3.2.5)26 b(Strings)14 b(and)g(Characters)62 608 y Fs(ISL)h Ft(character)g Fs(and)f Ft(short)d(character)j Fs(types)h(are)g(represented)g(with)e (the)i(ILU)g(types)f Ft(ilu_character)p Fs(,)0 671 y(which)c(hold)g (values)g(of)h(16-bit)f(Unicode,)g(and)h Ft(ilu_shortcharacter)p Fs(,)f(which)g(hold)g(values)g(of)h(8-bit)f(ISO)h(Latin-1.)62 764 y(String)k(sequences)g(\()p Ft(SEQUENCE)c(OF)g(SHORT)g(CHARACTER)k Fs(or)h Ft(SEQUENCE)10 b(OF)h(CHARACTER)p Fs(\))16 b(are)g(just)e (arrays)i(of)0 826 y(the)e(character)g(codes)g(for)g(the)f(characters,) i(using)e(either)g(Latin-1)g(codes)h(\(for)g Ft(SEQUENCE)c(OF)h(SHORT)g (CHARACTER)p Fs(\),)0 889 y(or)18 b(ISO)h(10646)e(Unicode)g(codes)h (\(for)g Ft(SEQUENCE)11 b(OF)g(CHARACTER)p Fs(\).)32 b(These)18 b(sequences)f(are)i(terminated)f(with)f(a)0 951 y(character)12 b(code)f(of)g(zero.)h(The)f(terminating)f(code)h(is) g(not)g(counted)f(in)h(the)f(length)g(of)i(the)f(sequence.)0 1094 y Fo(3.2.6)26 b(Pickles)15 b(and)g(Typecodes)62 1204 y Fs(ILU)e(pickles)e(are)j(mapped)f(to)f(opaque)g(structures)f(of) i(the)f(type)h Ft(CORBA_any)p Fs(,)f(as)h(per)g(the)f(CORBA)i (specification)0 1266 y(for)d(the)f(type)g Ft(any)p Fs(.)h(However,)g (in)f(ILU,)g(the)h(fields)e(of)i(the)f(pickle)g(are)h(not)e(directly)h (accessible.)h(Instead,)f(the)g(following)0 1328 y(utility)f(functions) h(are)h(provided)f(to)h(manipulate)f(pickles:)1739 1459 y(Function)-1902 b Ft(PASS\(CORBA_any)10 b(*\))i Fo(ILU)p 513 1459 15 3 v 19 w(C)p 568 1459 V 18 w(Any)p 675 1459 V 17 w(Create)23 b Fk(\()p Ft(RETAIN)p Fk(\()p Ft(CORBA_TypeCode)p Fk(\))208 1521 y Fp(typecode)p Ft(,)10 b(RETAIN)p Fk(\()p Ft(void)g(*)p Fk(\))i Fp(value)p Ft(,)f(RETAIN)p Fk(\()p Ft(CORBA_Environment)e(*)p Fk(\))i Fp(env)r Fk(\))120 1584 y Fs(Locking:)e(n/a)120 1677 y(Create)j(a)g(new)f(pickle)f(from)i (a)f(C)h Fp(value)h Fs(and)e Fp(typecode)p Fs(.)g(The)g(return)g(value) g(is)g(heap-allocated.)1739 1807 y(Function)-1902 b Ft(PASS\(CORBA_any) 10 b(*\))i Fo(ILU)p 513 1807 V 19 w(C)p 568 1807 V 18 w(Any)p 675 1807 V 17 w(Init)22 b Fk(\()p Ft(RETAIN)p Fk(\()p Ft(CORBA_any)11 b(*)p Fk(\))208 1870 y Fp(uninitialized-any)p Ft(,)d(RETAIN)p Fk(\()p Ft(CORBA_TypeCode)p Fk(\))i Fp(typecode)p Ft(,)g(RETAIN)p Fk(\()p Ft(void)h(*)p Fk(\))g Fp(value)p Ft(,)208 1932 y(RETAIN)p Fk(\()p Ft(CORBA_Environment)e(*)p Fk(\))i Fp(env)r Fk(\))120 1994 y Fs(Locking:)e(n/a)120 2088 y(Given)i(a)i(pointer)e(to)h(an)g(uninitialized)e Ft(CORBA_any)h Fs(value)h Fp(uninitialized-any)p Fs(,)e(sets)i(the)g (typecode)f(and)120 2150 y(value)g(of)g(the)g(any)g(to)g(the)g (specified)f Fp(typecode)j Fs(and)e Fp(value)p Fs(.)1739 2280 y(Function)-1902 b Ft(PASS\(CORBA_any)10 b(*\))i Fo(ILU)p 513 2280 V 19 w(C)p 568 2280 V 18 w(Any)p 675 2280 V 17 w(ResetValue)23 b Fk(\()p Ft(RETAIN)p Fk(\()p Ft(CORBA_any)10 b(*)p Fk(\))208 2343 y Fp(initialized-any)p Ft(,)e(RETAIN)p Fk(\()p Ft(CORBA_TypeCode)p Fk(\))i Fp(typecode)p Ft(,)h(RETAIN)p Fk(\()p Ft(void)f(*)p Fk(\))i Fp(value)p Ft(,)208 2405 y(RETAIN)p Fk(\()p Ft(CORBA_Environment)d(*)p Fk(\))i Fp(env)r Fk(\))120 2467 y Fs(Locking:)e(n/a)120 2561 y(Given)i(a)h(pointer)e(to)h(a)h(previously)d(used)i Ft(CORBA_any)g Fs(value)g Fp(initialized-any)p Fs(,)f(frees)i(the)f (current)h(value)120 2623 y(and)f(sets)g(the)f(typecode)h(and)g(value)g (of)g(the)g(any)g(to)g(the)f(specified)h Fp(typecode)i Fs(and)e Fp(value)p Fs(.)p eop %%Page: 35 36 35 35 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(35)1739 183 y(Function)-1902 b Ft(PASS\(void)11 b(*\))h Fo(ILU)p 389 183 15 3 v 18 w(C)p 443 183 V 18 w(Any)p 550 183 V 18 w(Value)22 b Fk(\()p Ft(RETAIN)p Fk(\()p Ft(CORBA_any)10 b(*)p Fk(\))i Fp(pickle)p Ft(,)208 246 y(RETAIN)p Fk(\()p Ft(CORBA_Environment)d(*)p Fk(\))i Fp(env)r Fk(\))120 308 y Fs(Locking:)e(n/a)120 395 y(Returns)g(the)g(C) g(value)g(from)h(the)e Fp(pickle)p Fs(.)i(Returns)f(NIL)g(if)g(the)g (type)g(of)g(the)g(value)f(contained)g(in)h(the)g(pickle)120 457 y(is)i(not)f(`known')g(to)h(the)g(ILU)g(C)h(runtime.)f(Relatively)f (expensive,)h(as)g(it)g(involves)e(several)i(malloc's.)1739 568 y(Function)-1902 b Ft(CORBA_TypeCode)11 b Fo(ILU)p 452 568 V 19 w(C)p 507 568 V 18 w(Any)p 614 568 V 17 w(TypeCode)22 b Fk(\()p Ft(RETAIN)p Fk(\()p Ft(CORBA_any)11 b(*)p Fk(\))g Fp(pickle)p Ft(,)208 630 y(RETAIN)p Fk(\()p Ft(CORBA_Environment)e(*)p Fk(\))i Fp(env)r Fk(\))120 692 y Fs(Locking:)e(n/a)120 780 y(Retrieve)j(the)f(CORBA)i(typecode)e (of)h(the)f(value)h(in)f(the)g Fp(pickle)p Fs(.)i(Returns)e(NIL)h(if)g (the)f(type)g(of)h(the)g(value)120 842 y(in)f(the)g(pickle)f(is)h(not)f (registered)h(with)f(the)h(ILU)g(C)h(runtime.)1739 953 y(Function)-1902 b Ft(PASS\(CORBA_any)10 b(*\))i Fo(ILU)p 513 953 V 19 w(C)p 568 953 V 18 w(Any)p 675 953 V 17 w(Duplicate)22 b Fk(\()p Ft(RETAIN)p Fk(\()p Ft(CORBA_any)10 b(*)p Fk(\))h Fp(pickle)p Ft(,)208 1015 y(RETAIN)p Fk(\()p Ft(CORBA_Environment)e(*)p Fk(\))i Fp(env)r Fk(\))120 1077 y Fs(Locking:)e(n/a)120 1164 y(Make)17 b(a)g(copy)e(of)i(an)f (existing)e(pickle)i(without)e(`looking)h(inside'.)26 b(This)15 b(call)h(will)f(work)h(even)g(with)120 1227 y(pickle)10 b(values)h(that)f(are)i(of)g(types)e(not)g(known)g(to)h (the)g(ILU)g(C)h(runtime.)0 1350 y Fo(3.2.7)26 b(Constructed)14 b(Types)0 1490 y Fn(3.2.7.1)23 b(Enumeration)62 1593 y Fs(ISL)15 b(enumeration)e(types)h(are)g(mapped)h(C)f(enum)h(types,)f (in)g(an)g(exception)f(to)h(the)f(CORBA)i(specification.)k(Each)0 1656 y(element)12 b(of)f(the)h(enumeration)f(is)g(named)h(as)g Ft(<)p Fp(interface)p Ft(>_<)p Fp(element-name)p Ft(>)p Fs(.)h(The)f(C)g Ft(enum)f Fs(type)g(is)g Ft(typedef)p Fs('ed)h(to)0 1718 y(the)f(specified)f(name)i(for)g(the)e(type.)h(For)h (example,)g(the)f(ISL)g(definition)120 1805 y Ft(INTERFACE)24 b(Foo;)120 1855 y(...)120 1905 y(TYPE)h(Color)f(=)h(ENUMERATION)f(Red,) g(Green,)h(Blue)f(END;)120 1955 y(...)0 2067 y Fs(would)10 b(produce)h(the)g(following)e(C)i(definition:)120 2154 y Ft(typedef)24 b(enum)h({)g(Foo_Red,)f(Foo_Green,)g(Foo_Blue)g(})h (Foo_Color;)0 2277 y Fn(3.2.7.2)e(Array)62 2381 y Fs(Arrays)11 b(are)h(represented)f(as)g(C)h(arrays.)0 2504 y Fn(3.2.7.3)23 b(Sequence)62 2608 y Fs(Sequence)13 b(type)g(names,)g(as)g(most)g(type) f(definitions,)f(are)i(formed)g(with)f(the)h(interface)g(name)g(and)g (the)f(type)g(name.)0 2670 y(Sequence)i(instances)e(are)i(represented)f (to)f(the)h(C)h(programmer)g(as)g(a)f(pointer)g(to)f(the)h(sequence)g (descriptor)g(structure.)p eop %%Page: 36 37 36 36 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(36)0 183 y(For)11 b(each)h(sequence)e(type)h(declared)g(in)f (the)h(interface)g(description,)f(a)h(pseudo-object)e(sequence)i(type)f (is)g(defined)h(in)f(C.)0 246 y(These)h(sequence)g(types)f(will)g(hold) g(any)h(number)h(of)f(values)f(of)i(type)e(sequence's)h Fp(primary)g(type)p Fs(.)g(For)h(the)f(sequence)11 308 y Ft(INTERFACE)g(I;)11 370 y(TYPE)g Fp(T2)k Ft(=)c(SEQUENCE)g(OF)g Fp(T1)p Ft(;)0 432 y Fs(the)g(following)e(functions)h(are)h(defined:) 1573 556 y(Sequence)h(Method)-1901 b Fp(I)t Ft(_)p Fp(T2)15 b Ft(*)d Fp(I)p 169 556 15 3 v 23 w(T2)p 243 556 V 21 w Fo(Create)23 b Fk(\()11 b Ft(OPTIONAL)p Fk(\()p Ft(unsigned)f(long)p Fk(\))h Fp(length)p Ft(,)208 619 y(OPTIONAL)p Fk(\()p Fp(T1)f Ft(*)p Fk(\))h Fp(initial-values)g Fk(\))120 681 y Fs(This)j(function)g(creates)h(and)g(returns)g(a)g(pointer)f(to)h (a)g(newly)g(allocated)f(instance)g(of)i Fp(T2)p Fs(.)23 b(If)15 b Fp(length)k Fs(is)120 743 y(specified,)g(but)e Fp(initial-values)g Fs(is)g(not)g(specified,)i(enough)e(space)h(for)g Fp(length)j Fs(values)c(of)h(type)f Fp(T1)h Fs(is)120 805 y(allocated)11 b(in)h(the)g(sequence.)i(If)f Fp(initial-values)e Fs(is)g(specified,)h Fp(length)k Fs(is)11 b(assumed)h(to)g(be)g(the)g (number)g(of)120 868 y(values)e(pointed)e(to)i(by)g Fp(initial-values)p Fs(,)e(and)i(must)g(be)h(specified.)f(Note)g(that)f(if)i(type)e Fp(T1)i Fs(is)e(a)i Ft(character)120 930 y Fs(or)d Ft(short)j (character)c Fs(type,)i(a)f(pointer)f(to)h(a)g(NIL-terminated)g (sequence)f(will)g(be)i(returned;)f(otherwise,)120 992 y(a)k(normal)f(CORBA)h(sequence)f(structure)f(will)g(be)h(returned)g (by)g(reference.)1573 1116 y(Sequence)h(Method)-1901 b Ft(CORBA_unsigned_long)11 b Fp(I)p 508 1116 V 22 w(T2)p 581 1116 V 21 w Fo(Length)22 b Fk(\()12 b Fp(I)t Ft(_)p Fp(T2)j Ft(*)c Fp(s)i Fk(\))120 1179 y Fs(Returns)e(the)g(length)f(of)h Fp(s)p Fs(.)1573 1303 y(Sequence)h(Method)-1901 b Ft(void)12 b Fp(I)p 134 1303 V 22 w(T2)p 207 1303 V 22 w Fo(Append)21 b Fk(\()12 b Fp(I)t Ft(_)p Fp(T2)j Ft(*)c Fp(s)p Ft(,)g Fp(T1)g(value)j Fk(\))120 1365 y Fs(Appends)c Fp(value)j Fs(to)e(the)g(end)g(of)g Fp(s)p Fs(.)h(This)e(function)g(will)g (reallocate)h(space)g(and)g(copy,)g(if)g(necessary.)1573 1489 y(Sequence)h(Method)-1901 b Ft(void)12 b Fp(I)p 134 1489 V 22 w(T2)p 207 1489 V 22 w Fo(Push)23 b Fk(\()11 b Fp(I)t Ft(_)p Fp(T2)k Ft(*)d Fp(s)p Ft(,)f Fp(T1)g(value)i Fk(\))120 1551 y Fs(Pushes)c Fp(value)j Fs(on)d(to)g(the)g(beginning)f (of)h(the)h(sequence.)h(This)d(function)g(will)h(reallocate)g(space)h (and)f(copy,)120 1613 y(if)i(necessary.)1573 1737 y(Sequence)h(Method) -1901 b Ft(void)12 b Fp(I)p 134 1737 V 22 w(T2)p 207 1737 V 22 w Fo(Pop)23 b Fk(\()11 b Fp(I)t Ft(_)p Fp(T2)k Ft(*)c Fp(s)p Ft(,)g Fp(T1)h Ft(*)f Fp(value-ptr)j Fk(\))120 1800 y Fs(Removes)20 b(the)f(first)g(value)g(from)h(the)f(sequence)g Fp(s)p Fs(,)i(and)f(places)f(it)g(in)g(the)g(location)f(pointed)g(to)h (by)120 1862 y Fp(value-ptr)p Fs(.)1573 1986 y(Sequence)12 b(Method)-1901 b Ft(void)12 b Fp(I)p 134 1986 V 22 w(T2)p 207 1986 V 22 w Fo(Every)23 b Fk(\()11 b Fp(I)t Ft(_)p Fp(T2)k Ft(*)d Fp(s)p Ft(,)f(void)g Fk(\()p Ft(*)p Fp(func)r Fk(\)\()p Fp(T1)p Ft(,)g(void)g(*)p Fk(\))p Ft(,)g(void)g(*)g Fp(data)208 2048 y Fk(\))120 2111 y Fs(Calls)f(the)h(function)f Fp(func)i Fs(on)f(each)g(element)g(of)g Fp(s)h Fs(in)f(sequence,)g (passing)e Fp(data)15 b Fs(as)10 b(the)h(second)f(argument)120 2173 y(to)h Fp(func)p Fs(.)1573 2297 y(Sequence)h(Method)-1901 b Fp(I)t Ft(_)p Fp(T1)11 b Ft(*)i Fp(I)p 166 2297 V 22 w(T2)p 239 2297 V 21 w Fo(Nth)22 b Fk(\()12 b Fp(I)t Ft(_)p Fp(T2)j Ft(*)c Fp(s)p Ft(,)g(CORBA_unsigned_long)f Fp(n)k Fk(\))120 2359 y Fs(Returns)9 b(the)h(address)f(of)h(the)g Fp(n)s Fs(th)f(element)h(of)g(the)f(sequence)h Fp(s)p Fs(.)h(Returns)e Ft(ILU_NIL)h Fs(if)g Fp(n)i Fs(is)e(out)f(of)h(range.) 1573 2483 y(Sequence)i(Method)-1901 b Ft(void)12 b Fp(I)p 134 2483 V 22 w(T2)p 207 2483 V 22 w Fo(Init)22 b Fk(\()12 b Fp(I)t Ft(_)p Fp(T2)j Ft(*)c Fp(s)p Ft(,)g(OPTIONAL)p Fk(\()p Ft(CORBA_unsigned_long)p Fk(\))208 2545 y Fp(length)p Ft(,)e(OPTIONAL)p Fk(\()p Fp(T1)i Ft(*)p Fk(\))g Fp(initial-values)g Fk(\))120 2608 y Fs(This)g(function)f(works)h(like)g Fp(T2)t Ft(_Create)p Fs(,)h(except)f(that)g(it)g(takes)h(a)g(the)f (address)h(of)f(an)h(already-existing)120 2670 y Fp(T2)j Fs(to)c(initialize.)e(This)i(can)g(be)g(used)g(to)g(initialize)e (instances)h(of)h Fp(T2)k Fs(that)c(have)g(been)g(stack-allocated.)p eop %%Page: 37 38 37 37 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(37)1573 183 y(Sequence)12 b(Method)-1901 b Ft(void)12 b Fp(I)p 134 183 15 3 v 22 w(T2)p 207 183 V 225 183 V 40 w Fo(Free)23 b Fk(\()12 b Fp(I)t Ft(_)p Fp(T2)j Ft(*)c Fp(s)i Fk(\))120 246 y Fs(Frees)f(allocated)e(storage)h (used)g(internally)e(by)i Fp(s)p Fs(.)g(Does)g(not)g(free)h Fp(s)g Fs(itself.)62 373 y(String)j(sequences)g(\()p Ft(SEQUENCE)c(OF)g(SHORT)g(CHARACTER)k Fs(or)h Ft(SEQUENCE)10 b(OF)h(CHARACTER)p Fs(\))16 b(are)g(just)e(arrays)i(of)0 435 y(the)e(character)g(codes)g(for)g(the)f(characters,)i(using)e (either)g(Latin-1)g(codes)h(\(for)g Ft(SEQUENCE)c(OF)h(SHORT)g (CHARACTER)p Fs(\),)0 497 y(or)18 b(ISO)h(10646)e(Unicode)g(codes)h (\(for)g Ft(SEQUENCE)11 b(OF)g(CHARACTER)p Fs(\).)32 b(These)18 b(sequences)f(are)i(terminated)f(with)f(a)0 560 y(character)10 b(code)g(of)f(zero.)j(The)d(terminating)g(code)g(is) g(not)g(counted)g(in)g(the)g(length)g(of)g(the)h(sequence.)g(All)f (other)g(sequence)0 622 y(types)h(have)h(a)h(record)f(structure,)g (mandated)g(by)g(CORBA:)120 714 y Ft(typedef)24 b(struct)h Fp(I)t Ft(_)p Fp(T2)j Ft({)170 764 y(unsigned)c(long)h(_maximum;)170 814 y(unsigned)f(long)h(_length;)170 864 y Fp(I)t Ft(_)p Fp(T1)g Ft(*_buffer;)120 913 y(})g Fp(I)t Ft(_)p Fp(T2)t Ft(;)62 1036 y Fs(The)17 b(field)g Ft(_maximum)g Fs(contains)f(the)h (number)h(of)f(elements)g(pointed)f(to)h(by)g Ft(_buffer)p Fs(.)30 b(The)17 b(field)g Ft(_length)0 1098 y Fs(indicates)10 b(the)h(number)g(of)g(valid)g(or)g(useful)f(elements)h(pointed)f(to)h (by)f Ft(_buffer)p Fs(.)62 1190 y(For)i(example,)f(the)g(ISL)h (specification)120 1282 y Ft(INTERFACE)24 b(I;)120 1382 y(TYPE)h(iseq)f(=)h(SEQUENCE)f(OF)h(INTEGER;)62 1504 y Fs(would)10 b(have)h(in)g(its)f(C)i(mapping)f(the)g(type)120 1597 y Ft(typedef)24 b(struct)h(I_iseq)f({)170 1646 y(unsigned)g(long)h (_maximum;)170 1696 y(unsigned)f(long)h(_length;)170 1746 y(ilu_integer)f(*_buffer;)120 1796 y(})h(I_iseq;)62 1918 y Fs(In)10 b(a)g(client)f(program,)h(a)g(pointer)f(to)g(this)g (type)g(would)f(be)i(instantiated)d(and)j(initialized)d(by)j(calling)e (the)i(type)f(specific)0 1980 y(sequence)i(creation)g(function)f (generated)h(for)g(the)g(sequence,)g(e.g.)319 2073 y Ft(...)220 2122 y(I_O)24 b(h;)220 2172 y(ILU_C_ENVIRONMENT)f(s;)220 2222 y(I_iseq)h(sq;)319 2272 y(...)220 2322 y(sq)g(=)h(I_iseq_Create)f (\(0,)g(NULL\);)220 2372 y(I_iseq_Append)f(\(&sq,)i(4\);)319 2421 y(...)0 2561 y Fn(3.2.7.4)e(Record)62 2670 y Fs(Records)12 b(map)f(directly)f(into)h(corresponding)e(C)j(structures.)p eop %%Page: 38 39 38 38 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(38)0 183 y Fn(3.2.7.5)23 b(Union)62 301 y Fs(Because)18 b(of)f(the)f(somewhat)h(baroque)f(CORBA)i(concept)f(of)g(union)e (types,)j(unions)d(may)j(take)f(one)f(of)h(several)0 363 y(forms.)62 465 y(Generally,)g(ILU)f(unions)e(in)h(C)h(consist)e (of)i(a)g(struct)f(with)g(two)g(members:)21 b(the)15 b(type)g(discriminator)g(\(a)h(member)0 527 y(named)11 b(``)p Ft(_d)p Fs(''\),)g(and)f(a)h(union)e(\(a)i(member)g(named)g(``)p Ft(_u)p Fs(''\))g(of)f(the)g(possible)e(values.)j(In)f(a)h(simple)e (ISL)i(union)e(that)h(does)0 589 y(not)j(name)h(the)g(elements,)g(the)g (union)e(member)j(names)f(are)g(derived)g(from)g(the)f(ISL)h(data)g (types)f(which)g(compose)g(the)0 652 y(union.)k(For)d(example,)h(if)e (the)h(ISL)g(type)f(in)g(interface)h Ft(I)f Fs(is)g Ft(TYPE)e(u1)g(=)h (UNION)f(INTEGER,)f(SHORT)h(REAL)g(END;)i Fs(the)0 714 y(generated)e(C)h(struct)e(would)g(be)120 815 y Ft(struct)24 b(_I_u1_union)g({)319 865 y(CORBA_short)g(_d;)319 915 y(union)h({)519 965 y(CORBA_long)e(integer;)124 b(/*)25 b(0)g(*/)519 1014 y(CORBA_float)e(shortreal;)49 b(/*)25 b(1)g(*/)319 1064 y(})g(_u;)120 1114 y(};)120 1164 y(typedef)f(struct)h (_I_u1_union)e(I_u1;)62 1304 y Fs(Note)11 b(the)h(discriminator)e Ft(_d)h Fs(may)h(take)f(on)h(the)f(values)g(of)g Ft(0)p Fs(,)h(for)g(the)f Ft(integer)g Fs(field,)g(or)h Ft(1)p Fs(,)g(for)g(the)f Ft(shortreal)0 1366 y Fs(field.)62 1468 y(In)h(more)g(complex)f(union)f(forms,)i(the)g(user)f(may)h (specify)f(the)g(type)g(of)h(the)f(discriminator)f(as)h(well)g(as)h (the)f(member)0 1530 y(names)g(and)g(which)g(member)h(corresponds)e(to) h(which)f(discriminator)g(value.)h(Consider)g(the)g(following)e(ISL)i (example:)120 1631 y Ft(INTERFACE)24 b(I;)120 1681 y(TYPE)h(e1)f(=)h (ENUMERATION)f(red,)g(blue,)h(green,)f(yellow,)h(orange)f(END;)120 1731 y(TYPE)h(u1)f(=)h(e1)g(UNION)145 1781 y(a)g(:)g(INTEGER)f(=)h (red,)f(green)h(END,)145 1831 y(b)g(:)g(SHORT)f(REAL)h(=)f(blue)h(END,) 145 1880 y(c)g(:)g(REAL)f(=)h(DEFAULT)120 1930 y(END;)62 2071 y Fs(The)11 b(generated)g(union)f(is:)120 2172 y Ft(typedef)24 b(struct)h(_I_u1_union)e(I_u1;)120 2222 y(typedef)h(enum)h({)g(I_red)f(=)h(0,)g(I_blue)f(=)h(1,)f(I_green)h(=)g (2,)f(I_yellow)g(=)h(3,)g(I_orange)120 2271 y(=)g(4)g(})f(I_e1;)120 2321 y(struct)g(_I_u1_union)g({)170 2371 y(I_e1)g(_d;)170 2421 y(union)g({)220 2471 y(CORBA_long)g(a;)174 b(/*)24 b(I_red,)h(I_green)f(*/)220 2521 y(CORBA_float)g(b;)149 b(/*)24 b(I_blue)h(*/)220 2570 y(CORBA_double)e(c;)125 b(/*)24 b(DEFAULT)h(*/)170 2620 y(})g(_u;)120 2670 y(};)p eop %%Page: 39 40 39 39 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(39)62 183 y(This)10 b(example)i(shows)e(that)g(the)h (discriminator)f(type)g(is)h(to)f(be)i Ft(I_e1)f Fs(and)g(that)f(the)h (member)h(names)f(are)h(to)f(be)g Ft(a)p Fs(,)h Ft(b)p Fs(,)0 246 y(and)i Ft(c)p Fs(.)19 b(When)13 b(the)h(discriminator)e (has)i(the)f(value)g Ft(I_red)h Fs(or)g Ft(I_green)f Fs(the)g(member)i Ft(a)f Fs(has)g(a)g(valid)f(value)g(and)g(the)0 308 y(type)g(is)g(interpreted)f(to)h(be)g Ft(CORBA_long)p Fs(.)18 b(When)13 b(the)g(discriminator)f(has)h(the)g(value)g Ft(I_green)f Fs(the)i(member)g Ft(b)f Fs(has)0 370 y(a)g(valid)f(value) g(and)h(the)g(type)f(is)g(interpreted)g(to)g(be)h Ft(CORBA_float)p Fs(.)j(If)d(the)f(discriminator)g(has)g(any)h(other)f(value,)h(the)0 432 y(member)f Ft(c)g Fs(is)e(expected)h(to)g(have)g(a)h(valid)e(value) h(and)g(the)g(type)f(is)h(interpreted)f(to)h(be)g Ft(CORBA_double)p Fs(.)62 521 y(Discriminator)23 b(types)f(may)j(be)e Ft(INTEGER)p Fs(,)k Ft(CARDINAL)p Fs(,)g Ft(ENUMERATION)p Fs(,)f Ft(SHORT)11 b(CARDINAL)p Fs(,)27 b(or)c Ft(SHORT)0 583 y(INTEGER)p Fs(.)11 b(The)g(default)g(for)g(an)g(unspecified)f(discriminator)g(is)h Ft(SHORT)g(INTEGER)p Fs(.)0 712 y Fn(3.2.7.6)23 b(Optional)62 817 y Fs(An)12 b(ISL)h Ft(OPTIONAL)e Fs(type)h(maps)g(either)g(to)g (the)g(same)h(C)g(type)e(as)h(its)g(base)g(type,)g(if)g(that)g(base)g (type)g(is)g(represented)0 879 y(with)e(an)h(C)h(pointer)e(type,)h(or)g (to)g(a)h(pointer)e(to)h(that)f(base)h(type,)g(if)g(it)g(is)g(not)f (represented)h(with)f(a)i(C)f(pointer)g(type.)0 1007 y Fo(3.2.8)26 b(Object)14 b(Types)0 1152 y Fn(3.2.8.1)23 b(Surrogate)15 b(and)h(True)g(Objects)62 1258 y Fs(ILU)d(uses)e(an)i (object)f(system)g(embedded)g(into)f(C.)j(The)e(C)h(type)f(of)g (objects)g(in)f(this)h(system)g(is)g Ft(ILU_C_Object*)p Fs(;)0 1320 y(the)g(identifiers)e Ft(ILU_C_OBJECT)h Fs(and)h Ft(CORBA_Object)e Fs(can)j(also)e(be)h(used)f(for)h(this)f(type.)i(We)f (recommend)h(the)e(use)0 1382 y(of)16 b Ft(ILU_C_OBJECT)p Fs(,)g(as)g(it)g(is)f(a)h(macro)h(that)e(expands)g(to)h(the)f (identifier)g(for)h(the)g(C)g(object)f(type)h(specified)f(by)g(the)0 1444 y(version)10 b(of)h(CORBA)h(being)f(used)f(\(currently)h(2.0\).)62 1533 y(Since)d(C)h(has)e(no)h(subtyping)d(relationship)h(isomorphic)g (to)i(that)f(of)h(ISL)g(object)f(types,)h(a)g(more)h(liberal)e (approximation)0 1595 y(is)k(used:)h(all)f(ISL)i(object)e(types)g(map)h (to)f(the)h(same)g(C)g(type,)g Ft(CORBA_Object)p Fs(.)h(However,)f(a)g Ft(typedef)f Fs(is)h(emitted)f(for)0 1657 y(each)e(ISL)g(object)g (type,)g(so)f(an)h(object-type-specific)e(C)i(type)g(name)g(may)g(be)g (used)f(to)h(express)f(intent.)i(For)f(conformance)0 1720 y(with)h(CORBA,)i(the)f(C)h(name)g(for)f(ISL)h(type)e Fp(I.T)16 b Fs(is)11 b Fp(I)t Ft(_)p Fp(T)t Fs(.)62 1808 y(The)i(C)h(mapping)e(of)h(an)g(object)f(type)g(includes)g(a)h(set)g (of)g(generic)g(functions)e(for)i(the)g(methods)f(introduced)g(at)h (that)0 1870 y(object)g(type.)18 b(The)13 b(name)h(of)f(the)h(generic)f (function)f(for)i(the)f(method)g Fp(M)18 b Fs(introduced)12 b(at)h(object)g(type)g Fp(I.T)18 b Fs(is)13 b Fp(I)t Ft(_)p Fp(T)t Ft(_)p Fp(M)t Fs(.)0 1933 y(This)g(generic)g(function)g (is)g(used)g(to)g(invoke)g(method)g Fp(M)19 b Fs(on)13 b(objects)g(of)g(type)g Fp(I.T)19 b Fs(\(naturally)13 b(including)e(objects)i(that)0 1995 y(also)j(have)g(types)g(that)g(are) h(subtypes)e(of)h Fp(I.T)t Fs(\).)i(The)e(first)g(argument)g(to)g(a)h (generic)g(function)e(is)h(an)g(object)g(instance)0 2057 y(\()p Ft(ILU_C_Object)10 b(*)p Fs(\))i(that)e(should)g(have)h(type)g Fp(I.T)16 b Fs(\(among)11 b(possibly)e(others\).)62 2146 y(An)j(implementation)f(of)h(an)g(ISL)g(object)g(type)f(is)h(commonly)g (referred)h(to)e(as)h(a)h Fp(class)p Fs(.)h(Classes)d(are)i (represented)f(in)0 2208 y(the)d(ILU)g(C)h(runtime)f(as)g(the)g(C)h (type)f Ft(ILU_C_Class)p Fs(.)h(To)f(create)h(an)f Ft(ILU_C_Class)p Fs(,)g(the)g(application)f(calls)g(an)i(object-)0 2270 y(type-specific)15 b(function)h(that)g(is)g(part)g(of)h(the)f(stubs.)26 b(The)16 b(class-creation)g(procedure)h(named)f Fp(I)t Ft(_)p Fp(T)t Ft(__MakeClass)p Fs(,)0 2332 y(which)10 b(is)h(declared)g(in)g(generated)f(file)h(`)p Fp(I)p Ft(.h)p Fs(',)h(makes)f(a)h(class)e(for)i(objects)e(that)g(implement)h (object)f(type)h Fp(I.T)k Fs(\(and)c(thus)0 2395 y(all)g(its)g (supertypes\).)g(This)f(procedure)i(takes)f(as)g(arguments)h(a)f(set)h (of)f(C)h(procedures)f(that)g(are)h(the)f(implementations)f(of)0 2457 y(the)k(methods)g(of)g(that)g(class,)h(plus)f(a)g(finalization)f (procedure.)21 b(The)14 b(finalization)f(procedure)h(is)g(given)g (access)g(to)g(the)0 2519 y(private)d(data)g(of)g(the)g(object)f(after) i(the)f(object)f(is)h(destroyed.)62 2608 y(For)21 b(each)g(object)e (type)h Fp(I.T)p Fs(,)h(the)f(generated)g(server-side)g(stub)f(module)h (for)g Fp(I)25 b Fs(creates)c(a)f(default)g(true)g(class,)0 2670 y(unless)13 b(the)h(true)f(code)i(has)e(been)h(generated)g(with)f (the)h Ft(-nodefaulttrueclass)p Fs(.)19 b(Linking)12 b(with)h(this)g(server-side)p eop %%Page: 40 41 40 40 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(40)0 183 y(stub)16 b(requires)g(the)h(application)e(to)i (supply)e(the)i(procedures)f(that)h(implement)f(the)h(methods)f(of)h (this)f(default)g(class.)0 246 y(Those)11 b(procedures)h(are)h(named)f Ft(server_)p Fp(I)t Ft(_)p Fp(T)t Ft(_)p Fp(M)t Fs(,)h(for)f(each)g (method)g Fp(M)17 b Fs(of)12 b Fp(I.T)p Fs(.)g(A)h(finalization)d (procedure)i(can)g(be)0 308 y(associated)e(with)g(the)h(default)f (class)h(by)f(invoking)f Fp(I)t Ft(_)p Fp(T)t Ft (__SetDefaultClassFinalization)p Fs(.)g(Implementations)0 370 y(of)14 b(true)f(objects)g(typically)f(just)h(use)g(this)g(default) g(class,)h(since)f(the)h(methods)f(for)h(this)e(class)h(have)h(to)f(be) h(provided)f(in)0 432 y(any)f(case.)17 b(The)12 b(function)g Fp(I)t Ft(_)p Fp(T)t Ft(__CreateTrue)f Fs(will)h(create)h(an)g(true)g (instance)e(using)h(the)g(default)g(true)g(class)h(for)f(the)0 495 y(object)i(type)f Fp(I)p 240 495 14 3 v 21 w(T)p Fs(.)i Fp(I)t Ft(_)p Fp(T)t Ft(__CreateTrue)e Fs(methods)h(take)g(an)h Fp(instance)e(handle)p Fs(,)i(a)g(server)f(on)g(which)g(to)g(maintain)f (the)0 557 y(object,)f(and)f(arbitrary)h(user)g(data,)g(and)g(create)h (and)e(return)h(the)g(true)f(instance)g(of)h(the)g(object.)h(An)f (alternate)f(version)g(of)0 619 y Fp(I)t Ft(_)p Fp(T)t Ft(__CreateTrue)p Fs(,)f(called)g Fp(I)t Ft(_)p Fp(T)t Ft(__OTCreateTrue)p Fs(,)f(is)h(provided)f(for)h(use)f(inside)g(the)h (scope)g(of)g(an)g(object)f(table's)0 681 y(incarnation)15 b(procedure.)28 b(Also,)17 b(a)g(generic)g(creation)f(procedure,)i Ft(ILU_C_CreateTrueObject)p Fs(,)f(is)f(declared)h(in)0 744 y(`)p Ft(iluchdrs.h)p Fs(')d(for)h(application)d(use.)21 b(The)14 b(default)g(true)g(class)g(can)h(be)g(registered)e(or)i (changed)f(with)f(the)i(function)0 806 y Fp(I)t Ft(_)p Fp(T)t Ft(__SetDefaultClass)p Fs(,)10 b(which)h(returns)f(the)h (previous)f(setting)g(of)h(the)g(default)g(true)g(class.)62 898 y(Surrogate)20 b(instances)e(generally)h(use)g(another)g (automatically-constructed)e(class,)22 b(though)c(custom)h(surrogate)0 960 y(classes)i(may)h(be)g(registered)f(with)f(the)i(procedure)f Ft(ILU_C_RegisterCustomSurrogateType)p Fs(.)40 b(Surrogate)0 1022 y(instances)11 b(are)i(typically)e(either)h(received)h(as)f(reply) g(values)g(from)h(calls)f(or)g(parameters)h(to)f(calls,)h(or)f(reified) g(from)h(one)0 1084 y(or)e(more)h(strings)e(with)h(a)g Fp(binding)f(procedure)p Fs(.)i(\(A)g Fp(binding)d(procedure)14 b Fs(is)d(a)h(procedure)f(that)g(takes)g(some)g(name)h(for)g(an)0 1147 y(object)g(instance,)h(and)g(returns)f(the)h(actual)g(instance.\)) j(There)d(are)g(a)h(number)f(of)g(binding)e(procedures)h(available.)k (The)0 1209 y(simple)d(binding)e(interface)i(to)g(C)g(offers)h(the)f (function)e Ft(ILU_C_LookupObject)p Fs(,)i(which)f(takes)h(an)g(object) g(ID)g(and)g(a)0 1271 y(type,)d(and)h(returns)f(the)g(registered)g (object)g(with)f(that)h(ID,)h(if)g(any.)g(The)f(function)f Ft(CORBA_ORB_string_to_object)0 1333 y Fs(will)18 b(take)i(a)g(URL)f (for)h(an)f(instance,)i(in)e(any)h(of)f(the)g(supported)f(URL)i(forms,) i(and)d(return)h(an)f Ft(ILU_C_OBJECT)0 1396 y Fs(instance.)12 b(The)f(function)f Ft(ILU_C_SBHToObject)h Fs(is)g(similar)g(to)g Ft(CORBA_ORB_string_to_object)p Fs(,)e(except)j(that)0 1458 y(an)e(expected)g(object)g(type)f(may)i(also)e(be)i(specified,)e (to)h(constrain)f(the)h(process.)h(In)f(addition,)f(the)h (ILU-generated)g(stubs)0 1520 y(will)j(provide)f(a)i(function)f(called) g Fp(I)t Ft(_)p Fp(T)t Ft(__CreateFromSBH)p Fs(,)h(which)f(will)g (either)g(find)g(or)h(create)g(an)g(instance)f(of)g(the)0 1583 y(specified)d(type,)h(with)g(the)g(specified)f(parameters.)62 1674 y(In)h(general,)h(for)f(any)g(object)g(type)f Fp(T)p Fs(,)i(the)f(following)e(C)j(functions)d(are)j(defined:)1739 1800 y(Function)-1902 b Ft(ILU_C_Class)11 b Fp(T)p 321 1800 15 3 v 339 1800 V 40 w Fo(MakeClass)23 b Fk(\()12 b Fp(method-1-type)g(method-1-proc)p Ft(,)f(...)208 1862 y Fp(method-N-type)h(method-N-proc)p Ft(,)f(ILU_C_FinalizationProc)e (_finalize)i Fk(\))120 1924 y Fs(Locking:)e(Main)j(Invariant)e(holds) 120 2016 y(Creates)25 b(a)g(C)f(class)g(of)h(objects)e(that)h(export)f (object)h(type)g Fp(T)k Fs(\(and)d(all)f(its)f(supertypes\),)k(given) 120 2078 y(implementations)13 b(for)i(all)f(the)h(methods)f(of)g(that)g (type.)22 b Ft(ILU_C_CreateTrueObject)13 b Fs(can)i(then)f(be)120 2140 y(called)d(to)g(create)g(instances)f(of)i(this)e(class.)1739 2266 y(Function)-1902 b Ft(ILU_C_Class)11 b Fp(T)p 321 2266 V 339 2266 V 40 w Fo(SetDefaultClass)22 b Fk(\()11 b Ft(ILU_C_Class)f(c)i Fk(\))120 2328 y Fs(Locking:)d(Main)j(Invariant) e(holds)120 2420 y(Sets)16 b(the)f(default)h(true)g(class)f(of)h(the)g (type)f Fp(T)20 b Fs(to)15 b(be)h Fp(c)p Fs(,)i(and)e(returns)f(the)h (previous)f(default)g(true)h(class)120 2482 y(setting.)1739 2608 y(Function)-1902 b Ft(void)12 b Fp(T)p 147 2608 V 165 2608 V 40 w Fo(SetDefaultClassFinalization)20 b Fk(\()11 b Ft(ILU_C_FinalizationProc)f(f)h Fk(\))120 2670 y Fs(Locking:)e(Main)j(Invariant)e(holds)p eop %%Page: 41 42 41 41 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(41)120 183 y(Sets)11 b(the)g(finalization)e(method)i(of)g (the)g(default)g(class)g(for)g(object)f(type)h Fp(T)p Fs(.)1739 295 y(Function)-1902 b Ft(OPTIONAL\()p Fp(T)t Ft(\))12 b Fp(T)p 329 295 15 3 v 346 295 V 39 w Fo(CreateTrue)23 b Fk(\()12 b Ft(OPTIONAL)p Fk(\()p Ft(RETAIN)p Fk(\()p Ft(char)e(*)p Fk(\)\))h Fp(instance-id)p Ft(,)208 357 y(OPTIONAL)p Fk(\()p Ft(GLOBAL)p Fk(\()p Ft(ilu_Server)p Fk(\)\))e Fp(server)p Ft(,)j(OPTIONAL)p Fk(\()p Ft(PASS)p Fk(\()p Ft(void)e(*)p Fk(\)\))h Fp(user-data)k Fk(\))120 419 y Fs(Locking:)9 b(Main)j(Invariant)e(holds)120 506 y(Creates)16 b(an)f(instance)f(of)h(the)g(default)f(class)h(for)g(type) f Fp(T)p Fs(,)i(exporting)d(it)i(with)f(instance-id)f Fp(instance-id)p Fs(,)120 569 y(exporting)i(it)i(via)g(server)g Fp(server)p Fs(,)i(associating)d(the)g(value)h Fp(user-data)j Fs(with)d(it.)28 b(If)18 b Fp(instance-id)i Fs(is)d(not)120 631 y(specified,)9 b(a)h(server-relative)f(instance-id)f(will)g(be)h (assigned)f(automatically.)i(If)f Fp(server)k Fs(is)c(not)g(specified,) 120 693 y(a)j(default)e(server)i(will)e(be)h(created)g(automatically.) 1739 804 y(Function)-1902 b Ft(OPTIONAL\()p Fp(T)t Ft(\))12 b Fp(T)p 329 804 V 346 804 V 39 w Fo(OTCreateTrue)23 b Fk(\()12 b Ft(RETAIN)p Fk(\()p Ft(char)e(*)p Fk(\))i Fp(instance-id)p Ft(,)208 867 y(GLOBAL)p Fk(\()p Ft(ilu_Server)p Fk(\))e Fp(server)p Ft(,)h(OPTIONAL)p Fk(\()p Ft(PASS)p Fk(\()p Ft(void)f(*)p Fk(\)\))i Fp(user-data)i Fk(\))120 929 y Fs(Locking:)9 b(Inside\()p Fp(server)p Fs(,)i Fp(T)t Fs(\))120 1016 y(Similar)22 b(to)f Fp(T)t Ft(__CreateTrue\(\))p Fs(,)j(but)d(designed)f(to)i(be)g(used)f(within)f(the)h Ft(ot_object_of_ih)120 1078 y Fs(function)15 b(of)i(an)g(object)f (table)g(\(Section)g(3.3.1.2)h([Servers)h(and)e(Ports],)i(page)f(50\).) 28 b(Requires)16 b(kernel)120 1141 y(server)11 b(locks)g(to)f(be)i (held)e(before)i(invocation.)120 1228 y(Creates)k(an)f(instance)f(of)h (the)g(default)f(class)h(for)g(type)f Fp(T)p Fs(,)i(exporting)d(it)i (with)f(instance-id)f Fp(instance-id)p Fs(,)120 1290 y(exporting)d(it)g(via)h(server)h Fp(server)p Fs(,)f(associating)f(the) h(value)f Fp(user-data)15 b Fs(with)10 b(it.)1739 1401 y(Function)-1902 b Ft(OPTIONAL\()p Fp(T)t Ft(\))12 b Fp(T)p 329 1401 V 346 1401 V 39 w Fo(CreateFromSBH)24 b Fk(\()11 b Ft(RETAIN)p Fk(\()p Ft(char)g(*)p Fk(\))g Fp(sbh)p Ft(,)208 1464 y(RETAIN)p Fk(\()p Ft(CORBA_Environment)e(*)p Fk(\))i Fp(Env)r Fk(\))120 1526 y Fs(Locking:)e(Main)j(Invariant)e (holds)120 1613 y(Finds)g(or)i(creates)f(an)g(instance)g(of)g Fp(T)p Fs(,)g(using)f(the)h(given)g(object)f(reference.)1722 1724 y(Class)h(Var)-1900 b Ft(extern)12 b(ilu_Class)g Fp(T)p 434 1724 V 451 1724 V 39 w Fo(MSType)120 1787 y Fs(A)e(value,)h(of)f(type)f Ft(ilu_Class)h Fs(\(which,)g(despite)f (its)g(poorly-chosen)g(name,)i(identifies)e(an)h(object)f(type,)120 1849 y(not)h(a)i(class\),)f(that)g(identifies)e(the)i(object)g(type)f Fp(T)p Fs(.)62 1960 y(In)h(the)g(following)f(example,)h(the)g(ILU)g (definition)e(is:)120 2047 y Ft(INTERFACE)24 b(I;)120 2147 y(TYPE)h(T)f(=)h(OBJECT)170 2197 y(METHODS)220 2247 y(M)f(\()h(r)g(:)g(REAL)f(\))h(:)g(INTEGER)170 2296 y(END;)62 2408 y Fs(This)14 b(definition)e(defines)i(an)h(interface)g Ft(I)p Fs(,)h(an)e(object)g(type)g Ft(T)p Fs(,)i(and)e(a)h(method)f Ft(M)p Fs(.)22 b(The)15 b(method)f Ft(M)g Fs(takes)g(a)h Ft(REAL)0 2471 y Fs(as)f(an)h(argument)f(and)g(returns)f(an)i Ft(INTEGER)f Fs(result.)19 b(The)c(generated)f(C)g(header)h(file)f (would)f(include)g(the)h(following)0 2533 y(statements:)120 2620 y Ft(typedef)24 b(ILU_C_OBJECT)g(I_T;)p eop %%Page: 42 43 42 42 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(42)120 183 y Ft(ILU_C_Class)24 b(I_T__MakeClass\()170 233 y(ilu_integer)g(\(*I_T_M__Impl\))245 283 y(\(I_T)g(_handle,)g (ilu_real)g(r,)h(ILU_C_ENVIRONMENT)e(*_status\),)170 333 y(ILU_C_FinalizationProc)g(_finalize\);)120 432 y(I_T)i (I_T__CreateFromSBH)e(\(char)h(*sbh,)h(ILU_C_ENVIRONMENT)e(*Env\);)120 482 y(I_T)i(I_T__CreateTrue)e(\(ilu_string)h(ih,)h(ilu_Server)f (server,)g(void)g(*user_data\);)120 532 y(I_T)h(I_T__OTCreateTrue)e (\(ilu_string)h(ih,)g(ilu_Server)g(server,)h(void)f(*user_data\);)120 632 y(ilu_integer)g(I_T_M)g(\(I_T,)h(ilu_real,)f(ILU_C_ENVIRONMENT)f (*\);)120 731 y(ilu_integer)h(server_I_T_M)g(\(I_T,)g(ilu_real,)g (ILU_C_ENVIRONMENT)f(*\);)62 916 y Fs(The)17 b(functions)e Ft(I_T__CreateFromSBH)p Fs(,)j Ft(I_T__CreateTrue)p Fs(,)f(and)g Ft(I_T__OTCreateTrue)f Fs(are)h(used)g(to)0 978 y(create)d(instances)e (of)h(the)g(class)g Ft(I_T)p Fs(.)k Ft(I_T__CreateFromSBH)12 b Fs(is)h(used)g(by)f(clients.)17 b Ft(I_T__CreateTrue)12 b Fs(is)h(used)0 1041 y(by)h(servers)g(for)g(normal)g(circumstances,)h (and)f Ft(I_T__OTCreateTrue)f Fs(is)g(used)h(in)f(object)h(table)f (implementations;)0 1103 y(both)8 b(return)h(objects)f(whose)h Ft(M)g Fs(method)g(is)g(implemented)f(by)h Ft(server_I_T_M)p Fs(.)h(Alternatively,)e(servers)h(and/or)g(object)0 1165 y(tables)h(could)g(use)g Ft(I_T__MakeClass)g Fs(and)g Ft(ILU_C_CreateTrueObject)p Fs(.)g(The)g(pointer)g(returned)g(in)g (each)i(case)f(is)0 1227 y(the)g(object)f(instance)h(and)g(must)f(be)i (passed)e(with)g(each)i(method)f(invocation.)0 1386 y Fn(3.2.8.2)23 b(Interface)16 b(Inheritance)62 1501 y Fs(Through)11 b(interface)h(inheritance,)g(an)g(object)f(type)g(may)i (participate)e(in)g(the)h(behaviors)f(of)h(several)f(different)h(types) 0 1564 y(that)h(it)h(inherits)e(from.)21 b(These)14 b(types)f(are)h (called)g Fp(ancestors)h Fs(of)f(the)g(object)f(type.)20 b(In)14 b(C,)h(an)f(object)f(type)g(supplies)g(all)0 1626 y(methods)d(either)h(defined)g(directly)f(on)h(that)g(type,)g(or)g (on)g(any)g(of)g(its)f(ancestor)h(types.)62 1725 y(Consider)g(the)g (following)e(example:)120 1823 y Ft(INTERFACE)24 b(I2;)120 1923 y(EXCEPTION)g(E1;)120 2022 y(TYPE)h(T1)f(=)h(OBJECT)170 2072 y(METHODS)220 2122 y(M1)f(\(a)h(:)g(ilu.CString\))f(:)g(REAL)h (RAISES)f(E1)h(END)170 2172 y(END;)120 2271 y(TYPE)g(T2)f(=)h(OBJECT) 170 2321 y(METHODS)220 2371 y(M2)f(\()h(a)g(:)g(INTEGER,)f(Out)h(b)f(:) h(INTEGER)f(\))170 2421 y(END;)120 2521 y(TYPE)h(T3)f(=)h(OBJECT)f (SUPERTYPES)g(T1,)h(T2)g(END)170 2570 y(METHODS)220 2620 y(M3)f(\()h(a)g(:)g(INTEGER)f(\))170 2670 y(END;)p eop %%Page: 43 44 43 43 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(43)62 183 y(The)10 b(object)g(type)f Ft(T3)i Fs(inherits)d(from)j(the)f(object)g(types)f Ft(T1)h Fs(and)g Ft(T2)p Fs(.)h(Thus,)f(eight)g(C)g(procedures)g(are)h(relevant)f(to)f (the)0 246 y(interface)g Ft(I2)p Fs(:)g(the)g(three)g(generic)f (functions)f Ft(I2_T1_M1)p Fs(,)i Ft(I2_T2_M2)p Fs(,)g(and)g Ft(I2_T3_M3)p Fs(,)g(and)f(the)h(five)g(default)f(method)0 308 y(implementations)e Ft(server_I2_T1_M1)p Fs(,)h Ft(server_I2_T2_M2) p Fs(,)h Ft(server_I2_T3_M1)p Fs(,)f Ft(server_I2_T3_M2)p Fs(,)g(and)0 370 y Ft(server_I2_T3_M3)p Fs(.)17 b(A)c(module)g(that)g (implements)g(true)g(instances)f(of)i Ft(T3)f Fs(using)f(the)h(default) g(class)g(would)f(define)0 432 y(the)e(last)h(three)f(procedures)h (\(the)f(other)h(two)f(default)g(method)g(implementations,)f(for)i (messy)g(reasons)f(described)g(in)g(the)0 495 y(next)h(paragraph\).)g (A)g(client)g(uses)f(only)h(the)f(three)i(generic)f(functions.)62 582 y(Sadly,)22 b(the)d(current)h(state)f(of)h(the)f(C-stubber)g (causes)g(an)h(additional)e(complexity)g(for)i(server)g(implementors.)0 645 y(`)p Ft(I2-true.c)p Fs(')14 b(contains)f(the)h(server-side)f (stubs)g(\()p Ft(")p Fs(skeletons)p Ft(")p Fs(,)h(in)g(OMG)g (parlance\))h(needed)f(in)f(any)h(program)h(that)0 707 y(implements)f(any)g(object)g(type)f(that)h(is)g(a)h(subtype)e(of)h (any)g(object)g(type)g(defined)g(in)g(`)p Ft(I2.isl)p Fs('.)21 b(`)p Ft(I2-true.c)p Fs(')14 b(also)0 769 y(contains)h(the)g (code)i(that)e(creates)h(the)g(default)g(classes)f(for)h(all)g(the)g (object)f(types)g(defined)h(in)f(`)p Ft(I2.isl)p Fs(';)j(this)d(code)0 831 y(makes)e(external)f(references)i(to)e(the)h(default)f (implementation)f(procedures,)j(thus)d(requiring)h(any)g(program)h (that)g(links)0 894 y(with)f(`)p Ft(I2-true.o)p Fs(')h(to)g(supply)f (those)g(default)h(implementation)f(procedures)g(---)i(even)g(if)f (those)f(default)h(classes)f(are)0 956 y(not)i(used.)22 b(A)15 b(simple)f(workaround)g(is)h(to)f(supply)f(dummy)i(procedures)g (to)f(satisfy)g(the)g(linker.)22 b(The)15 b(stubs)f(can)h(also)0 1018 y(be)c(generated)f(with)f(the)h(command-line)h(option)d Ft(-nodefaulttrueclass)p Fs(,)i(which)f(will)h(prevent)g(generation)f (of)h(the)0 1080 y(code)j(that)f(creates)h(the)g(default)f(true)g (classes.)k(However,)d(if)g(this)f(technique)f(is)i(used,)g(be)g(aware) g(that)f(either)h(a)g(default)0 1143 y(true)c(class)g(must)g(be)g (registered)f(manually,)i(or)f(true)g(instances)f(must)h(be)g(created)h (with)e Ft(ILU_C_CreateTrueObject)p Fs(.)0 1269 y Fn(3.2.8.3)23 b(Accessing)14 b(the)i(String)f(Binding)h(Handle,)g(IOR,)f(or)g(Object) h(ID)62 1374 y Fs(Several)22 b(functions)d(are)j(provided)e(to)h(give)g (access)g(to)g(various)f(identifiers)f(of)j(an)f(instance.)40 b(The)22 b(function)0 1436 y Ft(ILU_C_SBHOfObject)e Fs(will)f(return)i (the)g(ILU)g(URL)g(for)g(an)g(instance;)j(the)d(function)f Ft(ILU_C_IOROfObject)0 1498 y Fs(will)f(return)h(the)g(CORBA)h(URL)g (for)f(an)h(object,)h(if)e(support)f(for)h(IIOP)h(is)f(configured)f (into)h(ILU;)f(the)i(function)0 1560 y Ft(CORBA_ORB_object_to_string)12 b Fs(will)g(return)i(either)f(the)h(IOR,)h(if)e Ft(IIOP)h Fs(support)e(has)i(been)g(configured)f(in,)h(or)0 1623 y(the)c(SBH,)i(if)e(not;)g(the)g(two)g(parts)g(of)h(the)f(object)g(ID,) h(the)g(server)f(id)g(and)h(the)f(instance)g(handle,)g(may)h(be)g (obtained)e(with)h(a)0 1685 y(call)j(on)f Ft(ILU_C_IDOfObject)p Fs(.)k(See)d(the)g(API)g(reference)h(section)e(of)h(this)f(chapter)h (for)g(more)g(information)f(on)h(these)0 1747 y(functions.)0 1873 y Fn(3.2.8.4)23 b(Distinguishing)13 b(Between)k(Local)d(and)i (Remote)f(Instances)62 1978 y Fs(It)f(is)e(occasionally)g(useful)h(to)g (distinguish)d(between)j(local)g(and)g(remote)h(instances.)j(There)c (are)h(three)g(cases)f(here:)0 2040 y(the)h(case)h(where)g(the)f (instance)g(is)g(a)h(true)f(object,)h(the)g(case)g(where)f(the)h (instance)e(is)h(a)h(surrogate)f(for)h(a)g(true)f(instance)0 2102 y(implemented)e(in)f(another)h(language)f(in)h(the)g(same)h (address)e(space,)i(and)f(the)g(case)g(where)h(the)f(instance)f(is)g(a) i(surrogate)0 2165 y(for)f(a)g(true)f(instance)g(in)g(a)h(different)f (address)g(space.)i(There)f(is)f(currently)g(no)g(good)g(way)g(to)g (distinguish)e(these)i(cases)h(in)0 2227 y(the)f(C)h(runtime.)0 2353 y Fn(3.2.8.5)23 b(Object)16 b(Implementation)62 2458 y Fp(This)11 b(information)g(is)g(provided)g(for)g(those)g (interested)g(in)g(the)h(implementation)e(of)i(the)g(C)g(object)f (system.)i(It)f(is)f Fn(not)0 2520 y Fp(guaranteed)g(to)f(remain)i(the) f(same)h(from)f(release)h(to)f(release.)62 2608 y Fs(The)f(interface)f (`)p Fp(ILUSRC)t Ft(/runtime/c/ilucstub.h)p Fs(')f(contains)g(the)i(C)g (declarations)e(relevant)h(to)g(the)g(material)0 2670 y(here.)p eop %%Page: 44 45 44 44 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(44)62 183 y(A)12 b(C)h(class)f(is)f(represented)h(by)g(a)g (pointer)f(to)h(a)g(struct)f(that)h(holds)e(a)j(finalization)d (procedure)i(and)g(a)h(dispatch)d(table.)0 246 y(The)g(dispatch)g (table)g(is)g(an)g(array)h(of)g(sections,)e(one)i(from)g(each)g(object) e(type)h(implemented)g(by)h(the)f(class.)h(Each)f(section)0 308 y(is)i(a)h(struct)f(containing)f(the)h Ft(ilu_Class)g Fs(\(remember,)j(this)d(identifies)f(a)i(type,)g(not)f(a)h(class\))f (that)g(this)g(section)f(is)i(for,)0 370 y(and)e(an)g(array)h(of)f (procedure)g(pointers,)f(one)h(per)h(method)f(introduced)e(at)j(that)e (object)h(type.)62 457 y(For)j(each)g(method)f(directly)f(defined)h(in) g(the)g(type,)h(a)g(generic)f(function)f(is)h(defined)g(in)g(the)g (common)h(code)f(for)h(its)0 519 y(interface,)g(which)e(dispatches)g (to)g(the)h(appropriate)f(method.)17 b(It)c(does)g(this)e(by)i(walking) f(down)g(the)h(dispatch)e(table)i(for)0 582 y(the)f(object's)g(class,)h (until)e(it)h(finds)g(a)h(section)f(that)g(contains)f(the)h (appropriate)g Ft(ilu_Class)g Fs(value)g(\(that)g(is,)h(the)g(value)0 644 y(of)d Ft(ilu_Class)g Fs(that)g(matches)h(the)f Ft(ilu_Class)g Fs(at)g(which)g(this)f(method)h(was)g(introduced\),)g(then)g(calling)f (the)i(method)0 706 y(pointer)g(which)g(is)h(indexed)f(in)h(the)f (section's)g(array)i(of)f(method)f(pointers)g(by)h(the)g(index)f(of)h (the)g(method.)h(The)f(generic)0 769 y(functions)e(have)h(the)g (correct)g(type)g(signature)f(for)h(the)g(method.)g(They)g(can)g(be)h (referenced)g(with)e(the)h Ft(&)g Fs(operator.)0 885 y Fn(3.2.8.6)23 b(Methods)62 989 y Fs(All)10 b(ISL)h(methods)f(of)h(an) g(object)f(type)g(map)h(to)f(C)h(functions)e(which)h(operate)h(on)f (instances)g(of)g(the)h(C)g(object)f(system)0 1051 y(as)15 b(described)g(above.)24 b Ft(IN)p Fs(,)17 b Ft(OUT)p Fs(,)g(and)e Ft(INOUT)g Fs(parameters)h(appear)g(in)f(the)g(C)h (function)e(in)h(the)g(same)h(order)f(as)h(they)0 1113 y(appear)11 b(in)g(the)g(ISL)h(definition)d(of)i(the)g(function.)62 1201 y Ft(ASYNCHRONOUS)f Fs(methods)g(have)g(no)h(return)f(values)g (and)h(raise)f(no)g(user-specified)g(exceptions.)g(They)g(may)h(return) 0 1263 y(before)g(the)g(completion)f(of)h(the)g(true)g(method.)h Ft(FUNCTIONAL)e Fs(methods)g(are)i(not)f(cached)g(by)g(the)g(C)h(ILU)f (runtime.)62 1350 y(In)i(addition)e(to)i(its)f(specified)g(arguments,)i (the)e(methods)h Ft(I_T_M)f Fs(and)h Ft(server_I_T_M)f Fs(take)h(an)g(instance)f(of)h(the)0 1412 y(type)i Ft(I_T)g Fs(and)g(a)h(reference)g(to)f(a)g(variable)g(of)g(type)g Ft(ILU_C_ENVIRONMENT)10 b(*)p Fs(,)17 b(which)d(is)h(a)h(macro)g (defined)e(to)h(be)0 1474 y(the)e(appropriate)g(CORBA)h(environment)e (type,)i(and)f(is)g(used)g(to)g(return)g(exception)f(codes.)18 b(The)c(environment)e(struct)0 1537 y(pointed)i(to)g(by)h(the)g (environment)f(argument)h(must)g(be)g(instantiated)e(in)i(a)h(client;)g (its)e(address)h(is)f(passed)h(as)g(the)g(last)0 1599 y(argument)c(to)g(each)g(method.)g(True)h(procedures)e(must)h(expect)g (a)h(pointer)e(to)h(this)f(structure)g(as)h(the)g(last)g(argument.)62 1686 y(For)h(instance,)e(the)h(C)h(client)e(calling)g(the)h(method)g (for)g Ft(M)h Fs(might)e(be)h(as)h(follows:)120 1773 y Ft(#include)24 b("I.h")120 1873 y(int)h(main)f(\(int)h(ac,)f(char)h (**av\))120 1923 y({)170 1973 y(double)f(atof\()h(\);)170 2022 y(I_T)f(inst;)170 2072 y(CORBA_long)g(result;)170 2122 y(CORBA_double)g(f;)170 2172 y(ILU_C_ENVIRONMENT)f(ev;)170 2271 y(I__Initialize\()g(\);)170 2321 y(f)i(=)f(atof)h(\(av[1]\);)170 2371 y(inst)f(=)h(I_T__CreateFromSBH)e(\(av[2],)i(&ev\);)170 2421 y(if)g(\(!ILU_C_SUCCESSFUL\(&ev\)\))d({)220 2471 y(printf\()i("CreateFromSBH)f(raised)i(exception)f(<\045s>\\n",)269 2521 y(ILU_C_EXCEPTION_ID\(&ev\)\);)220 2570 y(return\(1\);)170 2620 y(})170 2670 y(result)g(=)h(I_T_M)f(\(inst,)h(f,)f(&ev\);)p eop %%Page: 45 46 45 45 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(45)170 183 y Ft(if)25 b(\(!ILU_C_SUCCESSFUL\(&ev\)\))d({)220 233 y(printf\()i("exception)g(<\045s>)g(signalled)g(on)h(call)g(to)f (I_T_M\\n",)269 283 y(ILU_C_EXCEPTION_ID\(&ev\)\);)220 333 y(return\(2\);)170 382 y(})170 432 y(printf\()g("result)g(is)h (\045d\\n",)f(result)h(\);)170 482 y(return\(0\);)120 532 y(})62 645 y Fs(Note)c(the)g(call)g(on)g(the)g(interface-specific)g (client)g(initialization)d(procdedure)j Ft(I__Initialize)p Fs(;)k(these)20 b(are)0 707 y(described)11 b(in)f(a)i(later)f(section.) 62 795 y(The)e(string)e(binding)g(handle)h(is)g(obtained)f(from)j (standard)d(input)h(along)g(with)f(some)i(floating-point)d(value.)k (The)f(class)0 857 y(specific)15 b(function)f Ft(I_T__CreateFromSBH)g Fs(is)h(then)g(called)h(to)f(obtain)f(the)h(object)g(instance.)24 b(This)14 b(function)g(was)0 919 y(passed)d(the)h(string)f(binding)f (handle,)h(and)h(a)g Ft(CORBA_Environment)f Fs(in)g(which)g(to)h (report)f(exceptions.)i(The)f(returned)0 981 y(object)h(instance)f(is)h (then)g(passed)f(as)i(the)f(first)g(argument)g(to)g(the)g(method)g Ft(I_T_M)p Fs(,)h(along)e(with)g(the)i(environment)e Ft(ev)p Fs(,)0 1044 y(and)f(the)g(single)e(actual)i Ft(CORBA_double)f Fs(argument)h Ft(f)p Fs(.)h Ft(I_T_M)e Fs(returns)h(an)g Ft(CORBA_long)f Fs(value)h(which)f(is)h(placed)g(in)0 1106 y Ft(result)p Fs(.)62 1193 y(The)i(true)g(implementation)f(of)h (the)g(method)g Ft(M)g Fs(might)f(use)h(the)g(default)f(class,)i (supplying)d(the)h(implementation)g(of)0 1256 y(the)f(one)g(method)g (as)g(follows:)120 1343 y Ft(ilu_integer)24 b(server_I_T_M)g(\()g(I_T)h (h,)g(ilu_real)f(u,)h(ILU_C_ENVIRONMENT)e(*s)i(\))120 1393 y({)170 1443 y(return\()f(\(ilu_integer\))g(\(u)g(+)h(1\))g(\);) 120 1493 y(})62 1605 y Fs(In)13 b(this)e(simple)i(example,)g(the)f (corresponding)f(server,)j(or)f(true,)g(method)f(computes)g(some)h (value)f(to)g(be)h(returned.)0 1668 y(In)e(this)e(case)i(it)f(adds)g (one)g(to)g(its)g Ft(ilu_real)g Fs(argument)h Ft(u)p Fs(,)g(converts)e(the)i(value)f(to)g(an)h(integer,)f(and)g(returns)g (that)g(value.)0 1730 y(Note)h(that)f(the)h(server)h(method,)f(if)g (not)f(signalling)f(any)i(exceptions,)f(may)i(ignore)e(the)h (environment)f(parameter.)0 1856 y Fn(3.2.8.7)23 b(Parameter)15 b(Passing)e(Considerations)62 1960 y Fs(Here)f(is)e(ILU's)h(version)f (of)h(table)f(20)h(from)g(the)g(CORBA)g(2.0)g(spec.)h Ft(T)f Fs(is)f(the)h(C)g(mapping)f(of)h(the)g(type)f(in)h(question.)0 2022 y(The)e Ft(Exn)h Fs(column)f(describes)g(how)g(exception)f (parameters)i(appear)g(in)f(the)g(parameter-conveying)g(member)i(of)f (a)f(status)0 2084 y(struct.)120 2172 y Ft(DataType)199 b(In)149 b(InOut)74 b(Out)199 b(Return)99 b(Exn)120 2222 y(--------)199 b(--)149 b(-----)74 b(---)199 b(------)99 b(---)120 2271 y(scalar)249 b(T)174 b(T*)149 b(T*)224 b(T)g(T*)120 2321 y(optional)199 b(T)174 b(T*)149 b(T*)224 b(T)g(T*)120 2371 y(object)249 b(T)174 b(T*)149 b(T*)224 b(T)g(T*)120 2421 y(record,)24 b(fixed)75 b(T*)149 b(T*)g(T*)224 b(T)g(T*)120 2471 y(record,)24 b(var)125 b(T*)149 b(T*)g(T**)199 b(T*)g(T*)120 2521 y(union,)24 b(fixed)100 b(T*)149 b(T*)g(T*)224 b(T)g(T*)120 2570 y(union,)24 b(var)150 b(T*)f(T*)g(T**)199 b(T*)g(T*)120 2620 y(string)249 b(T)174 b(T*)149 b(T*)224 b(T)g(T*)120 2670 y(other)24 b(sequence)50 b(T*)149 b(T*)g(T**)199 b(T*)g(T*)p eop %%Page: 46 47 46 46 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(46)120 183 y Ft(array,)24 b(fixed)100 b(T)174 b(T)g(T)249 b(T_slice*)49 b(T*)120 233 y(array,)24 b(var)150 b(T)174 b(T)g(T_slice**)49 b(T_slice*)g(T*)0 366 y Fn(3.2.8.8)23 b(Exceptions)62 473 y Fs(C)12 b(has)e(no)h(defined)f(exception)g (mechanism.)h(As)g(already)f(indicated,)g(exceptions)g(are)h(passed)g (in)f(ILU)h(C)g(by)f(adding)0 535 y(to)i(the)h(end)f(of)h(each)g (method)g(an)g(additional)d(status)i(argument)g(that)h(can)g(convey)f (an)h(exception)e(code)i(and)g(a)g(value)f(of)0 598 y(a)h(type)f (associated)g(with)f(that)h(exception.)j(To)d(signal)g(an)g(exception,) h(a)g(method)f(implementation)f(sets)h(the)g(exception)0 660 y(code)f(and)g(supplies)f(the)g(parameter)j(value)d(\(if)i(any\).) 62 750 y(An)k(exception)f(parameter)i(is)f(conveyed)g(in)f(the)h (status)f(argument)h(as)g(a)h(C)g(pointer;)g(the)f(parameter-conveying) 0 812 y(member)c(is)f(declared)h(to)e(be)i(a)f Ft(void)g(*)p Fs(.)h(In)g(particular,)f(this)f(pointer)g(is)h(a)h(pointer)e(to)h(a)g (value)g(of)h(the)f(type)f(that)h(is)g(the)g(C)0 875 y(mapping)e(of)g(the)g(exception's)f(ISL)i(parameter.)i(For)d(an)h (exception)e(that)h(has)g(no)g(parameter,)i(the)e(parameter-conveying)0 937 y(member)j(is)f(not)f(meaningful.)62 1027 y(In)h(the)g(following)f (example,)h(the)g Ft(div)g Fs(method)g(can)g(raise)h(the)f(exception)f Ft(DivideByZero)p Fs(:)120 1117 y Ft(INTERFACE)24 b(calc;)120 1217 y(TYPE)h(numerator)f(=)g(INTEGER;)120 1316 y(EXCEPTION)g (DivideByZero)g(:)h(numerator;)120 1416 y(TYPE)g(self)f(=)h(OBJECT)170 1466 y(METHODS)220 1516 y(Div\()f(v1)h(:)g(INTEGER,)f(v2)h(:)f(INTEGER) h(\))f(:)h(INTEGER)g(RAISES)f(DivideByZero)g(END)170 1565 y(END;)62 1683 y Fs(The)11 b(generated)g(include)g(file)f(`)p Ft(calc.h)p Fs(')i(contains)d(the)i(exception)f(definitions:)120 1773 y Ft(#ifndef)24 b(__calc_h_)120 1823 y(#define)g(__calc_h_)120 1873 y(/*)120 1923 y(**)h(this)f(file)h(was)f(automatically)g (generated)g(for)h(C)120 1973 y(**)g(from)f(the)h(interface)f(spec)g (calc.isl.)120 2022 y(*/)120 2122 y(#ifndef)g(__ilu_c_h_)120 2172 y(#include)g("ilu-c.h")120 2222 y(#endif)120 2321 y(extern)g(ILU_C_ExceptionCode)98 b(_calc__Exception_DivideByZero;)120 2371 y(#define)24 b(ex_calc_DivideByZero)f (_calc__Exception_DivideByZero)120 2471 y(typedef)h(ilu_integer)g (calc_numerator;)120 2521 y(typedef)g(calc_numerator)g (calc_DivideByZero;)120 2620 y(typedef)g(ILU_C_OBJECT)g(calc_self;)p eop %%Page: 47 48 47 47 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(47)120 183 y Ft(calc_self)24 b(calc_self__CreateTrue)f(\()i (char)f(*id,)h(ilu_Server)f(server,)195 233 y(void)g(*)h(user_data\);) 120 283 y(calc_self)f(calc_self__CreateFromSBH)f(\()i(char)f(*)h(sbh,)f (ILU_C_ENVIRONMENT)g(*Env)g(\);)120 382 y(ilu_integer)g (calc_self_Div\()f(calc_self,)h(ilu_integer,)g(ilu_integer,)195 432 y(ILU_C_ENVIRONMENT)f(*Env)i(\);)120 532 y(extern)f(void)h (calc__BindExceptionValue)e(\(ILU_C_ENVIRONMENT)g(*,)h(ilu_Exception,) 120 582 y(...\);)120 681 y(#endif)62 799 y Fs(The)15 b(method)g(implementation)e(for)i Ft(Div)g Fs(in)g(the)f(true)h(module) g(must)f(detect)h(the)g(divide-by-zero)e(condition)g(and)0 862 y(raise)e(the)g(exception:)120 952 y Ft(long)25 b (server_calc_self_Div)e(\(calc_self)h(h,)g(ilu_integer)g(u,)h (ilu_integer)f(v,)792 1002 y(ILU_C_ENVIRONMENT)g(*s\))120 1052 y({)170 1101 y(calc_numerator)f(n)i(=)g(9;)170 1201 y(if)g(\()f(v)h(==)g(0)g(\))220 1251 y({)269 1301 y(s->_major)g(=)f (ILU_C_USER_EXCEPTION;)269 1350 y(s->returnCode)g(=)h (ex_calc_DivideByZero;)269 1400 y(s->ptr)g(=)g(\(void)f(*\))h (malloc\(sizeof\(calc_numerator\)\);)269 1450 y(*\(\(calc_numerator)f (*\))g(\(s->ptr\)\))h(=)f(n;)269 1500 y(s->freeRoutine)g(=)h(\(void)f (\(*\))h(\(void)f(*\)\))h(0;)269 1550 y(return\()g(u)g(\);)220 1599 y(})170 1649 y(else)220 1699 y(return\()f(u)h(/)g(v)f(\);)120 1749 y(})62 1867 y Fs(When)10 b(freeing)g(the)g(parameter)i(requires)e (more)g(than)g(just)f(freeing)h Ft(s->ptr)p Fs(,)h(a)g(non-NULL)e Ft(s->freeRoutine)g Fs(is)0 1929 y(provided)j(that)h(does)f(the)h (additional)f(freeing;)i Ft(s->freeRoutine)e Fs(is)g(given)h(one)g (argument,)h Ft(s->ptr)p Fs(,)g(and)f(returns)0 1992 y Ft(void)p Fs(.)62 2082 y(The)f(generated)f(stubs)f(offer)i(as)g(a)g (convenience)f(a)h(variadic)f(procedure)g(\()p Ft (calc__BindExceptionValue)p Fs(\))f(that)0 2144 y(can)k(be)h(used)f(to) f(raise)i(any)f(exception)f(declared)h(in)g(the)g(interface.)21 b(For)14 b(an)g(exception)g(that)f(has)h(no)g(parameter,)i(this)0 2206 y(procedure)11 b(takes)h(just)e(two)h(actual)g(arguments.)h(For)g (an)g(exception)e(with)g(a)i(parameter,)h(the)e(parameter)i(value)e(is) g(given)0 2268 y(as)g(the)g(third)g(actual)g(argument,)g(using)f(the)h (usual)g(calling)f(convention)g(for)h(passing)f Ft(IN)h Fs(arguments)g(of)h(its)e(type.)h(Using)0 2331 y(this)f(procedure,)h (the)g(above)g(code)g(would)f(be:)120 2421 y Ft(long)25 b(server_calc_self_Div)e(\(calc_self)h(h,)g(ilu_integer)g(u,)h (ilu_integer)f(v,)792 2471 y(ILU_C_ENVIRONMENT)g(*s\))120 2521 y({)170 2570 y(calc_numerator)f(n)i(=)g(9;)170 2670 y(if)g(\()f(v)h(==)g(0)g(\))p eop %%Page: 48 49 48 48 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(48)220 183 y Ft({)269 233 y(calc__BindExceptionValue\(s,)23 b(ex_calc_DivideByZero,)g(n\);)269 283 y(return\()i(u)g(\);)220 333 y(})170 382 y(else)220 432 y(return\()f(u)h(/)g(v)f(\);)120 482 y(})62 625 y Fs(The)11 b(exception)f(is)h(sent)g(back)g(to)g(the)f (client,)h(which)g(can)g(detect)g(it)g(thusly:)170 727 y Ft(...)170 777 y(calc_self)24 b(instance;)170 827 y (ILU_C_ENVIRONMENT)f(s;)170 877 y(ilu_integer)h(i,)g(j;)170 927 y(ilu_integer)g(val;)170 976 y(...)170 1026 y(instance)g(=)h (calc_self__CreateFromSBH)d(\(sbh,)j(&s\);)170 1126 y(if)g(\(!)f (ILU_C_SUCCESSFUL\(&s\)\))f({)220 1176 y(fprintf)h(\(stderr,)g ("CreateFromSBH\(\045s\))f(raised)i(\045s\\n",)269 1225 y(sbh,)g(ILU_C_EXCEPTION_ID)e(\(&s\))i(\);)220 1275 y(exit\(1\);)170 1325 y(})170 1425 y(val)f(=)h(calc_self_Div)f(\(instance,)g(i,)h(j,)f (&s\);)170 1524 y(/*)h(check)f(to)h(see)f(if)h(an)g(exception)f (occured)g(*/)170 1624 y(if)h(\(!)f(ILU_C_SUCCESSFUL\(&s\)\))f({)220 1674 y(/*)h(report)h(exception)f(to)g(user)h(*/)220 1724 y(char)f(*p;)220 1823 y(p)g(=)h(ILU_C_EXCEPTION_ID)e(\(&s\);)220 1923 y(if)h(\(p)h(==)g(ex_calc_DivideByZero\))e({)269 1973 y(calc_numerator)h(*ip;)269 2022 y(ip)h(=)g(\(calc_numerator)e (*\))i(ILU_C_EXCEPTION_VALUE)e(\(&s\);)269 2072 y(fprintf)i(\(stderr,)f ("\045s)g(signaled:)49 b(numerator)25 b(=)f(\045d\\n",)h(p,)f(*ip\);) 269 2122 y(})220 2172 y(else)g({)269 2222 y(/*)h(odd)g(exception)f(at)h (this)f(point)h(*/)269 2271 y(fprintf)g(\(stderr,)f("Unexpected)g (<\045s>)g(on)h(call)g(to)f(Div.\\n",)g(p\);)269 2321 y(})220 2371 y(/*)g(free)h(up)g(any)f(transient)g(exception)g(data)h (*/)220 2421 y(ILU_C_EXCEPTION_FREE)e(\(&s\);)220 2471 y(})170 2521 y(else)h({)220 2570 y(/*)g(no)h(exception)f(-)h(print)f (the)h(result)f(*/)220 2620 y(printf\()g("result)g(is)h(\045d)g(\\n",)f (val)h(\);)220 2670 y(})p eop %%Page: 49 50 49 49 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(49)170 183 y Ft(...)0 295 y Fs(For)11 b(more)h(complex)f (exception)f(types,)h(it)g(is)f(often)h(helpful)f(to)h(define)g(a)g (procedure)g(in)g(C)h(specifically)e(to)h(raise)g(them.)0 417 y Fn(3.2.8.9)23 b(Garbage)15 b(Collection)f(of)h(C)g(Instances)62 521 y Fs(Both)20 b(true)g(and)f(surrogate)g(instances)g(of)h Ft(ILU_C_OBJECT)f Fs(are)i Fp(reference-counted)5 b Fs(;)24 b(that)19 b(is,)j(each)e(instance)0 583 y(contains)10 b(a)i(counter)f(which)g(indicates)g(how)g(many)h(uses)f(are)h (currently)f(being)g(made)h(of)g(that)f(object.)h(When)f(you)g(wish)0 646 y(to)k(use)g(an)h(object)f(for)g(another)g(purpose,)i(you)d(should) g(increment)i(the)f(reference)i(count)d(by)i(calling)e(the)h(procedure) 0 708 y Ft(CORBA_Object_duplicate)p Fs(,)8 b(which)g(will)h(return)f(a) i(copy)f(of)g(the)g(instance)f(that)h(you)f(can)i(use)e(for)i(the)f (new)g(purpose.)0 770 y(When)k(you)g(are)g(finished)f(with)h(an)g (instance,)g(you)g(should)e(call)i Ft(CORBA_Object_release)f Fs(to)h(release)g(your)g(claim)0 833 y(on)e(the)g(object's)f (resources.)h(When)g(the)g(reference)i(count)d(of)h(the)g(object)g (returns)f(to)h(zero,)h(the)f(object)f(is)h(finalized.)62 920 y(For)k(COLLECTIBLE)g(true)f(instances,)h(the)g(ILU)f(kernel)h (will)f(maintain)g(a)h(distributed)d(reference)k(count)e(on)g(the)0 982 y(instance)g(automatically.)22 b(That)14 b(is,)i(so)f(long)f(as)h (any)f(client)h(of)g(the)f(server)h(has)g(a)h(reference)g(to)e(the)h (object,)h(the)e(true)0 1044 y(instance)c(will)g(not)h(be)g(finalized.) 0 1166 y Fo(3.2.9)26 b(Issues)16 b(in)f(Mapping)f(OMG)g(IDL)i(to)f(C)62 1270 y Fs(The)c(ILU)f(system)h(does)f(not)g(support)f(the)h(OMG)h(IDL)g (type)f Ft(fixed)p Fs(,)h(which)f(is)g(a)h(representation)e(of)i (binary-coded-)0 1332 y(decimal,)h(or)f(BCD.)h(We)f(have)h(no)e (immediate)i(plans)e(to)h(support)f(it)g(in)h(the)g(future.)0 1467 y Fu(3.3)30 b(Access)14 b(to)h(Standard)g(ILU)h(Features)0 1606 y Fo(3.3.1)26 b(Servers)15 b(and)g(Ports)62 1709 y Fs(The)d(C)g(type)g(which)f(represents)g(an)h(ILU)f Fp(kernel)h(server)k Fs(is)11 b Ft(ILU_C_Server)p Fs(.)h(True)g (servers)g(can)g(be)g(created)g(with)0 1772 y(the)f(function)f Ft(ILU_C_InitializeServer)p Fs(.)62 1859 y(Instances)i(of)h Ft(ILU_C_Server)f Fs(are)h(reference-counted,)h(in)e(the)h(same)g(way)g (that)f(instances)f(of)i Ft(ILU_C_OBJECT)0 1921 y Fs(are.)49 b(Call)23 b Ft(ILU_C_Server_duplicate)e Fs(and)i Ft (ILU_C_Server_release)f Fs(to)h(keep)g(track)g(of)h(your)f(usage)0 1983 y(of)g Ft(ILU_C_Server)f Fs(values.)45 b Ft(ILU_C_CloseServer)21 b Fs(and)i(its)f(relatives)f(perform)j(functions)d(orthogonal)g(to)0 2046 y Ft(ILU_C_Server_release)p Fs(.)10 b(The)g(actual)h(server)f (will)g(be)h(destroyed)e(only)h(when)g(there)h(is)f(no)g(reason)h(to)f (maintain)g(it;)0 2108 y(in)h(addition)e(to)i(the)g(reference)h (counting)e(introduced)f(here,)j(the)f(existence)g(of)g Ft(ILU_C_OBJECT)f Fs(values)h(in)f(that)h(server)0 2170 y(count)f(as)i(another)e(reason)h(to)g(maintain)f(the)h(server.)62 2257 y(A)i(kernel)g(server)g(can)g(export)f(itself)g(via)h(multiple)e (ports.)16 b Ft(ILU_C_InitializeServer)11 b Fs(may)i(create)h(one,)f (and)0 2320 y Ft(ILU_C_AddPort)d Fs(can)i(be)f(called)g(to)g(create)g (more.)0 2442 y Fn(3.3.1.1)23 b(Object)16 b(Tables)62 2545 y Fs(It)8 b(is)f(sometimes)h(useful)f(to)g(have)h(a)g(server)g (create)g(true)g(objects)f(only)f(when)i(they)f(are)h(mentioned)f(by)h (a)g(client's)e(actual)0 2608 y(invocation)12 b(of)h(a)h(method)f(on)h (them.)19 b(This)12 b(is)h(allowed)g(in)g(ILU)h(by)f(an)g(interface)h (called)g(an)f Fp(object)g(table)p Fs(,)h(associated)0 2670 y(with)c(a)i(server.)g(An)f(object)g(table)g(contains)f(two)h (functions,)f(one)h(of)g(which)g(creates)h(a)f(new)h(true)f(instance)f (when)h(called)p eop %%Page: 50 51 50 50 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(50)0 183 y(with)12 b(an)g(instance)g(handle,)h(and)f(the)g (other)h(of)f(which)g(frees)h(the)g(object)e(table)i(when)f(the)g (server)h(is)f(destroyed.)j(Object)0 246 y(tables)d(are)i(associated)f (with)f(servers)h(when)g(the)g(server)g(is)g(created.)18 b(A)13 b(value)g(of)g(type)g Ft(ILU_C_ObjectTable)f Fs(may)0 308 y(be)i(created)g(by)f(a)h(call)g(on)f Ft(ILU_C_CreateObjectTable)p Fs(;)g(see)h(the)f(API)h(reference)h(for)f(more)g(information)f(about)0 370 y(this)d(function.)0 541 y Fn(3.3.1.2)23 b(Server)16 b(Relocation)62 661 y Fs(It)g(is)f(sometimes)h(useful)f(to)g(have)h(a)g (`dummy')g(server,)h(that)e(will)g(redirect)h(any)f(requests)g(to)g(it) h(to)f(a)h(real)g(server)0 723 y(somewhere)i(else.)30 b(This)16 b(can)i(be)f(used)g(for)h(load)f(balancing,)h(automatic)f (start-up)g(of)g(services,)i(redirecting)e(name)0 785 y(service,)j(code)e(migration,)h(and)f(other)g(various)f(purposes.)31 b(ILU)18 b(supports)e(this)h(via)h(a)g(mechanism)g(called)g Fp(server)0 848 y(relocation)p Fs(,)10 b(which)h(can)g(be)h(used)e(in)h (C)h(via)f(the)g(function)e Ft(ILU_C_SetServerRelocationProc\(\))p Fs(.)0 1019 y Fo(3.3.2)26 b(Threading)14 b(and)g(Event)h(Loops)62 1138 y Fs(The)j(ILU)f(C)h(runtime)f(allows)f(the)h(use)g(of)h(several)f (different)g(kernel)h(threads)e(packages,)k(application-specific)0 1200 y(threads)10 b(packages,)h(or)g(various)f(kinds)g(of)h(event)g (loops.)f(See)h(Chapter)g(12)g([Threads)g(and)f(Event)g(Loops],)h(page) g(186)f(for)0 1263 y(a)i(general)f(discussion)d(of)k(threads)e(and)h (event)g(loops)f(in)h(ILU.)62 1365 y(The)19 b(two)g(macros)h Ft(ILU_C_USE_OS_THREADS)d Fs(and)i Ft(ILU_C_FINISH_MAIN_THREAD)f Fs(\(see)h(Section)g(3.5.6)0 1428 y([Server)g(Manipulation],)e(page)h (66\))f(are)i(provided)d(to)h(allow)g(use)g(of)h(standard)f(Win32)f (threads,)j(POSIX)f(threads,)0 1490 y(or)e(Solaris)g(threads.)26 b(Application-specific)13 b(threads)j(packages)g(can)h(also)e(be)i (used)e(by)h(explicitly)e(setting)h(the)h Fp(wait)0 1552 y(tech)p Fs(,)e Fp(lock)f(tech)p Fs(,)i(and)e Fp(main)g(loop)i Fs(via)e(calls)g(on)g(the)h(ILU)f(kernel)g(\(see)h Fr(h)p Fs(undefined)p Fr(i)e Fs([],)j(page)e Fr(h)p Fs(undefined)p Fr(i)f Fs(for)i(more)0 1615 y(information)h(on)i(these)f(functions\),)h (then)f(instructing)e(the)j(C)g(runtime)f(on)g(how)g(to)g(fork)h(a)g (new)g(thread)f(by)g(calling)0 1677 y Ft(ILU_C_SetFork)p Fs(.)62 1780 y(If)d(no)e(thread)h(technology)e(is)h(specified,)h(ILU's) g(C)g(runtime)g(will)e(operate)i(in)g(a)g(single-threaded)e(\(i.e.,)k (event)d(loop\))0 1842 y(manner,)i(using)d(the)i(default)f(ILU)h(main)g (loop.)g(That)f(main)h(loop)f(can)h(also)f(be)h(replaced)g(with)f(an)h (application-specific)0 1904 y(event)k(loop)g(system)h(if)f(desired;)j (this)d(is)g(often)g(useful)h(when)f(using)f(a)j(toolkit)c(like)j(Xt)f (or)h(Tk.)28 b(This)16 b(replacement)0 1966 y(works)11 b(by)f(calling)h(the)g(kernel)g(procedure)g Ft(ilu_SetMainLoop)p Fs(.)f(In)h(the)g(case)h(of)f(the)g(C)h(runtime,)f(moreover,)h(several) 0 2029 y(examples)k(of)h(how)e(to)h(set)g(the)g(event)g(loop)f(are)i (provided)e(in)h(the)g(directory)g(`)p Fp(ILUSRC)t Ft (/runtime/mainloop/)p Fs('.)0 2091 y(They)10 b(will)e(have)i(been)g (automatically)f(built)f(into)h(a)i(library)e(and)h(installed)e(into)h (`)p Fp(ILUHOME)t Ft(/lib/)p Fs(')h(if)g(configured)f(in)0 2153 y(during)h(the)i(build)e(process.)i(They)f(are)h(useful)e (examples)i(of)f(how)g(to)g(set)g(the)h(event)f(loop)f(to)h(override)g (the)g(ILU)h(default)0 2215 y(event)f(loop.)62 2318 y(For)26 b(single-threaded)d(operation,)28 b(the)d(main)g(loop)f(must)h(be)g (invoked.)52 b(This)24 b(can)i(be)f(done)f(with)h(either)0 2380 y Ft(ILU_C_Stoppable_Run)p Fs(,)11 b Ft(ILU_C_Run)p Fs(,)h Ft(ILU_C_StoppableRun)p Fs(,)f(or)h Ft(ILU_C_FINISH_MAIN_THREAD) e Fs(\(see)0 2443 y(Section)h(3.5.6)g([Server)h(Manipulation],)e(page)h (66)g(---)h(which)e(is)h(woefully)f(incomplete)g(and)h(out)g(of)g (date\).)62 2545 y(For)17 b(multi-threaded)e(operation,)i(no)f(main)g (loop)g(need)g(---)h(or)f(even)h(really)f(can)g(---)h(be)f(invoked.)26 b(Some)17 b(of)f(the)0 2608 y(aforementioned)c Ft(")p Fs(main)g(loop)p Ft(")f Fs(procedures)h(also)f Ft(")p Fs(work)p Ft(")h Fs(in)g(multi-threaded)f(runtimes)g(---)i(they)f (simply)f(block)g(the)0 2670 y(calling)f(thread.)p eop %%Page: 51 52 51 51 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(51)0 183 y Fo(3.3.3)26 b(Custom)15 b(Records)62 287 y Fs(Custom)c(record)g(support)e(in)i(the)f(ILU)h(C)h(runtime)e (provides)g(support)f(for)i(replacing)f(the)h(default)f(generated)h (record)0 349 y(type)g Ft(R)g Fs(with)f(a)i(different)e(struct)h(type)f Ft(S)p Fs(.)i Ft(S)f Fs(must)g(have)g(a)h(field)f(of)g(type)f Ft(R)i Fs(as)f(its)f(first)h(field.)62 436 y(Custom)c(record)g(support) g(for)g(a)g(particul)o(ar)g(ISL)g(record)g(typ)o(e)g(can)g(be)g(sp)o (ecified)g(by)f(callin)o(g)h Ft(ILU_)o(C_Register)o(CustomRecor)o (d\(\))0 499 y Fs(on)j(the)g Ft(CORBA_TypeCode)f Fs(value)h(for)g(the)g (type.)h(Note)f(that)f(this)g(allows)h(you)f(to)h(register)g(a)g (function)f(to)h(be)g(called)g(just)0 561 y(before)j(marshalling)f(the) h(value)g(to)f(another)h(address)g(space)g(\(among)g(other)g (functions\).)i(This)e(`pre-output')f(function)0 623 y(may)k(be)f(called)g(more)h(than)f(once)g(on)g(the)g(same)h(call,)h (if)e(the)g(protocol)f(selected)h(requires)g(sizing)f(of)i(arguments.) 23 b(It)0 686 y(should)10 b(be)h(written)f(so)h(that)f(repeated)i (calls)e(on)h(the)g(same)h(value)f(have)g(no)g(effect.)0 807 y Fo(3.3.4)26 b(Custom)15 b(Surrogates)62 911 y Fs(Custom)f (surrogates)f(allow)g(the)g(user)h(to)f(specify)g(custom)h(surrogate)f (object)g(types)g(which)g(may)h(have)g(additional)0 973 y(functionality)f(in)i(terms)h(of)f(caching)g(or)h(other)f(side)g (effects,)i(and)e(have)h(them)f(created)h(instead)f(of)g(the)g(default) g(ILU)0 1035 y(surrogate)c(object)g(type)g(when)g(an)h(instance)f(is)g (received.)i(This)d(functionality)f(is)j(provided)e(in)h(the)h(C)g (runtime)f(with)f(the)0 1098 y(function)g Ft (ILU_C_RegisterCustomSurrogateType)p Fs(.)0 1219 y Fo(3.3.5)26 b(String)14 b(Binding)g(Handle)g(Formation)62 1323 y Fs(When)g(a)h(client)e(program)i(is)f(making)g(a)g(call)g(on)g(an)h (object)e(which)h(is)g(provided)f(via)h(an)g(object)g(table,)h(it)f(is) g(often)0 1385 y(convenient)c(to)i(allow)f(the)g(client)g(to)h(form)g (an)g(appropriate)f(string)f(binding)g(handle)i(for)g(the)f(object,)h (then)f(instantiate)f(a)0 1447 y(surrogate)h(instance)g(from)i(that)e (string)g(binding)f(handle.)j(The)e(function)g Ft(ILU_C_FormSBH)g Fs(is)g(provided)g(to)g(aid)h(client)0 1510 y(programs)f(in)g(forming)g (string)e(binding)h(handles.)0 1631 y Fo(3.3.6)26 b(Simple)14 b(Binding)62 1735 y Fs(The)g(ILU)f(C)h(runtime)g(provides)e(the)h (standard)g(interface)h(to)f(ILU's)g Fp(simple)g(binding)h Fs(mechanism.)19 b(The)14 b(function)0 1797 y Ft(ILU_C_PublishObject)e Fs(publishes)f(a)j(true)f(instance;)h Ft(ILU_C_WithdrawObject)e Fs(allows)g(it)h(to)g(be)h(withdrawn)0 1859 y(from)i(the)f(registry.)23 b(The)15 b(function)f Ft(ILU_C_LookupObject)g Fs(finds)h(and)g(returns) g(an)g(instance)f(with)h(the)g(specified)0 1922 y(object)10 b(ID.)0 2043 y Fo(3.3.7)26 b(Identities)14 b(and)g(Passports)62 2147 y Fs(See)c Ft(ILU_C_CreatePassport)p Fs(,)e Ft(ILU_C_AddIdentity)p Fs(,)h(and)g Ft(ILU_C_DestroyPassport)e Fs(for)j(managing)0 2209 y Ft(ilu_Passport)p Fs(s.)62 2296 y(To)15 b(pass/receive)g(an)g Ft(ilu_Passport)f Fs(in)h(a)h(call,)g(the)f(caller)g(calls)g Ft(ILU_C_SetPassportContext\()p Fp(pp)r Ft(\))e Fs(to)0 2359 y(store)g Fp(pp)j Fs(in)d(a)i(special)e(hidden)g(per-thread)g (slot,)h(and)g Ft(ILU_C_SetPassportContext\(\))d Fs(to)j(retrieve)g (it.)19 b Fp(pp)c Fs(will)0 2421 y(remain)j(in)g(that)f(slot)g(until)f (another)h(call)h(to)f Ft(ILU_C_SetPassportContext)f Fs(overwrites)h(it.)31 b(The)18 b(callee)g(calls)0 2483 y Ft(ILU_C_CallerIdentity\(\))12 b Fs(in)i(a)h(true)f(method)f(to)h (fetch)g Fp(pp)i Fs(from)f(the)f(slot.)19 b(If)c(the)f(caller)g(and)g (callee)g(are)h(both)0 2545 y(written)9 b(in)h(C,)i(and)e(the)g(true)h (method)f(has)g(been)g(invoked)g(directly)f(from)i(the)f(same)h (thread,)g(the)f(returned)h(value)f(will)f(be)0 2608 y(whatever)14 b(passport)e(has)i(been)g(set)g(with)f Ft(ILU_C_SetPassportContext\(\))p Fs(;)g(otherwise)f(it)i(will)f(be)h (the)g(passport)0 2670 y(passed)d(by)f(the)h(caller.)p eop %%Page: 52 53 52 52 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(52)0 183 y Fo(3.3.8)26 b(Pipelining)14 b(in)g(C)62 287 y Fs(A)f(pipeline)e(\(see)i(Section)f(1.3.4)h([Pipelining],)f(page) g(9\))h(is)f(represented)h(in)f(C)h(by)f(an)h Ft(ILU_C_Pipeline)p Fs(,)f(and)h(is)0 349 y(created)g(by)f(calling)g Ft (ILU_C_CreatePipeline)p Fs(.)h(A)g(pipeline)e(is)h(associated)g(with)f (calls)h(via)h(a)f(special)g(hidden)g(per-)0 412 y(thread)d(slot;)f (this)g(slot)g(is)h(accessed)g(with)f Ft(ILU_C_SetPipelineContext)f Fs(and)i Ft(ILU_C_GetPipelineContext)p Fs(.)0 474 y(When)i(the)g Ft(ILU_C_Pipeline)f Fs(is)h(no)f(longer)h(needed,)g(the)g(client)g (calls)f Ft(ILU_C_ReleasePipeline)p Fs(.)0 594 y Fo(3.3.9)26 b(Call)14 b(Order)h(Preservation)g(in)g(C)62 698 y Fs(A)26 b(serializer)g(\(see)g(Section)g(1.3.5)g([Call)g(Order)h (Preservation],)i(page)d(10\))g(is)g(represented)f(in)h(C)g(by)g(an)0 760 y Ft(ILU_C_Serializer)p Fs(,)k(and)c(is)g(created)h(by)g(calling)e Ft(ILU_C_CreateSerializationContext)p Fs(.)55 b(A)27 b(se-)0 822 y(rializer)i(is)g(associated)f(with)g(calls)g(via)h(a)g (special)g(hidden)f(per-thread)h(slot;)36 b(this)28 b(slot)g(is)h (accessed)g(with)0 884 y Ft(ILU_C_SetSerializationContext)7 b Fs(and)g Ft(I)o(LU_C_GetSer)o(ializationC)o(ontext)p Fs(.)g(When)g(the)g Ft(ILU_C_Serializer)0 947 y Fs(is)k(no)f(longer)h (needed,)g(the)g(client)g(calls)f Ft(ILU_C_ReleaseSerializer)p Fs(.)0 1067 y Fo(3.3.10)25 b(Batching)15 b(in)f(C)62 1170 y Fs(A)h(batcher)g(\(see)g(Section)g(1.3.6)g([Batching],)h(page)f (11\))f(is)h(represented)f(in)h(C)g(by)g(an)g Ft(ILU_C_Batcher)p Fs(,)g(and)g(is)0 1233 y(created)g(by)g(calling)f Ft (ILU_C_CreateBatcher)p Fs(.)21 b(A)15 b(batcher)f(is)h(associated)f (with)g(calls)g(via)g(a)i(special)e(hidden)g(per-)0 1295 y(thread)g(slot;)h(this)e(slot)h(is)g(accessed)g(with)g Ft(ILU_C_SetBatcherContext)e Fs(and)j Ft(ILU_C_GetBatcherContext)p Fs(.)0 1357 y(The)d(application)e(can)i(call)g Ft(_C_PushBatcher)f Fs(to)h(initiate)e(delivery)h(all)h(of)g(all)g(call)f(messages)h (buffered)g(for)h(a)f(given)0 1419 y(batcher.)f(When)g(the)g Ft(ILU_C_Batcher)f Fs(is)h(no)g(longer)f(needed,)i(the)f(client)f (calls)h Ft(ILU_C_ReleaseBatcher)p Fs(.)0 1552 y Fu(3.4)30 b(Building)14 b(C/ILU)h(Applications)0 1688 y Fo(3.4.1)26 b(Using)14 b(the)h(ILU)h(C)f(Stubber)62 1792 y Fs(To)i(generate)f(C)h (stubs)f(from)h(an)f(ISL)h(file,)h(use)f(the)f(program)h(c-stubber.)27 b(Four)17 b(files)f(are)h(generated)f(from)h(the)0 1854 y(`)p Ft(.isl)p Fs(')11 b(file:)37 1941 y Fr(\017)30 b Fs(`)p Fp(interface-name)p Ft(.h)p Fs(')14 b(contains)e(the)h (definitions)e(for)i(the)g(types)g(and)g(procedures)f(defined)h(by)g (the)g(interface)g(and)90 2004 y(used)e(by)g(the)f(generated)h(stubs.) 37 2076 y Fr(\017)30 b Fs(`)p Fp(interface-name)p Ft(-common.c)p Fs(')11 b(contains)f(the)h(general)g(code)g(used)g(by)g(both)f(client)h (and)g(server;)g(and)37 2149 y Fr(\017)30 b Fs(`)p Fp(interface-name)p Ft(-surrogate.c)p Fs(')11 b(contains)f(the)h(client-side)f(and)h (general)g(code)g(for)g(the)g(interface;)g(and)37 2221 y Fr(\017)30 b Fs(`)p Fp(interface-name)p Ft(-true.c)p Fs(')12 b(contains)d(the)i(server-side)g(stubs)f(and)h(code)g(for)g (the)g(interface.)62 2333 y(Typically,)f(clients)g(of)h(a)h(module)f (never)g(have)g(a)h(need)f(for)g(the)g(`)p Fp(interface-name)p Ft(-true.c)p Fs(')h(file.)120 2420 y Ft(\045)25 b Fj(c-stubber)f (foo.isl)120 2470 y Ft(header)g(file)h(for)g(interface)f(foo)g(to)h (./foo.h...)120 2520 y(common)f(code)h(for)g(interface)f(foo)g(to)h (./foo-common.c...)120 2570 y(code)g(for)f(surrogate)g(stubs)h(of)f (interface)g(foo)h(to)g(./foo-surrogate.c...)120 2620 y(code)g(for)f(true)h(stubs)f(of)h(interface)f(foo)h(to)f (./foo-true.c...)120 2669 y(\045)p eop %%Page: 53 54 53 53 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(53)0 183 y Fn(3.4.1.1)23 b(Command-line)14 b(Options)62 287 y Fs(The)d(program)h Ft(c-stubber)e Fs(supports)g(the)h(following)e(options:)37 374 y Fr(\017)30 b Ft(-I)11 b Fp(directory)j Fs(--)f(add)g Fp(directory)h Fs(to)e(the)g(list)g(of)h(directories)e(to)h(search)h(for)g(interface)g (definition)d(files.)16 b(Note)c(that)90 436 y(the)f Fp(directory)i Fs(must)d(be)i(separated)f(from)g(the)g Ft(-I)g Fs(with)g(whitespace,)f(unlike)g(the)h(convention)f(for)h(C)h (compilers.)37 511 y Fr(\017)30 b Ft(-dir)11 b Fp(directory)g Fs(--)f(put)f(output)f(files)h(in)g Fp(directory)p Fs(.)i(Will)d (attempt)i(to)f(create)h Fp(directory)h Fs(with)e Ft("mkdir)i Fp(directory)r Ft(")90 573 y Fs(if)g(not)g(already)g(present.)37 648 y Fr(\017)30 b Ft(-true)11 b Fs(--)h(generate)f(true)g(code.)37 723 y Fr(\017)30 b Ft(-tname)11 b Fp(filename)j Fs(--)d(put)g(true)g (code)g(in)g(file)g(called)g Fp(filename)p Fs(.)37 798 y Fr(\017)30 b Ft(-common)11 b Fs(--)g(generate)h(common)f(code.)37 872 y Fr(\017)30 b Ft(-cname)11 b Fp(filename)j Fs(--)d(put)g(common)g (code)h(in)e(file)h(called)g Fp(filename)p Fs(.)37 947 y Fr(\017)30 b Ft(-surrogate)10 b Fs(--)i(generate)f(surrogate)g(code.) 37 1022 y Fr(\017)30 b Ft(-sname)11 b Fp(filename)j Fs(--)d(put)g (surrogate)f(code)i(in)e(file)h(called)g Fp(filename)p Fs(.)37 1097 y Fr(\017)30 b Ft(-headers)11 b Fs(--)g(generate)h(header) f(code.)37 1171 y Fr(\017)30 b Ft(-hname)11 b Fp(filename)j Fs(--)d(put)g(header)g(code)h(in)e(file)h(called)g Fp(filename)p Fs(.)37 1246 y Fr(\017)30 b Ft(-removefirst)10 b Fs(--)i(for)f (generated)g(files,)g(remove)h(file)f(before)g(generating)g(a)g(new)g (version)f(of)i(the)f(file.)37 1321 y Fr(\017)30 b Ft (-nodefaulttrueclass)12 b Fs(--)i(for)g(true)f(code,)i(don't)d (generate)i(the)f(commands)h(which)f(creates)g(a)h(default)f(true)90 1383 y(class.)e(This)f(avoids)g(pulling)f(in)i(references)h(to)f (possibly)e(unused)h(default)h(true)g(methods.)37 1458 y Fr(\017)30 b Ft(-renames)11 b Fp(filename)21 b Fs(--)d(use)g(the)g (specified)g(renaming)g(file)g Fp(renames-file)p Fs(.)32 b(See)19 b(the)f(following)e(section)i(on)90 1520 y(``Tailoring)10 b(Identifier)g(Names'')i(for)g(more)f(information)f(on)h(this.)62 1632 y(If)i(none)g(of)f Ft(-true)p Fs(,)h Ft(-surrogate)p Fs(,)g Ft(-common)p Fs(,)g Ft(-headers)f Fs(is)g(specified,)h(the)f (default)g(action)g(is)g(to)g(produce)h(all)0 1694 y(of)e(them.)h (However,)f(if)g(any)g(of)h(those)e(switches)g(is)g(explicitly)g (specified,)g(only)h(those)f(specified)g(will)g(be)i(produced.)0 1819 y Fn(3.4.1.2)23 b(Tailoring)14 b(Identifier)h(Names)62 1923 y Fs(The)f(option)e Ft(-renames)e Fp(renames-filename)17 b Fs(may)d(be)g(used)f(with)g Ft(c-stubber)g Fs(to)g(specify)g (particular)g(C)h(names)0 1985 y(for)d(ISL)h(types.)62 2072 y(It)f(is)g(sometimes)g(necessary)f(to)h(have)g(the)g(C)h(names)f (of)g(an)g(ILU)g(interface)g(match)h(some)f(other)g(naming)f(scheme.)i (A)0 2134 y(mechanism)h(is)f(provided)f(to)h(allow)f(the)h(programmer)i (to)e(specify)f(the)i(names)f(of)h(C)g(language)e(artifacts)h (directly,)g(and)0 2197 y(thus)e(override)h(the)g(automatic)f(ISL)i(to) f(C)g(name)h(mappings.)62 2284 y(To)i(do)g(this,)g(you)f(place)h(a)h (set)e(of)h(synonyms)f(for)h(ISL)h(names)f(in)f(a)i Fp(renames-file)p Fs(,)g(and)f(invoke)f(the)h Ft(c-stubber)0 2346 y Fs(program)d(with)f (the)g(switch)g Ft(-renames)p Fs(,)h(specifying)e(the)i(name)g(of)g (the)f(renames-file.)i(The)f(lines)f(in)g(the)h(file)f(are)i(of)e(the)0 2408 y(form)120 2496 y Fp(construct)k(ISL-name)h(C-name)0 2608 y Fs(where)d Fp(construct)k Fs(is)11 b(one)h(of)g Ft(method)p Fs(,)g Ft(exception)p Fs(,)g Ft(type)p Fs(,)h Ft(interface)p Fs(,)f(or)g Ft(constant)p Fs(;)g Fp(ISL-name)j Fs(is)d(the)g(name)0 2670 y(of)17 b(the)g(construct,)h(expressed)f (either)g(as)h(the)f(simple)f(name,)k(for)e(interface)f(names,)j(the)d (concatenation)f Fp(interface-)p eop %%Page: 54 55 54 54 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(54)0 183 y Fp(name)p Ft(.)p Fp(construct-name)20 b Fs(for)d(exceptions,)h(types,)g(and)f(constants,)h(or)f Fp(interface-name)p Ft(.)p Fp(type-name)p Ft(.)p Fp(method-name)0 246 y Fs(for)11 b(methods;)f(and)h Fp(C-name)k Fs(is)c(the)g(name)h (the)f(construct)f(should)f(have)i(in)g(the)g(generated)g(C)h(code.)f (For)h(example:)120 336 y Ft(#)25 b(change)f("foo_r1")g(to)h(plain)f ("R1")120 386 y(type)h(foo_r1)f(r1)120 436 y(#)h(change)f(name)h(of)f (method)h("m1")f(to)h("method1")120 486 y(method)f(foo_o1_m1)g(method1) 0 605 y Fs(Lines)8 b(beginning)g(with)g(the)h(`sharp')g(character)h(`)p Ft(#)p Fs(')g(are)g(treated)f(as)g(comment)h(lines,)f(and)g(ignored,)g (in)f(the)h(renames-file.)62 696 y(This)16 b(feature)h(of)g(the)f Ft(c-stubber)g Fs(should)f(be)i(used)f(as)g(little)g(and)g(as)h (carefully)f(as)h(possible,)f(as)h(it)f(can)h(cause)0 758 y(confusion)11 b(for)i(readers)g(of)f(the)h(ISL)g(interface,)g(in)f (trying)g(to)g(follow)f(the)i(C)g(code.)j(It)c(can)h(also)f(create)h (name)g(conflicts)0 820 y(between)e(different)g(modules,)f(unless)g (names)i(are)g(carefully)f(chosen.)0 955 y Fo(3.4.2)26 b(Using)14 b(ILU)i(Modules)f(From)h(C)62 1063 y Fs(Before)d (manipulating)d(surrogate)h(objects,)h(a)g(client)f(module)g(must)h (first)f(call)h(a)g(runtime)f(initialization)e(procedure)0 1125 y Fp(Foo)r Ft(__Initialize)19 b Fs(for)h(each)g(ISL)g(interface)h Fp(Foo)g Fs(that)f(declares)g(object)f(types)g(whose)g(surrogates)g (are)i(to)e(be)0 1187 y(manipulated.)30 b(Additionally,)16 b(server)i(modules)f(must)g(also)g(call)h(server)g(initialization)c (procedures)j(\(see)h(previous)0 1250 y(section\).)c(These)e (initialization)d(calls)j(may)g(be)h(made)f(in)g(any)g(order,)h(and)f (each)h(procedure)f(may)h(be)f(called)g(more)h(than)0 1312 y(once.)18 b(However,)c(no)f(two)g(calls)g(may)h(be)f(done)g (concurrently)g(\(this)f(is)h(an)h(issue)e(only)h(for)g(those)g(using)f (some)h(sort)g(of)0 1374 y(multi-threading)c(package\).)62 1465 y(A)k(client)f(of)g(an)h(exported)f(module)g(may)h(obtain)e(an)i (object)e(instance)h(either)g(by)h(calling)e(a)i(method)f(which)g (returns)0 1527 y(the)g(instance,)h(or)g(by)f(calling)g Fp(TYPE)t Ft(__CreateFromSBH\(\))f Fs(on)h(the)h(string)e(binding)g (handle)h(of)h(an)g(instance.)i(Once)0 1589 y(the)c(object)g(instance,) f(which)h(is)g(typically)e(a)j(surrogate)f(instance,)f(but)h(may)h(in)e (fact)i(be)f(a)h(true)f(instance,)g(is)g(held)g(by)f(the)0 1652 y(client,)h(it)f(can)i(be)f(used)g(simply)f(by)h(making)f(method)h (calls)g(on)g(it,)g(as)g(shown)f(above.)0 1787 y Fo(3.4.3)26 b(Implementing)15 b(an)f(ILU)i(Module)e(With)h(C)62 1894 y Fs(This)8 b(section)g(will)g(outline)f(the)i(construction)e(of)h(a)i (true)e(module)h(exported)f(by)h(an)g(address)f(space.)j(For)e(the)g (example,)0 1957 y(we)k(will)f(demonstrate)g(the)g(calculator)g (interface)h(described)g(above.)j(We)d(will)e(also)i(use)f(the)h(CORBA) g(2.0)g(names)g(for)0 2019 y(standard)d(types)h(and)g(exceptions,)f(to) h(show)f(that)g(it)h(can)g(be)h(done.)62 2110 y(First,)f(some)h (runtime)e(initialization)e(of)k(the)e(server)i(stubs)e(must)g(be)h (done.)g(Call)h Fp(Foo)r Ft(__InitializeServer)d Fs(for)0 2172 y(every)k(ISL)h(interface)f Fp(Foo)i Fs(containing)c(an)i(object)f (type)h(implemented)f(by)h(the)g(address)f(space.)17 b(Due)c(to)g(a)g(misfeature)0 2234 y(in)h(the)h(current)g(C)g(support,) g(also)f(call)g Fp(Bar)t Ft(__InitializeServer)g Fs(for)h(every)g(ISL)g (interface)g Fp(Bar)k Fs(containing)13 b(an)0 2296 y(object)d(type)h (that)g(is)f(a)i(supertype)e(of)h(one)g(defined)g(in)g Fp(Foo)i Fs(\(if)e(you)g(don't,)f(the)h(server)h(will)e(get)h(a)g (runtime)g(fault)g(---)g(due)0 2359 y(to)e(calling)f(through)h(a)g (NULL)g(procedure)h(pointer)e(---)i(when)g(serving)e(a)i(call)f(on)g (an)h(inherited)e(method\);)i(this)e(may)i(cause)0 2421 y(you)i(to)g(have)h(to)f(supply)f(dummy)i(procedures,)g(as)f(explained) g(in)g(Section)g(3.2.8.2)h([Interface)g(Inheritance],)h(page)e(42.)0 2483 y(Also)e(call)g(any)g(client)g(initialization)e(procedures)i (needed)g(\(see)h(next)f(section\).)h(These)f(server)h(and)f(client)g (initialization)0 2545 y(calls)j(can)g(be)g(made)h(in)f(any)g(order,)h (and)f(each)h(initialization)c(procedure)j(can)h(be)f(called)g(more)h (than)e(once.)18 b(However,)0 2608 y(no)c(two)f(calls)h(may)g(be)g (done)g(concurrently)f(\(this)g(is)g(an)h(issue)f(only)g(for)i(those)e (using)g(some)h(sort)f(of)h(multi-threading)0 2670 y(package\).)p eop %%Page: 55 56 55 55 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(55)62 183 y(Then)18 b(we)g(create)h(an)f(instance)f(of)h Ft(calc_self)p Fs(.)31 b(We)18 b(then)g(make)g(the)g(string)f(binding)f (handle)h(of)h(the)g(object)0 246 y(available)c(by)h(printing)e(it)h (to)h(stdout.)21 b(Finally)13 b(the)i Ft(ILU_C_Run)f Fs(procedure)h(is)g(called.)22 b(This)14 b(procedure)h(listens)e(for)0 308 y(connections)c(and)i(dispatches)f(server)i(methods.)62 418 y(The)f(main)h(program)f(for)g(the)g(server)h(is)e(as)i(follows:) 120 528 y Ft(#include)24 b("I2.h")120 628 y(CORBA_long)170 677 y(server_calc_self_Div)f(\(calc_self)h(h,)718 727 y(CORBA_long)g(u,)718 777 y(CORBA_long)g(v,)718 827 y (CORBA_Environment)f(*s\))120 877 y({)170 927 y(calc_numerator)g(n)i(=) g(9;)170 1026 y(if)g(\()f(v)h(==)g(0)g(\))220 1076 y({)269 1126 y(calc__BindExceptionValue\(s,)e(ex_calc_DivideByZero,)g(n\);)269 1176 y(return\()i(u)g(\);)220 1225 y(})170 1275 y(else)220 1325 y(return\()f(u)h(/)g(v)f(\);)120 1375 y(})120 1474 y(main)h(\(int)f(ac,)h(char)f(**av\))120 1524 y({)170 1574 y(calc_self)g(s;)170 1624 y(char)g(*)h(sbh;)170 1674 y(CORBA_Object)f(the_orb;)170 1724 y(CORBA_Environment)f(ev;)170 1823 y(the_orb)h(=)h(CORBA_ORB_init)e(\(&ac,)i(av,)g("ilu",)f(&ev\);) 170 1873 y(if)h(\(!ILU_C_SUCCESSFUL\(&ev\)\))d({)220 1923 y(fprintf)i(\(stderr,)g("Can't)g(initialize)g(ORB;)h(exception)f (<\045s>\\n",)g(CORBA_exception_id\(&ev\)\);)220 1973 y(CORBA_exception_free\(&ev\);)220 2022 y(exit\(1\);)170 2072 y(};)170 2172 y(calc__InitializeServer\()f(\);)170 2271 y(s)i(=)f(calc_self__CreateTrue)f(\(NULL,)i(NULL,)f(NULL\);)170 2321 y(if)h(\(s)f(==)h(NULL\))220 2371 y({)269 2421 y(fprintf)g (\(stderr,)f("Unable)g(to)h(create)f(instance)g(of)h(calc_self.\\n"\);) 269 2471 y(exit\(1\);)220 2521 y(})170 2570 y(else)220 2620 y({)269 2670 y(sbh)g(=)g(CORBA_ORB_object_to_string)d(\(the_orb,)i (s,)h(&ev\);)p eop %%Page: 56 57 56 56 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(56)269 183 y Ft(if)25 b(\(ev._major)f(==)h (CORBA_NO_EXCEPTION\))319 233 y({)369 283 y(printf)f(\("\045s\\n",)h (sbh\);)369 333 y(ILU_C_Run)f(\(\);)h(/*)f(enter)h(main)f(loop;)h(hang) f(processing)g(requests)h(*/)319 382 y(})269 432 y(else)319 482 y({)369 532 y(fprintf)f(\(stderr,)593 582 y("Attempt)g(to)h(obtain) f(sbh)h(of)g(object)f(\045p)h(signalled)f(<\045s>.\\n",)593 632 y(s,)h(CORBA_exception_id\(&ev\)\);)369 681 y (CORBA_exception_free\(&ev\);)369 731 y(exit\(1\);)319 781 y(})220 831 y(})120 881 y(})0 999 y Fo(3.4.4)h(Libraries)15 b(and)f(Linking)62 1103 y Fs(For)e(clients)f(of)h(an)f(ILU)h(module,)g (it)f(is)g(only)g(necessary)h(to)f(link)g(with)f(the)i(`)p Fp(interface-name)p Ft(-surrogate.o)p Fs(')f(and)0 1165 y(`)p Fp(interface-name)p Ft(-common.o)p Fs(')h(files)f(generated)h (from)g(the)g(C)g(files)f(generated)h(for)g(the)g(interface)f(or)h (interfaces)g(being)0 1228 y(used,)j(and)g(with)e(the)i(two)f (libraries)g(`)p Fp(ILUHOME)t Ft(/lib/libilu-c.a)p Fs(')f(and)i(`)p Fp(ILUHOME)t Ft(/lib/libilu.a)p Fs(')f(\(in)0 1290 y(this)c(order,)i (as)f(`)p Ft(libilu-c.a)p Fs(')g(uses)f(functions)g(in)h(`)p Ft(libilu.a)p Fs('\).)62 1377 y(For)17 b(implementors)e(of)h(servers,)i (the)d(code)h(for)h(the)f(server-side)f(stubs,)i(in)e(the)h(file)g(`)p Fp(interface-name)p Ft(-true.o)p Fs(')0 1439 y(compiled)21 b(from)i(`)p Fp(interface-name)p Ft(-true.c)p Fs(',)i(and)d(in)g(the)f (file)h(`)p Fp(interface-name)p Ft(-common.o)p Fs(')g(compiled)g(from)0 1502 y(`)p Fp(interface-name)p Ft(-common.c)p Fs(',)12 b(should)d(be)j(included)e(along)g(with)g(the)h(other)g(files)f(and)h (libraries.)0 1633 y Fu(3.5)30 b(ILU)15 b(C)g(API)62 1737 y Fs(In)e(addition)e(to)i(the)f(functions)g(defined)g(by)h(the)f (CORBA)i(mapping,)f(the)g(ILU)f(C)i(mapping)e(provides)g(some)h(other)0 1799 y(functions,)i(chiefly)g(for)h(type)f(manipulation,)g(object)g (manipulation,)g(and)g(server)h(manipulation.)22 b(There)16 b(are)g(also)f(a)0 1861 y(number)c(of)g(macros)h(provided)e(for)h (compatibility)e(with)h(both)h(versions)e(of)j(CORBA)g(\(revision)e (2.0\).)0 1980 y Fo(3.5.1)26 b(General)1716 2103 y Fs(Exception)-1902 b Ft(CORBA_string)11 b Fo(ex)p 361 2103 15 3 v 18 w(CORBA)p 559 2103 V 18 w(InvalidName)120 2165 y Fs(Raised)g(by)g Ft(CORBA_ORB_resolve_initial_references)d Fs(to)j(indicate)g(that)f(no) h(binding)f(for)h(the)120 2227 y(specified)k Fp(service)p 432 2227 14 3 v 16 w(name)20 b Fs(is)15 b(known.)26 b(The)16 b(associated)f(value)h(is)f(the)h(service)g(name.)27 b(Note)16 b(that)f(this)120 2290 y(differs)c(from)h(the)f(strict)f (CORBA)i(definition)d(of)i(this)f(exception,)h(which)f(has)h(no)g (associated)f(value.)1739 2396 y(Function)-1902 b Ft(CORBA_Object)11 b Fo(CORBA)p 494 2396 15 3 v 18 w(ORB)p 620 2396 V 18 w(init)22 b Fk(\()11 b Ft(int)g(*)h Fp(argc)p Ft(,)f(char)g(**)g Fp(argv)p Ft(,)208 2458 y(CORBA_string)f Fp(orb)p 582 2458 14 3 v 16 w(id)p Ft(,)g(CORBA_Environment)g(*)h(env)p Fk(\))120 2521 y Fs(Locking:)e(Main)j(Invariant)e(holds)120 2608 y(Called)g(to)g(initialize)e(the)i(ILU)g(runtime,)h(and)f(acquire) g(the)g(``orb'')h(object.)f(The)g(return)g(value)g(of)g(this)f(call)120 2670 y(is)i(used)f(in)h(subsequent)e(calls)i(to)g(other)g(CORBA)h (utility)d(functions.)p eop %%Page: 57 58 57 57 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(57)120 183 y(If)16 b(the)e(environment)g(variable)h Ft(ILU_COS_NAMING_IOR)f Fs(is)g(bound)g(to)h(a)g(string)f(binding)g (handle)g(for)120 246 y(a)k Ft(CosNaming)f Fs(service,)j(this)c(call)i (will)e(bind)h(the)h(service)f(name)i Ft("NameService")d Fs(to)h(the)h(object)120 308 y(specified)10 b(by)h(that)g(string)f (binding)f(handle.)1739 432 y(Function)-1902 b Ft (CORBA_ORB_ObjectIdList)10 b Fo(CORBA)p 743 432 15 3 v 18 w(ORB)p 869 432 V 18 w(list)p 951 432 V 18 w(initial)p 1095 432 V 16 w(services)24 b Fk(\()208 494 y Ft(CORBA_Object)10 b Fp(the)p 577 494 14 3 v 16 w(orb)p Ft(,)h(CORBA_Environment)e(*)j (env)p Fk(\))120 557 y Fs(Locking:)d(Main)j(Invariant)e(holds)120 648 y(Returns)d(a)g(list)g(of)g(service)g(names)g(wh)o(ich)g(can)g(b)o (e)g(useful)o(ly)g(u)o(sed)g(i)o(n)g(calls)f(to)g Ft(CORBA_ORB)o (_resolve_i)o(nitial_refe)o(rences\(\))p Fs(.)120 710 y(The)11 b(type)g Ft(CORBA_ORB_ObjectIdList)e Fs(is)i(a)g(normal)g (CORBA)h(sequence)f(of)g(strings.)0 847 y Fo(3.5.2)26 b(Type)15 b(Manipulation)1739 988 y Fs(Function)-1902 b Ft(OPTIONAL\(ilu_Class\))11 b Fo(ILU)p 577 988 15 3 v 18 w(C)p 631 988 V 18 w(FindILUClassByTypeName)24 b Fk(\()208 1050 y Ft(RETAIN)p Fk(\()p Ft(ilu_string)p Fk(\))10 b Fp(type-name)k Fk(\))120 1113 y Fs(Locking:)9 b(L1)p 349 1113 14 3 v 16 w(sup)i Ft(<)g Fs(otmu,)g(L2,)h(Main)f (unconstrained.)120 1204 y(Given)i(the)h Fp(type-name)j Fs(of)e(an)f(ILU)g(object)f(type,)i(of)f(the)g(form)h Ft("Interface.Typename")p Fs(,)f(returns)120 1266 y(the)d Ft(ilu_Class)f Fs(value)h(for)h(it.)f(This)f(value)h(can)g(be)g(used)g (to)g(compare)h(types)e(for)h(equality.)1739 1391 y(Function)-1902 b Ft(OPTIONAL\(ilu_Class\))11 b Fo(ILU)p 577 1391 15 3 v 18 w(C)p 631 1391 V 18 w(FindILUClassByTypeID)24 b Fk(\()208 1453 y Ft(RETAIN)p Fk(\()p Ft(ilu_string)p Fk(\))10 b Fp(type-id)5 b Fk(\))120 1515 y Fs(Locking:)k(L1)p 349 1515 14 3 v 16 w(sup)i Ft(<)g Fs(otmu;)g(L2,)g(Main)g (unconstrained.)120 1606 y(Given)c(the)g Fp(type-id)i Fs(of)e(an)g(ILU)g(object)g(type,)e(of)i(the)g(form)g Ft("ilu:gfbSCM7tsK9vVYjKfLole1H)o(OBDc")p Fs(,)120 1669 y(returns)k(the)f Ft(ilu_Class)h Fs(value)g(for)g(it.)g(This)f(value)h (can)h(be)f(used)g(to)f(compare)i(types)f(for)g(equality.)1739 1793 y(Function)-1902 b Ft(GLOBAL\(OPTIONAL\(ilu_string\)\))10 b Fo(ILU)p 801 1793 15 3 v 18 w(C)p 855 1793 V 18 w(ClassName)24 b Fk(\()208 1855 y Ft(RETAIN)p Fk(\()p Ft(CORBA_Object)p Fk(\))10 b(\))120 1918 y Fs(Locking:)f(unconstrained.)120 2009 y(Returns)i(the)g(ILU)g(name)h(for)f(the)g(most)g(specific)f(type) h(of)g(an)g(object)g(instance.)1739 2133 y(Function)-1902 b Ft(GLOBAL\(OPTIONAL\(ilu_string\)\))10 b Fo(ILU)p 801 2133 V 18 w(C)p 855 2133 V 18 w(ClassID)24 b Fk(\()208 2195 y Ft(RETAIN)p Fk(\()p Ft(CORBA_Object)p Fk(\))10 b(\))120 2258 y Fs(Locking:)f(unconstrained.)120 2349 y(Returns)i(the)g(ILU)g(type)f(ID)i(for)f(the)g(most)g(specific)f(type) h(of)g(an)h(object)e(instance.)1739 2473 y(Function)-1902 b Ft(ilu_Class)12 b Fo(ILU)p 328 2473 V 18 w(C)p 382 2473 V 18 w(ClassRecordOfInstance)22 b Fk(\()p Ft(CORBA_Object)p Fk(\))120 2536 y Fs(Locking:)9 b(unconstrained.)120 2627 y(Returns)i(the)g Ft(ilu_Class)f Fs(value)h(for)g(the)g(most)g (specific)g(type)f(of)i(an)f(object)f(instance.)p eop %%Page: 58 59 58 58 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(58)1739 183 y(Function)-1902 b Ft(ILU_C_Class)11 b Fo(ILU)p 377 183 15 3 v 19 w(C)p 432 183 V 18 w (RegisterCustomSurrogateType)22 b Fk(\()p Ft(ilu_Class)208 246 y Fp(kernel-type)p Ft(,)10 b(ILU_C_Class)g Fp(C-type)s Fk(\))120 308 y Fs(Locking:)f(unconstrained.)120 395 y(This)h(function)f(registers)h Fp(C-type)k Fs(as)c(the)h(kind)f(of)h (class)f(to)g(create)i(an)f(instance)f(of)g(when)h(unmarshalling)120 457 y(a)17 b(surrogate)f(instance)g(of)g(most)h(specific)f(type)g Fp(kernel-type)p Fs(.)27 b(This)15 b(should)g(be)i(used)f(in)g (conjunction)120 519 y(with)11 b(the)g(automatically)f(generated)i (function)e Fp(ObjectType)s Ft(__MakeClass\(\))f Fs(\(to)i(create)h(an) g(instance)120 582 y(of)23 b Ft(ILU_C_Class)p Fs(\),)i(and)e(the)g (automatically)e(generated)i(constant)f Fp(ObjectType)s Ft(__MSType)e Fs(\(the)120 644 y(appropriate)14 b(value)f(for)i Fp(kernel-type)s Fs(\).)20 b(This)13 b(functionality)f(can)j(be)f(used) g(to)g(implement)g(application-)120 706 y(specific)f(surrogate)f(types) g(with)g(caching)h(and)g(other)g(extensions)e(to)h(the)h(basic)g (ILUmodel.)k(The)c(value)120 769 y(returned)e(is)f(the)h(previously)f (registered)g(surrogate)h(class)f(for)i(this)e(type.)1739 878 y(Function)-1902 b Ft(void)12 b Fo(ILU)p 203 878 V 19 w(C)p 258 878 V 17 w(RegisterCustomRecord)23 b Fk(\()p Ft(CORBA_TypeCode)10 b Fp(record)p 1287 878 14 3 v 17 w(type)p Ft(,)208 940 y(OPTIONAL)p Fk(\()p Ft(ILU_C_CRCreateFn)p Fk(\))f Fp(cfn)p Ft(,)i(OPTIONAL)p Fk(\()p Ft(ILU_C_CRFreeFn)p Fk(\))f Fp(ffn)p Ft(,)208 1002 y(OPTIONAL)p Fk(\()p Ft (ILU_C_CRPreOutputFn)p Fk(\))f Fp(preoutfn)p Ft(,)208 1065 y(OPTIONAL)p Fk(\()p Ft(ILU_C_CRPostOutputFn)p Fk(\))g Fp(postoutfn)p Ft(,)208 1127 y(OPTIONAL)p Fk(\()p Ft (ILU_C_CRPostInputFn)p Fk(\))g Fp(postinfn)p Ft(,)g(CORBA_Environment)h (*)h Fp(env)r Fk(\))120 1189 y Fs(Locking:)e(L1)i Ft(<)h Fs(otmu)120 1276 y(Registers)g(a)g(set)g(of)h(functions)e(to)g(be)i (called)f(for)g(a)h(particular)f(record)h(type)e Fp(record)p 1477 1276 V 17 w(type)p Fs(.)j(The)f(function)120 1339 y Fp(cfn)22 b Fs(should)17 b(create,)22 b(initialize,)d(and)g(return)f (a)h(value)g(of)g(the)f(desired)g(type;)k(it)c(is)h(called)f(when)g (the)120 1401 y(kernel)12 b(is)g(about)g(to)g(unmarshall)f(a)i(value)f (of)h(the)f(type)g(and)g(needs)g(storage)g(for)g(it.)j(The)d(function)g Fp(freefn)120 1463 y Fs(should)d(perform)j(any)f(clean-up)f(operations) g(necessary)h(for)g(the)f(desired)h(value;)f(they)h(are)g(called)g (before)120 1526 y(the)k(standard)f(free)i(functions)d(are)j(called)f (on)g(the)g(standard)f(slots)g(of)h(the)f(record)i(type.)23 b(The)15 b(function)120 1588 y Fp(preoutfn)f Fs(should)d(prepare)h(the) g(value)g(to)f(be)i(marshalled)e(to)h(another)g(address)f(space.)k(It)d (may)g(be)g(called)120 1650 y(repeatedly)17 b(before)i(the)e(value)h (is)f(actually)g(marshalled,)j(due)e(to)f(sizing)g(requirements)g (imposed)h(by)120 1712 y(various)c(RPC)j(protocols.)22 b(The)15 b(function)f Fp(postoutfn)i Fs(should)e(perform)i(any)f (necessary)g(cleanup)g(after)120 1775 y(a)i(value)f(has)g(been)h (marshalled;)h(it)e(is)g(expected)g(that)g(this)f(will)h(typically)e (be)j(a)g(NIL)f(function.)26 b(The)120 1837 y(function)11 b Fp(postinfn)i Fs(should)e(perform)i(any)f(initial)f(setup)g(needed)h (after)h(the)f(standard)f(slots)g(of)i(the)f(value)120 1899 y(have)e(been)g(unmarshalled.)h(This)e(function)f(may)j(raise)f Ft(BAD_PARAM)g Fs(\(if)g(the)g(type)f(is)h(not)f(a)i(record)f(type\),) 120 1961 y Ft(NO_MEMORY)p Fs(,)h(and)g Ft(INTERNAL)p Fs(.)0 2083 y Fo(3.5.3)26 b(Object)14 b(Manipulation)1739 2209 y Fs(Function)-1902 b Ft(ILU_C_Object)10 b(*)j Fo(ILU)p 439 2209 15 3 v 18 w(C)p 493 2209 V 18 w(CreateTrueObject)22 b Fk(\()11 b Ft(ILU_C_Class)f Fp(c)p Ft(,)208 2271 y(OPTIONAL)p Fk(\()p Ft(ilu_string)p Fk(\))g Fp(instance)p 851 2271 14 3 v 15 w(handle)p Ft(,)g(OPTIONAL)p Fk(\()p Ft(ILU_C_Server)p Fk(\))g Fp(server)p Ft(,)h(void)208 2334 y(*)g Fp(instanceData)p Ft(,)f(ilu_boolean)g Fp(inside)p 913 2334 V 15 w(server)15 b Fk(\))120 2396 y Fs(Locking:)9 b Fp(inside)p 408 2396 V 15 w(server)14 b Fs(?)d(Inside\()p Fp(server)p Fs(,)f(most)g (specific)f(type)h(implemented)g(by)f Fp(c)r Fs(\))i(:)f(Main)h (Invariant.)120 2483 y(Instantiates)i(a)i(true)g(object)e(of)i(class)f Fp(c)p Fs(,)j(in)d(server)h Fp(server)p Fs(.)22 b(If)15 b(the)g Fp(instance)p 1381 2483 V 15 w(handle)i Fs(is)d Ft(NIL)p Fs(,)i(one)e(will)120 2545 y(be)f(invented.)j(If)e(the)e Fp(server)17 b Fs(is)c Ft(NIL)p Fs(,)h(the)f(default)f(server)h(will)f (be)i(used.)i(The)d Fp(instanceData)j Fs(is)c(for)h(the)120 2608 y(private)e(use)g(of)h(the)f(methods)g(of)g(the)h(class.)g Fp(inside)p 955 2608 V 15 w(server)j Fs(is)c Ft(FALSE)h Fs(for)f(normal)h(cases,)g(but)f Ft(TRUE)g Fs(for)120 2670 y(use)g(in)g(the)g(implementation)e(of)j(an)f(object)f(table.)p eop %%Page: 59 60 59 59 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(59)1739 183 y(Function)-1902 b Ft(\(OPTIONAL\(ILU_C_Object)10 b Fo(*\)\))22 b Ft(ILU_C_FindObject)10 b Fk(\()i Ft(ilu_string)e Fp(server-id)p Ft(,)208 246 y(ilu_string)g Fp(instance-handle)i Fk(\))120 308 y Fs(Locking:)d(Main)j(invariant)e(holds.)120 395 y(Given)18 b(the)g Fp(server-id)23 b Fs(and)18 b Fp(instance-handle)h Fs(of)g(an)f(object,)i(returns)e(the)g(object)f (if)i(it)e(exists)h(in)f(the)120 457 y(current)e(address)f(space,)i(or) f Ft(ILU_NIL)g Fs(if)g(it)f(doesn't)g(exist.)21 b(Unlike)14 b Ft(ILU_C_SBHToObject\(\))f Fs(and)120 519 y Ft (ILU_C_LookupObject\(\))p Fs(,)d(this)f(function)h(will)f(not)h(create) i(a)f(surrogate)f(for)h(an)g(instance)f(if)h(does)f(not)120 582 y(exist)j(--)i Fp(but)i Fs(if)d(the)g Fp(server-id)k Fs(indicates)13 b(a)i(server)f(with)f(an)h(object)f(table,)i(the)e Fp(server)18 b Fs(may)d(create)f(the)120 644 y(object)c(dynamically.) 1739 750 y(Function)-1902 b Ft(ilu_boolean)11 b Fo(ILU)p 377 750 15 3 v 19 w(C)p 432 750 V 18 w(IDOfObject)21 b Fk(\()12 b Ft(CORBA_Object)e Fp(instance)p Ft(,)g(PASS)p Fk(\()p Ft(char)h(**)p Fk(\))208 813 y Fp(server-id)p Ft(,)f(PASS)p Fk(\()p Ft(char)h(**)p Fk(\))g Fp(instance-handle)i Fk(\))120 875 y Fs(Locking:)c(Main)j(invariant)e(holds.)120 962 y(Given)17 b(an)g Fp(instance)p Fs(,)i(returns)e(the)g(server)g(ID) h(and)f(instance)g(handle)g(of)g(that)g(instance.)29 b(The)18 b(strings)120 1024 y(returned)11 b(are)h(copies;)e(the)h(user) g(must)g(free)h(them)f(with)f Ft(ilu_free)h Fs(when)f(finished)g(with)g (them.)1739 1131 y(Function)-1902 b Ft(ilu_string)12 b Fo(ILU)p 353 1131 V 18 w(C)p 407 1131 V 18 w(SBHOfObject)21 b Fk(\()11 b Ft(CORBA_Object)f Fp(instance)j Fk(\))120 1193 y Fs(Locking:)c(Main)j(invariant)e(holds.)120 1280 y(Given)22 b(an)h Fp(instance)p Fs(,)j(returns)c(a)h(reference)i(to)d (that)g(instance.)46 b(The)23 b(CORBA-specified)g(routine)120 1342 y Ft(CORBA_ORB_object_to_string\(\))9 b Fs(should)g(typically)h (be)h(used)g(instead.)1739 1449 y(Function)-1902 b Ft (OPTIONAL\(CORBA_Object\))10 b Fo(ILU)p 651 1449 V 19 w(C)p 706 1449 V 18 w(SBHToObject)21 b Fk(\()p Ft(char)11 b(*)h Fp(sbh)p Ft(,)e(ilu_Class)208 1511 y Fp(static)p 308 1511 14 3 v 15 w(type)p Ft(,)g(RETAIN)p Fk(\()p Ft (CORBA_Environment)g(*)p Fk(\))h Ft(Env)p Fk(\))120 1573 y Fs(Locking:)e(Main)j(invariant)e(holds.)120 1660 y(Takes)16 b(an)g(object)g(reference)h(and)f(returns)g(the)g(object.)26 b Fp(static)p 1163 1660 V 15 w(type)18 b Fs(is)e(a)g(type)g(the)g (caller)g(knows)f(the)120 1723 y(object)10 b(to)h(have.)1739 1829 y(Function)-1902 b Ft(OPTIONAL\(PASS\(char)10 b(*\)\))i Fo(ILU)p 638 1829 15 3 v 18 w(C)p 692 1829 V 18 w(FormSBH)24 b Fk(\()p Ft(RETAIN)p Fk(\()p Ft(char)10 b(*)p Fk(\))i Fp(server-id)p Ft(,)208 1891 y(RETAIN)p Fk(\()p Ft(char)e(*)p Fk(\))i Fp(instance-handle)p Ft(,)d(ilu_Class)i Fp(most-specific-type)p Ft(,)208 1953 y(RETAIN)p Fk(\()p Ft(ilu_ProtocolInfo)p Fk(\))e Fp(pinfo)p Ft(,)h(RETAIN)p Fk(\()p Ft(ilu_TransportInfo)p Fk(\))g Fp(tinfo)p Ft(,)208 2016 y(RETAIN)p Fk(\()p Ft (CORBA_Environment)f(*)p Fk(\))i Ft(Env)p Fk(\))120 2078 y Fs(Locking:)e(Main)j(invariant)e(holds.)120 2165 y(Takes)j(necessary) g(information)e(about)i(an)g(object)f(reference,)j(and)e(returns)f(a)i (well-formed)f(ILU)f(string)120 2227 y(binding)d(handle)i(for)h(that)e (information.)h(This)f(SBH)i(can)g(then)e(be)i(used)f(to)f(create)i(a)g (surrogate)f(instance,)120 2290 y(using)f Ft(ILU_C_SBHToObject)p Fs(.)1739 2396 y(Function)-1902 b Ft(OPTIONAL\(PASS\(char*\)\))10 b Fo(ILU)p 626 2396 V 19 w(C)p 681 2396 V 18 w(PublishObject)21 b Fk(\()12 b Ft(CORBA_Object)e Fp(instance)j Fk(\))120 2521 y Fs(Locking:)c(Main)j(invariant)e(holds.)120 2608 y(Publishes)f(the)h(OID)g(of)g(the)g Fp(instance)i Fs(in)e(a)h (domain-wide)e(registry.)h(This)g(is)f(an)i(experimental)f(interface,) 120 2670 y(and)h(may)h(change)f(in)f(the)h(future.)p eop %%Page: 60 61 60 60 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(60)1739 183 y(Function)-1902 b Ft(ilu_boolean)11 b Fo(ILU)p 377 183 15 3 v 19 w(C)p 432 183 V 18 w(WithdrawObject)20 b Fk(\()12 b Ft(CORBA_Object)e Fp(instance)p Ft(,)208 246 y(PASS)p Fk(\()p Ft(char)g(*)p Fk(\))i Fp(proof)7 b Fk(\))120 308 y Fs(Locking:)i(Main)j(invariant)e(holds.)120 395 y(Removes)j(the)f(OID)g(of)h(the)f Fp(instance)i Fs(from)f(the)f(domain-wide)g(registry.)i Fp(proof)19 b Fs(is)12 b(the)g(string)g(returned)120 457 y(from)g(the)f(call)g(to)f Ft(ILU_C_PublishObject\(\))p Fs(.)1739 564 y(Function)-1902 b Ft(OPTIONAL\(GLOBAL\(CORBA_Object\)\))10 b Fo(ILU)p 851 564 V 18 w(C)p 905 564 V 18 w(LookupObject)21 b Fk(\()11 b Ft(RETAIN)p Fk(\()p Ft(char)208 626 y(*)p Fk(\))g Fp(sid)p Ft(,)f(RETAIN)p Fk(\()p Ft(char)h(*)p Fk(\))g Fp(ih)p Ft(,)g(ilu_Class)f Fp(static-class)i Fk(\))120 688 y Fs(Locking:)d(Main)j(invariant)e(holds.)120 775 y(Using)18 b(the)h(local)g(registry,)i(find)e(and)g(return)g(the)g(object)g (specified)f(by)h(the)g(given)g(Server)h(ID)f(and)120 838 y(server-relative)9 b(Instance)f(Handle.)i Fp(static)p 805 838 14 3 v 16 w(type)h Fs(is)d(one)h(you)f(know)g(the)h(actual)f (object)h(must)f(have;)h(it)g(may)120 900 y(also)k(have)h(more)g (refined)g(types.)k(For)c(an)g(already-reified)f(surrogate)g(this)g (procedure)g(will)g(reconsider)120 962 y(what)e(contact)f(info)h(to)g (use)g(for)g(reaching)g(the)g(server.)1739 1068 y(Function)-1902 b Ft(OPTIONAL\(GLOBAL\(CORBA_Object\)\))10 b Fo(ILU)p 851 1068 15 3 v 18 w(C)p 905 1068 V 18 w(CreateSurrogateObject)20 b Fk(\()208 1131 y Ft(ilu_Class)10 b Fp(type)p Ft(,)h(RETAIN)p Fk(\()p Ft(char)f(*)p Fk(\))i Fp(ih)p Ft(,)e(ilu_Server)h Fp(server)p Ft(,)g(ILU_C_ENVIRONMENT)208 1193 y(*)p Fp(env)i Fk(\))120 1255 y Fs(Locking:)c(Main)j(invariant)e(holds.)120 1342 y(Create)15 b(a)f(new)f(object)g(instance)g(of)h(the)f(specified)g Fp(type)j Fs(on)d(the)h(specified)f Fp(server)p Fs(,)i(with)d(the)i (specified)120 1405 y Fp(ih)p Fs(.)d(If)h(unable)e(to)h(create)h(such)f (an)g(object,)g(return)g Ft(ILU_NIL)p Fs(,)g(and)g(signal)f(the)g (error)i(in)f Fp(env)p Fs(.)120 1492 y(This)e(procedure)g(can)h(be)g (used)f(to)h(create)g(new)g(client-side)e(objects)h(for)h(which)f(no)g (true)h(object)f(yet)g(exists.)120 1554 y(This)15 b(is)g(the)h(way)g(a) g(client)f(using)f(a)j(server)f(with)f(an)g(object)h(table)f(causes)h (the)f(server)h(to)g(create)g(new)120 1616 y(instances)d(`on)g(the)h (fly'.)19 b(When)14 b(used)f(in)g(this)g(way,)i(the)e Fp(ih)18 b Fs(must)13 b(contain)g(all)h(information)e(necessary)120 1679 y(to)h(allow)f(the)h(server)g(to)g(create)g(the)g(proper)g(true)g (object,)g(as)g(it)g(is)g(the)f(only)g(information)g(passed)h(to)f(the) 120 1741 y(object)e(table's)h(object)f(creation)h(procedure.)1739 1847 y(Function)-1902 b Ft(CORBA_Object)11 b Fo(CORBA)p 494 1847 V 18 w(Object)p 657 1847 V 17 w(duplicate)21 b Fk(\()12 b Ft(CORBA_Object)e Fp(instance)p Ft(,)208 1909 y(CORBA_Environment)f(*)j Fp(env)r Fk(\))120 1972 y Fs(Locking:)d(Main)j(invariant)e(holds.)120 2059 y(Increments)h(the)g (reference)i(count)d(of)h(the)g Fp(instance)p Fs(,)g(and)g(returns)f (the)h(instance.)1739 2165 y(Function)-1902 b Ft(void)12 b Fo(CORBA)p 295 2165 V 18 w(Object)p 458 2165 V 17 w(release)23 b Fk(\()12 b Ft(CORBA_Object)e Fp(instance)p Ft(,)208 2227 y(CORBA_Environment)f(*)j Fp(env)r Fk(\))120 2290 y Fs(Locking:)d(Main)j(invariant)e(holds.)120 2377 y(Decrements)j(the)g (reference)h(count)e(of)h(the)f Fp(instance)p Fs(.)k(The)d(instance)f (may)h(be)g(destroyed)f(as)h(a)g(result)f(of)120 2439 y(this)e(operation.)1739 2545 y(Function)-1902 b Ft (CORBA_unsigned_long)11 b Fo(CORBA)p 669 2545 V 17 w(Object)p 831 2545 V 17 w(hash)23 b Fk(\()11 b Ft(CORBA_Object)f Fp(instance)p Ft(,)208 2608 y(CORBA_unsigned_long)f Fp(max)p 773 2608 14 3 v 17 w(value)p Ft(,)i(CORBA_Environment)e(*)j Fp(env)r Fk(\))120 2670 y Fs(Locking:)d(Main)j(invariant)e(holds.)p eop %%Page: 61 62 61 61 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(61)120 183 y(Returns)18 b(a)g(hash)g(value)g(for)h(the)f Fp(instance)p Fs(,)h(less)f(than)f(or)i(equal)f(to)f Fp(max)p 1354 183 14 3 v 17 w(value)p Fs(.)32 b(Mandated)19 b(by)e(the)120 246 y(CORBA)12 b(spec.)1739 364 y(Function)-1902 b Ft(CORBA_boolean)11 b Fo(CORBA)p 519 364 15 3 v 18 w(Object)p 682 364 V 17 w(is)p 732 364 V 18 w(equivalent)21 b Fk(\()12 b Ft(CORBA_Object)e Fp(instance1)p Ft(,)208 426 y(CORBA_Object)g Fp(instance2)p Ft(,)g(CORBA_Environment)g(*)h Fp(env)r Fk(\))120 489 y Fs(Locking:)e(Main)j(invariant)e(holds.)120 578 y(Returns)19 b Ft(ilu_TRUE)f Fs(if)h(ILU)g(believes)g(the)f(two)h (instances)f(to)g(be)i(the)e(same)i(object,)h Ft(ilu_FALSE)120 640 y Fs(otherwise.)10 b(Compares)i(the)f(servers)g(and)g(kernel)g (objects)f(of)h(the)g(two)g(instances.)1739 759 y(Function)-1902 b Ft(void)12 b Fo(ILU)p 203 759 V 19 w(C)p 258 759 V 17 w(PingObject)22 b Fk(\()11 b Ft(ILU_C_Object)g Fp(instance)p Ft(,)f(ILU_C_ENVIRONMENT)g(*)208 821 y Fp(env)r Fk(\))120 883 y Fs(Locking:)f(Main)j(invariant)e(holds.)120 973 y(Attempts)g(round-trip)g(effectless)h(call)g(on)g(object.)f(May)i (raise)f(system)g(exception)f(to)h(indicate)f(failure.)1739 1091 y(Function)-1902 b Ft(CORBA_boolean)11 b Fo(CORBA)p 519 1091 V 18 w(Object)p 682 1091 V 17 w(non)p 780 1091 V 17 w(existent)22 b Fk(\()12 b Ft(CORBA_Object)e Fp(instance)p Ft(,)208 1153 y(CORBA_Environment)f(*)j Fp(env)r Fk(\))120 1216 y Fs(Locking:)d(Main)j(invariant)e(holds.)120 1305 y(Returns)e Ft(ilu_TRUE)f Fs(if)h(object)g(cannot)f(be)h(successfully)f (pinged.)i(May)g(cause)f(instance)f(to)h(be)g(destroyed.)1739 1424 y(Function)-1902 b Ft(CORBA_boolean)11 b Fo(CORBA)p 519 1424 V 18 w(Object)p 682 1424 V 17 w(is)p 732 1424 V 18 w(a)23 b Fk(\()11 b Ft(CORBA_Object)f Fp(instance)p Ft(,)208 1486 y(CORBA_string)g Fp(repository)p 707 1486 14 3 v 14 w(id)p Ft(,)h(CORBA_Environment)f(*)h Fp(env)j Fk(\))120 1548 y Fs(Locking:)9 b(Main)j(invariant)e(holds.)120 1638 y(Returns)18 b Ft(ilu_TRUE)f Fs(if)h(the)g Fp(instance)i Fs(supports)d(the)g(interface)i(identified)d(by)i Fp(repository)p 1656 1638 V 15 w(id)p Fs(.)32 b(May)120 1700 y(involve)10 b(a)h(network)g(round)f(trip.)1739 1818 y(Function)-1902 b Ft(CORBA_boolean)11 b Fo(CORBA)p 519 1818 15 3 v 18 w(Object)p 682 1818 V 17 w(is)p 732 1818 V 18 w(nil)22 b Fk(\()12 b Ft(CORBA_Object)e Fp(instance)p Ft(,)208 1881 y(CORBA_Environment)f(*)j Fp(env)h Fk(\))120 1943 y Fs(Locking:)c(Main)j(invariant)e(holds.)120 2032 y(Returns)h Ft(ilu_TRUE)f Fs(if)i(the)e Fp(instance)j Fs(is)e(the)g Ft(NIL)g Fs(object)f(reference.)1739 2151 y(Function)-1902 b Ft(CORBA_string)11 b Fo(CORBA)p 494 2151 V 18 w(ORB)p 620 2151 V 18 w(object)p 769 2151 V 17 w(to)p 828 2151 V 17 w(string)23 b Fk(\()11 b Ft(CORBA_Object)f Fp(the)p 1385 2151 14 3 v 16 w(orb)p Ft(,)208 2213 y(CORBA_Object)g Fp(instance)p Ft(,)g(CORBA_Environment)g(*)h Fp(env)i Fk(\))120 2275 y Fs(Locking:)c(Main)j(invariant)e(holds.)120 2365 y(Returns)h(a)g(string)f(binding)f(handle)i(for)g(the)g Fp(instance)p Fs(.)f(The)h(argument)g Fp(the)p 1328 2365 V 16 w(orb)k Fs(is)10 b(the)h(result)f(of)h(a)h(call)f(to)120 2427 y Ft(CORBA_ORB_init\(\))p Fs(.)1739 2545 y(Function)-1902 b Ft(CORBA_Object)11 b Fo(CORBA)p 494 2545 15 3 v 18 w(ORB)p 620 2545 V 18 w(string)p 763 2545 V 17 w(to)p 822 2545 V 18 w(object)22 b Fk(\()11 b Ft(CORBA_Object)f Fp(the)p 1385 2545 14 3 v 16 w(orb)p Ft(,)208 2608 y(CORBA_String)g Fp(string)p 626 2608 V 15 w(binding)p 782 2608 V 14 w(handle)p Ft(,)g(CORBA_Environment)g(*)h Fp(env)j Fk(\))120 2670 y Fs(Locking:)9 b(Main)j(invariant)e(holds.)p eop %%Page: 62 63 62 62 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(62)120 183 y(Returns)18 b(a)g Ft(CORBA_Object)f Fs(instance)g(for)i(the)e(specified)h Fp(string)p 1238 183 14 3 v 15 w(binding)p 1394 183 V 14 w(handle)p Fs(.)31 b(The)18 b(argument)120 246 y Fp(the)p 179 246 V 16 w(orb)d Fs(is)10 b(the)h(result)g(of)g(a)g(call)g(to)g Ft(CORBA_ORB_init\(\))p Fs(.)1739 356 y(Function)-1902 b Ft(OPTIONAL\(CORBA_Object\))10 b Fo(CORBA)p 743 356 15 3 v 18 w(ORB)p 869 356 V 18 w(resolve)p 1036 356 V 18 w(initial)p 1180 356 V 17 w(references)23 b Fk(\()208 419 y Ft(CORBA_Object)10 b Fp(the)p 577 419 14 3 v 16 w(orb)p Ft(,)h(CORBA_String)f Fp(service)p 1129 419 V 16 w(name)p Ft(,)i(CORBA_Environment)d(*)j Fp(env)208 481 y Fk(\))120 543 y Fs(Locking:)d(Main)j(invariant)e (holds.)120 630 y(Returns)26 b(an)h(instance)f(for)g(the)h(service)f (named)h(by)f Fp(service)p 1203 630 V 16 w(name)p Fs(,)32 b(if)26 b(the)h(system)f(knows)f(of)120 692 y(one.)57 b(The)26 b(argument)h Fp(the)p 609 692 V 15 w(orb)j Fs(is)c(the)g (result)g(of)g(a)h(call)f(to)g Ft(CORBA_ORB_init\(\))p Fs(.)56 b(Raises)120 755 y Ft(ex_CORBA_InvalidName)9 b Fs(if)j(the)f Fp(service)p 868 755 V 16 w(name)j Fs(doesn't)c(name)i (a)g(known)e(service.)0 878 y Fo(3.5.4)26 b(Identity)13 b(Functions)1739 1005 y Fs(Function)-1902 b Ft(ilu_Passport)11 b Fo(ILU)p 402 1005 15 3 v 19 w(C)p 457 1005 V 18 w(CreatePassport)208 1068 y Fk(\()p Ft(OPTIONAL)p Fk(\()p Ft(PASS)p Fk(\()p Ft(ilu_IdentityInfo)p Fk(\)\))e Ft(info,)i(ILU_ERRS)p Fk(\(\()p Ft(no_memory)p Fk(\)\))f Ft(*err)p Fk(\))120 1130 y Fs(Create)k(and)e(return)h(a)g(new)g(passport)f(object.)j(If)f (an)f(identity)e Fp(info)j Fs(is)e(passed)h(in,)g(will)f(put)g(that)g (identity)120 1192 y(in)f(the)g(new)g(passport.)1739 1303 y(Function)-1902 b Ft(ilu_IdentityInfo)11 b Fo(ILU)p 502 1303 V 18 w(C)p 556 1303 V 18 w(CopyIdentity\(RETAIN\(ilu)p 1141 1303 V 16 w(IdentityInfo\))208 1365 y Ft(info,)f(ILU_ERRS)p Fk(\(\()p Ft(no_memory)p Fk(\)\))h Ft(*err)p Fk(\))120 1427 y Fs(Creates)h(and)f(returns)f(a)i(copy)f(of)g(the)g(identity)e (in)i Fp(info)p Fs(.)1739 1538 y(Function)-1902 b Ft(ilu_boolean)11 b Fo(ILU)p 377 1538 V 19 w(C)p 432 1538 V 18 w (AddIdentity\(RETAIN\(ilu)p 995 1538 V 15 w(Passport\))23 b Ft(pp,)208 1600 y(PASS)p Fk(\()p Ft(ilu_IdentityInfo)p Fk(\))9 b Ft(info,)i(ILU_ERRS)p Fk(\(\()p Ft(no_memory)p Fk(\)\))g Ft(*err)p Fk(\))120 1663 y Fs(Adds)f(the)h(specified)g (identity)e(to)i(the)g(specified)f(passport,)g(which)h(now)f(owns)h (the)g(identity)e(storage.)1739 1773 y(Function)-1902 b Ft(OPTIONAL\(RETAIN\(ilu_IdentityInfo\)\))208 1836 y Fo(ILU)p 299 1836 V 18 w(C)p 353 1836 V 18 w (FindIdentity\(RETAIN\(ilu)p 924 1836 V 16 w(Passport\))22 b Ft(pp,)11 b(RETAIN)p Fk(\()p Ft(ilu_IdentityType)p Fk(\))208 1898 y Ft(ident_type)p Fk(\))120 1960 y Fs(If)j(the)f (passport)f Fp(pp)k Fs(contains)c(an)i(identity)d(of)j(the)f(specified) g(type,)h(returns)f(a)h(pointer)e(to)h(it,)h(otherwise)120 2022 y(returns)9 b Ft(ILU_NIL)p Fs(.)h(The)g(passport)e(retains)h (ownership)f(of)i(the)f(identities)e(storage;)j(the)f(caller)h(may)g (make)120 2085 y(a)i(copy)e(of)h(the)g(identity)f(by)g(calling)h Ft(ILU_C_CopyIdentity)p Fs(.)120 2172 y(Several)25 b(identity)e(types)h (are)h(pre-defined.)52 b(The)25 b(identity)e(type)h Ft (ilu_ConnectionIdentity)120 2234 y Fs(is)30 b(always)g(defined;)40 b(it)30 b(consists)e(of)j(a)g(string)e(which)h(describes)g(the)g (connection)f(used)i(by)120 2296 y(the)25 b(caller)g(to)f(communicate)i (with)e(the)g(server)i(in)e(a)i(colloquial)d(fashion.)52 b(The)25 b(identity)e(type)120 2359 y Ft(ilu_SunRPCAuthUnixIdentity)8 b Fs(is)j(defined)f(if)h(the)f Ft(Sun)h(RPC)g Fs(protocol)e(has)i(been) f(configured)g(in;)120 2421 y(it)g(provides)f(a)i(struct)e(containing)f (the)j(various)e(pieces)h(of)g(information)f(specified)h(by)g(the)g (protocol)f(spec-)120 2483 y(ification.)i(The)h(identity)d(type)i Ft(ilu_GSSIdentity)f Fs(is)h(available)g(if)h(support)e(for)h(the)h (secure)f(transport)120 2545 y(has)h(been)f(configured)g(in;)h(it)f (supports)f(a)i(variety)f(of)h(identity)e(schemes)i(under)f(the)h(GSS)g (umbrella.)h(See)120 2608 y(Chapter)e(14)f([Security],)g(page)h(212)f (and)g(the)g(file)g(`)p Fp(ILUSRC)t Ft(/runtime/kernel/iluxport.h)p Fs(')f(for)120 2670 y(more)j(information)e(on)h(identities)e(and)i (identity)e(schemes.)p eop %%Page: 63 64 63 63 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(63)1739 183 y(Function)-1902 b Ft(ilu_cardinal)11 b Fo(ILU)p 402 183 15 3 v 19 w(C)p 457 183 V 18 w(DisplayIdentity)21 b Fk(\()11 b Ft(RETAIN)p Fk(\()p Ft(ilu_IdentityInfo)p Fk(\))208 246 y Ft(identity,)f(RETAIN)p Fk(\()p Ft(char)h(*)p Fk(\))g Ft(buf,)g(ilu_cardinal)f(bufsize,)h(ILU_C_ENVIRONMENT)208 308 y(*)g(env)p Fk(\))120 370 y Fs(Formats)g(a)h(textual)e(display)g (of)h(the)g Fp(identity)h Fs(into)e Fp(buf)p Fs(,)h(respecting)f Fp(bufsize)p Fs(.)i(Returns)e(the)h(actual)g(length)120 432 y(of)g(the)g(string)e(\(the)i(amount)g(of)g(the)g(buffer)g(that)f (was)h(actually)f(used\).)h(May)h(raise)f(an)g(exception)f(through)120 495 y Fp(env)p Fs(.)1739 628 y(Function)-1902 b Ft(ilu_boolean)11 b Fo(ILU)p 377 628 V 19 w(C)p 432 628 V 18 w(DecodeGSSIdentity)20 b Fk(\()12 b Ft(RETAIN)p Fk(\()p Ft(ilu_IdentityInfo)p Fk(\))208 691 y Ft(identity,)e(OPTIONAL)p Fk(\()p Ft(gss_name_t)g(*)p Fk(\))h Ft(name,)g(OPTIONAL)p Fk(\()p Ft(ilu_FineTime)f(*)p Fk(\))208 753 y Ft(good_till,)g(OPTIONAL)p Fk(\()p Ft(gss_OID)p Fk(\))g Ft(mech,)h(OPTIONAL)p Fk(\()p Ft(ilu_boolean)p Fk(\))f Ft(localp,)208 815 y(OPTIONAL)p Fk(\()p Ft(OM_uint32)f(*)p Fk(\))j Ft(flags,)f(ILU_C_ENVIRONMENT)e(*)j(env)p Fk(\))120 877 y Fs(Only)d(available)g(if)h(ILU)f(has)h(been)g(configured)f(with)g (support)f(for)i(the)f(GSS)i(security)e(transport.)h(Returns)120 940 y(various)15 b(aspects)g(of)h(the)f(GSS)i(identity)d(in)h(the)h (output)e(parameters)i Fp(name)p Fs(,)i Fp(good)p 1489 940 14 3 v 16 w(till)p Fs(,)e Fp(mech)p Fs(,)i Fp(localp)p Fs(,)120 1002 y(and)12 b Fp(flags)p Fs(.)k(If)d(no)f(return)g(value)h (is)f(specified)g(for)g(an)h(output)e(parameter,)j(that)e(output)f (parameter)j(is)e(not)120 1064 y(returned.)k(May)e(raise)f(an)g (exception)e(through)h Fp(env)p Fs(,)h(in)g(which)f(case)h(the)g (return)g(value)f(is)g Ft(ilu_FALSE)p Fs(.)120 1127 y(If)g(no)e (exception)h(is)f(signalled,)g(the)h(return)g(value)g(is)f Ft(ilu_TRUE)p Fs(.)120 1221 y(The)h(meaning)g(of)g(the)g(output)f (parameters)h(are)h(as)f(follows:)157 1315 y Fr(\017)30 b Fp(name)14 b Fs(--)e(the)f(name)h(of)f(the)g(principal)f(in)h(the)f (identity.)157 1397 y Fr(\017)30 b Fp(good)p 305 1397 V 15 w(till)14 b Fs(--)e(the)f(time)g(when)g(the)g(identity)e(expires.) 157 1479 y Fr(\017)30 b Fp(mech)22 b Fs(--)c(the)f(specific)g(security) f(mechanism)i(used)e(to)h(authenticate)f(the)h(identity.)28 b(GSS)17 b(is)g(an)210 1542 y(`umbrella')c(system)f(which)g(allows)g (many)h(different)f(security)g(mechanisms)h(to)f(be)h(used)g(through) 210 1604 y(a)f(standard)e(interface.)157 1686 y Fr(\017)30 b Fp(localp)10 b Fs(--)g Ft(ilu_TRUE)f Fs(if)g(the)f(identity)g(is)g (local,)i Ft(ilu_FALSE)e Fs(if)h(the)g(identity)e(has)i(been)g (established)210 1748 y(for)i(a)h(remote)f(principal.)157 1830 y Fr(\017)30 b Fp(flags)14 b Fs(--)e(this)g(parameter)h(is)f(only) f(valid)h(for)h(remote)f(identities)f(\()p Fp(localp)j Fs(=)p Ft(>)e(ilu_FALSE)p Fs(\).)i(These)210 1892 y(are)f(the)g (context)e(flags)h(returned)h(from)g Ft(gss_inquire_context)e Fs(in)h(the)g Fp(ctx)p 1521 1892 V 16 w(flags)i Fs(parameter.)210 1955 y(See)19 b(`)p Fp(ILUSRC)t Ft (/GSS/doc/draft-ietf-cat-gssv2-cbind-01.tx)o(t)p Fs(')d(for)i(a)g (complete)210 2017 y(description.)120 2143 y(See)h(`)p Fp(ILUSRC)t Ft(/GSS/kernel/gssapi.h)p Fs(')f(for)g(a)h(definition)d(of) j(the)f(GSS)h(types)f Ft(gss_name_t)p Fs(,)120 2206 y Ft(gss_OID)p Fs(,)11 b(and)g Ft(OM_uint32)p Fs(.)1739 2339 y(Function)-1902 b Ft(OPTIONAL\(PASS\(ilu_string\)\))10 b Fo(ILU)p 751 2339 15 3 v 19 w(C)p 806 2339 V 17 w(GSSNameToString)22 b Fk(\()208 2402 y Ft(RETAIN)p Fk(\()p Ft(gss_name_t)p Fk(\))10 b Ft(gss_name,)g(ILU_C_ENVIRONMENT)g(*)h(env)p Fk(\))120 2464 y Fs(Returns)j(a)g(newly-malloced)f(string)g(containing) f(a)i(textual)f(representation)g(of)h(the)f(principal)g(name)i(in)120 2526 y Fp(gss)p 182 2526 14 3 v 15 w(name)p Fs(.)e(May)e(raise)g(an)h (exception)e(through)g Fp(env)p Fs(,)h(in)g(which)f(case)i(returns)e Ft(ILU_NIL)p Fs(.)120 2621 y(See)i(`)p Fp(ILUSRC)t Ft (/GSS/kernel/gssapi.h)p Fs(')e(for)h(a)h(definition)d(of)i(the)g(GSS)h (type)f Ft(gss_name_t)p Fs(.)p eop %%Page: 64 65 64 64 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(64)1739 183 y(Function)-1902 b Ft(ilu_IdentityInfo)11 b Fo(ILU)p 502 183 15 3 v 18 w(C)p 556 183 V 18 w(AcquireGSSIdentity)21 b Fk(\()p Ft(gss_cred_id_t)10 b Fp(c)p Ft(,)208 246 y (ILU_C_ENVIRONMENT)f(*)j Fp(err)t Fk(\))120 308 y Fs(Available)29 b(only)g(if)h(the)g(security)f(transport)g(filter)h(has)f(been)h (configured)g(in.)67 b(Returns)30 b(an)120 370 y Ft(ilu_IdentityInfo)20 b Fs(corresponding)f(to)i(the)g(given)g(GSS)h(credentials.)40 b(May)22 b(raise)g(an)f(excep-)120 432 y(tion)10 b(through)g Fp(err)p Fs(,)i(in)f(which)f(case)i(returns)e Ft(ILU_NIL)p Fs(.)120 523 y(See)i(`)p Fp(ILUSRC)t Ft(/GSS/kernel/gssapi.h)p Fs(')e(for)h(a)h(definition)d(of)i(the)g(GSS)h(type)f Ft(gss_cred_id_t)p Fs(.)1739 645 y(Function)-1902 b Ft (OPTIONAL\(gss_cred_id_t\))10 b Fo(ILU)p 676 645 V 19 w(C)p 731 645 V 18 w(AcquireGSSCredForName)22 b Fk(\()p Ft(char)208 707 y(*)p Fp(name)p Ft(,)11 b(ilu_cardinal)f Fp(lifetime)p Ft(,)h(gss_OID)g Fp(secmech)p Ft(,)h(ilu_boolean)e Fp(accept)p 1638 707 14 3 v 16 w(only)p Ft(,)208 769 y(ILU_C_ENVIRONMENT)f(*)j Fp(err)t Fk(\))120 831 y Fs(Available)f(only) g(if)i(the)f(security)f(transport)g(filter)h(has)g(been)g(configured)f (in.)j(Returns)e(GSS)h(credentials)120 894 y(given)d(the)h(cannonical)g (inputs,)e(which)i(are)157 984 y Fr(\017)30 b Fp(name)20 b Fs(--)d(specifies)e(the)i(name)g(of)f(the)g(principal)g(to)g(acquire) g(credentials)g(for.)27 b(It)17 b(should)e(be)h(of)210 1046 y(the)21 b(form)i Ft(:)p Fs(,)f(where)g(the)f(namespace-)210 1109 y(identifier)10 b(is)h(a)h(stringified)d Ft(gss_OID)p Fs(,)i(and)g(the)g (principal-name)g(is)g(a)g(name)h(in)f(that)g(namespace's)210 1171 y(string)c(formulation.)g(An)g(example)g(would)g(be)g Ft("1.2.840.113)o(550.9.1.4:s)o(omeone@par)o(c.xerox.com)o(")p Fs(.)210 1233 y(The)25 b(namespace-identifier)g(identifies)f(the)h (iso.member-body.US.Xerox.ILU.GSS.rfc822-)210 1296 y(namespace)10 b(namespace,)h(which)e(supports)f(RFC)i(822)f(style)g(mail)g(addresses) g(for)h(principal)f(names.)210 1358 y(See)j(Chapter)f(14)g([Security],) h(page)f(212)f(for)i(a)f(discussion)e(of)i(available)g(namespaces.)157 1436 y Fr(\017)30 b Fp(lifetime)17 b Fs(--)f(specifies)e(the)h(time)g (in)g(seconds)f(that)h(these)f(credentials)h(should)e(be)i(good)g(for.) 23 b(The)210 1498 y(value)11 b Ft(GSS_C_INDEFINITE)f Fs(may)h(be)h(specified)e(for)h(an)h(infinite)d(period.)157 1576 y Fr(\017)30 b Fp(sechmech)20 b Fs(--)14 b(a)h(GSS)g(OID)g (specifying)e(the)h(particular)g(security)g(mechanism)g(which)g(should) f(be)210 1638 y(used)j(to)g(validate)g(the)h(identity.)26 b(See)17 b(Chapter)g(14)g([Security],)h(page)f(212)f(for)h(a)g (discussion)d(of)210 1701 y(available)c(security)h(mechanisms.)157 1779 y Fr(\017)30 b Fp(accept)p 329 1779 V 16 w(only)15 b Fs(--)f(specifies)f(whether)g(the)h(credentials)e(may)i(be)g(used)f (to)g(accept)h(security)f(contexts)210 1841 y(or)e(initiate)e(them.)j (When)e(specified)g(as)h Ft(ilu_TRUE)p Fs(,)g(the)f(returned)h (credentials)f(may)h(only)f(be)h(used)210 1903 y(to)k(accept)h (security)f(contexts.)24 b(When)15 b(specified)g(as)h Ft(ilu_FALSE)p Fs(,)h(they)e(may)h(only)f(be)g(used)h(to)210 1965 y(initiate)10 b(security)g(contexts.)120 2084 y(May)i(raise)f(an)g (exception)f(through)g Fp(err)p Fs(,)i(in)f(which)f(case)i(a)f(value)g (of)h Ft(ILU_NIL)e Fs(is)h(returned.)120 2174 y(See)19 b(`)p Fp(ILUSRC)t Ft(/GSS/kernel/gssapi.h)p Fs(')f(for)h(a)g (definition)d(of)j(the)f(GSS)h(types)f Ft(gss_OID)g Fs(and)120 2237 y Ft(gss_cred_id_t)p Fs(.)1739 2359 y(Function)-1902 b Ft(ilu_IdentityInfo)11 b Fo(ILU)p 502 2359 15 3 v 18 w(C)p 556 2359 V 18 w(AcquireSunRPCAuthUnixIdentity)208 2421 y Fk(\()p Ft(ilu_string)f Fp(hostname)p Ft(,)h(ilu_shortcardinal)e Fp(uid)p Ft(,)i(ilu_shortcardinal)f Fp(gid)p Ft(,)208 2483 y(ilu_shortcardinal)f Fp(ngroups)p Ft(,)h(ilu_shortcardinal*)g Fp(groups)p Ft(,)208 2545 y(ILU_C_ENVIRONMENT)f(*)j Fp(env)r Fk(\))120 2608 y Fs(Available)26 b(only)f(if)i(SunRPC)h(UNIX)e (Authorization)f(has)h(been)h(configured)f(in.)58 b(Returns)26 b(an)120 2670 y Ft(ilu_IdentityInfo)10 b Fs(corresponding)f(to)i(the)g (given)f(UNIX)h(credentials.)p eop %%Page: 65 66 65 65 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(65)1739 183 y(Function)-1902 b Ft(ilu_boolean)11 b Fo(ILU)p 377 183 15 3 v 19 w(C)p 432 183 V 18 w(SetPassportContext)21 b Fk(\()p Ft(ilu_Passport)11 b Fp(pp)r Fk(\))120 246 y Fs(Sets)i(the)g(special)g(hidden)f(per-thread)h(slot)f(for)h (passports)f(to)g(contain)g Fp(pp)p Fs(.)17 b(The)d(slot)e(retains)g (that)h(value)120 308 y(until)d(explicitly)f(changed)i(later.)1739 429 y(Function)-1902 b Ft(ilu_Passport)11 b Fo(ILU)p 402 429 V 19 w(C)p 457 429 V 18 w(GetPassportContext)21 b Fk(\()p Ft(void)p Fk(\))120 491 y Fs(Returns)11 b(the)g(value)f(in)h (the)g(special)g(hidden)f(per-thread)h(slot)f(for)h Ft(ilu_Passport)p Fs(s.)1739 613 y(Function)-1902 b Ft(ilu_boolean)11 b Fo(ILU)p 377 613 V 19 w(C)p 432 613 V 18 w(DestroyPassport)23 b Fk(\()p Ft(PASS)p Fk(\()p Ft(ilu_Passport)p Fk(\))10 b Ft(pp,)208 675 y(ilu_Error)g(*)h(err)p Fk(\))120 737 y Fs(Deallocates)f(the)h(storage)g(associated)f(with)g(the)h(passport,) f(and)h(any)g(associated)g(identities.)1739 858 y(Function)-1902 b Ft(OPTIONAL\(ilu_Passport\))10 b Fo(ILU)p 651 858 V 19 w(C)p 706 858 V 18 w(CallerIdentity)21 b Fk(\()p Ft(void)p Fk(\))120 921 y Fs(Returns)11 b(the)g(passport)f(associated)g(with)g (the)h(caller,)h(or)f(possibly)e Ft(ILU_NIL)i Fs(if)g(being)f(invoked)g (directly)120 983 y(in)i(a)h(thread)g(with)e(no)i(passport)e(set.)16 b(This)11 b(procedure)i(should)e(only)h(be)h(invoked)e(inside)g(the)i (scope)f(of)h(a)120 1045 y(true)e(method.)0 1179 y Fo(3.5.5)26 b(Call)14 b(Management)h(Functions)f(in)h(C)1739 1317 y Fs(Function)-1902 b Ft(ILU_C_Serializer)11 b Fo(ILU)p 502 1317 V 18 w(C)p 556 1317 V 18 w(CreateSerializationContext)20 b Fk(\()p Ft(ILU_C_Server)208 1379 y Fp(S)p Ft(,)11 b (ILU_C_ENVIRONMENT)f(*)p Fp(env)r Fk(\))120 1441 y Fs(Creates)k(a)g (new)f(instance)g(of)g(the)h(serialization)e(guarantee;)i(this)e (instance)h(is)g(applicable)f(only)h(to)g(calls)120 1503 y(on)e(objects)f(of)h Fp(S)p Fs(.)1739 1625 y(Function)-1902 b Ft(ilu_boolean)11 b Fo(ILU)p 377 1625 V 19 w(C)p 432 1625 V 18 w(ReleaseSerializer)23 b Fk(\()p Ft(ILU_C_Serializer)10 b Fp(si)p Ft(,)208 1687 y(ILU_C_ENVIRONMENT)f(*)p Fp(env)r Fk(\))120 1749 y Fs(A)i(client)g(calls)f(this)g(after)i(it)f(is)f(done) h(using)f(the)h(given)f Ft(ilu_Serializer)p Fs(.)1739 1870 y(Function)-1902 b Ft(ilu_boolean)11 b Fo(ILU)p 377 1870 V 19 w(C)p 432 1870 V 18 w(SetSerializationContext)19 b Fk(\()p Ft(ILU_C_Serializer)10 b Fp(x)r Fk(\))120 1933 y Fs(Sets)h(the)g(special)f(hidden)g(per-thread)h(slot)f(for)h Ft(ILU_C_Serializer)p Fs(s)f(to)g(contain)h Fp(x)p Fs(.)g(The)g(slot)f (retains)120 1995 y(that)h(value)f(until)g(explicitly)f(changed)i (later.)1739 2116 y(Function)-1902 b Ft(ILU_C_Serializer)11 b Fo(ILU)p 502 2116 V 18 w(C)p 556 2116 V 18 w(GetSerializationContext) 20 b Fk(\()p Ft(void)p Fk(\))120 2178 y Fs(Returns)11 b(the)g(value)f(in)h(the)g(special)g(hidden)f(per-thread)h(slot)f(for)h Ft(ILU_C_Serializer)p Fs(s.)1739 2300 y(Function)-1902 b Ft(ILU_C_Batcher)11 b Fo(ILU)p 427 2300 V 19 w(C)p 482 2300 V 18 w(CreateBatcher)22 b Fk(\()p Ft(ilu_FineTime)10 b Fp(timeout)p Ft(,)208 2362 y(ilu_boolean)g Fp(pushable)p Ft(,)g(ILU_C_ENVIRONMENT)g(*)p Fp(env)r Fk(\))120 2424 y Fs(Creates)i(a)f(new)g(batcher.)1739 2545 y(Function)-1902 b Ft(ilu_boolean)11 b Fo(ILU)p 377 2545 V 19 w(C)p 432 2545 V 18 w(ReleaseBatcher)23 b Fk(\()p Ft(ILU_C_Batcher)10 b Fp(val)p Ft(,)208 2608 y(ILU_C_ENVIRONMENT)f(*)p Fp(env)r Fk(\))120 2670 y Fs(A)i(client)g(calls)f(this)g(after)i(it)f(is)f(done) h(using)f(the)h(given)f Ft(ILU_C_Batcher)p Fs(.)p eop %%Page: 66 67 66 66 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(66)1739 183 y(Function)-1902 b Ft(ilu_boolean)11 b Fo(ILU)p 377 183 15 3 v 19 w(C)p 432 183 V 18 w(SetBatcherContext)20 b Fk(\()p Ft(ILU_C_Batcher)11 b Fp(x)r Fk(\))120 246 y Fs(Sets)g(the)f(special)g(hidden)g(per-thread)h(slot)e(for)i Ft(ILU_C_Batcher)p Fs(s)e(to)i(contain)e Fp(x)p Fs(.)j(The)e(slot)g (retains)g(that)120 308 y(value)h(until)f(explicitly)f(changed)h (later.)1739 423 y(Function)-1902 b Ft(ILU_C_Batcher)11 b Fo(ILU)p 427 423 V 19 w(C)p 482 423 V 18 w(GetBatcherContext)20 b Fk(\()p Ft(void)p Fk(\))120 485 y Fs(Returns)11 b(the)g(value)f(in)h (the)g(special)g(hidden)f(per-thread)h(slot)f(for)h Ft(ILU_C_Batcher)p Fs(s.)1739 600 y(Function)-1902 b Ft(ilu_boolean)11 b Fo(ILU)p 377 600 V 19 w(C)p 432 600 V 18 w(PushBatcher)23 b Fk(\()p Ft(ILU_C_Batcher)10 b Fp(b)p Ft(,)208 663 y (ILU_C_ENVIRONMENT)f(*)j Fp(env)r Fk(\))120 725 y Fs(Initiates)e (delivery)g(of)h(all)g(buffered)g(call)g(messages)h(associated)e(with)g Fp(b)p Fs(.)1739 840 y(Function)-1902 b Ft(ILU_C_Pipeline)11 b Fo(ILU)p 452 840 V 19 w(C)p 507 840 V 18 w(CreatePipeline)22 b Fk(\()p Ft(ILU_C_ENVIRONMENT)10 b(*)p Fp(env)r Fk(\))120 902 y Fs(Creates)i(a)f(new)g(pipeline.)1739 1017 y(Function)-1902 b Ft(ilu_boolean)11 b Fo(ILU)p 377 1017 V 19 w(C)p 432 1017 V 18 w(ReleasePipeline)23 b Fk(\()p Ft(ILU_C_Pipeline)10 b Fp(pl)p Ft(,)208 1080 y(ILU_C_ENVIRONMENT)f(*)p Fp(env)r Fk(\))120 1142 y Fs(A)i(client)g(calls)f(this)g(after)i(it)f(is)f(done) h(using)f(the)h(given)f Ft(ILU_C_Pipeline)p Fs(.)1739 1257 y(Function)-1902 b Ft(ilu_boolean)11 b Fo(ILU)p 377 1257 V 19 w(C)p 432 1257 V 18 w(SetPipelineContext)20 b Fk(\()p Ft(ILU_C_Pipeline)11 b Fp(x)r Fk(\))120 1319 y Fs(Sets)j(the)g(special)g(hidden)g(per-thread)g(slot)f(for)i Ft(ILU_C_Pipeline)p Fs(s)e(to)h(contain)f Fp(x)p Fs(.)21 b(The)15 b(slot)e(retains)120 1381 y(that)e(value)f(until)g(explicitly) f(changed)i(later.)1739 1497 y(Function)-1902 b Ft(ILU_C_Pipeline)11 b Fo(ILU)p 452 1497 V 19 w(C)p 507 1497 V 18 w(GetPipelineContext)20 b Fk(\()p Ft(void)p Fk(\))120 1559 y Fs(Returns)11 b(the)g(value)f(in)h (the)g(special)g(hidden)f(per-thread)h(slot)f(for)h Ft(ILU_C_Pipeline)p Fs(s.)0 1686 y Fo(3.5.6)26 b(Server)15 b(Manipulation)1609 1818 y Fs(Macro)d(Function)-1902 b Ft(ilu_boolean)11 b Fo(ILU)p 377 1818 V 19 w(C)p 432 1818 V 18 w(USE)p 547 1818 V 18 w(OS)p 632 1818 V 17 w(THREADS)120 1880 y Fs(Locking:)e(Main)j(invariant)e(holds.)120 1969 y(This)f(macro)h (expands)f(to)g(a)h(function)e(call.)j(If)f(ILU)f(has)h(been)f (configured)g(with)f(os-level)h(thread)g(support,)120 2031 y(calling)14 b(this)g(routine)g(will)f(`turn)i(on')g(that)f (thread)h(support)e(for)i(use)g(with)f(C.)i(This)d(means)j(that)e(a)h (new)120 2093 y(thread)d(will)f(be)h(forked)g(to)g(handle)f(each)i (incoming)e(connection,)g(in)h(servers,)h(and)e(if)i(the)e(wire)i (protocol)120 2155 y(being)g(used)h(permits)g(it,)h(a)f(thread)g(will)f (be)i(forked)f(to)g(handle)f(each)i(incoming)e(request.)20 b(This)13 b(routine)120 2218 y(returns)i(FALSE,)h(and)f(emits)g(an)h (error)g(message,)h(if)f(something)e(goes)h(wrong)g(with)f(enabling)g (thread)120 2280 y(support.)30 b(It)18 b(must)g(be)g(called)f(before)h (making)g(any)g(other)f(ILU)h(calls,)h(and)f(before)g(initializing)d (any)120 2342 y(interfaces)c(via)g(calls)g(to)f Fp(interface)s Ft(__Initialize)g Fs(or)h Fp(interface)s Ft(__InitializeServer)p Fs(.)1609 2457 y(Macro)h(Function)-1902 b Ft(void)12 b Fo(ILU)p 203 2457 V 19 w(C)p 258 2457 V 17 w(FINISH)p 446 2457 V 19 w(MAIN)p 603 2457 V 18 w(THREAD)23 b Fk(\()12 b Ft(int)f Fp(returnvalue)i Fk(\))120 2520 y Fs(Locking:)c(Main)j (invariant)e(holds.)120 2608 y(This)d(routine)h(will)f(return)h(from)h (the)f(`main')g(thread)h(with)e(the)h(specified)g(value.)i(In)e(some)h (thread)f(systems,)120 2670 y(the)18 b(program)g(will)e(be)i (terminated)g(when)f(the)h(main)g(thread)g(returns)f(from)h Ft(main\(\))p Fs(,)i(regardless)d(of)p eop %%Page: 67 68 67 67 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(67)120 183 y(whether)15 b(other)f(threads)h(are)h(running.)22 b(For)15 b(these)g(thread)g(systems,)g(this)f(call)h(will)f(simply)g (cause)h(the)120 246 y(main)c(thread)g(to)g(idle)f(forever,)i(instead)f (of)g(returning.)1739 366 y(Function)-1902 b Ft(void)12 b Fo(ILU)p 203 366 15 3 v 19 w(C)p 258 366 V 17 w(Run)23 b Fk(\()p Ft(void)p Fk(\))120 428 y Fs(Locking:)9 b(Main)j(invariant)e (holds.)120 518 y(Called)16 b(to)f(animate)h(a)g(server)h(and/or)e (other)g(parts)h(of)g(the)f(program.)26 b(Used)15 b(only)g(in)h (single-threaded)120 580 y(mode.)c(Invokes)e(the)h(event)g(handling)e (loop.)i(Never)g(returns.)1739 700 y(Function)-1902 b Ft(OPTIONAL\(ILU_C_Server\))10 b Fo(ILU)p 651 700 V 19 w(C)p 706 700 V 18 w(InitializeServer)208 763 y Fk(\()p Ft(OPTIONAL)p Fk(\()p Ft(RETAIN)p Fk(\()p Ft(char)g(*)p Fk(\)\))h Fp(serverID)p Ft(,)g(OPTIONAL)p Fk(\()p Ft(GLOBAL)p Fk(\()p Ft(ILU_C_ObjectTable)p Fk(\)\))208 825 y Fp(obj)p 270 825 14 3 v 15 w(tab)p Ft(,)g(OPTIONAL)p Fk(\()p Ft(RETAIN)p Fk(\()p Ft(ilu_ProtocolInfo)p Fk(\)\))e Fp(protocol)p Ft(,)208 887 y(OPTIONAL)p Fk(\()p Ft(RETAIN)p Fk(\()p Ft(ilu_TransportInfo)p Fk(\)\))g Fp(transport)p Ft(,)208 949 y(OPTIONAL)p Fk(\()p Ft(RETAIN)p Fk(\()p Ft(ilu_Passport)p Fk(\)\))g Fp(identity)p Ft(,)g(ilu_boolean)i Fp(createPortAnyway)r Fk(\))120 1012 y Fs(Locking:)e(Main)j(invariant)e(holds.)120 1101 y(Creates)16 b(and)g(returns)f(an)h Ft(ilu_Server)f Fs(with)g(ID)g Fp(serverID)p Fs(,)i(object)e(mapping)g(table)g Fp(obj)p 1635 1101 V 16 w(tab)p Fs(,)i(using)120 1164 y(protocol)f Fp(protocol)k Fs(over)d(a)h(transport)e(stack)h(specified) g(by)g Fp(transport)p Fs(.)28 b(If)18 b Fp(serverID)j Fs(is)c(specified)f(as)120 1226 y Ft(NULL)p Fs(,)g(a)e(unique)g(string) f(is)h(generated)h(automatically)e(for)i(the)f(server)h(ID.)g(If)g Fp(obj)p 1482 1226 V 15 w(tab)j Fs(is)c(specified)g(as)120 1288 y Ft(NULL)p Fs(,)d(the)g(default)g(hash)g(table)f(object)h(table)f (is)h(used.)120 1378 y(If)23 b(either)g Fp(protocol)j Fs(or)d Fp(transport)j Fs(is)c(specified,)k(or)d(if)f Fp(createPortAnyway)p Fs(,)k(an)d Ft(ilu_Port)f Fs(will)120 1440 y(automatically)15 b(be)i(created)g(and)g(added)f(to)g(the)g Ft(ilu_Server)p Fs(.)28 b Fp(protocol)p Fs(,)17 b(if)f(not)g Ft(NULL)p Fs(,)i(is)e(a)h(string)120 1503 y(that)11 b(specifies)g (which)g(RPC)i(protocol)d(to)h(use)h(on)f(the)g(port;)g Ft(NULL)h Fs(causes)f(use)h(of)g(the)f(default)g(protocol.)120 1565 y Fp(transport)p Fs(,)i(if)h(not)e Ft(NULL)p Fs(,)i(is)f(a)h (sequence)f(of)h(strings)e(that)h(specifies)f(the)h(transport)g(stack)g (to)g(use)g(below)120 1627 y(the)d(RPC)h(protocol;)d Ft(NULL)i Fs(signifies)e(use)i(of)f(the)h(default)f(transport)g (to/from)g(one)h(of)g(the)f(IP)i(addresses)e(of)120 1689 y(this)h(host.)h(See)h(Section)f(13.2.5)h([Protocols)e(and)h (Transports],)g(page)g(211)g(for)g(details)g(on)g(protocols)e(and)120 1752 y(transports.)j(If)g(an)g Fp(identity)g Fs(is)f(specified,)g(it)h (may)g(be)f(used)h(for)g(communications)e(security)h(purposes.)h(If)120 1814 y(an)f Ft(ilu_Port)g Fs(is)g(called)f(for,)i(it)f(will)f(become)i (the)f(default)f(port)h(of)g(the)g Ft(ilu_Server)p Fs(.)1739 1934 y(Function)-1902 b Ft(ilu_boolean)11 b Fo(ILU)p 377 1934 15 3 v 19 w(C)p 432 1934 V 18 w(AddPort)22 b Fk(\()p Ft(ILU_C_Server)10 b Fp(server)p Ft(,)208 1996 y(OPTIONAL)p Fk(\()p Ft(RETAIN)p Fk(\()p Ft(ilu_ProtocolInfo)p Fk(\)\))f Fp(protocol)p Ft(,)208 2059 y(OPTIONAL)p Fk(\()p Ft(RETAIN)p Fk(\()p Ft(ilu_TransportInfo)p Fk(\)\))g Fp(transport)p Ft(,)208 2121 y(OPTIONAL)p Fk(\()p Ft(RETAIN)p Fk(\()p Ft(ilu_Passport)p Fk(\)\))g Fp(identity)p Ft(,)g(ilu_boolean)i Fp(makeDefault)p Ft(,)208 2183 y(ILU_C_ENVIRONMENT)e(*)j Fp(env)r Fk(\))120 2246 y Fs(Locking:)d(Main)j(invariant)e(holds.)120 2335 y(Creates)17 b(a)g(new)g Ft(ilu_Port)f Fs(for)g(the)h Fp(server)p Fs(.)28 b Fp(protocol)p Fs(,)17 b Fp(transport)p Fs(,)g(and)f Fp(identity)h Fs(parameterize)g(the)120 2398 y Ft(ilu_Port)11 b Fs(as)g(for)g Ft(ILU_C_InitializeServer)p Fs(.)1739 2518 y(Function)-1902 b Ft(\(RETAIN\(ilu_string\)\))11 b Fo(ILU)p 602 2518 V 18 w(C)p 656 2518 V 18 w(IDOfServer)22 b Fk(\()12 b Ft(ILU_C_Server)e Fp(server)15 b Fk(\))120 2580 y Fs(Locking:)9 b(Main)j(invariant)e(holds.)120 2670 y(Returns)h(a)g(pointer)f(to)h(the)g(server)g(id)g(of)g(the)g (specified)g(server.)p eop %%Page: 68 69 68 68 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(68)1739 183 y(Function)-1902 b Ft(ILU_C_ObjectTable)11 b Fo(ILU)p 527 183 15 3 v 18 w(C)p 581 183 V 18 w(CreateObjectTable)21 b Fk(\()p Ft(CORBA_Object)208 246 y Fk(\()p Ft(*)p Fp(object)p 363 246 14 3 v 15 w(of)p 416 246 V 16 w(ih)5 b Fk(\)\()p Ft(ilu_string)10 b(instance-handle,)g(ilu_private)g(user-data)p Fk(\))p Ft(,)208 308 y(void)h Fk(\()p Ft(*)p Fp(free)p 432 308 V 17 w(user)p 525 308 V 16 w(data)s Fk(\)\()p Ft(ilu_private)f(user-data)p Fk(\))p Ft(,)h(ilu_private)f Fp(user-data)15 b Fk(\))120 370 y Fs(Locking:)9 b(Main)j(invariant)e (holds.)120 432 y(Locking)h(for)h Fp(object)p 464 432 V 16 w(of)p 518 432 V 16 w(ih)5 b Fs(:)12 b(L1)g Ft(>)p Fs(=)g Ft({)p Fs(server)p Ft(})p Fs(,)g(L1)g Ft(>)p Fs(=)g Ft({)p Fs(gcmu)p Ft(})g Fs(if)g(result)g(is)f(true)h(and)g (collectible;)f(L2,)120 495 y(Main)g(unconstrained.)120 557 y(Locking)f(for)h Fp(free)p 420 557 V 17 w(user)p 513 557 V 16 w(data)s Fs(:)g(L1)g Ft(>)p Fs(=)g Ft({)p Fs(server)p Ft(})p Fs(;)g(L2,)g(Main)h(unconstrained.)120 654 y(Creates)22 b(and)e(returns)h(a)g(value)g(of)g(type)g Ft(ILU_C_ObjectTable)e Fs(encapsulating)h(the)g(two)h(proce-)120 716 y(dures)16 b Fp(object)p 350 716 V 15 w(of)p 403 716 V 17 w(ih)k Fs(and)c Fp(free)p 628 716 V 17 w(user)p 721 716 V 16 w(data)p Fs(,)i(and)e(the)g(user-specified)f(data)i (element)f Fp(user-data)p Fs(.)26 b(When)120 778 y Fp(object)p 235 778 V 15 w(of)p 288 778 V 17 w(ih)f Fs(is)20 b(called,)j(it)e (should)e(create)j(an)e(appropriate)h Ft(CORBA_Object)e Fs(with)h(the)h(specified)120 841 y(instance)11 b(handle,)h(and)h (return)e(it.)j(When)e Fp(free)p 870 841 V 17 w(user)p 963 841 V 16 w(data)k Fs(is)c(called,)g(it)g(indicates)f(the)h(end)g (of)g(the)g(object)120 903 y(table,)f(and)g Fp(free)p 381 903 V 17 w(user)p 474 903 V 16 w(data)k Fs(should)9 b(free)j(up)f(any)g(storage)g(associated)f(with)g Fp(user-data)p Fs(.)120 1000 y(An)h(object)g(table)g(is)g(associated)g(with)g(a)h (kernel)f(server)h(by)f(passing)f(the)i(object)e(table)i(as)f(a)h (parameter)h(to)120 1062 y(the)h(function)f Ft(ILU_C_InitializeServer)p Fs(.)19 b(A)c(single)e(object)g(table)h(may)h(be)f(used)g(with)f (multiple)120 1124 y(different)e Ft(ilu_Server)f Fs(instances.)1569 1265 y(C)i(Procedure)g(Type)-1901 b Fo(ILU)p 91 1265 15 3 v 19 w(C)p 146 1265 V 17 w(ServerRelocateProc)120 1328 y Fs(Locking:)9 b(L1)i Ft(>)p Fs(=)g Ft({)p Fs(ilu)p 496 1328 14 3 v 16 w(Server)p Ft(})p Fs(;)g(L2)g(unconstrained)240 1424 y Ft(typedef)24 b(ilu_boolean)290 1474 y (\(*ILU_C_ServerRelocateProc\))e(\(ILU_C_Server)i Fp(server)p Ft(,)414 1524 y(ilu_private)g Fp(argument)p Ft(,)414 1574 y(OPTIONAL\(ilu_ProtocolInfo)f(*\))i Fp(new)p 1216 1574 V 16 w(pinfo)p Ft(,)414 1624 y(OPTIONAL\(ilu_TransportInfo)e(*\))i Fp(new)p 1241 1624 V 16 w(tinfo)r Ft(\);)120 1755 y Fs(This)20 b(function)f(should)g(return)h(TRUE)g(if)h(new)f(pinfo)g(and)h(tinfo)e (have)i(been)f(stored)g(into)g(the)g(out)120 1817 y(parameters;)c (otherwise)e(it)f(should)g(return)h(FALSE.)h(It)g(has)f(no)g(mechanism) g(for)h(signalling)d(errors.)21 b(It)120 1880 y(is)12 b(called)h(by)g(a)g(protocol)f(implementation)f(to)i(see)g(if)g(the)f (server)h(wants)g(the)f(caller)h(to)g(be)g(redirected)g(to)120 1942 y(another)e(location)e(or)j(cinfo)e(stack.)1739 2083 y(Function)-1902 b Ft(OPTIONAL\(void)10 b(*\))i Fo(ILU)p 488 2083 15 3 v 19 w(C)p 543 2083 V 18 w (SetServerRelocationProc)21 b Fk(\()p Ft(ILU_C_Server)208 2145 y Fp(server)p Ft(,)11 b(ILU_C_ServerRelocateProc)e Fp(relocation)p 1150 2145 14 3 v 15 w(fn)p Ft(,)i(void)g(*)h Fp(relocation)p 1570 2145 V 15 w(arg)p Ft(,)208 2208 y(ILU_C_ENVIRONMENT)d(*)j(metavarenv)p Fk(\))120 2270 y Fs(Locking:)d(Main)j(invariant)e(holds)120 2367 y(Ensures)19 b(that)g(the)g(function)g Fp(relocation)p 805 2367 V 15 w(fn)j Fs(will)d(be)h(called)f(with)g Fp(relocation)p 1446 2367 V 15 w(arg)j Fs(as)e(an)f(argument)120 2429 y(whenever)d(a)h(request)f(comes)g(in)g(for)g(an)h(object)e(maintained) h(by)g Fp(server)p Fs(,)i(on)e(any)g(connection)f(which)120 2491 y(uses)c(a)i(relocating)e(protocol)g(\(currently)g(only)g Ft(w3ng)h Fs(is)f(a)i(relocating)e(protocol\).)i(See)f(the)g (definition)e(of)120 2554 y Ft(ILU_C_ServerRelocateProc)g Fs(for)j(a)f(description)f(of)h(how)g(it)g(is)f(used.)k(The)d(returned) g(value)g(is)f(the)120 2616 y(previous)f(value)h(of)g Fp(relocation)p 633 2616 V 15 w(arg)p Fs(,)h(if)f(any.)p eop %%Page: 69 70 69 69 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(69)1739 183 y(Function)-1902 b Ft(ilu_cardinal)11 b Fo(ilu)p 370 183 15 3 v 18 w(tcp)p 455 183 V 17 w (SetDefaultBuffersize)21 b Fk(\()p Ft(ilu_cardinal)208 246 y Fp(new-buffer-size)s Fk(\))120 308 y Fs(Locking:)9 b(Main)j(invariant)e(holds.)120 396 y(Sets)h(the)f(default)g (buffersize,)h(in)g(bytes,)f(for)h(TCP)g(transports)f(to)g Fp(new-buffer-size)p Fs(.)h(This)f(default)g(can)h(be)120 458 y(overridded)g(by)h(explicitly)e(specifying)h(a)i(buffersize)f(in)g (the)g(tinfo)f(for)i(the)f(port)f(or)i(object.)h(Returns)d(the)120 520 y(previous)e(default)h(value.)g(This)g(function)e(is)i(only)f (available)h(if)g(ILU)g(has)g(been)g(configured)f(with)h(support)120 582 y(for)h(the)g(TCP/IP)h(transport.)1739 697 y(Function)-1902 b Ft(void)12 b Fo(ilu)p 171 697 V 17 w(tcp)p 255 697 V 18 w(GetStats)21 b Fk(\()12 b Ft(ilu_cardinal)e(*)h Fp(bytes-sent)p Ft(,)f(ilu_cardinal)g(*)208 759 y Fp(bytes-read)p Ft(,)g(ilu_cardinal)g(*)i Fp(moorings-created)p Ft(,)e(ilu_cardinal)g (*)208 821 y Fp(connections-accepted)p Ft(,)f(ilu_cardinal)h(*)i Fp(connections-opened)p Ft(,)c(ilu_cardinal)j(*)208 883 y Fp(currently-open-connections)o Ft(,)e(ilu_cardinal)h(*)h Fp(max-simultaneously-open-connectio)o(ns)f Fk(\))120 1008 y Fs(Locking:)f(Main)j(invariant)e(holds.)120 1096 y(Returns)h(various)g(statistics)e(about)i(the)g(TCP/IP)i(tranports)d (use)h(of)h(various)f(resources)g(for)h(this)e(process.)120 1158 y(The)15 b(values)g(returned)f(are)i(the)f(values)g(since)g(the)g (process)f(was)h(started,)h(or)g(since)e(the)h(reset)h(function)120 1220 y Ft(ilu_tcp_InitializeStats\(\))22 b Fs(was)i(last)g(called,)k (except)c(for)h Fp(currently-open-connections)p Fs(,)120 1283 y(which)16 b(is)h(unaffected)g(by)f(the)h(reset)g(function.)28 b(This)16 b(function)g(is)g(only)g(available)h(if)f(ILU)h(has)g(been) 120 1345 y(configured)10 b(with)g(support)g(for)i(the)e(TCP/IP)i (transport.)1739 1459 y(Function)-1902 b Ft(void)12 b Fo(ilu)p 171 1459 V 17 w(tcp)p 255 1459 V 18 w(InitializeStats)21 b Fk(\(\))120 1521 y Fs(Locking:)9 b(Main)j(invariant)e(holds.)120 1609 y(Resets)j(the)g(statistics)d(counters)j(for)g(this)f(process.)k (This)c(function)g(is)g(only)g(available)h(if)g(ILU)f(has)h(been)120 1671 y(configured)d(with)g(support)g(for)i(the)e(TCP/IP)i(transport.)0 1798 y Fo(3.5.7)26 b(CORBA)15 b(Compatibility)e(Macros)62 1902 y Fs(ILU)f(supports)f(CORBA)i(2.0,)g(and)f(formerly)g(supported)f (either)h(1.1)g(or)h(1.2,)g(depending)d(on)i(how)g(it)g(was)g (installed)0 1965 y(at)f(your)g(site.)g(A)g(number)g(of)g(macros)h(are) g(defined)f(to)f(make)i(programs)f(less)g(dependent)f(on)h(which)f (version)g(they)h(use.)1782 2079 y(Macro)-1900 b Fo(ILU)p 91 2079 V 19 w(C)p 146 2079 V 17 w(OBJECT)120 2141 y Fs(Expands)10 b(to)h Ft(CORBA_Object)p Fs(.)1782 2255 y(Macro)-1900 b Fo(ILU)p 91 2255 V 19 w(C)p 146 2255 V 17 w(ENVIRONMENT)120 2317 y Fs(Expands)10 b(to)h Ft (CORBA_Environment)p Fs(.)1782 2431 y(Macro)-1900 b Fo(ILU)p 91 2431 V 19 w(C)p 146 2431 V 17 w(NO)p 238 2431 V 18 w(EXCEPTION)120 2494 y Fs(Expands)10 b(to)h Ft(CORBA_NO_EXCEPTION)p Fs(.)1782 2608 y(Macro)-1900 b Fo(ILU)p 91 2608 V 19 w(C)p 146 2608 V 17 w(USER)p 296 2608 V 18 w(EXCEPTION)120 2670 y Fs(Expands)10 b(to)h Ft(CORBA_USER_EXCEPTION)p Fs(.)p eop %%Page: 70 71 70 70 bop 0 -58 a Fs(Chapter)11 b(3:)g(Using)f(ILU)h(with)f(Standard)h (C)1201 b(70)1782 183 y(Macro)-1900 b Fo(ILU)p 91 183 15 3 v 19 w(C)p 146 183 V 17 w(SYSTEM)p 368 183 V 18 w(EXCEPTION)120 246 y Fs(Expands)10 b(to)h Ft(CORBA_SYSTEM_EXCEPTION)p Fs(.)1782 358 y(Macro)-1900 b Fo(ILU)p 91 358 V 19 w(C)p 146 358 V 17 w(SUCCESSFUL)23 b Fk(\()11 b Fp(ILU)p 612 358 14 3 v 17 w(C)p 659 358 V 16 w(ENVIRONMENT)g(*)g(ev)j Fk(\))120 420 y Fs(Evaluates)c(to)h(true)g(if)g(no)g(exception)f(has)h (been)g(raised.)1782 532 y(Macro)-1900 b Fo(ILU)p 91 532 15 3 v 19 w(C)p 146 532 V 17 w(SET)p 257 532 V 18 w(SUCCESSFUL)23 b Fk(\()12 b Fp(ILU)p 725 532 14 3 v 16 w(C)p 771 532 V 16 w(ENVIRONMENT)f(*)g(ev)j Fk(\))120 594 y Fs(Sets)d Fp(ev)j Fs(to)c(a)i(successful)e(result.)1782 706 y(Macro)-1900 b Fo(ILU)p 91 706 15 3 v 19 w(C)p 146 706 V 17 w(EXCEPTION)p 458 706 V 19 w(ID)24 b Fk(\()11 b Fp(ILU)p 658 706 14 3 v 16 w(C)p 704 706 V 17 w(ENVIRONMENT)f(*)i(ev) h Fk(\))120 769 y Fs(Returns)e(the)g Ft(char)g(*)g Fs(value)g(that)f (is)h(the)g(exception's)f(ID.)1782 881 y(Macro)-1900 b Fo(ILU)p 91 881 15 3 v 19 w(C)p 146 881 V 17 w(EXCEPTION)p 458 881 V 19 w(VALUE)24 b Fk(\()11 b Fp(ILU)p 777 881 14 3 v 16 w(C)p 823 881 V 17 w(ENVIRONMENT)f(*)i(ev)h Fk(\))120 943 y Fs(Expands)d(to)h Ft(CORBA_exception_value\()p Fp(ev)r Ft(\))p Fs(.)1782 1055 y(Macro)-1900 b Fo(ILU)p 91 1055 15 3 v 19 w(C)p 146 1055 V 17 w(EXCEPTION)p 458 1055 V 19 w(FREE)24 b Fk(\()12 b Fp(ILU)p 736 1055 14 3 v 16 w(C)p 782 1055 V 16 w(ENVIRONMENT)f(*)g(ev)j Fk(\))120 1117 y Fs(Expands)c(to)h Ft(CORBA_exception_free\()p Fp(ev)r Ft(\))p Fs(.)p eop %%Page: 71 72 71 71 bop 0 -58 a Fs(Chapter)11 b(4:)g(Using)f(ILU)h(with)f(Python)1274 b(71)0 183 y Fq(4)36 b(Using)14 b(ILU)h(with)g(Python)0 359 y Fu(4.1)30 b(Introduction)62 463 y Fs(This)11 b(document)g(is)g (for)h(the)f(Python)g(programmer)i(who)e(wishes)f(to)i(use)f(ILU.)h (The)g(following)d(sections)h(will)h(show)0 525 y(how)f(ILU)g(is)g (mapped)g(into)g(Python)f(constructs)g(and)h(how)g(both)f(Python)g (clients)h(and)g(servers)g(are)h(generated)f(and)g(built.)0 658 y Fu(4.2)30 b(The)14 b(ISL)i(Mapping)g(to)f(Python)0 796 y Fo(4.2.1)26 b(Names)62 899 y Fs(In)11 b(general,)g(ILU)g (constructs)e(Python)h(symbols)f(from)j(ISL)f(names)g(by)f(replacing)g (hyphens)f(with)h(underscores.)h(For)0 962 y(example,)f(an)g(ISL)g (object)f(type)g Ft(T-1)g Fs(would)g(correspond)g(to)g(the)g(Python)g (class)g Ft(T_1)p Fs(.)i(Any)e(place)g(an)h(ISL)g(name)g(appears)0 1024 y(as)h(part)g(or)g(all)g(of)h(a)f(Python)f(identifier,)h(this)f (translation)f(occurs.)0 1145 y Fo(4.2.2)26 b(Interface)62 1249 y Fs(Each)14 b(ISL)h Ft(interface)e Fp(I)18 b Fs(generates)c(two)g (Python)f(modules:)i(one)f(named)g Fp(I)19 b Fs(containing)12 b(common)i(definitions,)0 1311 y(and)h(another)g(named)g Fp(I)t Ft(__skel)g Fs(containing)f(skeletons)f(\(server)j(stubs\).)22 b(For)16 b(example,)g Ft(INTERFACE)11 b(map-test;)0 1373 y Fs(generates)k(the)f(Python)g(modules)g Ft(map_test)g Fs(and)g Ft(map_test__skel)p Fs(,)h(contained)f(in)g(the)h(files)f(`)p Ft(map_test.py)p Fs(')0 1435 y(and)d(`)p Ft(map_test__skel.py)p Fs(',)f(respectively.)0 1556 y Fo(4.2.3)26 b(Basic)15 b(Types)62 1660 y Fs(The)c(basic)g(ISL)h(types)e(have)h(the)g (following)e(mapping)i(to)f(Python)h(types:)26 1747 y(1.)30 b(BYTE,)19 b(BOOLEAN,)g(SHORT)g(CHARACTER,)h(CHARACTER,)f(SHORT)h (INTEGER,)e(INTEGER,)h(and)90 1809 y(SHORT)11 b(CARDINAL)h(all)e(map)i (to)f(Python)f(int.)26 1882 y(2.)30 b(LONG)11 b(INTEGER,)g(CARDINAL,)g (and)g(LONG)g(CARDINAL)g(all)g(map)g(to)g(Python)f(long)h(int.)26 1955 y(3.)30 b(SHORT)11 b(REAL)g(and)g(REAL)g(map)h(to)f(Python)f (float.)26 2028 y(4.)30 b(LONG)13 b(REAL)g(maps)g(to)g(the)g(Python)f (type)h(ilu)p 875 2028 14 3 v 15 w(longreal,)h(a)f(type)g(implemented)g (by)g(the)g(ILU)g(Python)f(runtime.)90 2090 y(This)h(type)h(has)g (limited)f(functionality,)g(but)g(can)h(be)h(passed)e(around)h(without) e(loss)h(of)h(precision,)g(converted)g(to)90 2152 y(float)d(or)g(int,)g (and)g(compared.)h(A)f(value)g(of)g(this)f(type)g(may)i(be)f (constructed)f(by)h(calling)f Ft(ilu.LongReal\(\))p Fs(.)0 2273 y Fn(4.2.3.1)23 b(Constant)62 2377 y Fs(ISL)12 b(constants)d (translate)i(to)f(Python)h(variables)f(initialized)f(to)i(the)g (specified)f(value.)i(For)f(example,)120 2464 y Ft(CONSTANT)24 b(pi)h(:)g(real)f(=)h(3.14159265358979323846;)62 2576 y Fs(maps)12 b(to)120 2663 y Ft(pi)25 b(=)g(3.14159265358979323846e0)p eop %%Page: 72 73 72 72 bop 0 -58 a Fs(Chapter)11 b(4:)g(Using)f(ILU)h(with)f(Python)1274 b(72)0 183 y Fo(4.2.4)26 b(Strings)62 287 y Fs(An)21 b(ISL)g Ft(SEQUENCE)10 b(OF)h(SHORT)g(CHARACTER)20 b Fs(maps)h(into)e(a)i(Python)f(string.)38 b Ft(SEQUENCE)11 b(OF)g(BYTE)21 b Fs(is)f(also)0 349 y(mapped)11 b(into)f(a)i(Python)e (string.)0 472 y Fo(4.2.5)26 b(Pickles)15 b(and)g(Typecodes)62 576 y Fs(A)9 b(value)g(corresponding)e(to)h(the)h(ISL)g(type)g Ft(PICKLE)f Fs(is)h(an)g(instance)f(of)h(the)f(Python)g(class)h Ft(ilu.Pickle)p Fs(.)h(Instances)0 638 y(of)h(this)f(class)h(have)g (the)g(following)e(methods:)37 725 y Fr(\017)30 b Ft(typecode\(\))10 b Fs(-)i(returns)f(the)f(typecode)h(of)g(the)g(pickle's)f(value)h(as)g (a)h(string.)37 799 y Fr(\017)30 b Ft(value\(\))11 b Fs(-)g(returns)g(the)g(Python)f(form)i(of)f(the)g(value)g(in)f(the)h (pickle.)37 873 y Fr(\017)30 b Ft(bytes\(\))11 b Fs(-)g(the)g(pickled)f (bytes)h(of)g(the)g(pickled)f(value)h(as)g(a)h(string.)0 985 y(The)e(constructor)g(for)g(this)g(class)g(takes)g(two)g (arguments,)h Fp(typecode)h Fs(and)f Fp(value)p Fs(,)f(and)h(returns)f (a)h(new)f(pickle)g(containing)0 1047 y(the)i(value)h(specified)f(by)g Fp(value)j Fs(of)e(the)f(ISL)h(type)f(specified)g(by)g Fp(typecode)p Fs(.)k(Pickles)c(may)h(also)f(be)h(created)g(by)f (calling)0 1110 y(the)i(constructor)f(with)g(a)h(single)f(argument)h (string,)g(which)f(must)h(be)g(the)f(result)h(of)g(an)g(earlier)g(call) g(on)g(the)g Ft(bytes\(\))0 1172 y Fs(method)d(of)g(another)g(pickle)f (instance.)62 1259 y(Typecodes)f(are)h(represented)f(by)g(the)g(Python) g(class)f Ft(ilu.Typecode)p Fs(.)j(Typecodes)d(are)i(constructed)e (with)h(a)g(single)0 1321 y(string)i(argument,)j(of)f(the)f(form)h Ft(')p Fp(interface)p Ft(.)p Fp(type)s Ft(')p Fs(,)g(where)g Fp(interface)i Fs(is)d(the)h(ISL)g(name)g(for)g(the)g(interface,)g(and) g Fp(type)0 1383 y Fs(is)e(the)g(ISL)g(name)h(for)f(the)g(type.)g (Instances)g(of)g(the)g Ft(Typecode)f Fs(class)h(support)f(the)h (method)37 1471 y Fr(\017)30 b Ft(id\(\))11 b Fs(-)g(return)g(the)g (ILU)g(type)g(ID)g(\(CORBA)h(repository)e(ID\))i(for)f(the)g (typecode's)f(type.)37 1544 y Fr(\017)30 b Ft(name\(\))11 b Fs(-)g(return)g(the)g(ISL)h(name)f(of)h(the)f(typecode's)f(type.)0 1667 y Fo(4.2.6)26 b(Constructed)14 b(Types)0 1807 y Fn(4.2.6.1)23 b(Enumeration)62 1910 y Fs(Enumerations)13 b(are)h(mapped)f(to)h(a)f(method-less)g(class)g(object)g(which)g (contains)f(an)i(attribute)e(of)h(the)h(correct)g(type)0 1973 y(and)f(value)f(for)h(each)g(value)g(in)f(the)h(enumeration.)j (The)c(class)h(also)f(contains)f(a)j(dictionary,)e(called)g(``)p 1668 1973 14 3 v 1685 1973 V 33 w(image)p 1812 1973 V 1828 1973 V 33 w('',)i(for)0 2035 y(each)e(enumeration)f(type)g(that)g (maps)g(an)h(enumeration)f(value)g(to)g(a)h(string)e(corresponding)g (to)h(its)f(Python)h(enumeration)0 2097 y(value)g(name.)62 2184 y(For)h(example,)120 2271 y Ft(TYPE)25 b(color)f(=)h(ENUMERATION)f (red,)g(dark-blue)g(END;)62 2384 y Fs(maps)12 b(to)120 2471 y Ft(class)24 b(color:)220 2521 y(red)g(=)h(0;)220 2570 y(dark_blue)f(=)h(1;)220 2620 y(__image__)f(=)h({)294 2670 y(red:)g('red',)p eop %%Page: 73 74 73 73 bop 0 -58 a Fs(Chapter)11 b(4:)g(Using)f(ILU)h(with)f(Python)1274 b(73)294 183 y Ft(dark_blue:)24 b('dark_blue'};)0 302 y Fn(4.2.6.2)f(Array)62 405 y Fs(An)16 b(ISL)g(array)g(maps)h(into)d(a) j(Python)d(list)h(with)g(the)g(specified)h(number)g(of)f(elements.)26 b(Tuples)15 b(as)g(well)h(as)g(lists)0 468 y(are)j(accepted)f(as)g (input,)h(but)f(lists)f(are)h(always)g(produced)f(as)i(output)d(from)j (ILU.)f(Arrays)g(of)h(BYTE)f(or)g(SHORT)0 530 y(CHARACTER)12 b(are)f(represented)g(with)g(Python)f(strings.)0 648 y Fn(4.2.6.3)23 b(Sequence)62 752 y Fs(An)11 b(ISL)h(sequence)f(of)g (short)f(character)i(maps)f(into)f(a)i(Python)e(string.)62 839 y(All)g(other)g(ISL)h(sequence)f(types)g(map)h(into)e(Python)h (lists.)g(Tuples)f(as)h(well)g(as)h(lists)e(are)i(accepted)g(as)f (input,)g(but)g(lists)0 901 y(are)h(always)f(produced)f(as)h(output)f (from)i(ILU.)f(Sequences)h(of)f(BYTE)g(or)g(SHORT)h(CHARACTER)f(are)h (represented)f(as)0 964 y(Python)g(strings.)0 1082 y Fn(4.2.6.4)23 b(Record)62 1186 y Fs(ISL)16 b(records)e(map)i(into)e (generated)h(Python)e(classes)i(with)f(the)g(same)i(name,)h(with)d(the) g(record's)h(field)g(names)g(as)0 1248 y(attributes.)f(The)e(name)h(of) f(the)h(record)f(becomes)h(a)g(constructor)e(function)g(which)h (accepts)g(exactly)g(the)g(same)h(number)0 1310 y(of)e(arguments)g(as)g (the)g(record)h(has)e(fields,)h(in)g(the)g(same)h(order.)62 1398 y(For)g(example,)f(a)h(record)f(value)g(of)h(the)e(ISL)i(type)120 1485 y Ft(TYPE)25 b(segment)f(=)h(RECORD)f(left-limit)g(:)h(integer,)f (right-limit)g(:)h(integer)f(END;)62 1597 y Fs(with)10 b(a)i(left-limit)e(of)h(-3)g(and)g(a)h(right-limit)d(of)i(7)h(would)e (map)h(to)120 1684 y Ft(segment\(-3,)24 b(7\))h(=>)f ()0 1802 y Fn(4.2.6.5)e(Union)62 1906 y Fs(An)e(ISL)g(union)f(maps)h(into)f (a)h(Python)f(tuple)g(with)g(two)g(components:)29 b(an)21 b(integer)f(discriminator,)j(and)d(the)0 1968 y(discriminated)10 b(value.)h(There)g(are)h(three)f(possibilities:)26 2056 y(1.)30 b(If)14 b(the)g(discriminator)f(matches)h(one)g(of)g(the)f (union)g(case)h(values)g(of)g(an)g(arm,)i(the)d(second)h(component)f (is)g(of)h(the)90 2118 y(type)d(specified)f(by)h(that)f(arm.)26 2189 y(2.)30 b(If)13 b(the)f(discriminator)e(matches)j(no)e(union)g (case)i(values)e(and)h(there)g(is)g(a)h(default)e(arm,)j(the)e(second)f (component)h(is)90 2252 y(of)f(the)g(type)g(specified)f(by)h(the)g (default)g(arm.)26 2323 y(3.)30 b(If)16 b(the)f(discriminator)e (matches)j(no)f(union)f(case)h(values)g(and)g(there)g(is)g(no)f (default)h(arm)h(but)f(the)g(union)e(has)i(the)90 2386 y Ft(OTHERS)c Fs(attribute,)f(the)h(second)g(component)f(is)h Ft(None)p Fs(.)0 2504 y Fn(4.2.6.6)23 b(Optional)62 2608 y Fs(A)12 b(value)g(corresponding)e(to)i(the)f(ISL)i(type)e Ft(OPTIONAL)g Fp(T)16 b Fs(may)c(be)g Ft(None)g Fs(\(indicating)e(the)i (null)f(case\))h(in)g(addition)0 2670 y(to)f(the)g(values)f(of)h(the)g (type)g Fp(T)p Fs(.)p eop %%Page: 74 75 74 74 bop 0 -58 a Fs(Chapter)11 b(4:)g(Using)f(ILU)h(with)f(Python)1274 b(74)0 183 y Fo(4.2.7)26 b(Object)14 b(Types)62 288 y Fs(Each)h(ISL)g(object)f(type)g(is)h(mapped)f(into)g(a)h(Python)f (class.)21 b(These)15 b(classes)f(have)h(the)f(methods)g(specified)g (in)g(the)0 350 y(ISL,)e(as)f(well)g(as)g(some)g(built-ins.)0 478 y Fn(4.2.7.1)23 b(Surrogate)15 b(and)h(True)g(Object)g(Types)62 583 y Fs(All)7 b(surrogate)g(object)g(ty)o(pes)g(i)o(nherit)f(from)h Ft(iluRt.IluOb)o(jSurr)p Fs(,)e(which)i(in)g(turn)g(inh)o(erits)f(from) h Ft(iluRt.IluObj)o(ect)p Fs(.)0 646 y(True)15 b(object)f(types)g (inherit)g(from)i Ft(IluRt.IluObjTrue)p Fs(,)f(which)f(also)g(inherits) g(from)i Ft(iluRt.IluObject)p Fs(.)21 b(The)0 708 y(method)14 b Ft(IluTrueP\(\))g Fs(will)g(return)g(a)h(true)g(value)f(on)h(true)f (instances,)h(and)f(a)i(false)e(value)h(on)f(surrogate)g(instances.)0 770 y(The)e(string)e(binding)g(handle)h(of)h(an)g(object)f(instance)f (can)i(be)g(retrieved)g(with)e(the)i(method)f Ft(IluSBH\(\))p Fs(.)i(The)e(object-id)0 832 y(of)i(an)h(instance)f(can)g(be)h (retrieved)f(with)f Ft(IluObjectID\(\))p Fs(;)i(it)e(returns)h(a)h (tuple)f(containing)e(a)j(string)e(server)i(ID)f(and)0 895 y(a)k(string)e(instance-handle.)26 b(If)16 b(support)f(for)i(the)f (CORBA)h Ft(IIOP)g Fs(is)f(configured)f(into)g(your)h(ILU)h(build,)f (the)g(string)0 957 y(IOR)d(of)f(an)g(instance)f(can)i(be)f(retrieved)g (by)f(calling)g(the)h(function)f Ft(ilu.IOROfObject\(\))p Fs(,)g(passing)g(the)h(instance)f(as)0 1019 y(the)k(argument.)25 b(The)15 b(type)g(name)i(of)e(the)h(most)f(specific)g(type)g(of)h(an)f (instance)g(can)h(be)f(retrieved)h(with)e(the)i(method)0 1082 y Ft(IluTypeName\(\))p Fs(;)10 b(the)h(unique)f(ID)h(of)g(that)g (type)g(can)g(be)g(retrieve)g(with)g(the)g(method)f Ft(IluTypeID\(\))p Fs(.)62 1170 y(Object)18 b(types)f(which)h(inherit)f(from)i(the)f(ISL)g (type)g Ft(ilu.CORBA-Object)f Fs(\(which)g(include)h(all)g(object)f (types)0 1232 y(defined)11 b(with)f(OMG)h(IDL\),)h(will)e(inherit)f (from)j(the)f(Python)f(class)h Ft(ilu.CORBA_Object)p Fs(,)f(which)g(is)h(the)g(same)g(as)g(the)0 1294 y(class)g Ft(CORBA.Object)p Fs(.)0 1422 y Fn(4.2.7.2)23 b(Methods,)15 b(Parameters,)h(and)f(Exceptions)62 1527 y Fs(ISL)k(methods)e(of)h(an)g (object)g(type)f(map)i(to)e(Python)g(methods)h(of)g(the)f (corresponding)g(class.)32 b Ft(IN)18 b Fs(and)f Ft(INOUT)0 1590 y Fs(parameters)12 b(appear)f(in)g(the)g(Python)f(method)h (signature)f(in)h(the)f(same)i(order)f(as)h(they)e(do)h(in)g(ISL.)62 1678 y(Let)i(us)g(define)h(a)f Fp(result)k Fs(value)c(to)g(be)h(either) f(a)g(return)h(value)f(\(corresponding)e(to)i(a)h(method's)f(return)g (type\))g(or)g(an)0 1740 y Ft(INOUT)e Fs(or)h Ft(OUT)f Fs(parameter.)i(Result)e(values)g(are)h(returned)f(by)h(the)f(Python)f (method)h(as)h(a)g(tuple,)f(with)f(the)h(return)h(value)0 1803 y(\(if)k(present\))g(appearing)g(before)g(any)h(parameters.)27 b(If)17 b(the)f(method)g(has)g(only)f(one)h(result)f(value,)j(then)e (it)f(is)h(simply)0 1865 y(returned)11 b(\(i.e.,)h(a)f(tuple)f(of)h (length)f(one)h(is)f Fp(not)15 b Fs(constructed)9 b(to)i(hold)f(this)f (value\).)j(If)f(the)g(method)f(has)h(no)f(result)g(values,)0 1927 y(then)h Ft(None)g Fs(is)f(returned.)62 2015 y(An)16 b(ISL)h(exception)e(translates)g(to)h(a)h(Python)e(variable)h (initialized)e(with)h(a)i(string)e(representing)g(the)h(exception.)0 2078 y(These)i(variables)h(are)g(used)f(in)h(Python)e Ft(raise)i Fs(statements)f(in)g(object)g(implementation)f(code,)k(and)e (in)f Ft(try)11 b(...)0 2140 y(except)g Fs(statements)f(in)h(client)f (code.)i(For)f(example,)h(the)f(declaration)120 2228 y Ft(EXCEPTION)24 b(division-by-zero;)62 2343 y Fs(in)11 b(the)g(interface)g Ft(map-test)g Fs(maps)g(to)g(the)g(following)e (statement)i(in)f(`)p Ft(map_test.py)p Fs(':)120 2431 y Ft(division)24 b(=)h('map-test:)f(division-by-zero')62 2545 y(ASYNCHRONOUS)10 b Fs(methods)g(have)g(no)h(return)f(values)g (and)h(raise)f(no)g(user-specified)g(exceptions.)g(They)g(may)h(return) 0 2608 y(before)g(the)f(completion)f(of)h(the)g(true)h(method.)g Ft(FUNCTIONAL)e Fs(methods)h(that)g(have)g(no)g(parameters)h(are)g (cached)g(so)f(that)0 2670 y(a)i(surrogate)e(address)h(space)g(makes)h (only)e(one)h(call)g(to)f(the)h(true)g(address)g(space)g(to)g(retrieve) g(the)g(return)g(value.)p eop %%Page: 75 76 75 75 bop 0 -58 a Fs(Chapter)11 b(4:)g(Using)f(ILU)h(with)f(Python)1274 b(75)0 183 y Fn(4.2.7.3)23 b(Garbage)15 b(Collection)f(and)i (COLLECTIBLE)62 288 y Fs(All)21 b(instances)e(of)j(ILU)f(object)f (types)g(are)i(covered)f(by)g(the)g(normal)g(Python)f(garbage)h (collection;)j(i.e.,)g(the)0 350 y(application)13 b(program)i(must)f (maintain)h(a)g(reference)h(to)e(the)h(instance,)g(or)g(it)f(will)g(be) h(garbage)g(collected.)21 b(With)14 b(true)0 412 y(instances)j(of)i (COLLECTIBLE)f(object)g(types,)h(the)f(ILU)h(kernel)f(will)f(maintain)h (an)g(additional)f(reference)i(to)f(the)0 474 y(instance)10 b(as)i(long)e(as)h(it)g(has)g(registered)f(clients)g(using)g(that)h (instance.)0 614 y Fu(4.3)30 b(Access)14 b(to)h(standard)g(ILU)h (features)0 757 y Fo(4.3.1)26 b(Servers)15 b(and)g(Ports)62 861 y Fs(Each)i(object)g(exported)f(by)h(an)g(implementation)f(must)g (belong)g(to)h(a)h(true)f(server,)i(an)e(instance)f(of)h(the)g(Python)0 923 y(type)c Ft(ilu_Server)f Fs(which)g(is)h(implemented)g(by)f(the)h (ILU)g(runtime.)k(An)c Ft(ilu_Server)f Fs(can)i(be)f(created)h(by)e (calling)0 985 y(the)22 b(function)f Ft(ilu.CreateServer\([serverID)8 b([,)k(transport)e([,)h(protocol)g([,)g(objectTable]]]]\))p Fs(,)0 1048 y(which)h(returns)f(a)i(value)f(of)h(type)e Ft(ilu_Server)p Fs(.)k(If)e Fp(serverID)i Fs(is)d(a)h(string,)f(it)g (specifies)f(the)h(server)h(ID;)f(if)g(it)g(is)g Ft(None)p Fs(,)0 1110 y(one)j(will)f(be)h(invented)f(automatically.)21 b(The)15 b Fp(transport)j Fs(argument)d(is)g(either)f(a)i(sequence)e (of)h(strings,)g(chosen)g(to)f(be)0 1172 y(compatible)c(with)g(the)h Fp(protocol)p Fs(,)f(or)h Ft(None)g Fs(to)g(let)f(it)h(default.)g(The)g Fp(protocol)j Fs(argument)d(is)f(either)h(a)g(string)f(specifying)g(a)0 1235 y(particular)i(RPC)i(protocol,)d(or)i Ft(None)f Fs(to)g(choose)g(the)h(default.)i(Additional)10 b(ports)h(can)i(be)g (added)f(to)g(a)h(server)g(with)e(the)0 1297 y Ft(addPort\(\))g Fs(method,)g(if)g(an)g(application)e(needs)i(to)g(make)h(it)e (available)h(with)f(via)h(multiple)f(protocols)f(or)j(addresses.)62 1385 y(The)i(first)g(time)g(a)h(true)f(server)h(is)f(created,)h(it)f (becomes)h(the)f(default)f(server.)22 b(The)14 b(default)f(server)i(is) f(used)g(for)g(an)0 1447 y(exported)d(object)h(if)g(a)h(server)f(is)g (not)f(otherwise)g(specified.)j(If)f(an)f(object)f(is)h(exported)f (before)i(any)f(servers)g(have)g(been)0 1509 y(created,)18 b(one)e(will)g(be)g(created)h(automatically)e(using)g(default)g (parameters)i(and)f(a)h(message)f(to)g(that)g(effect)h(will)e(be)0 1571 y(written)10 b(to)h(stderr.)62 1659 y(An)g(object)g(of)g(type)f Ft(ilu_Server)h Fs(has)g(the)g(following)e(methods:)37 1747 y Fr(\017)30 b Ft(id\(\))11 b Fs(-)g(returns)g(the)g(ILU)g(server) g(ID)h(of)f(the)g(server.)37 1822 y Fr(\017)30 b Ft(addPort\()p Fp(TINFO)p Ft(,)10 b Fp(PINFO)t Ft(\))i Fs(-)f(adds)g(another)f(port)h (to)g(the)g(server)g(with)f(the)h(specified)g Fp(TINFO)j Fs(and)d Fp(PINFO)p Fs(.)37 1897 y Fr(\017)30 b Ft (createSerializer\(\))10 b Fs(-)h(creates)h(and)f(returns)f(a)i (serialization)d(context.)0 2024 y Fn(4.3.1.1)23 b(Object)16 b(Tables)62 2128 y Fs(The)i Fp(objectTable)h Fs(argument)f(allows)f (specification)f(of)i(a)g(callback)f(function)g(for)h(creating)f(true)h (instances)f(on)0 2190 y(demand.)28 b(The)16 b(callback)g(function)f (should)g(take)h(one)h(argument,)h(a)f(string,)g(which)e(is)h(the)g (instance)g(handle)g(of)g(the)0 2253 y(instance)10 b(to)h(be)g (created,)h(and)f(return)g(a)h(true)f(instance.)0 2379 y Fn(4.3.1.2)23 b(Server)16 b(Relocation)62 2483 y Fs(It)g(is)f (sometimes)h(useful)f(to)g(have)h(a)g(`dummy')g(server,)h(that)e(will)g (redirect)h(any)f(requests)g(to)g(it)h(to)f(a)h(real)g(server)0 2545 y(somewhere)i(else.)30 b(This)16 b(can)i(be)f(used)g(for)h(load)f (balancing,)h(automatic)f(start-up)g(of)g(services,)i(redirecting)e (name)0 2608 y(service,)j(code)e(migration,)h(and)f(other)g(various)f (purposes.)31 b(ILU)18 b(supports)e(this)h(via)h(a)g(mechanism)g (called)g Fp(server)0 2670 y(relocation)p Fs(,)10 b(which)h(can)g(be)h (used)e(in)h(Python)f(via)h(the)g Ft(setRelocator)f Fs(method)h(on)g (the)g Ft(ilu_Server)f Fs(class.)p eop %%Page: 76 77 76 76 bop 0 -58 a Fs(Chapter)11 b(4:)g(Using)f(ILU)h(with)f(Python)1274 b(76)0 183 y Fo(4.3.2)26 b(Threading)14 b(and)g(Event)h(Loops)62 289 y Fs(To)10 b(use)f(threads,)h(you)g(must)f(have)h(configured)f (both)g(ILU)g(and)h(Python)f(with)g(thread)g(support)g(when)g(building) f(them.)0 352 y(If)14 b(you)e(have)h(done)g(this,)g(your)g(ILU/Python)e (runtime)i(support)f(will)g(be)h(thread-capable.)k(To)c(have)g(ILU)g (begin)g(using)0 414 y(threads,)d(place)f(a)h(call)f(to)g(the)g (function)f Ft(ilu.ThreadedOperation\(\))f Fs(in)i(your)g(Python)f (program)i(before)f(any)h(other)0 476 y(ILU)h(calls)g(are)h(made.)0 608 y Fn(4.3.2.1)23 b(Animating)14 b(Servers)62 714 y Fs(Running)k(the)g(ILU)h(main)f(loop)g(by)g(calling)g Ft(ilu.RunMainLoop\(\))f Fs(brings)h(the)g(true)h(servers)f(to)g(life.) 34 b(This)0 777 y(function)12 b(does)g(not)h(return)g(until)e Ft(ilu.ExitMainLoop\(\))h Fs(is)h(called.)k(If)c(you)g(are)g(using)f (ILU)h(with)f Ft(Tkinter)p Fs(,)i(you)0 839 y(should)d(import)i Ft(ilu_tk)f Fs(before)h(creating)g(a)g(loop)f(handle,)h(or)g(calling)f Ft(RunMainLoop)p Fs(.)k Ft(ilu_tk)d Fs(sets)f(things)f(up)i(so)0 901 y(that)e(both)f(Tk)h(and)g(ILU)g(events)f(are)i(handled.)0 1033 y Fn(4.3.2.2)23 b(Using)14 b(Alarms)62 1139 y Fs(In)d(order)f(to)g (schedule)f(a)i(Python)e(function)g(to)h(be)g(called)g(at)g(a)h (certain)f(time)g(in)g(the)g(future)g(when)g(executing)f(the)h(ILU)0 1202 y(main)h(loop,)g(an)g Ft(ilu_Alarm)g Fs(may)h(be)f(used.)h (Objects)e(of)h(this)g(type)f(are)i(created)g(by)f(calling)f Ft(ilu.CreateAlarm\(\))p Fs(.)0 1264 y(An)h Ft(ilu_Alarm)f Fs(must)h(be)g(set)g(to)g(have)g(any)g(effect.)62 1354 y(The)24 b(alarm's)h(method)e Ft(set\(time,)11 b(proc,)g(args\))24 b Fs(is)f(used)h(to)g(set)f(the)h(alarm.)51 b(The)24 b Ft(int)p Fs(,)k Ft(float)p Fs(,)f(or)0 1416 y Ft(ilu_FineTime)12 b(time)h Fs(argument)f(is)h(the)f(time)h(at)g(which)f(the)h(alarm)g (will)f(fire;)h(the)g Ft(proc)g Fs(argument)f(is)h(the)f(Python)0 1478 y(function)c(that)h(will)g(be)h(called)f(when)g(the)h(alarm)g (fires;)g(and)f(the)g Ft(args)h Fs(argument)f(is)g(a)h(tuple)f(of)h (arguments)f(to)g(be)h(passed)0 1540 y(to)j Ft(proc)p Fs(.)19 b(The)14 b(tuple)f Ft(args)h Fs(must)f(match)h Ft(proc)p Fs('s)f(signature.)19 b(For)14 b(example,)h(if)e Ft(proc)h Fs(is)f(declared)h Ft(def)d(P\(a,)g(b\):)0 1603 y Fs(then)g Ft(args)g Fs(must)g(be)g(a)g(two-tuple.)g(Likewise,)f (if)h Ft(proc)g Fs(takes)g(only)f(one)h(argument)g(then)g Ft(args)g Fs(must)g(be)g(a)h(one-tuple,)0 1665 y(or)f(if)g(no)g (arguments)g(then)g(a)g(zero-tuple.)62 1754 y(The)j(function)e Ft(ilu.FineTime_Now\(\))g Fs(may)h(be)h(called)f(to)g(obtain)f(ILU's)i (idea)f(of)g(the)g(current)h(time.)k(A)c(value)0 1817 y Ft(sec)19 b Fs(of)h(type)f Ft(int)g Fs(or)h Ft(float)f Fs(in)g(units)f(of)i(seconds)e(may)i(be)g(converted)f(to)g(type)g Ft(ilu_FineTime)f Fs(by)h(calling)0 1879 y Ft(ilu.FineTime\(sec\))p Fs(.)g(Values)13 b(of)h(type)g Ft(ilu_FineTime)f Fs(may)i(be)f (compared,)h(added,)g(and)f(subtracted.)19 b(These)0 1941 y(operations)13 b(may)i(be)f(used)g(to)g(construct)f(values)h (representing)f(any)h(relative)g(time)g(\(subject)g(to)g(precision)f (and)h(range)0 2004 y(limitations\),)9 b(which)i(is)f(what)h(is)g (needed)g(by)g(an)g(alarm's)h Ft(set)f Fs(method.)62 2093 y(The)g(alarm)h(may)g(be)f(set)g(multiple)f(times)g(with)g (different)h(arguments,)g(in)g(which)f(case)i(the)f(parameters)h(of)f (the)g(most)0 2155 y(recent)g(call)g(to)g Ft(set)g Fs(are)h(in)f (effect.)h(Thus,)f(once)g(an)g(alarm)h(fires,)f(it)g(may)h(be)f(reused) g(by)g(calling)f Ft(set)h Fs(again.)62 2245 y(An)g(alarm)h(may)g(be)f (unset)f(by)h(calling)f(its)g(method)h Ft(unset\(\))p Fs(.)0 2377 y Fo(4.3.3)26 b(Custom)15 b(Records)62 2483 y Fs(ILU)c(generally)g(supports)e(a)j(facility)e(named)h Fp(custom)g(records)p Fs(.)g(This)f(means)i(that)e(an)i(application)d (can)i(declare)h(that)0 2545 y(the)h(language-specific)g(mapping)g(of)h (a)g(particular)f(record)h(type)f Fp(ISL\(A\))k Fs(to)d Fp(lang\(A\))i Fs(is)d(to)h(be)f(overridden,)h(and)g(that)0 2608 y(instead)c(a)h(specific)f(type)h Fp(X)k Fs(will)10 b(be)h(used)f(in)g(this)g(language)g(to)h(represent)f(values)h(of)g Fp(ISL\(A\))p Fs(.)g(In)g(Python,)g(this)e(is)i(done)0 2670 y(by)g(simply)f(replacing)g(the)h(generated)g(class)g(definition)e (with)h(a)i(different)f(class)g(definition.)p eop %%Page: 77 78 77 77 bop 0 -58 a Fs(Chapter)11 b(4:)g(Using)f(ILU)h(with)f(Python)1274 b(77)62 183 y(For)12 b(example,)f(suppose)f(we)i(had)f(the)g(ISL)g (record)h(type)120 271 y Ft(INTERFACE)24 b(Ifc;)170 321 y(...)120 371 y(TYPE)h(Foo)f(=)h(RECORD)f(color)h(:)g(RGB-tuple,)f (position)g(:)h(XY-pair)f(END;)0 485 y Fs(The)11 b(normal)g(mapping)g (of)g Ft(Ifc.Foo)g Fs(to)f(Python)g(would)g(be)i(to)e(a)i(class)f (called)g Ft(Foo)g Fs(with)f(the)h(following)e(definition:)120 573 y Ft(class)24 b(Foo)h(\(iluRt.IluRecord\):)220 622 y(__ilu_type_name__)e(=)i('Ifc.Foo')220 672 y(def)f(__init__\(self,)g (_color,)g(_position\))319 722 y(self.color)g(=)h(_color;)319 772 y(self.position)f(=)h(_position;)220 872 y(def)f (__getinitargs__\(self\):)269 921 y(return)h(\(self.color,)f (self.position\))0 1035 y Fs(To)d(override)f(this,)j(define)d(a)h(new)g (class)g(in)f(your)g(application)f(that)i(has)f(matching)g(signatures)g (for)h Ft(__init__)0 1097 y Fs(and)f Ft(__getinitargs__)p Fs(,)h(and)f(a)g(matching)g(value)f(for)h Ft(__ilu_type_name__)p Fs(.)37 b(It)20 b(must)f(also)h(inherit)f(from)0 1160 y Ft(IluRt.IluRecord)p Fs(.)10 b(Then)f(assign)f(the)h(class)g(object)g (for)g(this)g(new)g(class)g(to)g(the)g(symbol)g Ft(Foo)g Fs(in)g(the)g(Python)g(module)0 1222 y Ft(Ifc)p Fs(.)i(So:)120 1310 y Ft(class)24 b(MyFoo)h(\(iluRt.IluRecord\):)220 1360 y(__ilu_type_name__)e(=)i('Ifc.Foo')220 1410 y(def)f (__init__\(self,)g(_color,)g(_position\):)319 1459 y(self.color)g(=)h (_color)319 1509 y(self.position)f(=)h(_position)319 1559 y(self.some_other_attr)e(=)i(whatever_I_want)319 1609 y(call_some_other_code\(self\))220 1708 y(def)f (__getinitargs__\(self\):)319 1758 y(return)h(self.color,)e (self.position)220 1858 y Fp(...possible)10 b(other)h(methods...)120 1958 y Ft(Ifc.Foo)24 b(=)h(MyFoo)0 2085 y Fo(4.3.4)h(String)14 b(Binding)g(Handle)g(Formation)62 2189 y Fs(To)f(use)f(object)g(tables) g(properly,)h(it)f(is)g(usually)g(necessary)g(for)h(a)g(client)f (program)h(to)f(create)i(a)f(surrogate)f(instance)0 2252 y(for)i(which)g(the)g(true)g(instance)f(does)g(not)h(yet)g(exist.)19 b(In)14 b(Python,)g(this)f(is)h(done)g(by)g(creating)f(a)i(string)e (binding)f(handle)0 2314 y(for)h(the)f(object,)h(then)f(calling)g Ft(ilu.ObjectOfSBH\(\))f Fs(on)h(that)g(SBH.)i(String)e(binding)f (handles)g(may)j(be)e(formed)i(by)0 2376 y(calling)c(the)h(function)f Ft(ilu.FormSBH\(\))p Fs(.)0 2503 y Fo(4.3.5)26 b(Simple)14 b(Binding)62 2608 y Fs(A)c(true)g(instance)f(may)i(be)f(published)e (with)h(the)h(simple)f(binding)f(service)i(by)g(calling)f(its)g(method) h Ft(IluPublish\(\))p Fs(.)0 2670 y(A)h(true)g(instance)g(may)g(be)g (unpublished)e(by)i(calling)f(its)g(method)h Ft(IluWithdraw\(\))p Fs(.)p eop %%Page: 78 79 78 78 bop 0 -58 a Fs(Chapter)11 b(4:)g(Using)f(ILU)h(with)f(Python)1274 b(78)62 183 y(A)14 b(published)d(ILU)j(object)f(may)h(be)f(obtained)g (by)g(calling)g Ft(ilu.LookupObject\(sid,)c(ih,)i(cl\))p Fs(,)j(where)g Ft(sid)0 246 y Fs(is)d(object's)f(server's)h(server)h (ID,)f Ft(ih)g Fs(is)g(the)g(object's)f(instance)h(handle,)g(and)g Ft(cl)g Fs(is)f(its)h(class.)0 372 y Fo(4.3.6)26 b(Principal)14 b(Identities)h(and)f(Passports)62 476 y Fs(An)g(ILU)g(passport)f(\(see) i(Chapter)f(14)g([Security],)h(page)f(212\))g(is)g(represented)g(in)f (Python)h(by)g(an)g(instance)f(of)h(the)0 539 y Ft(ilu_Passport)e Fs(object)g(type.)k(Instances)c(of)g(this)g(type)g(can)h(be)g(obtained) e(by)i(calling)f Ft(ilu.CreatePassport\(\))p Fs(.)0 601 y(Please)f(see)h(the)f(documentation)e(of)j(that)e(function)g(for)h (more)h(information)e(on)h(the)g(abilities)e(of)i(this)f(object)h (type.)62 689 y(The)19 b(passport)f(of)h(the)f(caller)h(may)h(be)f (obtained)e(in)i(the)g(true)f(method)h(by)f(calling)g(the)h(ILU)g (runtime)f(routine)0 751 y Ft(ilu.CallerIdentity\(\))p Fs(.)h(The)14 b(`native')g(passport)f(may)i(be)f(obtained)f(by)h (calling)g Ft(ilu.GetPassport\(\))p Fs(.)19 b(In)0 813 y(the)13 b(case)g(of)h(a)f(local)g(call,)h(these)f(two)f(passports)g (may)h(be)h(the)e(same)i(object.)j(Passports)12 b(are)i(thread-local;)f (that)g(is,)g(an)0 875 y(application)c(may)j(use)f(a)g(different)g (passport)f(in)h(each)h(thread.)0 1015 y Fu(4.4)30 b(Building)14 b(Python/ILU)h(Applications)0 1158 y Fo(4.4.1)26 b(Stub)13 b(Generation)62 1262 y Fs(To)e(generate)g(Python)f(stubs)f(from)i(an)g (ISL)h(file,)f(use)f(the)h(program)g Ft(python-stubber)p Fs(.)f(Two)h(files)f(are)h(generated)0 1325 y(from)h(each)f(ISL)h Ft(INTERFACE)e Fp(name)s Fs(:)37 1412 y Fr(\017)30 b Fs(`)p Fp(name)p Ft(.py)p Fs(')12 b(containing)d(code)i(for)h (constants,)e(exceptions,)g(and)h(types)f(defined)h(in)f(the)h (interface,)h(and)37 1488 y Fr(\017)30 b Fs(`)p Fp(name)s Ft(__skel.py)p Fs(')17 b(containing)e(code)j(for)f(the)g(skeletons)f (\(server)h(stubs\))f(for)i(object)e(types)h(defined)g(in)f(the)90 1550 y(interface.)62 1663 y(Alternatively,)11 b(for)h(surrogate-side)e (use)i(the)f(stubber)g(can)h(be)g(run)g(automatically)e(by)i(a)g(hook)f (in)g(the)h Ft(ilu)f Fs(module.)0 1726 y(Calling)i Ft (ilu.AutoImport\(\))g Fs(will)g(establish)f(the)i(stubber)g(as)g(part)g (of)g(the)g(normal)g(Python)f Ft(import)h Fs(machinery,)0 1788 y(and)h(will)f(cause)h(`)p Ft(.isl)p Fs(')h(and)f(`)p Ft(.idl)p Fs(')g(files)g(in)f(directories)h(on)f(your)h Ft(ILUPATH)g Fs(environment)f(variable)h(path)f(to)h(be)0 1850 y(automatically)10 b(stubbed)g(and)h(loaded.)0 1977 y Fn(4.4.1.1)23 b(Command-line)14 b(Options)62 2081 y Fs(The)d(program)h Ft(python-stubber)e Fs(supports)f(the)i(following)e (options:)37 2169 y Fr(\017)30 b Ft(-I)11 b Fp(directory)j Fs(--)f(add)g Fp(directory)h Fs(to)e(the)g(list)g(of)h(directories)e (to)h(search)h(for)g(interface)g(definition)d(files.)16 b(Note)c(that)90 2231 y(the)f Fp(directory)i Fs(must)d(be)i(separated)f (from)g(the)g Ft(-I)g Fs(with)g(whitespace,)f(unlike)g(the)h (convention)f(for)h(C)h(compilers.)37 2306 y Fr(\017)30 b Ft(-dir)11 b Fp(directory)g Fs(--)f(put)f(output)f(files)h(in)g Fp(directory)p Fs(.)i(Will)d(attempt)i(to)f(create)h Fp(directory)h Fs(with)e Ft("mkdir)i Fp(directory)r Ft(")90 2369 y Fs(if)g(not)g(already)g(present.)37 2444 y Fr(\017)30 b Ft(-quiet)11 b Fs(--)g(run)g(without)f(normal)h(output)e(to)i (stderr.)37 2519 y Fr(\017)30 b Ft(-stub)11 b Fs(--)h(generate)f(the)g (`)p Fp(name)p Ft(.py)p Fs(')h(file.)37 2595 y Fr(\017)30 b Ft(-skel)11 b Fs(--)h(generate)f(the)g(`)p Fp(name)s Ft(__skel.py)p Fs(')g(file.)37 2670 y Fr(\017)30 b Ft(-removefirst)10 b Fs(--)i(for)f(generated)g(files,)g(remove)h(file)f(before)g (generating)g(a)g(new)g(version)f(of)i(the)f(file.)p eop %%Page: 79 80 79 79 bop 0 -58 a Fs(Chapter)11 b(4:)g(Using)f(ILU)h(with)f(Python)1274 b(79)62 183 y(If)20 b(neither)e Ft(-stub)h Fs(nor)g Ft(-skel)g Fs(is)g(specified,)h(both)e(files)h(are)h(produced.)35 b(However,)21 b(if)e(either)g(is)f(explicitly)0 246 y(specified,)11 b(only)f(those)g(specified)h(will)f(be)h(produced.)0 369 y Fo(4.4.2)26 b(Implementing)15 b(an)f(ILU)i(module)f(in)g(Python) 62 473 y Fs(A)j(Python)e(module)h(that)f(implements)h(ILU)g(objects)f (of)h(types)g(defined)g(in)f Ft(INTERFACE)11 b Fp(I)22 b Fs(also)16 b(imports)h(from)0 535 y Fp(I)t Ft(__skel)p Fs(.)12 b(This)e(gives)g(access)h(to)g(the)g(skeleton)f(classes)h(from) g(which)g(implementation)e(classes)i(inherit.)0 658 y Fn(4.4.2.1)23 b(Implementation)14 b(Inheritance)62 762 y Fs(An)c(implementation)e(of)i(object)g(type)f Fp(T)14 b Fs(from)d(interface)f Fp(I)k Fs(needs)c(to)f(inherit)g(from)i(the)e (class)h Fp(I)t Ft(__skel.)p Fp(T)t Fs(.)h(If)f(there)0 824 y(is)h(inheritance)h(in)f(the)h(ISL,)h(and)e(an)h(implementation)f (of)h(a)g(subtype)f(wants)g(to)h(inherit)f(from)h(an)g(implementation)f (of)h(a)0 886 y(supertype,)e(the)h(skeleton)f(class)h(must)g(be)g (appear)g(in)g(the)g(list)f(of)h(base)g(types)g(before)g(the)g (implementation)f(class.)62 973 y(For)i(example,)f(objects)g(for)g(the) g(ISL)120 1061 y Ft(INTERFACE)24 b(j;)120 1160 y(TYPE)h(c1)f(=)h (OBJECT)f(METHODS)h(one\(\))f(END;)120 1210 y(TYPE)h(c2)f(=)h(OBJECT)f (METHODS)h(two\(\))f(END;)120 1260 y(TYPE)h(c3)f(=)h(OBJECT)f (SUPERTYPES)g(c1,)h(c2)g(END)f(METHODS)h(three\(\))f(END;)62 1372 y Fs(could)11 b(be)g(implemented)g(in)f(Python)h(by)120 1459 y Ft(import)24 b(ilu,)h(j,)g(j__skel)120 1559 y(class)f (c1\(j__skel.c1\):)220 1609 y(def)g(one\(self\):)319 1658 y(...)120 1758 y(class)g(c2\(j__skel.c2\):)220 1808 y(def)g(two\(self\):)319 1858 y(...)120 1957 y(class)g(c3\(j__skel.c3,) g(c1,)h(c2\):)220 2007 y(def)f(three\(self\):)319 2057 y(...)62 2169 y Fs(In)17 b(this)f(case)i Ft(c3)p Fs('s)f(method)g Ft(one)g Fs(is)f(implemented)h(by)g Ft(c1.one)g Fs(and)g Ft(c3)p Fs('s)f(method)h Ft(two)g Fs(is)g(implemented)g(by)0 2231 y Ft(c2.two)p Fs(.)0 2355 y Fn(4.4.2.2)23 b(Exporting)15 b(Objects)62 2458 y Fs(An)c(object)g(can)g(be)g(exported)g(in)f(one)h (of)h(three)f(ways:)26 2545 y(1.)30 b(The)21 b(object's)f(string)g (binding)f(handle)h(may)i(be)f(obtained)f(by)g(calling)g(its)h(method)f Ft(IluSBH\(\))h Fs(and)g(com-)90 2608 y(municating)f(this)g(somehow)g (to)h(a)h(client,)h(who)d(then)h(turns)f(the)h(handle)g(back)g(into)f (an)h(object)f(by)h(calling)90 2670 y Ft(ilu.ObjectOfSBH\(cl,)10 b(sbh\))p Fs(.)p eop %%Page: 80 81 80 80 bop 0 -58 a Fs(Chapter)11 b(4:)g(Using)f(ILU)h(with)f(Python)1274 b(80)26 183 y(2.)30 b(The)12 b(object)g(may)h(be)g(published)e(using)g (the)h(simple)g(binding)f(service)h(by)g(calling)g(its)g(method)g Ft(IluPublish\(\))p Fs(.)90 246 y(In)f(order)g(for)h(this)e(to)g(be)i (effective,)f(the)g(object)g(must)f(have)i(a)f(well-known)f(object)g (ID,)i(or)f(the)g(object)f(ID)h(must)g(be)90 308 y(communicated)g(to)f (clients,)g(so)h(clients)e(can)i(know)f(what)h(to)f(pass)g(to)h Ft(ilu.LookupObject)p Fs(.)f(The)g(object)h(ID)g(is)f(a)90 370 y(function)g(of)h(the)g(object's)f(instance)h(handle)f(and)h(its)f (server's)i(server)f(ID.)26 444 y(3.)30 b(The)11 b(object)g(may)g(be)g (returned)g(by)g(a)h(method)e(or)i(passed)e(back)h(in)g(a)h(method's)e Ft(INOUT)h Fs(or)g Ft(OUT)g Fs(parameter.)62 556 y(An)i(object's)f (instance)g(handle)g(can)h(be)g(controlled)f(by)g(setting)g(the)g (instance)h(variable)f Ft(IluInstHandle)g Fs(before)0 619 y(the)20 b(object)f(is)g(first)h(exported.)37 b(If)20 b(this)f(instance)g(variable)h(is)f(not)g(set,)j(and)e(instance)f (handle)h(will)e(be)i(invented)0 681 y(automatically.)62 768 y(An)13 b(object's)f(server)i(can)f(be)h(controlled)d(by)i(setting) f(the)h(instance)f(or)h(class)g(variable)g Ft(IluServer)f Fs(to)h(a)g(value)g(of)0 830 y(type)c Ft(ilu_Server)p Fs(.)i(The)f(value)f(of)i(this)d(variable)i(at)g(the)g(time)g(an)g (object)f(is)h(first)f(exported)h(will)e(be)j(used)e(as)h(the)g(server) 0 893 y(for)h(that)g(object.)g(If)g(such)g(a)h(variable)e(is)h(not)f (set,)i(the)f(default)f(server)i(is)e(used.)0 1016 y Fo(4.4.3)26 b(Using)14 b(an)h(ILU)h(module)f(in)g(Python)62 1120 y Fs(The)c(ILU)g(runtime)f(interface)i(is)e(in)h(the)f(Python)g (module)h Ft(ilu)p Fs(.)g(Python)f(definitions)f(for)i(ISL)g Ft(INTERFACE)g Fp(I)k Fs(are)d(in)0 1182 y(the)g(Python)f(module)g Fp(I)t Fs(.)k(As)c(with)g(any)h(other)f(modules)h(in)f(Python,)h(these) f(modules)g(are)i(imported)e(using)g(the)h Ft(import)0 1245 y Fs(statement.)62 1332 y(A)f(client)g(program)g(may)h(create)g (an)f(ILU)g(object)f(in)h(one)g(of)g(three)h(ways:)26 1419 y(1.)30 b(Knowing)17 b(the)i(string)f(binding)f(handle)h Ft(sbh)h Fs(and)g(class)f Ft(cl)h Fs(of)g(an)g(object,)i(call)e Ft(ilu.ObjectOfSBH\(cl,)90 1481 y(sbh\))27 b Fs(which)g(returns)g(an)g (instance)g(of)g(that)g(class.)60 b(For)27 b(example,)32 b(to)27 b(obtain)f(an)i(instance)e(of)i(ISL)90 1544 y(type)d Ft(square)h Fs(from)h Ft(INTERFACE)10 b(shapes)26 b Fs(whose)f(string)g (binding)f(handle)h(is)h Ft(sbh)p Fs(,)k(one)c(would)e(call)90 1606 y Ft(ilu.ObjectOfSBH\(shapes.square,)9 b(sbh\))p Fs(.)26 1680 y(2.)30 b(Knowing)10 b(the)i(object)f(ID)h Ft(\(sid,)f(ih\))g Fs(and)h(class)f Ft(cl)h Fs(of)g(an)g(object)f(that) g(has)g(been)h(published)e(using)g(the)i(simple)90 1742 y(binding)f(service,)i(call)g Ft(ilu.LookupObject\(sid,)c(ih,)j(cl\))g Fs(which)g(returns)h(an)g(instance)f(of)g(that)h(class)f(\(or)90 1805 y Ft(None)f Fs(if)g(the)g(lookup)f(fails\).)26 1879 y(3.)30 b(Receive)15 b(an)f(instance)g(as)g(a)h(result)e(value)h(from)h (a)f(method)g(call)g(that)g(returns)g(an)g(object)f(type)h(or)h(has)f (an)g(object)90 1941 y(type)d(as)g(an)g Ft(INOUT)g Fs(or)g Ft(OUT)g Fs(parameter.)0 2065 y Fo(4.4.4)26 b(CORBA)15 b(Support)e(in)i(Python)62 2169 y Fs(This)g(release)h(of)f(ILU)h(has)f (several)h(nods)e(to)h(an)h(eventual)f(CORBA)h(mapping)f(for)h(the)f (Python)f(language.)24 b(The)0 2231 y(Python)d Ft(CORBA)g Fs(module)h(contains)e(support)h(for)h(the)f(classes)g Ft(CORBA::ORB)g Fs(and)h Ft(CORBA::Object)p Fs(,)i(and)d(the)0 2293 y Ft(CORBA::ORB_init\(\))10 b Fs(function.)g(See)i(the)f (Python/ILU)e(API)j(Reference)h(for)e(more)h(information)e(on)h(these.) 0 2417 y Fo(4.4.5)26 b(Freezing)15 b(a)g(Python)f(Application)g (Containing)f(ILU)120 2521 y Ft(From:)24 b("Martin)h(v.)f(Loewis")h ()120 2570 y(Subject:)f(Freezing)g(ILU) 120 2620 y(Date:)g(Fri,)h(13)g(Mar)f(1998)h(07:54:30)f(PST)p eop %%Page: 81 82 81 81 bop 0 -58 a Fs(Chapter)11 b(4:)g(Using)f(ILU)h(with)f(Python)1274 b(81)120 183 y Ft(I)25 b(currently)f(try)h(to)f(freeze)h(a)f(Python)h (application)f(that)g(uses)h(ILU.)f(With)h(ILU)120 233 y(building)f(libilupython,)g(this)g(is)h(already)f(simple.)h(It)f (would)h(be)f(even)120 283 y(simpler)g(if)h(ILU)g(installed)f(a)g(file) h(Setup)f(in)h(the)g(library)f(directory)g(with)120 333 y(the)h(contents)170 432 y(iluPr)f(-L/usr/ilu-2.0a12/lib)f(-lilupython) h(-lilu)120 532 y(\(Of)h(course,)f(it)h(could)f(contain)g(comments)g (:-\))h(This)g(tells)f(makesetup)g(that)120 582 y(the)h(iluPr)f(module) g(is)h(available)f(by)h(linking)f(ilupython)g(and)h(python)f(to)h(the) 120 632 y(freezed)f(image.)h(With)f(this)h(installation,)e(I)i(can)g (freeze)f(my)h(application)120 681 y(with)g(the)f(command)g(line)170 781 y(PYTHONPATH=/usr/ilu-2.0a12/lib)e(python)i(-O)h(freeze/freeze.py) 319 831 y(-o)g(outdir)f(-e)h(/usr/ilu-2.0a12/lib)e(myscript.py)120 930 y(Of)i(course,)f(/usr/ilu-2.0a12)f(has)i(to)g(be)g(replaced)f(with) g(the)h(actual)120 980 y(ILUHOME/lib)f(in)h(both)f(cases.)g(For)h(the)g (Setup)f(file,)h(needs)f(to)h(be)f(done)h(prior)120 1030 y(to)g(the)f(installation.)120 1130 y(Regards,)120 1180 y(Martin)62 1305 y Fs(The)19 b(file)f(`)p Fp(ILUHOME)t Ft(/lib/Setup)p Fs(')g(exists)f(in)h(this)f(distribution,)g(so)h(it)g (should)f(be)h(possible)f(to)h(`freeze')i(a)0 1367 y(Python)10 b(image)i(containing)d(ILU)i(with)f(the)h(commands)120 1461 y Ft(\045)25 b Fj(python)f(-O)h(freeze/freeze.py)e(-o)i(outdir)f (-e)h($)p Ft({)p Fj(ILUHOME)p Ft(})p Fj(/lib)f(myscript.py)62 1587 y Fs(assuming)14 b(that)g(`)p Ft(myscript.py)p Fs(')g(contains)f (your)h(Python)g(program,)h(and)g(that)f(`)p Fp(ILUHOME)t Ft(/lib)p Fs(')g(is)g(on)h(your)0 1649 y Ft(PYTHONPATH)10 b Fs(environment)h(variable.)0 1813 y Fu(4.5)30 b(Python/ILU)14 b(API)h(Reference)0 1975 y Fo(4.5.1)26 b(Identifiers)14 b(Exported)g(From)j(Module)d Fl(ilu)1739 2124 y Fs(Function)-1902 b Fo(AutoImport)22 b Fk(\()p Fn([)p Fp(path)5 b(=)p Fk(\(\))10 b Fn([)p Fp(verbose)s(=0)p Fn(]])p Fk(\))120 2186 y Fs(If)h(called,)g (enables)f(the)g(auto-loading)f(of)i(`)p Ft(.isl)p Fs(')f(and,)h(if)g (OMG)g(IDL)f(support)g(is)g(configured)f(into)h(ILU,)120 2248 y(`)p Ft(.idl)p Fs(',)16 b(files)f(that)f(are)i(on)f(the)f(user's) h Ft(ILUPATH)g Fs(environment)f(variable.)22 b(The)15 b Ft(python-stubber)120 2310 y Fs(program)k(is)g(run)f(to)h(generate)g (the)g(Python)f(surrogate)g(stubs)g(for)h(the)g(interface)g (description)e(into)h(a)120 2373 y(temporary)10 b(directory,)h(and)f (those)g(stubs)f(are)i(loaded)f(into)f(the)h(current)h(program.)g(The)g (stubber)e(is)h(re-run)120 2435 y(every)k(time)f(the)g(interface)h(is)f (imported.)18 b(If)c(an)f(error)h(occurs)g(while)e(producing)g(the)i (Python)e(stubs,)h(an)120 2497 y(exception)c(is)h(raised)g(and)g(the)g (import)f(process)h(stops.)g(The)g Fp(path)k Fs(parameter)d(has)f(no)g (effect;)h(the)f Fp(verbose)120 2559 y Fs(parameter)j(will)e(cause)h (various)f(messages)h(to)g(be)g(written)f(to)h(the)g(standard)f(output) g(during)g(the)h(process)120 2622 y(of)f(importing,)f(if)h(set)g(to)g (a)h(non-false)e(value.)p eop %%Page: 82 83 82 82 bop 0 -58 a Fs(Chapter)11 b(4:)g(Using)f(ILU)h(with)f(Python)1274 b(82)1739 183 y(Function)-1902 b Fo(CallerIdentity)21 b Fk(\(\))120 246 y Fs(Returns)15 b(the)f(passport)g(containing)f (identities)g(of)i(the)g(caller.)24 b(This)14 b(routine)g(is)g(only)g (valid)h(inside)e(the)120 308 y(code)e(of)g(a)h(true)f(method.)1739 419 y(Function)-1902 b Fo(CreateAlarm)23 b Fk(\(\))120 481 y Fs(Creates)12 b(an)f(object)f(of)i(type)e Ft(ilu_Alarm)p Fs(.)1739 592 y(Function)-1902 b Fo(CreateLoopHandle)21 b Fk(\(\))120 655 y Fs(Creates)27 b(and)f(returns)f(an)i(instance)e(of) h(a)h(``loop)e(handle'')h(object,)k(which)25 b(can)i(be)f(passed)g(to) 120 717 y Ft(ilu.RunMainLoop)10 b Fs(and)h Ft(ilu.ExitMainLoop\(\))p Fs(.)1739 828 y(Function)-1902 b Fo(CreatePassport)23 b Fk(\(\))120 890 y Fs(Creates)10 b(and)f(returns)g(an)g(empty)h (instance)e(of)i(a)f Ft(ilu_Passport)g Fs(object.)h(The)f Ft(ilu_Passport)g Fs(object)120 953 y(is)k(used)g(to)g(provide)g(a)h (sense)f(of)g(identity)f(in)h(the)h(ILU)f(system.)18 b(It)c(can)f(hold)g(any)g(number)h(of)g(different)120 1015 y(identities,)j(each)h(of)f(which)g(is)g(represented)g(with)f(an)i (appropriate)e(data)h(structure)g(that)g(varies)g(from)120 1077 y(identity)9 b(type)i(to)g(identity)e(type.)120 1164 y(The)i Ft(ilu_Passport)f Fs(object)h(type)f(has)h(the)g (following)e(methods:)157 1252 y Fr(\017)30 b Ft(lookupIdentity)10 b(\()p Fp(IDENTITY-TYPE-NAME)t Ft(\))24 b Fs(-)h(returns)g(the)f(data)h (structure)f(for)h(the)210 1314 y(specified)g(identity,)i(if)e(the)g (passport)f(contains)g(one;)32 b(Returns)25 b Ft(None)g Fs(otherwise.)52 b(Raises)210 1376 y Ft(ilu.IluGeneralError)15 b Fs(if)i(the)g(named)g(identity)e(type)h(does)g(not)h(exist.)27 b(The)17 b(identity)e(type)210 1438 y Ft('ConnectionIdentity')7 b Fs(is)g(always)f(sup)o(port)o(ed;)f(the)i(identity)g(type)g Ft(')o(SunRPCAuthU)o(nixIdentit)o(y')210 1501 y Fs(will)j(be)h (supported)f(if)h(support)f(for)h(the)g Ft(sunrpc)g Fs(protocol)f(has)h (been)g(configured)f(into)g(ILU.)157 1575 y Fr(\017)30 b Ft(addSunRPCAuthUnix)10 b(\()p Fp(HOSTNAME)p Ft(,)g Fp(UID)p Ft(,)h Fp(GID)p Ft(,)h Fp(TUPLE-OF-GROUPS)r Ft(\))20 b Fs(-)g(adds)f(an)210 1637 y(identity)k(of)i(type)f Ft('SunRPCAuthUnixIdentity')f Fs(to)h(the)g(passport)g(with)f(the)i (specified)210 1700 y Fp(HOSTNAME)p Fs(,)14 b Fp(UID)p Fs(,)h Fp(GID)p Fs(,)g(and)f Fp(TUPLE-OF-GROUPS)p Fs(.)h(See)g (Appendix)e(A)i(of)f(RFC)i(1831)d(at)210 1762 y Ft (http://info.internet.isi.edu:80/in-not)o(es/rfc/file)o(s/rfc1831.)o (txt)20 b Fs(for)210 1824 y(details)10 b(on)h(the)g(meaning)g(of)h (these)f(parameters.)h(This)f(method)g(will)f(only)g(be)i(available)e (if)i(support)210 1886 y(forthe)f Ft(sunrpc)g Fs(protocol)f(has)h(been) g(configured)f(into)g(ILU.)1739 1998 y(Function)-1902 b Fo(CreatePipeline)22 b Fk(\(\))120 2061 y Fs(Creates)10 b(and)f(returns)g(an)g(empty)h(instance)e(of)i(a)f Ft(ilu_Pipeline)g Fs(object.)h(The)f Ft(ilu_Pipeline)g Fs(object)120 2123 y(is)j(used)h(to)f(allow)g(multiple)g(requests)g(to)g(be)h(outstanding) e(on)h(non-concurrent)g(protocol)g(streams.)k(The)120 2185 y Ft(ilu_Pipeline)10 b Fs(object)h(has)g(no)f(methods.)1739 2296 y(Function)-1902 b Fo(CreateServer)23 b Fk(\()11 b Fn([)p Fp(serverID)h Fn([)p Fp(transport)e Fn([)p Fp(protocol)g Fn([)p Fp(objtable)p Fn(]]]])g Fk(\))120 2359 y Fs(Used)16 b(to)f(create)i(an)g Ft(ilu_Server)e Fs(object)g(with)h(the)f (specified)h(serverID,)h(transport,)f(and)g(protocol.)120 2421 y(If)f Fp(serverID)j Fs(is)c(unspecified)f(or)i Ft(None)p Fs(,)g(an)g(identifier)e(will)h(be)g(invented)f (automatically.)20 b(If)15 b(transport)120 2483 y(or)g(protocol)f(are)i (unspecified)e(or)i Ft(None)p Fs(,)g(they)f(will)f(default)h(to)g Ft(\('sunrpcrm',)10 b('tcp_0_0'\))k Fs(and)120 2545 y Ft('sunrpc')p Fs(,)c(respectively.)g(\(Other)f(combinations)f(that)h (would)g(work)g(are)i(transport)d(of)i Ft(\('tcp_0_0'\))120 2608 y Fs(and)k(protocol)f(of)h Ft('iiop_1_0_1')p Fs(,)h(transport)e (of)h Ft(\('sunrpcrm',)d('tcp_0_0'\))i Fs(and)h(protocol)f(of)120 2670 y Ft('courier')p Fs(,)22 b(and)e(transport)f(of)i Ft(\('tcp_0_0'\))e Fs(and)h(protocol)f(of)h Ft('http')p Fs(,)j(depending)c(on)g(the)p eop %%Page: 83 84 83 83 bop 0 -58 a Fs(Chapter)11 b(4:)g(Using)f(ILU)h(with)f(Python)1274 b(83)120 183 y(configuration)15 b(of)i(your)f(ILU)h(system.\))28 b(The)17 b(first)f(time)h Ft(CreateServer)f Fs(is)g(called,)j(the)d (server)i(so)120 246 y(created)f(becomes)f(the)g(default)g(server.)27 b(If)17 b(there)f(is)g(no)g(default)f(server)i(when)f(one)g(is)g (required,)h(one)120 308 y(will)12 b(be)g(created)i(using)d(default)h (parameters)h(and)g(a)g(message)g(will)e(be)i(issued)f(on)g(stderr.)k (The)d Fp(objtable)120 370 y Fs(argument)i(allows)g(specification)f(of) h(a)h(callback)g(function)e(for)i(creating)f(true)g(instances)g(on)g (demand.)120 432 y(The)e(callback)f(function)g(should)f(take)h(one)h (argument,)g(a)h(string,)e(which)g(is)g(the)h(instance)e(handle)i(of)f (the)120 495 y(instance)e(to)h(be)g(created,)h(and)f(return)g(a)h(true) f(instance.)120 585 y(An)g Ft(ilu_Server)f Fs(object)h(has)g(the)g (following)e(methods:)157 675 y Fr(\017)30 b Ft(id)11 b(\(\))g Fs(-)h(returns)e(the)h(string)f(identifier)g(of)h(that)g (server.)157 752 y Fr(\017)30 b Ft(addPort)11 b(\()p Fp(TRANSPORT)p Ft(,)g Fp(PROTOCOL)t Ft(\))f Fs(-)h(adds)e(a)i(port)e (with)g(the)h(specified)f Fp(TRANSPORT)210 815 y Fs(and)i Fp(PROTOCOL)16 b Fs(\(described)10 b(above\))h(to)g(the)g(server)g (instance.)157 892 y Fr(\017)30 b Ft(createSerializer)10 b(\(\))h Fs(-)h(creates)f(and)g(returns)g(a)g(new)g(serialization)f (context)g(object.)157 970 y Fr(\017)30 b Ft(setRelocator)10 b(\()p Fp(RELOCATOR-FUNCTION)t Ft(\))20 b Fs(-)h(sets)e(the)h (relocation)f(procedure)h(of)g(the)210 1032 y(server)12 b(to)g(be)h Fp(RELOCATOR-FUNCTION)p Fs(.)f Fp(RELOCATOR-FUNCTION)k Fs(should)11 b(be)h(a)h(func-)210 1094 y(tion)k(with)g(no)g(arguments,) i(that)f(returns)f(either)g Ft(None)p Fs(,)j(or)e(a)g(tuple)f(with)g (two)g(elements.)31 b(If)19 b(it)210 1157 y(returns)13 b(the)g(two-element)g(tuple,)g(the)g(first)g(element)g(should)f(be)h(a) h(string)e(specifying)g(pinfo)g(as)i(in)210 1219 y(the)h(arguments)g (to)f Ft(CreateServer)p Fs(,)i(and)f(the)g(second)f(argument)h(should)f (be)h(a)g(tuple)g(of)g(tinfo,)210 1281 y(again)c(as)g(in)g(the)g (arguments)f(to)h Ft(CreateServer)p Fs(.)1739 1399 y(Function)-1902 b Fo(DefaultServer)22 b Fk(\(\))120 1461 y Fs(Returns)11 b(the)g(default)f(server.)1739 1582 y(Function)-1902 b Fo(DoSoon)22 b Fk(\()p Fp(FUNCTION,)11 b(ARGS-TUPLE,)h (STRING-DESCRIPTION)t Fk(\))120 1644 y Fs(Causes)h(the)g(function)f Fp(FUNCTION)18 b Fs(to)12 b(be)i(run)f(with)f(args)h Fp(ARGS-TUPLE)18 b Fs(to)13 b(be)g(run)g(at)g(some)h(point)120 1707 y(in)d(the)g(future,)g(when)g(the)g(system)g(finds)f(it)h(to)g(be) g(convenient.)g(In)g(the)g(threaded)g(world,)g(a)g(new)h(thread)f(is) 120 1769 y(forked)i(to)g(run)h(the)f(function;)g(in)g(the)g (non-threaded)f(world,)i(the)f(function)f(is)h(executed)g(at)h(some)g (point)120 1831 y(by)d(the)g(event)g(loop)f(as)h(a)g(background)f (task.)1739 1952 y(Function)-1902 b Fo(ExitMainLoop)22 b Fk(\()p Fp(loophandle)p Fk(\))120 2014 y Fs(Exits)17 b(the)i(ILU)f(main)h(loop,)h(assuming)e(it)g(is)g(running.)33 b(The)18 b Fp(loophandle)i Fs(is)e(created)h(by)f(a)h(call)g(to)120 2076 y Ft(ilu.CreateLoopHandle\(\))p Fs(,)9 b(and)i(must)f(have)h(been) f(previously)f(used)h(as)h(an)f(argument)h(to)f(a)h(call)g(to)120 2139 y Ft(ilu.RunMainLoop\(\))p Fs(.)1739 2260 y(Constant)-1902 b Fo(FALSE)120 2322 y Fs(A)11 b(value)g(which)f(evaluates)h(to)g (Python)f(boolean)g(False.)1739 2443 y(Function)-1902 b Fo(FineTime)24 b Fk(\()p Fp(seconds)p Fk(\))120 2505 y Fs(Converts)16 b(its)g Ft(int)g Fs(or)h Ft(float)f Fs(argument)h Fp(seconds)g Fs(in)g(units)e(of)i(seconds)e(to)i(type)f Ft(ilu_FineTime)p Fs(.)120 2567 y(Objects)10 b(of)i(this)e(type)h(can)h (be)f(compared,)i(added,)e(subtracted,)g(and)h(converted)e(to)h Ft(int)h Fs(or)f Ft(float)p Fs(.)h(The)120 2629 y(main)f(use)g(of)g (objects)g(of)g(this)f(type)g(is)h(in)g(setting)e(alarms.)p eop %%Page: 84 85 84 84 bop 0 -58 a Fs(Chapter)11 b(4:)g(Using)f(ILU)h(with)f(Python)1274 b(84)1739 183 y(Function)-1902 b Fo(FormSBH)23 b Fk(\()p Fp(sid,)11 b(ih,)g(type,)g(pinfo,)g(tinfo)p 700 183 14 3 v 15 w(vec)p Fk(\))120 246 y Fs(Forms)k(a)h(valid)e(ILU)h(string)f (binding)f(handle)i(from)g(the)g(arguments)g(and)f(returns)h(it.)23 b(The)15 b Fp(sid)k Fs(and)c Fp(ih)120 308 y Fs(arguments)g(are)h (strings)e(containing)f(the)i(server)h(ID)f(and)g(instance)g(handle)f (for)i(the)f(desired)g(instance.)120 370 y(The)d Fp(type)i Fs(argument)e(should)f(be)h(the)g(Python)f(class)h(for)g(the)g(most)g (specific)g(object)f(type)h(of)g(the)g(desired)120 432 y(object.)f(The)f Fp(pinfo)h Fs(argument)f(is)g(a)h(tuple)e(containing) f(the)i(protocol)f(information)g(describing)g(the)h(object)120 495 y(implementation's)16 b(preferred)i(communication)f(protocol.)29 b(The)18 b Fp(tinfo)p 1313 495 V 15 w(vec)i Fs(argument)d(is)g(a)h (tuple)f(of)120 557 y(tuples,)10 b(specifying)g(the)h(transport)f (stack)h(needed)g(to)g(connect)g(to)f(the)h(implementation.)g(Each)g (sub-tuple)120 619 y(in)g(the)g Fp(tinfo)p 324 619 V 15 w(vec)i Fs(is)e(a)h(tuple)e(describing)g(a)h(particular)g(transport) f(layer.)120 706 y(For)23 b(instance,)j(to)d(create)g(a)h(string)d (binding)h(handle)g(for)h(an)g(instance)g(of)g(type)f Ft(Foo.Bar)p Fs(,)k(with)120 769 y(server)16 b(id)f Ft ("some-server-id")f Fs(and)h(instance)g(handle)g Ft ("some-instance-handle")p Fs(,)g(exported)120 831 y(via)i Ft(Sun)11 b(RPC)p Fs(,)19 b(version)d(2,)k(with)c(program)h(number)h (1000007,)f(version)f(3,)j(via)e Ft(TCP/IP)g Fs(from)h(host)120 893 y Ft("foobar.somewhere.com")p Fs(,)10 b(port)g(3456,)h(we'd)g(say) 120 955 y Ft(sbh)g(=)g(ilu.FormSBH\('some-server-id',)e ('some-instance-handle',)g(Foo.Bar,)120 1018 y(\('sunrpc_2',)h (1000007,)h(3\),)g(\(\('sunrpcrm',\),)f(\('tcp',)h ('foobar.somewhere.com',)120 1080 y(3456\)\)\))120 1142 y Fs(Note)18 b(the)f(comma)i(used)f(after)g Ft('sunrpcrm')g Fs(to)f(create)i(a)f(true)g(tuple;)i(note)e(also)f(that)g(use)h(of)g (this)120 1204 y(procedure)e(requires)f(some)h(specialized)f (knowledge,)h(such)f(as)h(knowing)e(that)h(use)g(of)h Ft(Sun)11 b(RPC)16 b Fs(also)120 1267 y(requires)11 b(use)g(of)g(the)g Ft(Sun)g(RPC)g Fs(record-marking)g(transport)f(layer)h(when)g(used)g (over)g Ft(TCP/IP)p Fs(.)1739 1378 y(Constant)-1902 b Fo(FineTimeRate)120 1440 y Fs(The)11 b(precision)f(of)h(type)g Ft(ilu_FineTime)f Fs(in)h(seconds)f(is)h(the)g(reciprocal)g(of)g(this)f (constant.)1739 1552 y(Function)-1902 b Fo(FineTime)p 207 1552 15 3 v 19 w(Now)22 b Fk(\(\))120 1614 y Fs(Returns)11 b(the)g(current)g(time)g(as)g(an)g Ft(ilu_FineTime)g Fs(object.)1739 1726 y(Function)-1902 b Fo(FormSBH)23 b Fk(\()p Fp(objectID,)11 b(contactInfo)p Fk(\))120 1788 y Fs(Returns)16 b(the)h(string)e(binding)g(handle)h(corresponding)f(to) h(the)h(object)f(id)g Fp(objectID)j Fs(and)e(contact)f(info)120 1850 y Fp(contactInfo)p Fs(.)11 b(This)f(is)h(the)f(inverse)h(of)g Ft(ParseSBH)p Fs(.)1739 1962 y(Function)-1902 b Fo(GetFDBudget)22 b Fk(\(\))120 2024 y Fs(Returns)11 b(the)g(current)g(setting)e(of)j (the)e(file)h(descriptor)g(budget.)1739 2136 y(Function)-1902 b Fo(GetPassport)23 b Fk(\(\))120 2198 y Fs(Returns)7 b(the)g(current)g(passport)f(for)h(thi)o(s)g(t)o(hread.)h(See)f(also)g Ft(CreatePassport\(\))g Fs(and)g Ft(SetP)o(assport\(\))p Fs(.)1739 2309 y(Function)-1902 b Fo(GetPipeline)22 b Fk(\(\))120 2372 y Fs(Returns)f(the)g(current)g(pipeline)f(context)h (for)g(this)f(thread.)42 b(See)23 b(also)d Ft(CreatePipeline\(\))g Fs(and)120 2434 y Ft(SetPipeline\(\))p Fs(.)1739 2545 y(Function)-1902 b Fo(GetSerializer)22 b Fk(\(\))120 2608 y Fs(Returns)12 b(the)g(current)h(serialization)e(context)g(for)i (this)e(thread.)k(See)f(also)d(the)i Ft(createSerializer\(\))120 2670 y Fs(method)e(on)g(the)f Ft(ilu_Server)h Fs(class,)g(and)g(the)g Ft(SetSerializer\(\))f Fs(function.)p eop %%Page: 85 86 85 85 bop 0 -58 a Fs(Chapter)11 b(4:)g(Using)f(ILU)h(with)f(Python)1274 b(85)1716 183 y(Exception)-1902 b Fo(IluGeneralError)120 246 y Fs(An)12 b(exception)f(that)h(may)h(be)g(returned)f(from)h(the)f (ILU)g(runtime.)j(This)c(exception)h(is)g(used)f(to)h(return)h(all)120 308 y(`standard')h(exceptions,)h(with)e(a)i(string)f(value)g(to)g (indicate)g(the)g(specific)h(type)f(of)g(standard)g(exception)120 370 y(that)d(occurred.)1716 480 y(Exception)-1902 b Fo (IluProtocolError)120 543 y Fs(An)17 b(exception)f(that)g(may)i(be)f (returned)f(from)i(the)f(ILU)g(runtime.)28 b(This)16 b(exception)g(is)h(raised)f(for)i(all)120 605 y(on-the-wire)10 b(exceptions,)g(with)g(a)i(value)e(that)h(indicates)f(which)g(kind)g (of)h(protocol)f(exception)g(occurred.)1716 715 y(Exception)-1902 b Fo(IluUnimplementedMethodError)120 777 y Fs(An)15 b(exception)g(that) g(may)i(be)e(returned)h(from)g(the)g(ILU)f(runtime.)25 b(Raised)16 b(when)f(an)h(unimplemented)120 840 y(method)11 b(is)f(called,)i(typically)d(on)i(a)g(true)h(instance.)1716 950 y(Exception)-1902 b Fo(IluUnknownTypeIDError)120 1012 y Fs(An)11 b(exception)f(that)g(may)i(be)f(raised)g(from)h(the)f (ILU)g(runtime.)g(It)g(indicates)f(that)g(the)h(associated)f(type)h(ID) 120 1074 y(value)g(is)f(unknown)g(in)h(this)f(address)g(space.)1739 1185 y(Function)-1902 b Fo(IOROfObject)21 b Fk(\()p Fp(obj)p Fk(\))120 1247 y Fs(If)13 b(the)f Ft(IIOP)g Fs(protocol)f(has)h(been)h (configured)e(in,)i(returns)f(the)g(string)f(IOR)i(of)f(the)g(object,)g (as)h(specified)120 1309 y(in)f(the)h(CORBA)h(2)e(IIOP)i (specification.)h(If)e(the)f Ft(IIOP)h Fs(protocol)f(has)g(not)g(been)h (configured)f(in,)h(throws)120 1371 y(an)e(error.)1739 1482 y(Function)-1902 b Fo(LongReal)22 b Fk(\()p Fp(v)p Fk(\))120 1544 y Fs(Converts)9 b(its)f Ft(int)p Fs(,)i Ft(float)p Fs(,)g(or)f(sixteen-integer)f Ft(list)h Fs(or)h Ft(tuple)f Fs(argument)g(to)g(type)g Ft(ilu_LongReal)p Fs(.)120 1606 y(In)i(case)h(of)f(a)g(list)f(or)i(tuple,)e(the)h (elements)g(encode)g(the)g(bytes)f(of)h(the)g(IEEE)g(long)f(real)i (value,)f(from)h(most)120 1669 y(significant)d(to)i(least.)1739 1779 y(Function)-1902 b Fo(LookupObject)21 b Fk(\()p Fp(sid,)11 b(ih,)g(cl)p Fk(\))120 1841 y Fs(Returns)j(the)f(object)h (with)f(object)g(server)h(ID)g Fp(sid)p Fs(,)h(object)e(instance)g (handle)h Fp(ih)p Fs(,)g(and)g(Python)f(class)h Ft(cl)p Fs(,)120 1903 y(assuming)h(it)g(was)h(previously)e(published)f(using)i (the)h(simple)f(binding)f(service.)25 b(If)16 b(the)g(lookup)e(fails,) 120 1966 y Ft(None)d Fs(is)g(returned.)1739 2076 y(Function)-1902 b Fo(ObjectOfSBH)21 b Fk(\()p Fp(cl,)11 b(sbh)p Fk(\))120 2138 y Fs(Returns)g(the)g(object)f(corresponding)g(to)g(the)h(Python)f (class)h Fp(cl)k Fs(and)c(string)f(binding)g(handle)g Fp(sbh)p Fs(.)1739 2248 y(Function)-1902 b Fo(ParseSBH)23 b Fk(\()p Fp(sbh)p Fk(\))120 2311 y Fs(Returns)11 b(the)g(pair)g (\(object)f(id,)h(contact)g(info\))g(corresponding)e(to)i(the)g(string) f(binding)f(handle)i Fp(sbh)p Fs(.)1739 2421 y(Function)-1902 b Fo(RegisterCustomSurrogate)22 b Fk(\()p Fp(class)p Fk(\))120 2483 y Fs(Registers)14 b Fp(class)j Fs(as)e(the)g(object)f (type)h(to)f(create)i(when)f(receiving)f(a)h(surrogate)g(of)g(the)g (type)f(indicated)120 2545 y(by)19 b(the)h Ft(_IluClass)f Fs(field)g(of)g Fp(class)p Fs(.)37 b Fp(class)21 b Fs(must)e(be)h(a)g (subtype)e(of)h(the)h(default)f(surrogate)g(type)120 2608 y(for)e(this)f(ILU)h(type.)29 b(This)16 b(allows)g(custom)h (surrogates,)h(with)e(implications)f(for)i(caching)g(and)g(other)120 2670 y(object-type-specific)9 b(functions.)p eop %%Page: 86 87 86 86 bop 0 -58 a Fs(Chapter)11 b(4:)g(Using)f(ILU)h(with)f(Python)1274 b(86)1739 183 y(Function)-1902 b Fo(RegisterInputHandler)21 b Fk(\()p Fp(file,)11 b(handler)p 734 183 14 3 v 16 w(fn)p Fk(\))120 246 y Fs(Sets)i(up)g(an)g(association)e(between)i(the)f Fp(file)k Fs(\(which)c(must)h(be)g(a)g(file)g(object)f(opened)h(for)g (reading\),)g(and)120 308 y(the)j Fp(handler)p 332 308 V 15 w(fn)j Fs(\(which)d(must)g(be)g(a)g(callable)g(function)e(with)i (no)f(arguments\))h(so)g(that)f Fp(handler)p 1730 308 V 16 w(fn)k Fs(is)120 370 y(called)14 b(whenever)g(input)e(is)i (available)f(on)h Fp(file)p Fs(.)20 b(This)13 b(is)g(useful)h(for)g (implementing)f(a)h(server)g(that)g(also)120 432 y(responds)e(to)h (commands)h(typed)f(to)g(its)g(standard)f(input,)i(for)f(example.)19 b(Passing)13 b(a)h(value)f(of)h Ft(None)f Fs(for)120 495 y(the)g Fp(handler)p 329 495 V 16 w(fn)k Fs(removes)d(the)f (association.)18 b(This)12 b(procedure)i(should)e(only)h(be)h(used)f (in)g(non-threaded)120 557 y(applications.)c(In)j(threaded)e (applications,)g(you)g(should)g(fork)h(a)h(thread)f(to)f(handle)h (this,)f(instead.)1739 706 y(Function)-1902 b Fo(RegisterOutputHandler) 20 b Fk(\()p Fp(file,)11 b(handler)p 770 706 V 16 w(fn)p Fk(\))120 768 y Fs(Sets)i(up)g(an)h(association)d(between)i(the)g Fp(file)j Fs(\(which)d(must)f(be)i(a)g(file)f(object)f(opened)h(for)h (writing\),)e(and)120 831 y(the)k Fp(handler)p 332 831 V 15 w(fn)j Fs(\(which)d(must)g(be)g(a)g(callable)g(function)e(with)i (no)f(arguments\))h(so)g(that)f Fp(handler)p 1730 831 V 16 w(fn)k Fs(is)120 893 y(called)11 b(whenever)g(input)e(is)i (available)f(on)h Fp(file)p Fs(.)g(Passing)f(a)i(value)e(of)i Ft(None)e Fs(for)i(the)e Fp(handler)p 1611 893 V 16 w(fn)k Fs(removes)120 955 y(the)d(association.)1739 1104 y(Function)-1902 b Fo(RunMainLoop)21 b Fk(\()p Fp(loophandle)p Fk(\))120 1167 y Fs(Runs)15 b(the)g(ILU)g(main)h(loop.)23 b(The)15 b(argument)g Fp(loophandle)h Fs(is)f(a)h(``handle'')f(on)g(that)f(loop) h(invocation,)120 1229 y(created)k(by)g(a)h(call)f(to)f Ft(ilu.CreateLoopHandle\(\))p Fs(.)34 b(This)18 b(function)f(can)j(be)f (used)f(with)h(either)120 1291 y(threaded)9 b(or)g(non-threaded)g(use)g (of)g(ILU/Python.)h(In)f(the)g(threaded)g(use,)h(it)f(simply)f(runs)h Ft(sleep.sleep)120 1353 y Fs(in)i(the)g(calling)f(thread.)1739 1503 y(Function)-1902 b Fo(SetCalloutExceptionHand)o(ler)20 b Fk(\()p Fp(handler-fn)p Fk(\))120 1565 y Fs(This)h(function)g(can)h (be)g(used)g(to)g(define)f(a)i(function)e Fp(handler-fn)j Fs(which)d(is)h(called)g(when)f(an)i(in-)120 1627 y(ternal)e(Python)f (exception)h(is)g(signalled)e(in)i(code)h(called)f(from)h(the)f(ILU)g (C)h(code.)42 b(The)22 b(handler)120 1689 y(function)e(receives)i(four) f(arguments:)32 b(a)22 b(string)e(indicating)g(where)h(in)h(the)f(ILU)g (runtime)h(the)f(ex-)120 1752 y(ception)c(was)h(encountered,)i(the)e (exception)f(type,)j(the)d(exception)h(value,)i(and)e(a)g(traceback)h (object.)120 1814 y(This)g(function)f(is)h(typically)f(used)h(to)g (note)g(the)h(exception)e(to)i(a)g(file)f(or)h(stderr;)j(see)d(the)f (example)120 1876 y(usage)g(in)g(`)p Fp(ILUSRC)t Ft (/runtime/python/iluRt.py)p Fs('.)34 b(If)19 b(a)h(parameter)g(of)f Ft(None)g Fs(is)g(passed)g(to)120 1938 y Ft(SetCalloutExceptionHandler) p Fs(,)j(it)f(cancels)g(any)g(handler)g(function)e(in)i(use,)j(and)d(a) h(default)120 2001 y(built-in)9 b(one)i(is)g(used.)1739 2150 y(Function)-1902 b Fo(SetDebugLevel)22 b Fk(\()p Fp(flags-or-switches)p Fk(\))120 2212 y Fs(Sets)10 b(the)g(ILU)g (kernel)g(debugging)e(flags)i(according)f(to)h(its)f Ft(int)h Fs(argument,)h(if)f(an)g(int)g(is)f(specified,)h(or)g(via)120 2275 y(the)j(colon-separated)e(list)h(of)h(debug)f(switches,)g(if)h(a)g (string)e(is)i(specified.)i(See)f(the)e(Debugging)f(section)120 2337 y(of)g(the)g(ILU)g(Manual)g(for)h(more)g(information)e(on)g(these) h(switches.)1739 2486 y(Function)-1902 b Fo(SetFDBudget)22 b Fk(\()p Fp(desiredbudget)p Fk(\))120 2548 y Fs(Attempts)13 b(to)i(set)f(the)g(file)h(descriptor)e(budget.)21 b(Returns)14 b(what)h(the)f(new)g(budget)g(actually)g(is)g(\(may)h(be)120 2611 y(different)c(than)f(requested\).)p eop %%Page: 87 88 87 87 bop 0 -58 a Fs(Chapter)11 b(4:)g(Using)f(ILU)h(with)f(Python)1274 b(87)1739 183 y(Function)-1902 b Fo(SetMainLoop)21 b Fk(\()p Fp(DoEvent,)11 b(RegisterInput,)f(CancelInput,)h (RegisterOutput,)208 246 y(CancelOutput,)f(CreateAlarm,)i(SetAlarm,)g (CancelAlarm)p Fk(\))120 308 y Fs(The)d(purpose)g(of)g(this)g(function) f(is)h(to)g(be)g(able)h(to)f(use)g(a)h(foreign)f(main)g(loop)g(\(such)g (as)g(for)h(a)g(user)f(interface)120 370 y(toolkit\))f(with)h(an)i(ILU) f(server.)h(The)f(details)f(will)g(not)h(be)g(described)g(here.)h(Look) f(at)g(the)g(runtime)g(module)120 432 y Ft(ilu_tk)h Fs(for)g(an)g (example)g(of)g(its)f(use.)h(This)f(function)g(should)f(only)h(be)h (used)g(with)e(non-threaded)h(use)h(of)120 495 y(ILU/Python.)1739 619 y(Function)-1902 b Fo(SetPassport)23 b Fk(\()p Fp(passport)p Fk(\))120 681 y Fs(Sets)16 b(the)g(current)f(passport)g(identity)f(for) i(this)f(thread,)i(and)f(returns)f(the)h(passport)e(active)i(before)g (this)120 743 y(call.)g(Either)d(of)g(these)f(can)h(be)g Ft(None)p Fs(.)k(Also)11 b(see)j(the)e(function)g Ft(CreatePassport)p Fs(,)g(and)h(the)g(function)120 805 y Ft(GetPassport)p Fs(.)1739 929 y(Function)-1902 b Fo(SetPipeline)22 b Fk(\()p Fp(pipeline)p Fk(\))120 992 y Fs(Sets)15 b(the)g(current)g (pipelining)e(context)h(for)i(this)e(thread,)i(and)f(returns)g(the)g (context)f(active)h(before)g(this)120 1054 y(call.)h(Either)d(of)g (these)f(can)h(be)g Ft(None)p Fs(.)k(Also)11 b(see)j(the)e(function)g Ft(CreatePipeline)p Fs(,)g(and)h(the)g(function)120 1116 y Ft(GetPipeline)p Fs(.)1739 1240 y(Function)-1902 b Fo(SetSerializer)22 b Fk(\()p Fp(serializer)p Fk(\))120 1303 y Fs(Sets)13 b(the)f(current)g(serialization)f(context)h(for)h (this)e(thread,)i(and)f(returns)g(the)h(context)e(active)h(before)h (this)120 1365 y(call.)27 b(Either)15 b(of)h(these)g(can)h(be)f Ft(None)p Fs(.)26 b(Also)16 b(see)g(the)g Ft(createSerializer)f Fs(method)h(on)g(the)g(class)120 1427 y Ft(ilu_Server)p Fs(,)11 b(and)g(the)g(function)f Ft(GetSerializer)p Fs(.)1739 1551 y(Function)-1902 b Fo(TCPDefaultBufferSize)21 b Fk(\()p Fp(size)p Fk(\))120 1613 y Fs(Sets)15 b(the)f(default)g(buffer) h(sized)f(used)g(for)h(TCP/IP)g(transport)f(buffers)g(to)g Fp(size)p Fs(.)22 b(Returns)14 b(the)g(previous)120 1676 y(default)k(buffer)h(size.)33 b(Raises)19 b Ft(IluGeneralError)e Fs(if)h(support)f(for)i(the)f(TCP/IP)i(transport)d(is)h(not)120 1738 y(configured)10 b(into)g(ILU.)1739 1862 y(Function)-1902 b Fo(TCPStatistics)22 b Fk(\()p Fp(*reset)p Fk(\))120 1924 y Fs(Returns)10 b(a)h(dictionary)f(containing)e(the)j(current)f (TCP/IP)i(statistics)c(for)j(this)f(process.)g(If)i(a)f(True)f(value)h (is)120 1987 y(specified)i(for)g(the)g(optional)f(argument,)i(the)f (statistics)e(counters)i(are)h(reset.)k(If)c(TCP/IP)g(support)e(is)h (not)120 2049 y(configured)d(into)g(ILU,)i(this)e(routine)g(will)g (raise)h(the)g(exception)f Ft(IluGeneralError)p Fs(.)1739 2173 y(Function)-1902 b Fo(ThreadedOperation)21 b Fk(\(\))120 2235 y Fs(Enables)10 b(thread)h(use)f(in)h(both)f(the)g(ILU)h(kernel)g (and)f(the)h(ILU/Python)e(runtime.)i(This)f(routine)g(should)f(be)120 2297 y(called)i(before)g(any)g(other)g(ILU)g(calls)g(are)h(made.)1739 2421 y(Constant)-1902 b Fo(TRUE)120 2484 y Fs(A)11 b(value)g(which)f (evaluates)h(to)g(Python)f(boolean)g(True.)1739 2608 y(Function)-1902 b Fo(TypeID)23 b Fk(\()p Fp(cl)p Fk(\))120 2670 y Fs(Returns)11 b(the)g(ILU)g(unique)f(type)g(identifier)g (corresponding)g(to)h(the)g(Python)f(class)g Fp(cl)p Fs(.)p eop %%Page: 88 89 88 88 bop 0 -58 a Fs(Chapter)11 b(4:)g(Using)f(ILU)h(with)f(Python)1274 b(88)1739 183 y(Function)-1902 b Fo(TypeName)23 b Fk(\()p Fp(cl)p Fk(\))120 246 y Fs(Returns)11 b(the)g(ILU)g(type)f(name)i (corresponding)e(to)g(the)h(Python)f(class)h Fp(cl)p Fs(.)1739 358 y(Constant)-1902 b Fo(Version)120 420 y Fs(The)11 b(ILU)g(version)f(string.)0 545 y Fo(4.5.2)26 b(Identifiers)14 b(Exported)g(from)i(the)e Fl(CORBA)h Fo(Module)1744 675 y Fs(Variable)-1901 b Fo(InitialReferences)120 737 y Fs(A)12 b(dictionary)e(with)g(string)g(keys,)i(and)f(values)g(of) h(type)f Ft(CORBA.Object)p Fs(.)g(It)h(is)f(used)g(to)g(resolve)g (strings)120 799 y(passed)16 b(as)g(parameters)i(to)e Ft(CORBA.ORB.resolve_initial_referenc)o(es\(\))p Fs(.)25 b(The)16 b(following)120 862 y(names)11 b(are)h(supported)e (automatically)g(by)h(Python)f(runtime:)157 949 y Fr(\017)30 b Fn(NameService)210 1011 y Fs(If)12 b(the)f(environment)f(variable)h Ft(ILU_COS_NAMING_IOR)f Fs(is)g(bound)h(to)f(a)i(string)e(IOR)i(for)f (a)h(OMG)210 1073 y(IDL)g Ft(CosNaming::NamingContext)d Fs(object)i(instance,)g(the)h(Python)f(runtime)g(will)f(attempt)i(to) 210 1136 y(create)k(a)g(surrogate)f(for)g(that)g(instance)f(locally,)i (ping)f(it,)h(and)f(if)h(successful)e(will)g(bind)h(it)g(to)f(the)210 1198 y(string)c Ft("NameService")p Fs(.)1716 1310 y(Exception)-1902 b Fo(InvalidName)120 1373 y Fs(Raised)9 b(when)g(an)g(invalid)f(name)i (is)f(passed)f(to)h Ft(CORBA.ORB.resolve_initial_references\(\))p Fs(.)120 1435 y(Has)i(the)g(associated)f(bad)h(name)h(as)f(its)f (value.)1802 1548 y(Class)-1901 b Fo(Object)22 b Fn(\(ilu.IluObjSurr\)) 120 1610 y Fs(A)13 b(type)f(which)g(all)h(object)f(types)g(defined)g (in)g(OMG)h(IDL,)g(or)g(inheriting)e(from)i Ft(ilu.CORBA-Object)120 1672 y Fs(in)e(ISL,)h(participate)e(in.)h(It)g(supports)e(the)i (following)f(methods:)157 1759 y Fr(\017)30 b Ft(_is_a\()p Fp(type)p 442 1759 14 3 v 15 w(uid)5 b Ft(\))11 b Fs(-)i(returns)e Ft(True)h Fs(if)h(the)f(object)f(is)h(of)g(the)g(specified)f(type,)i Ft(False)f Fs(otherwise;)210 1822 y(raises)e Ft (ilu.IluUnknownTypeIDError)e Fs(if)i(the)g Fp(type)p 1143 1822 V 15 w(uid)k Fs(is)c(unknown)e(in)i(this)f(address)g(space;) 157 1959 y Fr(\017)30 b Ft(_is_nil\(\))7 b Fs(-)g(returns)g Ft(False)p Fs(;)e(raises)i Ft(TypeError)g Fs(if)g(called)g(via)g Ft(CORBA.O)o(bject._is_n)o(il\(\))210 2021 y Fs(on)k(a)g (non-Python-object)e(type;)157 2096 y Fr(\017)30 b Ft (_non_existent\(\))7 b Fs(-)g(returns)g(the)g(l)o(ogical)f(inv)o(erse)h (of)g(th)o(e)g(result)f(of)h(calli)o(ng)g Ft(i)o(lu.PingObj)o(ect\(\)) 210 2158 y Fs(on)k(the)g(object;)157 2233 y Fr(\017)30 b Ft(_is_equivalent\()p Fp(other)t Ft(\))18 b Fs(-)i(returns)f(the)h (result)f(of)h(comparing)g Fp(self)27 b Fs(and)20 b Fp(other)j Fs(with)c(the)210 2295 y(Python)10 b Ft(==)h Fs(operator;)157 2370 y Fr(\017)30 b Ft(_duplicate\(\))10 b Fs(-)i(does)e(nothing,)g (returns)h Fp(self)c Fs(;)157 2445 y Fr(\017)30 b Ft(_release\(\))10 b Fs(-)i(does)f(nothing,)e(returns)i(nothing;)157 2520 y Fr(\017)30 b Ft(_hash\()p Fp(max)p 441 2520 V 16 w(value)s Ft(\))10 b Fs(-)i(returns)e Ft(\(hash\()p Fp(self)d Ft(\))k(\045)h(\()p Fp(max)p 1157 2520 V 16 w(value)i Ft(+)d(1\)\))p Fs(;)157 2595 y Fr(\017)30 b Ft(_get_implementation\(\))9 b Fs(-)j(raises)f Ft(IluUnimplementedMethodError)p Fs(;)157 2670 y Fr(\017)30 b Ft(_get_interface\(\))10 b Fs(-)h(raises)g Ft (IluUnimplementedMethodError)p Fs(;)p eop %%Page: 89 90 89 89 bop 0 -58 a Fs(Chapter)11 b(4:)g(Using)f(ILU)h(with)f(Python)1274 b(89)120 183 y(The)13 b Ft(CORBA.Object)f Fs(class)h(is)f(actually)h (implemented)f(in)h Ft(iluRt.CORBA_Object)p Fs(,)f(so)h(all)g(classes) 120 246 y(which)d(inherit)g(from)i Ft(ilu.CORBA_Object)e Fs(will)g(have)h(access)h(to)f(these)f(methods.)1802 358 y(Class)-1901 b Fo(ORB)120 420 y Fs(The)18 b(general)g(class)g(for) h(manipulating)d(the)i(object)g(request)f(broker.)33 b(There)19 b(is)e(typically)g(only)g(one)120 482 y(instance)10 b(of)h(this)f(class)g(per)h(address)g(space.)g(It)g(is)f(retrieved)h (with)f(the)g(function)g Ft(CORBA.ORB_init\(\))p Fs(;)120 544 y(it)h(supports)e(the)i(following)e(methods:)157 632 y Fr(\017)30 b Ft(object_to_string\()p Fp(instance)s Ft(\))15 b Fs(-)j(returns)f(a)h(string)f(which)g(can)h(be)f(used)h(in)f (a)h(subsequent)210 694 y Ft(string_to_object\(\))10 b Fs(call;)157 769 y Fr(\017)30 b Ft(string_to_object\()p Fp(string)r Ft(\))14 b Fs(-)k(if)f(the)g(specified)f Fp(string)i Fs(is)f(well)f(formed)i(and)f(specifies)f(an)210 831 y(object,)c(the)g(object)f(is)g(created)i(locally)d(and)i(a)h (reference)g(is)e(returned;)h(the)g(reference)h(may)f(be)g(to)g(a)210 893 y(true)f(instance)f(if)i(the)e(string)g(names)i(a)f(true)h (instance;)d(if)j(the)f(string)e(is)i(poorly)f(formed,)i(the)f(Python) 210 955 y(exception)f Ft(ilu.IluGeneralError)f Fs(is)h(raised.)h(This)f (method)g(does)g(not)g(test)g(for)h(the)g(existence)210 1018 y(of)g(the)g(instance.)157 1092 y Fr(\017)30 b Ft (resolve_initial_references\()p Fp(strin)o(g)r Ft(\))20 b Fs(-)i(If)h(the)g Fp(string)g Fs(argument)f(is)g(bound)f(in)h(the)210 1155 y(dictionary)7 b Ft(CORBA.InitialReferences)p Fs(,)h(the)g(value)h (is)f(returned.)i(Otherwise,)f(the)f(exception)210 1217 y Ft(CORBA.InvalidName)f Fs(is)g(raised.)g(See)g(the)g(documentation)g (of)g Ft(CORBA.Initial)o(References)210 1279 y Fs(for)k(a)h(listing)d (of)i(the)g(names)h(that)e(are)i(bound)e(automatically,)g(if)h(any.) 1739 1391 y(Function)-1902 b Fo(ORB)p 111 1391 15 3 v 18 w(init)22 b Fk(\()p Fp(argv)r(=)p Fk(\(\))p Fp(,)11 b(orb)p 461 1391 14 3 v 16 w(id)5 b(='ilu')p Fk(\))120 1453 y Fs(Returns)18 b(an)g(instance)g(of)g Ft(CORBA.ORB)g Fs(with)f(the)h(specified)g Fp(orb)p 1228 1453 V 15 w(id)23 b Fs(\(currently)18 b(only)f(the)h(ORB)h(ID)120 1516 y Ft('ilu')11 b Fs(is)g(supported\).)f(The)h(arguments)f(which)h(may)h (be)f(passed)f(in)h(via)g Fp(argv)j Fs(are)d(ignored.)0 1640 y Fo(4.5.3)26 b(Methods)14 b(and)h(Attributes)e(of)i(ILU)h (Objects)37 1744 y Fr(\017)30 b Ft(IluObjectID\(\))10 b Fs(returns)h(the)g(object)f(ID)h(of)h(the)f(object.)37 1819 y Fr(\017)30 b Ft(IluPublish\(\))10 b Fs(publishes)f(the)i(object) g(using)f(the)g(simple)h(binding)e(service.)37 1893 y Fr(\017)30 b Ft(IluSBH\(\))11 b Fs(returns)f(the)h(object's)f(string)g (binding)g(handle.)37 1968 y Fr(\017)30 b Ft(IluTypeID\(\))10 b Fs(returns)h(the)g(unique)f(type)h(identifier)f(of)h(the)g(object's)f (ILU)h(type.)37 2043 y Fr(\017)30 b Ft(IluTypeName\(\))10 b Fs(returns)h(the)g(type)f(name)i(of)f(the)g(object's)g(ILU)g(type.)37 2118 y Fr(\017)30 b Ft(IluWithdraw\(\))10 b Fs(undoes)g(the)h(effect)h (of)f(IluPublish\(\).)62 2230 y(Special)17 b(attributes)f(of)h(ILU)g (true)f(objects:)22 b(One)17 b(or)g(more)g(of)g(the)g(following)e (attributes)g(may)j(be)f(set)f(in)h(a)g(true)0 2292 y (\(implementation\))10 b(object)g(of)i(an)f(ISL)g(object)g(type)g(to)f (control)g(certain)h(aspects)g(of)g(that)g(object.)37 2379 y Fr(\017)30 b Ft(IluInstHandle)p Fs(,)18 b(a)g(string)e(instance) g(variable,)j(gives)d(the)h(object's)g(instance)f(handle.)29 b(If)18 b(not)e(present,)j(an)90 2441 y(instance)10 b(handle)h(is)g (invented)e(automatically.)37 2516 y Fr(\017)30 b Ft(IluServer)p Fs(,)13 b(a)f(variable)h(of)f(type)g Ft(ilu_Server)p Fs(,)h(determines)f(the)g(object's)g(server.)j(This)d(can)h(be)f(an)h (instance)90 2578 y(or)e(a)h(class)f(variable.)g(If)g(not)g(present,)g (the)g(default)f(server)i(is)e(used.)p eop %%Page: 90 91 90 90 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1088 b Fs(90)0 183 y Fq(5)36 b(Using)14 b(ILU)h(with)g(CORBA)f(2.0)h(C)p Fi(++)0 366 y Fu(5.1)30 b(Warning)62 470 y Fs(The)17 b(CORBA)h(2.0)f(C)p Ft(++)g Fs(stubber)f(is)g(limited)g(in)g(functionality.)26 b(The)17 b(stubber)f(is)g(only)g(currently)g(working)g(for)0 532 y(Visual)9 b(C)p Ft(++)h Fs(\(sans)g(nested)f(modules)h(and)f (pickles/anys)f(support\).)i(This)f(is)h(very)g(new)g(software)f(-)i (it)e(has)h(received)g(very)0 594 y(limited)g(testing,)g(and)h(the)g (stubber)f(receives)h(little)f(support)g(from)i(the)f(current)g(team.)0 730 y Fu(5.2)30 b(Introduction)62 834 y Fs(This)17 b(chapter)h (describes)g(the)f(use)h(of)g(ILU)g(with)f(C)p Ft(++)i Fs(in)e(a)i(manner)f(compliant)f(with)g(the)h(CORBA)h(2.0)f(C)p Ft(++)0 896 y Fs(language)12 b(mapping)g(specification.)k(\(see)d Ft(http://www.omg.org/corba/corbiiop.htm)p Fs(\)Th)o(e)e(use)h(of)h (ILU's)0 958 y(original)d(C)p Ft(++)h Fs(support)f(is)h(deprecated.)62 1045 y(Any)21 b(function)g(or)g(type)g(which)g(is)g(not)g(part)g(of)h (the)f(CORBA)i(2.0)e(specification)f(has)h(the)h(prefix)f('ilu'.)42 b(It)0 1108 y(should)14 b(be)j(understood)d(that)h(use)h(of)g('ilu')g (prefixed)f(functionality)f(is)h(not)h(portable)f(to)g(other)h (\(non-ILU\))f(CORBA)0 1170 y(implementations.)62 1257 y(Some)k(arguments)e(or)h(return)g(values)f(of)h(functions)e(\(e.g.)33 b(char*\))18 b(have)g(storage)f(management)h(requirements.)0 1319 y(Basically)10 b(this)g(revolves)g(around)g(whether)g(the)h (caller)g(retains)f(or)h(gets)f(ownership)f(of)i(the)f(parameter)i(and) f(is)f(therefore)0 1382 y(responsible)k(for)i(eventually)e(releasing)h (it,)i(or)f(if)g(ILU)f(takes)h(or)g(retains)f(ownership,)h(where)g(it)f (will)f(be)i(released)g(at)0 1444 y(ILU's)g(discretion.)26 b(Any)17 b(function)e(parameter)i(that)f(becomes)h(owned)f(by)g(ILU)h (is)f(marked)h(with)e(the)i(comment)g(/*)0 1506 y(ILUowned)c(*/)h(Any)f (return)h(value)g(\(or)g('out')g(parameter\))h(that)e(remains)h(under)g (the)g(ownership)f(of)h(ILU)g(is)f(similarly)0 1568 y(marked.)f (Anything)d(not)i(so)f(marked)i(is)f(not)f(ILU's)h(responsibility.)62 1656 y(Note)h(that)f(ILU)h(support)f(for)h(C)p Ft(++)g Fs(does)f(rely)h(on)g(having)f(argument)h(prototypes,)e(all)i(C)p Ft(++)g Fs(library)f(functions,)g(and)0 1718 y(the)g(capabilities)e(of) j(the)e(C)p Ft(++)i Fs(pre-processor.)0 1854 y Fu(5.3)30 b(Mapping)15 b(ILU)h(ISL)f(to)g(C)p Fh(++)62 1957 y Fs(The)g(CORBA)h (2.0)f(C)p Ft(++)g Fs(chapters)g(15)f(though)g(18)g(describes)h(the)g (mapping)f(of)h(OMG)g(IDL)g(to)f(C)p Ft(++)p Fs(.)24 b(For)15 b(those)0 2020 y(elements)10 b(of)g(ISL)h(for)f(which)g(there) g(is)g(a)h(direct)f(counterpart)f(in)h(IDL,)h(the)f(ISL)g(component)g (is)f(mapped)i(just)e(as)h(the)g(IDL)0 2082 y(component)i(is.)k(Those)d (ISL)g(concepts)f(with)g(no)h(IDL)g(counterpart)f(\(marked)h(with)f(a)i (')p Ft(-)p Fs(')f(in)f(the)h(table)g(below\))f(have)h(a)0 2144 y(mapping)d(separately)h(described)g(in)f(a)i(following)d (section.)0 2267 y Fo(5.3.1)26 b(ISL)15 b(to)g(IDL)g(Correspondences) 245 2421 y Ft(ISL)497 b(IDL)245 2471 y (---------------------------------)o(----)245 2521 y(INTEGER)397 b(long)245 2570 y(SHORT)24 b(INTEGER)248 b(short)245 2620 y(LONG)24 b(INTEGER)273 b(-)245 2670 y(CARDINAL)372 b(unsigned)25 b(long)p eop %%Page: 91 92 91 91 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1088 b Fs(91)245 183 y Ft(SHORT)24 b(CARDINAL)223 b(unsigned)25 b(short)245 233 y(LONG)f(CARDINAL)248 b(-)245 283 y(BYTE)472 b(octet)245 333 y(BOOLEAN)397 b(boolean)245 382 y(REAL)472 b(double)245 432 y(SHORT)24 b(REAL)323 b(float)245 482 y(LONG)24 b(REAL)348 b(-)245 532 y(CHARACTER)f(-)245 582 y(SHORT)24 b(CHARACTER)198 b(char)245 632 y(PICKLE)422 b(Any)245 681 y(ARRAY)447 b(array)245 731 y(SEQUENCE)372 b(sequence)245 781 y(RECORD)422 b(struct)245 831 y(UNION)447 b(union)245 881 y(OPTIONAL)372 b(-)245 930 y(ENUMERATION)297 b(enum)245 980 y(OBJECT)422 b(object)245 1030 y(CString)397 b(string)245 1080 y(SEQUENCE)24 b(OF)g(CHARACTER)49 b(-)245 1130 y(EXCEPTION)347 b(-,)25 b(exception)245 1180 y(INTERFACE)347 b(module)0 1506 y Fo(5.3.2)26 b(ISL)15 b(Specific)f(Mappings)62 1660 y Fs(The)8 b(following)e(table)i(describes)f(the)h(mappings)f(for) i(ISL)f(types)f(that)h(have)g(no)g(IDL)g(counterparts.)h(The)f(C)p Ft(++)h Fs(column)0 1723 y(gives)h(the)h(mapping)g(modulo)f (indirection)f(and/or)i('const')f(qualification)f(dictated)h(by)h (parameter)h(directionality)d(\(i.e.,)0 1785 y(IN)i(vs)g(OUT)g(vs)g (INOUT)f(vs)h(return)g(values\).)245 1973 y Ft(ISL)497 b(C++)245 2022 y(---------------------------------)o(-----------)o (----------)o(--------)245 2072 y(LONG)24 b(INTEGER)273 b(iluLongInteger)245 2122 y(LONG)24 b(CARDINAL)248 b(iluLongCardinal) 245 2172 y(LONG)24 b(REAL)348 b(iluLongReal)245 2222 y(CHARACTER)f(iluCharacter)245 2271 y(OPTIONAL)24 b(X)323 b(X*)25 b(for)g(operation)f(parameters;)817 2321 y('managed)h(X*')f (for)h(embedded)f(types.)245 2371 y(SEQUENCE)g(OF)g(CHARACTER)49 b(iluCharacter*)245 2421 y(EXCEPTION)347 b(Any)25 b(ISL)g(exception)f (that)g(is)817 2471 y(not)h(a)g(RECORD,)f(maps)h(to)f(a)h(subclass)f (of)817 2521 y(CORBA::UserException,)f(that)i(has)f(a)h(_value\(\))817 2570 y(member)g(function)f(which)g(returns)h(a)f(value)h(of)817 2620 y(the)g(type)g(associated)f(with)g(the)h(exception.)p eop %%Page: 92 93 92 92 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1088 b Fs(92)0 183 y Fo(5.3.3)26 b(Correspondence)14 b(between)h(C)p Fl(++)g Fo(Types)g(and)g(Kernel)f(Types)62 299 y Fs(To)k(provide)e(a)i(consistent)e(naming)h(scheme,)k(in)c(many)h (cases,)i(a)e(type)f(defined)g(in)g(the)h(ILU)f(kernel)h(has)f(been)0 361 y(typedeffed)12 b(to)h(appear)g(in)f(C)p Ft(++)h Fs(as)g(the)f(corresponding)f(type)i(name)g(without)e(the)h (intervening)f(underscore,)j(and)e(with)0 423 y(the)f(following)e (letter)i(capitalized,)f(e.g.)i(typedef)f(ilu)p 856 423 14 3 v 15 w(cardinal)g(iluCardinal;)0 583 y Fo(5.3.4)26 b(C)p Fl(++)14 b Fo(Classes)j(Produced)d(for)h(an)g(Object)62 699 y Fs(The)c(mapping)g(for)g(an)g(ISL)h(Object)e('A')i(produces)e(3)h (C)p Ft(++)h Fs(classes:)26 798 y(1.)30 b(The)13 b(A)g(C)p Ft(++)h Fs(class,)f(which)f(has)h(pure)g(virtual)f(member)j(function)c (declarations)h(for)i(each)f(of)g(A's)g(methods.)k(For)90 860 y(each)h(ISL)g(Object)f(supertype)f(Si)i(of)g(ISL)g(Object)e(A,)i (the)g(C)p Ft(++)g Fs(class)f(A)g('public)g(virtual')f(inherits)g(from) i(the)90 922 y(Si)e(C)p Ft(++)g Fs(class.)26 b(If)17 b(the)e(ISL)i(Object)e(A)h(has)g(no)g(supertypes,)g(the)g(A)g(class)f ('public)g(virtual')g(inherits)g(from)h(the)90 984 y(iluObject)d (class.)22 b([NOTE)15 b(that)f(an)h(object)f(described)g(in)g(IDL)h (will)f(implicity)f(inherit)h(from)h(CORBA::Object)90 1047 y(\(which)10 b(in)g(turn)g(inherits)f(from)i(iluObject\).)e(The)i (idl2isl)d(translator)h(automatically)g(adds)h(ilu.CORBA-Object)g(as)90 1109 y(a)h(SUPERTYPE.])h(This)e(basically)g(creates)h(a)g(C)p Ft(++)g Fs(class)g(hierarchy)g(that)f(is)g(isomorphic)g(to)h(the)f(ISL) i(object)e(type)90 1171 y(hierarchy,)16 b(with)f(each)g(method)g(being) f(declared)i(pure)f(virtual.)22 b(We)16 b(refer)g(to)e(this)g (hierarchy)h(as)h(the)f('abstract)90 1233 y(object)10 b(hierarchy'.)26 1320 y(2.)30 b(The)15 b(A)p 212 1320 V 16 w(surrogate)g(C)p Ft(++)g Fs(class,)i(which)d(has)h(virtual)f (member)j(function)d(declarations)g(for)h(each)h(of)f(ISL)h(Object)90 1382 y(A's)g(non)g(inherited)f(methods.)27 b(These)16 b(member)i(functions)d(transfer)h(requests)g(to)g(the)g(true)g(object.) 27 b(For)17 b(each)90 1444 y(ISL)c(Object)e(supertype)g(Si)i(of)f(ISL)h (Object)e(A,)i(the)f(C)p Ft(++)h Fs(class)f(A)p 1163 1444 V 16 w(surrogate)f('public)h(virtual')f(inherits)g(from)h(the)90 1507 y(Si)p 131 1507 V 16 w(surrogate)d(C)p Ft(++)h Fs(class,)f(and)h (then)f('public)f(virtual')g(inherits)g(from)i(the)g(C)p Ft(++)f Fs(class)g(A.)h(\(If)g(the)f(ISL)h(Object)f(A)g(has)90 1569 y(no)h(supertypes,)f(the)g(A)p 463 1569 V 17 w(surrogate)g(class)g ('public)g(virtual')g(inherits)g(only)g(from)h(the)g(C)p Ft(++)g Fs(class)g(A.\))g(This)f(basically)90 1631 y(creates)18 b(a)f(C)p Ft(++)h Fs('surrogate)e(object)h(hierarchy')g(that)g(is)f (isomorphic)g(to)h(the)g(abstract)g(object)f(type)h(hierarchy,)90 1694 y(with)c(the)g(addition)f(that)i(each)g(X)p 633 1694 V 16 w(surrogate)f(class)h(also)f(inherits)f(from)j(its)d (counterpart)h(in)h(the)f('abstract)h(object)90 1756 y(hierarchy'.)26 1842 y(3.)30 b(An)11 b(A)p 193 1842 V 16 w(var)h(C)p Ft(++)f Fs(class)g(as)g(prescribed)g(by)f(the)h(CORBA) h(C)p Ft(++)g Fs(mapping.)62 1978 y(This)f(mapping)f(allows)g(servers)i (to)f(be)g(developed)f(that)h(do)g(not)g(contain)f(surrogate)h(stub)f (code)h(\(if)h(they)f(don't)f(need)0 2040 y(it\),)k(and)f(also)f (prevents)h(the)g(situation)e(where)i(a)h(server)f(method)g(override)g (is)g(forgotten,)f(resulting)g(in)h(surrogate)f(stub)0 2102 y(code)f(being)g(called)f(as)i(it)e(it)h(were)h('true')f(code.)62 2201 y(For)22 b(each)g(ISL)g(Object)e('A')i(for)f(which)g(a)h(true)f (side)g(implementation)f(is)h(to)g(be)g(developed,)i(the)f(true)f(side) 0 2264 y(implementer)12 b(should)e(define)i(a)h(class)e(A)p 670 2264 V 17 w(impl)g(that)h(inherits)e(virtually)g(from)j(the)f(C)p Ft(++)g Fs(class)g(A,)g(and)g(implements)f(the)0 2326 y(actual)i(true)g(methods)g(as)g(member)i(functions)c(\(in)i(whatever)g (manner)h(is)f(appropriate\).)k(The)c(implementer)h(is)f(free)h(to)0 2388 y(use)e(delegation,)f(implementation)g(inheritance,)h(whatever)g (-)h(the)f(only)f(restriction)f(is)i(that)g(if)g(a)g(class)g(B)p 1704 2388 V 17 w(impl)g(inherits)0 2450 y(implementation)d(from)j(a)f (class)f(X,)h(and)g(class)f(X)h(inherits)e(from)j(a)f(class)f(in)h(the) f(abstract)g(object)g(hierarchy,)i(\(e.g.)g(when)0 2513 y(X)f(is)g(A)p 122 2513 V 16 w(impl\),)g(then)g(X's)g(inheritance)f (from)i(the)f(abstract)g(object)f(hierarchy)h(must)g(be)g('public)f (virtual'.)62 2612 y(Each)h(produced)g(C)p Ft(++)g Fs(class)g(e.g.)h (A,)g(will)e(have)h(a)h(constructor)p eop %%Page: 93 94 93 93 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1088 b Fs(93)1820 183 y(C)p Ft(++)-1900 b(A)12 b Fo(\()23 b Ft(char*)11 b Fp(pc)p 259 183 14 3 v 16 w(instance)p 425 183 V 15 w(handle)p Ft(,)g(ilu_Server)p Fs(&)24 b Fp(r)p 922 183 V 16 w(an)p 981 183 V 17 w(ilu)p 1047 183 V 15 w(server)29 b Ft(=)208 246 y(iluServer::GetDefaultServer) p Fs(\()p Ft(\),)22 b Fn(ILUCPP)p 1143 246 V 15 w(BOOL)13 b Fp(b)p 1324 246 V 16 w(within)p 1458 246 V 15 w(object)p 1585 246 V 15 w(table)h Fn(=)208 308 y(ILUCPP)p 381 308 V 15 w(FALSE)e(\))f(:)h(iluObject)g(\()g Fp(A::m)p 921 308 V 15 w(ILUClassRecord)p Fn(,)g Fp(pc)p 1308 308 V 16 w(instance)p 1474 308 V 15 w(handle)p Fn(,)208 370 y Fp(r)p 226 370 V 16 w(an)p 285 370 V 16 w(ilu)p 350 370 V 16 w(server)p Fn(,)f Fp(b)p 522 370 V 17 w(within)p 657 370 V 14 w(object)p 783 370 V 16 w(table)s Fn(\).)0 471 y Fo(5.3.5)26 b(Misc.)d(Mapping)14 b(Details)0 613 y Fn(5.3.5.1)23 b(Unions)62 717 y Fs(In)11 b(IDL,)g(Union)e(arms)i(all) f(have)g(names,)i(in)e(ISL,)h(the)f(names)h(may)g(not)f(be)g (specified.)h(If)g(a)g(name)g(isn't)e(specified)h(for)0 780 y(an)h(arm,)i(the)e(name)g(the)g(stubber)f(produces)h(is)g(the)g (arm's)g(typename,)h(prefixed)f(with)f(')p 1408 780 V 16 w(',)i(and)f(suffixed)g(with)f(')p 1807 780 V 16 w(arm'.)62 867 y(For)i(example,)120 955 y Ft(TYPE)25 b(someuniontype)e(=)i(short)f (cardinal)h(UNION)319 1005 y(bar)g(=)g(0,)f(1)h(END,)319 1055 y(integer)g(=)f(DEFAULT)120 1104 y(END;)62 1217 y Fs(would)10 b(produce)h(the)g(C)p Ft(++)g Fs(names)p 634 1217 V 28 w(bar)p 708 1217 V 17 w(arm,)h(and)p 895 1217 V 27 w(integer)p 1038 1217 V 16 w(arm)g(to)f(reference)h(the)f (bar)h(and)f(integer)f(arms.)0 1343 y Fn(5.3.5.2)23 b(Optionals)62 1448 y Fs(For)13 b(procedure)f(parameters,)h(an)f(ISL)h Ft(OPTIONAL)e Fs(type)h(maps)g(either)g(to)g(the)g(same)g(C)p Ft(++)h Fs(type)e(as)i(its)e(base)h(type,)g(if)0 1510 y(that)d(base)g(type)g(is)g(represented)g(with)g(an)h(C)p Ft(++)f Fs(pointer)g(type,)g(or)h(to)f(a)h(pointer)e(to)h(that)g(base)h (type,)f(if)h(it)f(is)g(not)g(represented)0 1572 y(with)h(a)i(C)p Ft(++)f Fs(pointer)f(type.)62 1660 y(Additionally,)f(all)i Ft(OPTIONAL)f Fs(types)h Fp(T)k Fs(have)c(an)g(associated)g(C)p Ft(++)g Fp(T)p 1209 1660 V 20 w Fs(var.)62 1748 y(For)23 b(non-parameters)g(\(i.e.,)j Ft(RECORD)c Fs(members,)27 b Ft(ARRAY)22 b Fs(and)h Ft(SEQUENCE)f Fs(elements\))g(an)h(ISL)g Ft(OPTIONAL)0 1810 y Fs(type)17 b(maps)g(to)g(a)h('managed)g(pointer',) g(analagous)e(to)h(the)g(mapping)g(for)g(non-parameter)h(ISL)f Ft(OBJECT)g Fs(\(CORBA)0 1872 y Ft(interface)p Fs(\))i(and)h(ISL)g Ft(SEQUENCE)11 b(OF)g(SHORT)g(CHARACTER)19 b Fs(\(CORBA)i Ft(string)p Fs(\).)38 b(\(This)19 b('managed)h(pointer')0 1934 y(behaves)e(similarly)f(to)h Fp(T)p 434 1934 V 20 w Fs(var;)j(however,)f(CORBA)f(does)f(not)f(allow)h(compliant)f (applications)f(to)i(use)g('managed)0 1997 y(pointer')10 b(types)h(directly,)f(as)h(the)g(actual)g(type)g(is)g (implementation-specific\))62 2084 y(The)g(following)e(ISL)j(and)f(C)p Ft(++)g Fs(code)h(fragments)f(illustrate:)245 2222 y Ft(ISL)245 2321 y(TYPE)24 b(SomeType)74 b(=)25 b Fp(...)245 2371 y Ft(TYPE)f(MyOptional)g(=)h(OPTIONAL)f(SomeType;)145 2471 y(TYPE)g(MyRec)h(=)g(RECORD)245 2521 y(member:)f(MyOptional)145 2570 y(END;)145 2670 y(TYPE)g(MyArray)h(=)g(ARRAY)f(OF)h(10)f (MyOptional;)p eop %%Page: 94 95 94 94 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1088 b Fs(94)245 183 y Ft(member:)24 b(MyOptional)145 233 y(END;)245 382 y(C++)145 482 y Fp(...)245 582 y Ft(MyRec)248 b(myRec;)145 632 y(MyArray)199 b(myArray;)145 681 y(SomeType)174 b(st;)145 731 y(SomeType*)149 b(stPtr;)145 781 y(MyOptional)124 b(myOptional;)48 b(//)25 b(MyOptional)f(is)h (equivalent)f(to)g(SomeType*)145 831 y(MyOptional_var)g(stVar;)145 930 y Fp(...)145 1030 y Ft(myRec.member)g(=)h(myArray[0];)198 b(//)24 b(free)h(old)g(myRec.member,)e(deep)i(copy)145 1080 y(myArray[1])74 b(=)25 b(stVar;)323 b(//)24 b(free)h(old)g (myArray[1],)e(deep)i(copy)145 1130 y(myRec.member)f(=)h(stPtr;)323 b(//)24 b(free)h(old)g(myRec.member,)e(assume)i(ownership)145 1180 y(myRec.member)f(=)h(myOptional;)198 b(//)24 b(free)h(old)g (myRec.member,)e(assume)i(ownership)145 1279 y(myRec.member)f(=)h(&st;) 373 b(//)24 b(ILLEGAL)h(-)g(can't)f(free)g(&st)145 1329 y(myRec.member)g(=)h(new)f(SomeType\(st\);)49 b(//)24 b(OK;)h(free)g(old)f(myRec.member,)g(assume)g(ownership)145 1429 y(stPtr)g(=)h(myArray[2];)373 b(//)24 b(Simple)h(pointer)f (assignment,)g(no)h(copy)145 1478 y(stVar)f(=)h(myRec.member;)323 b(//)24 b(free)h(old)g(stVar,)f(deep)g(copy)62 1693 y Fs(The)10 b(lifetime)g(of)g Ft(recA.member)g Fs(and)g(each)g Ft(myArray[)p Fp(n)s Ft(])g Fs(are)g(tied)g(to)g(recA)g(and)h(myArray,) g(respectively;)e(when)0 1755 y(an)j(optional-containing)d(variable)i (goes)h(out)f(of)h(scope)g(or)g(is)g(destroyed,)g(its)f(optional)f (members/elements)i(are)h(freed.)0 1817 y(Thus,)k(the)f(assignment)f Ft(myRec.member)10 b(=)i(&st)k Fs(in)g(the)g(example)g(above)g(is)g (illegal)f(and)h(can)h(lead)f(to)g(calamitous)0 1879 y(results)10 b(when)h(an)g(attempt)g(is)g(made)g(to)g(free)h(&st.)0 2082 y Fn(5.3.5.3)23 b(Exceptions)62 2212 y Fs(Any)14 b(ISL)h(exception)f(that)g(is)g(not)g(a)h(RECORD,)h(maps)f(to)f(a)h (subclass)e(of)i(CORBA::UserException,)f(that)g(has)h(a)p 3 2275 14 3 v 16 2275 a(value\(\))c(member)i(function)d(which)g (returns)h(a)g(value)g(of)g(the)g(type)g(associated)f(with)g(the)h (exception.)0 2478 y Fn(5.3.5.4)23 b(ISL)15 b(Asynchronous)g(Methods)62 2608 y Fs(In)i(IDL,)g(methods)f(may)h(be)g Ft(ASYCHRONOUS)p Fs(.)27 b(Asynchronous)14 b(methods)i(cannot)g(have)h(return)f(values)g (or)h(raise)0 2670 y(exceptions.)10 b(Hence,)i(they)f(result)f(in)h(a)g (C)p Ft(++)h Fs(member)g(function)e(declared)h(to)g(return)g(void.)p eop %%Page: 95 96 95 95 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1088 b Fs(95)0 183 y Fn(5.3.5.5)23 b(ISL)15 b(Functional)g(Methods)62 288 y Fs(In)i(IDL,)h(methods)e(may)i(be)f Ft(FUNCTIONAL)p Fs(.)28 b(In)17 b(the)g(C)p Ft(++)h Fs(mapping,)g Ft(FUNCTIONAL)e Fs(is)h(ignored.)28 b(The)17 b(ability)0 350 y(to)i(create)i(custom)e(C)p Ft(++)h Fs(surrogates)f(allows)g(the)g (implementation)f(to)i(decide)f(what)h(and)f(how)h(caching)f(may)h(be)0 413 y(implemented)11 b(on)g(any)g(method,)g(as)g(well)f(as)i(perform)f (any)g(other)g(sorts)f(of)i(message)f('filtering'.)0 540 y Fn(5.3.5.6)23 b(ISL)15 b(Collectible)f(Objects)62 645 y Fs(An)c(ISL)g(object)g(being)f(declared)h Ft(COLLECTIBLE)f Fs(has)h(not)f(effect)i(on)e(the)h(mapping)f(per-se.)j(It)d(will)g (however)h(cause)0 707 y(ILU)h(to)g(adjust)f(an)h(object's)f(reference) j(count)d(based)h(on)g(interest)f(or)h(dis-interest)f(from)h(clients.)0 835 y Fn(5.3.5.7)23 b(Inheritence)16 b(from)f(CORBA::Object)62 939 y Fs(If)e(an)g(ISL)g(Object)g(A)f(has)h(no)f(supertypes,)g(the)h(A) g(class)f('public)g(virtual')f(inherits)h(from)h(the)g(iluObject)e (class.)k(An)0 1002 y(object)10 b(described)g(in)h(IDL)f(will)g (implicity)f(inherit)h(from)h(CORBA::Object)f(\(which)g(in)g(turn)h (inherits)e(from)i(iluObject\).)0 1064 y(\(The)e(idl2isl)e(translator)i (automatically)f(adds)g(ilu.CORBA-Object)h(as)h(a)f(SUPERTYPE.\))h(So,) g(if)g(you)e(define)i(an)f(object)0 1126 y(in)j(ISL,)h(and)f(do)g(not)f (explicitly)f(declare)j(ilu.CORBA-Object)f(as)g(a)h(SUPERTYPE,)g(you)e (will)g(not)h(have)g(the)g(member)0 1188 y(functions)e(of)h (CORBA::Object)f(available)h(since)f(you)h(do)g(not)f(inherit)g(from)i (it.)0 1316 y Fn(5.3.5.8)23 b(Portability)13 b(and)j(Mapping)f (Variations)62 1421 y Fs(The)f(CORBA)h(2.0)f(C)p Ft(++)g Fs(mapping)g(allows)f(for)h(variations)f(in)g(the)h(mapping)f (depending)g(on)h(the)f(C)p Ft(++)i Fs(compilers)0 1483 y(support)10 b(for)h(Name)h(Spaces,)g(Exception)e(Handling,)g(and)h (Run-Time)g(Type)g(information.)62 1571 y(The)f(ILU)f(CORBA)h(2.0)g(C)p Ft(++)g Fs(mapping)f(implementation)f(assumes)h(that)g(the)g(C)p Ft(++)h Fs(compiler)f(supports)f(exceptions.)0 1633 y(We)i(also)e (assume)i(that)e(the)h(compiler)h(supports)d(RTTI)j(should)d(someone)i (want)g(to)g(do)g(narrowing)g(within)e(the)i(exception)0 1696 y(hierarchy.)i([Given)f(that)g(ILU)h(does)f(not)g(provide)g(a)h (Dynamic)g(Invocation)e(Interface,)j(there's)f(no)f(real)h(need)g(to)f (narrow)0 1758 y(exceptions)g(anyway.])62 1846 y(During)30 b(the)g(configuration)f(phase)h(of)h(ILU)f(installation)e(\(or)i(for)h (Windows,)j(per)d(the)f(definitions)f(in)0 1908 y(`)p Fp(ILUSRC)t Ft(/runtime/kernel/iluwin.h)p Fs('\))7 b(a)h(determination) f(is)h(made)h(as)f(to)f(whether)h(or)g(not)g(to)g(use)g(namespaces,)0 1971 y(nested)j(classes)g(or)h(underscores)f(for)i(IDL)e(modules,)h (based)f(on)h(the)f(C)p Ft(++)i Fs(compiler)e(in)h(use.)h([This)e(can)h (be)g(overridden)0 2033 y(with)g(the)i(configuration)d(option)h (--with-cplusplus-mappin)o(g=)e(switch)j(to)g(config.])k(This)c (results)f(in)h(a)h(C)p Ft(++)g Fs(runtime)0 2095 y(that)e(is)g (constructed)f(with)h(one)g(of)h(these)f(approaches)h(in)f(mind.)j (Should)d(a)h(user)f(decide)h(to)f(use)g(a)h(different)g(mapping,)0 2157 y(this)h(can)i(be)g(done)f(by)g(setting)f(appropriate)g(switches)g (to)h(the)g(stubber,)h(but)f(you)g(must)g(bear)h(in)f(mind)g(that)g (the)g(C)p Ft(++)0 2220 y Fs(runtime)g(needs)f(to)h(be)g(in)f (correspondence,)i(since)f(the)f(selection)g(radically)g(changes)h(the) f(names)i(seen)f(by)f(a)i(linker.)0 2282 y(Based)d(on)f(our)g (knowledge)f(\(as)i(of)f(the)g(date)g(of)h(this)e(writing\),)h(of)g (the)g(degree)h(of)g(support/bugs)c(for)k(namespaces)f(and)0 2344 y(nested)e(classes,)h(the)g(following)e(describes)i(the)g(IDL)g (module)g(mapping)f(based)h(on)g(compiler:)62 2432 y(C)p Ft(++)h Fs(Compiler)f(Module)g(Mapping)245 2570 y Ft(Compiler)422 b(Mapping)245 2620 y(---------------------------------)o(------)245 2670 y(Microsoft)24 b(Visual)g(C++)124 b(underscores)p eop %%Page: 96 97 96 96 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1088 b Fs(96)245 183 y Ft(SunPro)472 b(nested)25 b(classes)245 233 y(Gnu)547 b(nested)25 b(classes)62 399 y Fs(To)15 b(portably)f(reference)i(things)d(in)h(a)i(interface)f (when)f(the)h(stubber)f(is)h(directed)f(to)h(produce)f(portable)g (code,)i(the)0 461 y(stubber)c(generates)h(two)g(macros,)h(one)f(for)g (referring)h(to)e(things)g(from)h(outside)f(the)h(namespace)h(\(e.g.)k (when)13 b(defining)0 523 y(a)h(member)h(function\),)e(and)h(another)f (for)h(inside)f(the)g(namespace)h(\(e.g.)20 b(inside)13 b(a)h(class)f(declaration\).)19 b(The)13 b(names)h(of)0 586 y(these)g(macros)g(are)h(the)e(interface)h(name,)i(and)e(the)f (interface)i(name)f(with)f(a)h(')p 1272 586 14 3 v 17 w(')g(\(underscore\))g(suffix.)19 b(These)14 b(macros)0 648 y(expand)d(to)f(some)i(other)e(macros)i(that)f(are)g(defined)g(in)g (the)g(cppportability.hpp)d(file.)62 737 y(To)h(refer)h(to)e(things)g (in)g(the)h(CORBA)g(interface,)h(one)f(uses)f(the)h(CORBA)h(macro.)h (For)f(example,)g(CORBA\(Boolean\))0 799 y(b)p 26 799 V 16 w(my)p 100 799 V 17 w(result)g(=)h(ILUCPP)p 422 799 V 17 w(TRUE;)62 888 y(Because)27 b(of)g(possible)e(variations)g(in) h(compiler)g(support)g(for)g(Booleans,)k(CORBA\(Boolean\))e(is)e (defined)0 951 y(as)j(ILUCPP)p 226 951 V 17 w(BOOL,)f(where)h(ILUCPP)p 702 951 V 17 w(BOOL)f(is)g(defined)g(as)h(either)f(an)h(int)e(\(with)h (ILUCPP)p 1723 951 V 17 w(TRUE)g(and)0 1013 y(ILUCPP)p 159 1013 V 17 w(FALSE)20 b(#defined)f(as)h(1)f(and)h(0\),)i(or)e(as)g (a)g(bool)e(\(with)h(ILUCPP)p 1299 1013 V 17 w(TRUE)h(and)f(ILUCPP)p 1696 1013 V 17 w(FALSE)h(#de-)0 1075 y(fined)11 b(as)g(true)g(and)g (false\).)0 1220 y Fu(5.4)30 b(Concepts)0 1367 y Fo(5.4.1)c(Servers)15 b(and)g(Ports)62 1473 y Fs(In)g(ILU)g(there)g(is)g(a)g(concept)g(of)g (an)g('server)g(object'.)22 b(In)15 b(the)g(kernel)g(this)f(is)g(the)h (ilu)p 1464 1473 V 15 w(Server,)i(which)e(in)f(the)h(C)p Ft(++)0 1535 y Fs(runtime)d(is)h(encapsulated)f(asn)g(an)h Ft(iluServer)g Fs(object.)j(This)c('server')h(effectively)f(forms)i(a)f ('scope')g(in)f(which)g(true)0 1597 y(objects)h(reside.)19 b(This)12 b(is)i(why)f(for)h(example,)g(and)g(object)f(lookup)f (requires)h(both)g(the)h('server')g(ID,)g(and)g(the)f(object's)0 1660 y(instance)d(handle)h(-)g(both)g(are)g(needed)g(to)g(uniquely)f (denote)g(an)h(object.)62 1749 y(Now)f(a)g(server)g(has)g(some)g (number)g(of)g('ports'.)g(A)g(port)f(is)h(basically)e(a)j(means)f(of)g (communicating)f(with)g(the)g(objects)0 1811 y(inside)16 b(a)h(server,)i(using)d(a)h(particular)g(combination)e(of)i(protocol)f (and)h(transport.)27 b(For)18 b(example,)h(when)d(create)i(an)0 1873 y Ft(iluServer)p Fs(,)11 b(the)f(constructor)g(for)h Ft(iluServer)f Fs(automatically)g(adds)g(a)i(port)e(for)h(the)g (communication)f(protocol)f(and)0 1936 y(transport)k(specified)g(as)h (constructor)f(arguments.)20 b(We)15 b(can)f(call)g Ft (iluServer::iluAddPort)e Fs(to)i(have)g(additional)0 1998 y(ports)h(added.)24 b(For)15 b(example)h(we)g(may)g(want)f(to)g (be)g(able)g(to)g(communicate)h(with)e(the)i(objects)e(using)g Ft(sunrpc)h Fs(over)0 2060 y Ft(tcp/ip)p Fs(,)f(as)g(well)f(as)h Ft(http)f Fs(over)h Ft(tcp/ip)p Fs(.)k(The)c(iluServer)f(has)g(a)h (notion)e(of)i(a)g(default)f(port.)18 b(This)13 b(is)g(initially)e(one) 0 2122 y(as)j(specified)f(during)g(construction,)g(but)h(this)f(can)h (be)g(changed)g(if)g(when)g(calling)f Ft(iluServer::iluAddPort)f Fs(we)0 2185 y(specify)g(that)h(this)f(should)f(become)j(the)f(default) f(port.)k(The)d(default)g(port)f(is)h(the)f(one)h(used)g(when)g(we)g (ask)g(for)g(contact)0 2247 y(information)e(for)h(an)g(object)f(-)h (that)f(is,)h(if)f(we)h(get)g(the)g(string)e(binding)g(handle)h(for)h (an)g(object,)g(the)f(contact)g(information)0 2309 y(in)g(that)f (string)g(will)g(reflect)i(the)f(default)f(server)i(port.)0 2440 y Fo(5.4.2)26 b(Object)14 b(Tables)62 2545 y Fs(True)h(objects)f (may)i(either)f(be)g(created)g(ahead)h(of)f(time,)h(or)f(on)g(an)g('as) h(needed')f(basis,)g(i.e.)24 b(when)15 b(a)g(call)g(comes)0 2608 y(in)h(involving)e(them.)28 b(The)17 b('as)g(needed')f(situation)f (is)h(made)h(possible)e(by)h('object)g(tables'.)27 b(An)17 b Ft(iluServer)f Fs(may)0 2670 y(have)e(associated)f(with)g(it)g(\(at)h (construction)e(time\))i(an)h Ft(iluObjectTable)d Fs(object.)20 b(When)13 b(a)i(call)e(comes)i(involving)p eop %%Page: 97 98 97 97 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1088 b Fs(97)0 183 y(an)17 b(object)f(in)g(that)h Ft(iluServer)f Fs(that)g(the)h(ILU)f(doesn't)g(already)h(know)f(about,) i(the)e Ft(iluObjectTable)g Fs(object's)0 246 y Ft (iluObjectOfInstanceHandle)9 b Fs(gets)i(called.)g(It)g(is)g(the)g(job) f(of)i(this)e(function)g(to)g(create)i(and)f(return)g(a)h(new)f(object) 0 308 y(with)k(that)h(instance)f(handle.)26 b(How)15 b(it)h(does)g(this)f(is)g(specific)h(to)g(your)f(application)g(-)h(it)g (may)g(read)h(object)e(state)h(off)0 370 y(a)i(disk)e(for)h(example.)30 b(In)17 b(any)g(event,)i(one)e(thing)f(this)g(function)g(must)h(do)g (is)f(ensure)h(that)g(when)g(it)g(calls)f(the)h(true)0 432 y(objects)9 b(constructor,)g(that)g(it)h(sets)f(the)g (constructor's)g(b)p 896 432 14 3 v 16 w(within)p 1030 432 V 14 w(object)p 1156 432 V 16 w(table)g(argument)h(to)g(true.)g (\(Otherwise,)g(internal)0 495 y(locking)d(constraints)g(will)h(be)h (violated\).)g(While)f(in)g(the)h Ft(iluObjectOfInstanceHandle)d Fs(function,)j(the)f(associated)0 557 y Ft(iluServer)p Fs('s)h(lock)h(is)f(held,)h(and)g(if)g(the)f(resulting)g(object)g(is)g (expected)h(to)g(be)g(of)g(a)g(COLLECTIBLE)g(type,)g(the)f(global)0 619 y(kernel)i(mutex)f Ft(")p Fs(gcmu)p Ft(")h Fs(is)f(also)h(held.)f (The)h(fact)g(that)f(these)h(locks)f(are)h(held)g(somewhat)f(restricts) g(what)g(an)h(application)0 681 y(can)g(do)g(inside)f(this)g(mapping)h (procedure.)0 813 y Fo(5.4.3)26 b(Threading)62 919 y Fs(The)20 b(ILU)f(C)p Ft(++)h Fs(support)f(may)h(be)f(initialized)f(to) h(run)h(in)f(either)g(threaded)h(or)f(non-threaded)g(mode.)37 b(In)20 b(non)0 981 y(threaded)11 b(mode,)g(a)h(call)f(to)f Ft(iluServer::iluRun)g Fs(member)i(function)e(results)g(in)g(a)h(call)g (to)g(ILU's)g('mainloop'.)f(The)0 1043 y(mainloop)h(basically)g(sits)g (waiting)f(for)i(an)h(incoming)e(request.)i(When)f(one)g(comes)g(in,)g (the)g(request)g(is)f(invoked.)i(If)f(the)0 1106 y(implementation)c(of) h(the)g(invoked)g(method)f(makes)i(a)g(call)f(to)g(some)h(other)f (remote)g(object,)h(the)f(mainloop)f(is)h(recursively)0 1168 y(entered)16 b(while)f(awaiting)g(a)h(reply.)26 b(This)15 b(allows)g(additional)f(requeste)h(to)h(come)g(in)g(and)g (get)f(serviced,)j(preventing)0 1230 y(deadlock.)62 1320 y(When)13 b(intialized)f(to)g(run)h(in)g(threaded)f(mode,)i(ILU)f(will) f(run)h(one)g(thread)g(for)g(each)h(incoming)e(connection.)k(Note)0 1382 y(that)c(there)g(may)h(be)f(multiple)f(connections)g(for)h(a)h (particular)e(port)h(\(either)g(from)h(different)f(clients,)f(or)i (from)g(the)f(same)0 1444 y(client)g(who)f(needed)i(another)f (connection)f(because)h(all)g(the)h(ones)e(it)h(had)h(so)f(far)h(were)g (busy)e(at)i(the)f(time\).)j(In)e(the)f(case)0 1506 y(of)j(a)h (non-concurrent)e(protocol)g(\(sunrpc,)i(http,)f(courier\),)i(the)e (connection)f(thread)h(receives)g(an)g(incoming)f(request,)0 1569 y(processes)e(it)g(itself,)h(and)g(then)f(waits)g(for)h(the)g (next)f(request.)k(In)d(the)f(case)i(of)e(a)i(concurrent)e(protocol)f (\(csunrpc,)j(iiop\),)0 1631 y(the)e(connnection)f(thread)i(receives)f (an)h(incoming)f(request,)g(spawns)g(a)h(worker)g(thread)f(to)g(carry)h (out)f(the)h(request,)f(and)0 1693 y(immediately)f(goes)f(back)h(to)g (waiting)f(for)h(more)h(incoming)e(requests.)62 1783 y(The)k(ILU)f(C)p Ft(++)h Fs(provides)e(no)h(special)g(concurrency)g (control)g(for)g(methods)g(in)g(your)g(objects)f(\(to)i(do)f(so)g (would)f(be)0 1845 y(presumptive)h(on)g(our)h(part\).)19 b(The)14 b(method)f(implementor)h(must)f(put)g(appropriate)g(locking)f (in)i(place)g(if)f(it)h(is)f(possible)0 1907 y(that)e(multiple)e (threads)i(\(or)g(recursive)g(mainloop)f(invocations\))g(might)g(be)h (running)f('in')h(an)g(object)g(simultaneously.)0 2039 y Fo(5.4.4)26 b(Custom)15 b(Surrogates)62 2145 y Fs(A)i(surrogate)g(is) g(an)g(object)f(that)h(is)f(used)h(to)g(represent)g(a)g(remote)h (object.)28 b(When)17 b(a)h(method)f(is)f(invoked)g(on)h(a)0 2207 y(surrogate,)c(the)f(methods)g(implementation)f(in)h(the)g (surrogate)g(transfers)h(the)f(call)g(to)h(the)f(true)g(object,)h(and)f (returns)g(the)0 2269 y(result)g(of)h(this)e(call,)j(thus)d(providing)g (location)g(transparency.)16 b(There)d(are)g(times)g(however)f(when)g (it)h(is)f(useful)g(to)g(have)0 2331 y(the)f(surrogate's)f(method)h (implementation)f(do)g(more)i(than)f(just)f(forward)h(the)g(call)g(to)f (the)h(true)g(object.)g(An)g(application)0 2394 y(may)h(want)g(a)g (surrogate)g(method)f(implementation)g(that)g(caches)h(the)g(results)f (of)h(calls)f(\(potentially)f(reducing)h(network)0 2456 y(overhead\),)g(perform)h(transformations)e(on)h(arguments,)g(output)e (diagnostic)h(information,)g(or)h(whatever.)62 2545 y(To)d(facilitate)g (this,)g(the)g(ILU)g(C)p Ft(++)g Fs(support)f(allows)g(an)i (implementation)e(to)g(supply)g(a)i(function)e(that)g(is)h(called)g (when)g(a)0 2608 y(surrogate)f(for)g(a)g(particular)g(object)g(t)o(ype) g(i)o(s)g(needed.)g(The)g(function)g Ft(iluCppRuntime)o(::iluSetSur)o (rogateCrea)o(tor)0 2670 y Fs(tells)12 b(the)g(C)p Ft(++)h Fs(runtime)f(what)h(function)e(to)h(call)h(when)f(a)h(surrogate)f(for)h (an)g(object)f(of)h(the)f(specified)g(class)h(is)f(needed.)p eop %%Page: 98 99 98 98 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1088 b Fs(98)0 183 y(This)10 b(allows)f(an)i (implementation)e(to)h(subclass)f(off)i(a)f(surrogate)g(class,)h(and)f (write)g(a)h(new)g(surrogate)e(creation)i(function)0 246 y(that)i(creates)h(an)f(instance)g(of)g(this)g(new)g(subclass.)k (Call)d Ft(iluCppRuntime::iluSetSurrogateCre)o(ator)d Fs(after)0 308 y(you've)k(performed)i(initialization)o(,)e(but)g (before)h(you)g(do)f(any)h(operations)e(which)h(might)h(create)g(a)g (surrogate)g(of)f(the)0 370 y(specified)c(class.)j(It)e(basically)f (overwrites)g(the)h(default)f(surrogate)h(creation)f(function)g(set)h (up)f(by)h(the)g(surrogate)f(stubs.)0 432 y(It)g(returns)g(the)g(old)f (surrogate)h(creator)g(function,)f(or)i Ft(NULL)f Fs(if)g(was)g (previously)e(no)i(surrogate)f(creator)i(for)f(that)g(class.)62 523 y(A)h(surrogate)g(creator)g(function)f(should)f(at)i(the)g(minimum) g(create)g(an)g(instance)g(of)g(a)g(surrogate,)g(call)g(the)f (instances)0 585 y(member)16 b(function)e(iluAssociateKernelOb)o(ject)e (passing)i(the)g Ft(iluKernelObject)p Fs(,)h(and)g(then)f(return)h(a)g (pointer)f(to)0 647 y(the)d(new)g(instance.)0 781 y Fo(5.4.5)26 b(String)14 b(Binding)g(Handle)g(Manipulation)62 888 y Fs(A)d(String)f(Binding)f(Handle)h(is)g(a)h(textual)e(representation) h(of)g(an)h(object)f(reference.)i(It)f(contains)e(the)h(object's)g (server)0 950 y(id,)h(instance)e(id,)i(information)e(about)h(how)g(to)g (contact)g(the)g(object,)h(as)f(well)g(as)h(other)f(information.)g(ILU) h(C)p Ft(++)f Fs(provides)0 1012 y(the)18 b(functions)g Ft(iluCppRuntime::iluFormSBH)p Fs(,)g Ft (iluCppRuntime::iluFormSBHUsingContactInfo)p Fs(,)0 1074 y(and)11 b Ft(iluCppRuntime::iluParseSBH)d Fs(for)j(constructing)e(and) i(parsing)f(string)f(binding)g(handles.)i(An)g(object)f(may)0 1137 y(be)g(obtained)e(from)j(a)f(string)e(binding)g(handle)h(using)f Ft(iluObject::iluStringToObject)g Fs(and)h(the)h(string)e(bindign)0 1199 y(handle)j(of)g(an)g(object)f(may)i(be)f(obtained)f(by)h(calling)f (the)h Ft(iluObjectToString)f Fs(member)i(function.)0 1333 y Fo(5.4.6)26 b(Simple)14 b(Binding)62 1440 y Fs(When)e(creating)g (a)h(service,)f(there)g(needs)g(to)g(be)g(some)h(way)f(for)g(clients)f (to)h(find)g(out)f(about)g(the)h(service.)j(ILU)d(C)p Ft(++)0 1502 y Fs(provides)f(a)i(simple)f(mechanism)h(to)f(achieve)g (this.)j(Objects)c(may)i(be)g(published,)e(looked)h(up,)g(and)h(their)f (publications)0 1564 y(withdrawn)e(using)g(the)h(appropriate)f(member)i (functions)e(\()p Ft(iluPublish)p Fs(,)h Ft(iluLookup)p Fs(,)g Ft(iluWithdraw)p Fs(\).)0 1698 y Fo(5.4.7)26 b(Object)14 b(Activation)62 1805 y Fs(An)9 b(true)h(object)e(is)h(initially)e ('Active',)j(which)f(means)g(that)g(its)g(ISL)g(\(or)h(IDL)f(as)h(the)f (case)h(may)f(be\))h(defined)f(methods)0 1867 y(may)16 b(be)f(invoked)g(on)g(it)g(from)h(outside)e(its)g(process)h(\(or)h (from)g(another)f(language)g(within)e(that)i(same)h(process\).)24 b(An)0 1929 y(object)11 b(may)h(be)g(made)g(unavailable)f(to)g(outside) f(calls,)i(i.e.)h(marked)f('inactive')f(by)g(calling)g(its)g (iluDeactivate)f(member)0 1991 y(function.)g(It)h(may)h(may)g(be)f (reactivated)g(by)f(calling)h(its)f(iluActivate)f(member)k(function.)62 2082 y(An)f(object)f(is)h(initially)e(available)h(from)i(the)f(outside) e(until)h(it)h(is)f(deactivated)g(Objects)h(that)f(are)i(involved)d(in) i(a)g(call)0 2144 y(\(i.e.)h(sent)d(or)i(received)f(as)h(arguments,)f (or)g(the)g(object)g(the)g(method)g(is)g(being)f(invoked)g(on\))h(need) h(to)f(be)g(protected)g(from)0 2206 y(deletion)d(for)i(the)f(duration)g (of)g(that)g(involvement)f(\(for)i(example,)g(you)f(don't)g(want)g (some)h(thread)f(deleting)g(a)g(true)h(object)0 2268 y(when)i(it's)g(currently)f(the)h(target)g(of)h(a)f(method)g(call\).)j (The)d(C)p Ft(++)h Fs(runtime)f(keeps)g(track)g(of)h(what)f(objects)f (are)i(involved)0 2331 y(in)e(a)g(call,)h(and)f(will)f(attempt)g(to)h (prevent)g(them)g(from)h(being)e(deleted)h(until)f(the)g(call)h(is)g (completed.)62 2421 y(The)d(application)d(programmer)j(needs)f(to)g (assist)f(in)h(this)g(by)g(calling,)g(in)g(the)g(most)g(specific)g (destructor,)h(iluDeactivate)0 2483 y(\(inherited)h(virtually)f(from)j Ft(iluObject)p Fs(\).)f(iluDeactivate)f(blocks)g(any)g(further)h (incoming)f(calls)g(involving)f(the)i(object,)0 2545 y(and)i(wait)f(for)h(any)g(ongoing)e(calls)h(using)g(the)g(object)h(to) f(complete.)j(Next)d(the)h(destructor)e(should)h(perform)h(any)g (object)0 2608 y(specific)f(cleanup.)g(Finally,)f(the)h(destructor)f (in)h Ft(iluObject)f Fs(will)g(break)h(the)g(association)e(between)i (the)g(kernel)g(object)0 2670 y(and)g(this)f(object,)h(allowing)e(the)i (kernel)g(object)g(to)f(be)i(potentially)c(freed.)p eop %%Page: 99 100 99 99 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1088 b Fs(99)0 183 y Fo(5.4.8)26 b(Security)62 288 y Fs(A)11 b(client)f(may)h(set)g(the)f(Passport)g(to)h(be)g(used)f (on)g(outgoing)f(calls)h(by)h(creating)f(and)h(setting)e(up)h(an)h Ft(iluPassport,)0 350 y Fs(and)j(then)g(passing)f(the)h(passport)f(in)h (a)h(call)f(to)g(iluPassport::ilu)o(SetPassport.)k(This)13 b(sets)h(the)g(passport)f(to)h(be)h(used)f(in)0 413 y(the)g(thread)g (that)f(made)i(the)f(call)g(-)g(i.e.)21 b Ft(iluPassport)13 b Fs(are)i(on)f(a)g(per)h(thread)f(basis.)19 b(Note)14 b(that)f(before)i(your)e(thread)0 475 y(exits,)d(you)g(should)f(either) h(call)g(iluSetPassport\()p Ft(NULL)p Fs(\),)f(or)i(delete)f(the)g Ft(iluPassport)g Fs(in)g(use)g(\(assuming)f(it's)h(only)g(in)0 537 y(use)i(for)f(a)i(single)d(thread\).)j(The)f Ft(iluPassport)f Fs(\(if)g(any\))h(currently)f(setup)g(for)h(a)g(thread)g(can)g(be)f (retrieved)h(by)f(calling)0 599 y(iluPassport::ilu)o(GetPassp)o(ort.)62 688 y(A)21 b(Server)h(may)f(obtain)f(the)h Ft(iluPassport)f Fs(of)h(the)f(caller)i(\(if)f(any\))f(of)h(a)h(method)e(by)h(using)e (the)i(iluPass-)0 750 y(port::iluGetCallerPasspo)o(rt\(\))9 b(function.)62 838 y(A)19 b Ft(iluServer)f Fs(may)h(be)g(constructed)f (to)g(use)g(a)h(particular)g(identity)d(by)j(specifying)e(a)i Ft(iluPassport)f Fs(as)h(a)0 900 y(constructor)10 b(argument.)h(This)f (identity)g(is)g(used)h(to)g(identify)f(the)g(principal)g(offering)h (the)g(service.)0 1028 y Fo(5.4.9)26 b(Static)13 b(Initialization)62 1132 y Fs(The)18 b(C)p Ft(++)h Fs(Runtime)f(normally)g(relies)f(on)h (the)g(static)g(initializers)e(in)i(the)g(files)g(that)f(the)h(stubber) g(generates)g(to)0 1195 y(place)g(initialization)e(functions)g(onto)h (internal)h(lists)e(so)i(that)g(they)f(will)g(be)i(invoked)e(when)g (the)h(application)f(calls)0 1257 y(iluCppRuntime::Initi)o(alize.)12 b(However,)g(it)f(is)h(not)f(guaranteed)h(by)g(the)f(ANSI)i(C)p Ft(++)f Fs(that)f(static)h(initializers)e(are)i(called)0 1319 y(upon)i(the)i(loading)e(of)h(a)h(compilation)e(unit.)23 b(We)15 b(have)h(only)e(had)h(a)h(report)f(of)h(one)f(compiler)g(that)g (did)g(not)f(run)h(the)0 1382 y(static)g(initializers)f(at)i(load)g (time)g(\(in)f(fact,)j(it)e(was)g(reported)f(that)h(it)f(did)g(not)h (run)f(them)i(ever!)26 b(-)16 b(bug!?\).)26 b(We)16 b(have)0 1444 y(observed)11 b(static)g(initialization)e(at)j(load)f(time)h(in)f (Visual)g(C)p Ft(++)p Fs(,)i(SunPro)f(and)f(GNU)h(compilers.)h(In)f (the)f(event)h(that)f(you)0 1506 y(end)g(up)f(using)f(a)j(compiler)e (that)g(does)h(not)f(call)g(the)h(static)f(initializers)e(at)j(load)f (time,)i(you)e(can)h(use)f(the)h(stubber)f(defined)0 1568 y(initialization)e(macros)k(that)e(are)i(generated)f(in)g(the)g (common)g(header)h(file)f(for)g(each)h(interface.)62 1657 y(\(It)c(should)e(be)i(pointed)e(out)h(that)g(the)h(CORBA)g(2.0)g (C)p Ft(++)g Fs(Runtime)g(does)f(not)g(suffer)h(from)g(the)f(static)g (initializer)f(issues)0 1719 y(that)11 b(plagued)f(ILU's)h(original)f (C)p Ft(++)h Fs(support.)g(No)g(ILU)g(calls)g(are)h(actually)e(made)i (until)e(iluCppRuntime::ilu)o(Initi)o(alize)0 1781 y(is)h(called,)g (allowing)e(one)i(to)g(set)g(up)g(different)g(mainloops,)f(etc.\))0 1922 y Fu(5.5)30 b(Building)14 b(an)h(Application)0 2066 y Fo(5.5.1)26 b(Running)13 b(the)i(Stubber)62 2171 y Fs(To)c(generate)f(CORBA)i(2.0)f(C)p Ft(++)g Fs(stubs)e(from)i(an)g (ISL)g(file,)g(use)g(the)f(program)h(cpp2-stubber.)f(The)g(stubber)g (has)g(the)0 2233 y(following)f(usage:)245 2371 y Ft(Usage:)24 b(cpp2-stubber)g([arguments])g(Islfile)g([ISLFILE)g(...])145 2421 y([arguments])g(can)g(be)h(any)g(of)f(the)h(following:)145 2471 y([-nu|-underscores])145 2521 y([-np|-portable])145 2570 y([-nn|-nested])145 2620 y([-ns|-namespaces])p eop %%Page: 100 101 100 100 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1065 b Fs(100)62 183 y(The)11 b(switches)f(can)h(be)g (used)g(to)g(direct)f(the)h(stubber)f(to)h(produce)g(code)g(that)f (using)g(a)h(specific)g(module)f(mapping,)h(or)0 246 y(portable)i(module)g(mapping.)18 b(The)13 b(default)g(is)g(whatever)g (is)g(found)g(appropriate)g(during)f(the)h(configuration)f(phase)h(of)0 308 y(ILU)e(installation)e(\(see)j Ft(")p Fs(Portability)d(and)i (Mapping)g(Variations)p Ft(")p Fs(\).)g(Note)g(that)f(generating)h(a)h (specific)e(\(non-portable\))0 370 y(mapping)17 b(that)g(does)g(not)g (match)h(the)f(platform)h(default,)h(is)e(likely)f(to)h(cause)h(errors) g(at)g(link)e(time)i(due)f(to)h(naming)0 432 y(differences.)0 564 y Fo(5.5.2)26 b(Stubber)13 b(Generated)i(Files)62 670 y Fs(For)d(an)f(interface)g Ft(Foo)g Fs(the)g(stubber)g(generates:) 62 759 y(`)p Ft(Foo-cpp.hpp)p Fs(')20 b(which)f(contains)f(the)i (classes)f(for)h(the)f(abstract)h(object)f(hierarchy,)j(as)e(well)f(as) h(any)g(other)0 821 y(declarations)10 b(needed)h(by)g(both)f(client)g (and)h(server.)62 911 y(`)p Ft(Foo-cpp.cpp)p Fs(',)g(which)g(contains)f (any)h(definitions)d(needed)j(by)g(both)f(client)h(and)g(server)62 1000 y(`)p Ft(Foo-cppsurrogate.hpp)p Fs(')j(which)h(contains)f(the)i (classes)e(for)i(the)f(surrogate)g(object)g(hierarchy,)i(as)e(well)g (as)0 1063 y(any)c(other)g(declarations)f(needed)h(just)f(by)h(a)g (client.)g(This)f(file)h(#includes)f(Foo-cpp.hpp)62 1152 y(`)p Ft(Foo-cppsurrogate.cpp)p Fs(',)g(which)h(contains)f(any)h (definitions)e(needed)i(just)f(by)h(a)h(client.)f(This)f(file)h (#includes)0 1214 y(Foo-cppsurrogate.hpp)62 1304 y(`)p Ft(Foo-cpptrue.hpp)p Fs(')18 b(which)f(contains)h(any)g(declarations)f (needed)h(just)g(by)g(a)h(server.)33 b(This)18 b(file)g(#includes)0 1366 y(Foo-cpp.hpp)62 1455 y(`)p Ft(Foo-cpptrue.cpp)p Fs(',)j(which)e(contains)e(any)j(definitions)d(needed)i(just)f(by)h(a)g (server.)36 b(This)19 b(file)g(#includes)0 1518 y(Foo-cpptrue.hpp.)10 b(All)h(header)g(files)g(use)g(the)g(usual)f(#ifdef)h(method)g(to)g (prevent)f(multiple)g(inclusions.)62 1607 y(A)d(client)g(only)g(wil)o (l)g(#i)o(nclud)o(e)g(Foo-cpps)o(urrogate.hpp)o(,)f(and)h(link)g(with)f (`)p Ft(Foo-cpp.o)o Fs(')h(and)g(`)p Ft(Foo-cp)o(psurrogate.)o(o)p Fs(')62 1697 y(A)k(server)h(only)e(will)g(#include)g(Foo-cpptrue.hpp,)g (and)h(link)g(with)f(`)p Ft(Foo-cpp.o)p Fs(')h(and)g(`)p Ft(Foo-cpptrue.o)p Fs(')62 1786 y(A)k(client)g(and)g(server)g(will)f (#include)g(Foo-cpptrue.hpp,)h(#include)f(Foo-cppsurrogate.hpp,)h(and)g (and)g(link)f(with)0 1848 y(`)p Ft(Foo.o)p Fs(',)e(`)p Ft(Foo-cpptrue.o)p Fs(',)e(and)h(`)p Ft(Foo-cppsurrogate.o)p Fs(')0 1980 y Fo(5.5.3)26 b(Server)15 b(Basics)62 2086 y Fs(The)10 b(basic)g(steps)f(in)g(creating)h(a)g(simple)g(server)g (application)e(are)j(as)f(follows)f(\(assuming)g(we)h(have)g(a)g(ISL)h (file)e(called)0 2148 y(`)p Ft(foo.isl)p Fs(',)i(describing)f(an)h (interface)h('foo')f(with)f(an)h(object)g(type)f('bar'\):)26 2237 y(1.)30 b(Run)11 b(the)g(C)p Ft(++)h Fs(stubber)e(on)h(`)p Ft(foo.isl)p Fs(',)g(e.g.)h(cpp2-stubber)e(foo.isl)26 2314 y(2.)30 b(In)13 b(your)f(implementation)g(file,)h(e.g.)k(`)p Ft(servermain.cpp)p Fs(',)c(include)e(the)i(true)g(side)f(header)h (file,)h(e.g.)i(#include)90 2377 y Ft(")p Fs(foo-cpptrue.hpp)p Ft(")p Fs(.)26 2454 y(3.)30 b(Define)11 b(an)g(implementation)f(class)h (that)f(inherits)g(public)g(virtual)g(from)i(foo::bar.)e(e.g.)210 2531 y Ft(class)24 b(foo_bar_impl)g(:)h(public)f(virtual)h(foo\(bar\))f ({)h(...)f(};)26 2608 y Fs(4.)30 b(In)11 b(the)g(implementation)e (class,)i(provide)f(a)h(constructor)f(that)g(receives)h(an)g(instance)f (handle)g(and)h(an)g Ft(iluServer)90 2670 y Fs(as)g(arguments,)g(and)g (calls)g(the)g Ft(iluObject)f Fs(constructor)g(appropriately,)g(e.g.)p eop %%Page: 101 102 101 101 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1065 b Fs(101)210 183 y Ft (foo_bar_impl::foo_bar_impl\(char*)22 b(pc_instance_handle,)h (iluServer&)h(r_an_ilu_server\))210 233 y(:)210 283 y (iluObject\(foo\(bar\)::m_ILUClassRecord,)d(pc_instance_handle,)j (r_an_ilu_server\))210 333 y({})26 414 y Fs(5.)30 b(In)7 b(the)g(implementation)g(class)f(declaration)o(,)f(declare)i(a)g (virtual)g(destructor.)h(e.g.)i(virtual)d(foo)p 1565 414 14 3 v 15 w(bar)p 1638 414 V 16 w(impl::)p Ft(~)p Fs(foo)p 1850 414 V 15 w(bar)p 1923 414 V 16 w(impl\(\);)26 496 y(6.)30 b(Define)20 b(the)h(virtual)e(destructor)h(of)h(the)f (implementation)f(class)h(that)g(\(at)h(the)f(minimum\))h(makes)g(a)g (call)g(to)90 558 y(iluDeactivate)10 b(as)h(the)g(first)f(thing)g(it)h (does,)g(e.g.)260 640 y Ft(foo_bar_impl::~foo_bar_impl\(\))22 b({)260 689 y(iluDeactivate\(\);)260 739 y(//)j(other)f(app)h(specific) f(things)g(that)h(may)f(need)h(to)g(be)f(done)260 789 y(})26 871 y Fs(7.)30 b(In)13 b(the)f(implementation)f(class)h (declaration,)h(declare)g(the)f(virtual)g(member)i(functions)d(that)h (will)f(implement)h(the)90 933 y(method\(s\),)f(e.g.)210 1014 y Ft(virtual)24 b(CORBA\(Boolean\))g(zap\()g(CORBA\(Long\))49 b(inarg,)25 b(CORBA\(Octet\)&)48 b(inoutarg,)210 1064 y(CORBA\(Double\)&)24 b(outarg)g(\))210 1114 y(throw)g (\(CORBA\(SystemException\),)f(foo\(zapexception\)\);)26 1196 y Fs(8.)30 b(Define)11 b(the)g(virtual)f(member)i(functions)e (that)g(implement)h(the)g(method\(s\),)g(e.g.)210 1277 y Ft(CORBA\(Boolean\))24 b(foo_bar_impl::zap\()f(CORBA\(Long\))49 b(inarg,)260 1327 y(CORBA\(Octet\)&)f(inoutarg,)260 1377 y(CORBA\(Double\)&)23 b(outarg)i(\))260 1427 y(throw)f (\(CORBA\(SystemException\),)f(foo\(zapexception\)\))g({)260 1476 y(//)i(do)f(whatever)g(must)h(be)g(done)260 1526 y(})26 1608 y Fs(9.)30 b(In)20 b(for)g(example)g('main\(\)',)k(Call)c (the)f(runtime)h(initialization)d(function,)k(passing)e(an)h(argument)g (specifying)90 1670 y(whether)11 b(or)g(not)f(to)h(set)g(up)g(for)g (threaded)g(operation,)f(e.g.)210 1752 y Ft(//)25 b(Set)f(up)h(the)g (runtime)f(for)h(threaded)f(operation)210 1801 y (iluCppRuntime::iluInitialize\(ILUCPP_TR)o(UE\);)3 1883 y Fs(10.)30 b(Create)12 b(an)f Ft(iluServer)p Fs(.)g(e.g.)210 1965 y Ft(iluServer)24 b(server)g(\("MyFooBarServerOnMyHost"\);)3 2046 y Fs(11.)30 b(Create)12 b(a)g(true)f(object)f(in)h(that)f(server,) i(e.g.)210 2128 y Ft(p_true_foo_bar)24 b(=)g(new)h (foo_bar_impl\("foo_bar_instance_0",)d(server\);)3 2209 y Fs(12.)30 b(Publish)10 b(the)h(true)g(foo::bar)f(object,)h(e.g.)210 2291 y Ft(p_true_foo_bar->iluPublish\(\))3 2372 y Fs(13.)30 b(Run)11 b(the)g(server,)h(e.g.)260 2454 y Ft(server.iluRun\(\);)3 2536 y Fs(14.)30 b(Compile)22 b(your)g(server)h(application)e(code,)26 b(`)p Ft(foo-cpp.cpp)p Fs(')c(and)g(`)p Ft(foo-cpptrue.cpp)p Fs(',)j(and)d(link)f(the)90 2598 y(resulting)8 b(object)i(files)f(with) g(the)h(C)p Ft(++)g Fs(runtime)g(library)g(\(`)p Ft(libilu-cpp2.a)p Fs(')f(on)h(UNIX,)g(and)g(`)p Ft(ilucpp2.lib)p Fs(')90 2660 y(on)h(Win32\))f(and)h(the)g(ILU)g(kernel)g(library)g(\(`)p Ft(lib.a)p Fs(')g(on)g(UNIX,)g(and)g(`)p Ft(ilu32.lib)p Fs(')g(on)g(Win32\).)p eop %%Page: 102 103 102 102 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1065 b Fs(102)0 183 y Fo(5.5.4)26 b(Client)14 b(Basics)62 293 y Fs(The)d(basic)f(steps)g(in)g(creating)g(a)h(simple)f (client)g(application)e(are)k(as)e(follows)f(\(assuming)h(we)h(have)f (a)h(ISL)g(file)f(called)0 356 y(`)p Ft(foo.isl)p Fs(',)h(describing)f (an)h(interface)h('foo')f(with)f(an)h(object)g(type)f('bar'\):)26 449 y(1.)30 b(Run)11 b(the)g(C)p Ft(++)h Fs(stubber)e(on)h(foo.isl,)f (e.g.)i(cpp2-stubber)e(foo.isl)26 530 y(2.)30 b(In)18 b(your)f(implementation)g(file,)i(e.g.)32 b(`)p Ft(clientmain.cpp)p Fs(',)20 b(include)c(the)i(surrogate)f(side)g(header)i(file,)g(e.g.)90 592 y(#include)10 b Ft(")p Fs(foo-cppsurrogate.hpp)p Ft(")p Fs(.)26 673 y(3.)30 b(In)8 b(for)h(example)f('main\(\)',)i(call) e(the)g(runtime)g(initialization)d(function,)j(passing)e(an)j(argument) f(specifying)f(whether)90 736 y(or)k(not)g(to)f(set)h(up)g(for)g (threaded)g(operation,)g(e.g.)210 817 y Ft(//)25 b(Set)f(up)h(the)g (runtime)f(for)h(threaded)f(operation)210 866 y (iluCppRuntime::iluInitialize\(ILUCPP_TR)o(UE\);)26 947 y Fs(4.)30 b(Lookup)10 b(an)h(object,)g(e.g.)210 1078 y Ft(foo\(bar_var\))24 b(mybar_var)g(=)h(foo\(bar\)::iluLookup)e (\("foo_bar_instance_0",)g("MyFooBarServerOnMyHost"\);)26 1209 y Fs(5.)30 b(Invoke)11 b(a)g(method,)g(e.g.)210 1290 y Ft(try)25 b({)210 1340 y(bool_return_value)e(=)i (mybar_var->zap\(inarg,)e(inoutarg,)h(outarg\);)210 1390 y(})210 1440 y(catch)g(\(const)h(foo\(zapexception\)&)e (the_exception\))h({)210 1489 y(/*)h(do)f(whatever)h(*/)210 1539 y(})210 1589 y(catch)f(\(const)h(CORBA\(SystemException\)&)e (the_exception\))g({)210 1639 y(/*)i(do)f(whatever)h(*/)210 1689 y(})210 1738 y(catch)f(\(...\))h({)210 1788 y(/*)g(do)f(whatever)h (*/)210 1838 y(})26 1969 y Fs(6.)30 b(Compile)11 b(your)h(client)e (application)g(code,)i(`)p Ft(foo-cpp.cpp)p Fs(')f(and)h(`)p Ft(foo-cppsurrogate.cpp)p Fs(',)e(and)i(link)e(the)90 2031 y(resulting)e(object)i(files)f(with)g(the)h(C)p Ft(++)g Fs(runtime)g(library)g(\(`)p Ft(libilu-cpp2.a)p Fs(')f(on)h(UNIX,)g(and)g(`)p Ft(ilucpp2.lib)p Fs(')90 2093 y(on)h(Win32\))f(and)h(the)g(ILU)g(kernel)g(library)g(\(`)p Ft(lib.a)p Fs(')g(on)g(UNIX,)g(and)g(`)p Ft(ilu32.lib)p Fs(')g(on)g(Win32\).)0 2256 y Fu(5.6)30 b(Relevant)14 b(examples)62 2366 y Fs(The)9 b(ILU)g(examples)g(directory)f(contains)g (two)h(examples)f(that)h(use)g(the)f(CORBA)i(2.0)f(C)p Ft(++)h Fs(mapping.)g(See)g(cpp2foo,)0 2428 y(and)f(test1.)h(The)g (cpp2foo)f(example)g(illustrates)f(a)i(lot:)f(object)g(tables;)g (collectible;)f(custom)h(surrogates;)g(lookups;)f(anys;)0 2490 y(return,)j(in,)g(inout,)g(and)g(out)f(of)h(most)g(types;)f(use)h (of)p 845 2490 14 3 v 27 w(vars;)g(and)g(more;)0 2652 y Fu(5.7)30 b(Runtime)14 b(Classes)p eop %%Page: 103 104 103 103 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1065 b Fs(103)0 183 y Fo(5.7.1)26 b(Overview)62 290 y Fs(The)16 b(classes)e(of)i(interest)e(to)h(the)h(application)d (programmer)k(are)f(listed)e(below.)24 b(Nearly)15 b(all)g(non-static)f (member)0 352 y(functions)c(are)h(virtual)f(to)h(allow)g(creative)g (overrides)f(\(at)i(your)e(own)h(risk)f(of)i(course\).)62 443 y Ft(iluCppRuntime)e Fs(-)h(Abstract)g(class)f(that)h(provides)e (various)h(static)g(member)i(functions)e(that)g(the)h(application)e (can)0 505 y(use)i(to)g(control)f(the)h(runtime's)f(behavior.)62 596 y Ft(iluServer)h Fs(-)g(Provides)g(the)g(C)p Ft(++)g Fs(view)g(of)g(a)h(kernel)f(server)g(object.)62 686 y Ft(iluObject)e Fs(-)h(The)f(most)g(base)h(class)f(for)h(all)f(ILU)g(C)p Ft(++)h Fs(objects.)g(All)f(objects)f(inherit)g(either)i(directly)e(or) i(indirectly)0 748 y(from)i(this)e(class.)62 839 y Ft(iluObjectTable)g Fs(-)i(An)f(abstract)f(C)p Ft(++)i Fs(class)f(for)g(developers)f(to)h (derive)g(from)h(to)e(provide)h(Object)f(Tables.)62 929 y Ft(iluPassport)h Fs(-)g(encapsulates)f(ilu)p 667 929 14 3 v 16 w(Passport)g(functionality)62 1019 y Ft(iluGSS)h Fs(-)h(encapsulates)e(GSS)h(functionality)62 1110 y Ft(iluMainLoop)g Fs(-)g(An)g(abstract)g(base)g(class)g(for)g(developers)f(to)h(derive)g (from)h(to)e(create)i(their)f(own)g(main)g(loop.)62 1200 y Ft(iluWString_var)f Fs(Class)h(-)h(analog)e(to)h(CORBA\(String)p 1024 1200 V 16 w(var\))h(only)e(for)h(ILU)g(Characters)62 1290 y(\(See)23 b(`)p Fp(ILUSRC)t Ft(/runtime/cpp2/ilu.hpp)p Fs(')d(and)h(`)p Fp(ILUSRC)t Ft(/runtime/cpp2/corba.hpp)p Fs(')f(for)i(more)0 1353 y(complete)11 b(descriptions.\))0 1487 y Fo(5.7.2)26 b(iluCppRuntime)62 1594 y Fs(An)13 b(Abstract)g(class)g(that)g(provides)f(various)g(static)h(member)h (functions)e(that)h(the)g(application)e(can)j(use)f(to)g(control)0 1656 y(the)e(runtime's)f(behavior.)h Ft(iluCppRuntime)f Fs(is)h(not)g(meant)g(to)g(ever)g(be)h(subclassed.)0 1790 y Fn(5.7.2.1)23 b(iluCppRuntime)15 b(-)g(Initialization)e(Related) 1820 1928 y Fs(C)p Ft(++)-1900 b(static)11 b(void)h Fo (iluCppRuntime::iluInit)o(ialize)20 b Fk(\()11 b Ft(ILUCPP_BOOL)f Fp(b)p 1242 1928 V 16 w(use)p 1319 1928 V 16 w(native)p 1447 1928 V 16 w(threads)208 1991 y Ft(=)h(ILUCPP_FALSE)f Fk(\))62 2084 y Fs(Initializes)20 b(the)i(C)p Ft(++)g Fs(runtime)f(for)h(use.)42 b(Also)21 b(calls)g(all)g(the)g(functions)f (\(typically)g(interface)i(initialization)0 2147 y(functions)15 b(in)i(generated)g(stubs\))f(that)g(are)i(on)f(the)f(C)p Ft(++)i Fs(Runtime's)e(initialization)e(function)i(list)g(\(see)h (iluCppRun-)0 2209 y(time::iluAddInit)o(ializati)o(onFun)o(ction)o(\).) 62 2299 y(iluCppRuntime::iluIni)o(tial)o(ize's)9 b(use)i(depends)f(on)h (your)f(use)h(of)h(threading:)26 2390 y(1.)30 b(No)11 b(threading)f(at)h(all)g(-)g(just)f(call)h(iluCppRuntime::iluInit)o (iali)o(ze\(\).)26 2468 y(2.)30 b(Using)7 b(ILU's)g(native)g(o)o (perating)f(sys)o(tem)h(\(OS\))g(thread)g(su)o(ppo)o(rt)g(-)g(call)f (ilu)o(CppRunti)o(me::il)o(uInit)o(iali)o(ze\(ILUCPP)p 1895 2468 V 15 w(TRUE\).)26 2545 y(3.)30 b(Your)7 b(own)g(thread)g (package)g(-)g(call)g(i)o(luCppRun)o(time::)o(ilu)o(SetForkProcedure,)f (iluCppRuntime::ilu)o(SetNonNat)o(iveTh)o(readIDFunction)90 2608 y(then)12 b(call)g(the)g(ILU)g(kernel)g(functions)f(ilu)p 775 2608 V 15 w(SetWaitTech,)i(and)f(ilu)p 1179 2608 V 15 w(SetLockTech)g(appropriately,)g(call)g(iluMain-)90 2670 y(Loop::iluSetMainLoop)o(,)d(then)i(call)g(iluCppRuntime::il)o (uInit)o(iali)o(ze\(\).)p eop %%Page: 104 105 104 104 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1065 b Fs(104)1820 183 y(C)p Ft(++)-1900 b(static)11 b(void)h Fo(iluCppRuntime::iluAd)o(dInit)o(ializati)o (onFuncti)o(on)20 b Fk(\()208 246 y Ft(iluPFunctionInitializer)9 b Fp(pf)p 833 246 14 3 v 16 w(initialize)j Fk(\))62 333 y Fs(Adds)h(an)h(initialization)d(function)h(onto)h(the)g(runtime's)g (list)g(of)h(\(typically)e(interface)i(initialization\))d(functions)h (to)0 395 y(call)f(when)g(iluCppRuntime::ilu)o(Initi)o(alize)d(is)j (called.)g(iluPFunctionInitiali)o(zer)e(is)i(typedeffed)g(as)1820 507 y(C)p Ft(++)-1900 b(void)11 b(\(*)h Fo(iluPFunctionInitializer)21 b Fk(\))12 b(\()f(\))1820 594 y Fs(C)p Ft(++)-1900 b(static)11 b(void)h Fo(iluCppRuntime::iluS)o(etNonNa)o(tiveThreadIDFuncti)o(on)20 b Fk(\()208 656 y Ft(iluNonNativeThreadIDFunction)8 b Fp(p)p 942 656 V 16 w(thread)p 1072 656 V 16 w(id)p 1124 656 V 16 w(function)13 b Fk(\))62 743 y Fs(When)h(running)f(non-native) f(threaded,)j(this)e(should)f(be)j(called)e(\(before)i (initialization\))c(set)j(to)f(the)h(function)f(that)0 805 y(will)18 b(return)g(a)h(thread)f(unique)g Ft(iluCardinal)g Fs(id)g(of)h(the)f(current)g(thread.)34 b(iluNonNativeThreadIDFuncti)o (on)16 b(is)0 868 y(typedeffed)11 b(as)1820 980 y(C)p Ft(++)-1900 b(iluCardinal)10 b(\(*)j Fo(iluNonNativeThreadIDFunction)20 b Fk(\)\()11 b(\))1820 1067 y Fs(C)p Ft(++)-1900 b(static)11 b(iluPFunctionSurrogateCreator)208 1129 y Fo(iluCppRuntime::ilu)o(SetS) o(urrogateCreat)o(or)20 b Fk(\()12 b Ft(iluClass)e Fp(surrogate)p 1509 1129 V 16 w(class)p Ft(,)208 1191 y(iluPFunctionSurrogateCreator)e Fp(pfunction)p 1095 1191 V 15 w(surrogate)p 1280 1191 V 15 w(creator)16 b Fk(\))62 1278 y Fs(Tells)g(the)h(C)p Ft(++)g Fs(runtime)g(what)f(function)g(to)g(call)h(when)g(a)g (surrogate)f(for)h(an)g(object)f(of)h(the)g(specified)f(class)h(is)0 1341 y(needed.)12 b(This)e(allows)g(an)h(implementation)f(to)h (subclass)f(off)h(a)h(surrogate)e(class,)h(and)g(write)g(a)h(new)f (surrogate)g(creation)0 1403 y(function)i(that)g(creates)i(an)f (instance)f(of)h(this)f(new)h(subclass.)19 b(This)13 b(more)h(specialized)g(surrogate)f(might)g(do)h(message)0 1465 y(filtering,)f(caching,)h(monitoring,)f(etc.)19 b(Call)14 b(this)e(function)g(after)i(you've)f(performed)i (initialization)o(,)d(but)h(before)h(you)0 1527 y(do)f(any)f (operations)g(which)g(might)g(create)i(a)g(surrogate)e(of)h(the)g (specified)f(class.)k(It)d(basically)f(overwrites)g(the)h(default)0 1590 y(surrogate)h(creation)h(function)e(set)i(up)f(by)h(the)f (surrogate)g(stubs.)21 b(It)15 b(returns)f(the)h(old)f(surrogate)g (creator)h(function,)g(or)0 1652 y Ft(NULL)9 b Fs(if)h(was)g (previously)d(no)j(surrogate)f(creator)h(for)f(that)g(class)h(\(note:)f Ft(NULL)h Fs(return)f(should)f(not)h(really)g(happen)g(unless)0 1714 y(a)j(mistake)g(or)f(something)g(clever)h(is)f(being)g(done)h(-)g (this)f(means)h(you've)f(added)g(a)i(new)e(node)h(to)f(the)h(surrogate) f(creator)0 1776 y(function)f(list\).)g(iluPFunctionSurrogateCreator)g (is)g(typedeffed)h(as)1820 1888 y(C)p Ft(++)-1900 b(iluObject*)10 b(\(*)j Fo(iluPFunctionSurrogateCreator)20 b Fk(\))12 b(\()f Ft(iluKernelObject)p Fk(\))p Ft(.)62 1975 y Fs(A)h(surrogate)g (creator)g(function)f(should)f(at)i(the)g(minimum)g(create)g(an)g (instance)g(of)g(a)g(surrogate,)g(call)g(the)f(instances)0 2038 y(member)k(function)d(iluAssociateKernelObject)f(passing)h(the)h Ft(iluKernelObject,)g Fs(and)g(then)g(return)h(a)g(pointer)f(to)0 2100 y(the)e(new)g(instance.)1820 2212 y(C)p Ft(++)-1900 b(static)11 b(void)h Fo(iluCppRuntime::iluS)o(etForkProcedure)20 b Fk(\()12 b Ft(iluForkProc)208 2274 y Fp(pfunction)p 387 2274 V 14 w(fork)p 477 2274 V 16 w(procedure)i Fk(\))62 2361 y Fs(If)c(your)e(using)f(your)i(own)f(threads)g(package)h(call)g (this)f(before)h(calling)f(the)g(ILU)h(kernel)g(functions)e(ilu)p 1689 2361 V 15 w(SetWaitTech,)0 2424 y(etc.)12 b(and)f(pass)f(a)i (pointer)e(to)h(your)f(function)g(that)h(forks)g(a)g(thread.)g (iluForkProc)g(is)g(typedeffed)f(as)1820 2536 y(C)p Ft(++)-1900 b(iluBoolean)10 b(\(*)j Fo(iluForkProc)23 b Fk(\))11 b(\()h Ft(void)f Fk(\()p Ft(*pfunction_procedure)p Fk(\))e(\()p Ft(void*)208 2598 y Fp(pv)p 257 2598 V 15 w(argument)t Fk(\))p Ft(,)120 2660 y Fs(void*)h Fp(pv)p 284 2660 V 16 w(argument)p Fs(,)h(ILU)p 570 2660 V 16 w(ERRS\(\(no)p 775 2660 V 17 w(memory,)h(no)p 1012 2660 V 16 w(resources,)f (internal\)\))g(*)g Fp(p)p 1460 2660 V 16 w(error)k Fs(\))p eop %%Page: 105 106 105 105 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1065 b Fs(105)0 183 y Fn(5.7.2.2)23 b(iluCppRuntime)15 b(-)g(Character)h(Utilities)1820 310 y Fs(C)p Ft(++)-1900 b(static)11 b(iluCardinal)g Fo (iluCppRuntime::iluCharact)o(erStrin)o(gLength)19 b Fk(\()12 b Ft(const)208 373 y(iluCharacter*)e Fp(p)p 569 373 14 3 v 16 w(chars)j Fk(\))62 458 y Fs(Returns)e(the)g(length)f(of)h(the)g Ft(iluCharacter)f Fs(string)1820 569 y(C)p Ft(++)-1900 b(static)11 b(iluCharacter*)g Fo(iluCppRuntime::iluCh)o(aracterStrin)o (gCopy)19 b Fk(\()208 631 y Ft(iluCharacter*)10 b Fp(p)p 569 631 V 16 w(chars)p 681 631 V 16 w(destination)p Ft(,)f(const)i (iluCharacter*)f Fp(p)p 1427 631 V 16 w(chars)p 1539 631 V 16 w(source)k Fk(\))62 717 y Fs(Copies)d(the)g(source)g Ft(iluCharacter)f Fs(string)g(to)h(the)g(destination,)e(returns)h(the)h (destination.)1820 827 y(C)p Ft(++)-1900 b(static)11 b(iluCharacter*)g Fo(iluCppRuntime::iluCh)o(aracterStrin)o(gDupl)o (icate)20 b Fk(\()208 890 y Ft(const)10 b(iluCharacter*)h Fp(p)p 705 890 V 16 w(chars)p 817 890 V 16 w(source)j Fk(\))62 975 y Fs(Returns)d(a)h(duplicate)e(of)h(the)g(source)g Ft(iluCharacter)f Fs(string)1820 1086 y(C)p Ft(++)-1900 b(static)11 b(ILUCPP_BOOL)g Fo(iluCppRuntime::iluCharact)o(erStrin)o (gEqual)19 b Fk(\()12 b Ft(const)208 1148 y(iluCharacter*)e Fp(p)p 569 1148 V 16 w(chars)p 681 1148 V 16 w(one)p Ft(,)h(const)g(iluCharacter*)f Fp(p)p 1293 1148 V 16 w(chars)p 1405 1148 V 16 w(two)j Fk(\))62 1234 y Fs(Returns)e(true)g (if)g(strings)f(are)i(the)f(same,)h(else)f(false.)1820 1344 y(C)p Ft(++)-1900 b(static)11 b(iluCharacter*)208 1406 y Fo(iluCppRuntime::ilu)o(CharSt)o(ringFromShortCh)o(arStrin)o(g) 20 b Fk(\()12 b Ft(const)208 1469 y(iluShortCharacter*)d Fp(pc)p 713 1469 V 17 w(shortchars)i Fk(\))62 1554 y Fs(Returns)g(a)h(new)f Ft(iluCharacter)f Fs(string)g(filled)g(in)h (from)h(the)f Ft(iluShortCharacter)e Fs(string.)1820 1665 y(C)p Ft(++)-1900 b(static)11 b(ILUCPP_BOOL)g Fo (iluCppRuntime::iluCharS)o(tring)o(Short)o(CharSt)o(ringEqual)208 1727 y Fk(\()g Ft(const)g(iluCharacter*)f Fp(pc)p 751 1727 V 16 w(chars)p Ft(,)i(const)e(iluShortCharacter*)g Fp(pc)p 1538 1727 V 16 w(shortchars)i Fk(\))62 1813 y Fs(Returns)f(true)g(if)g(the)g Ft(iluCharacter)f Fs(string)g(matches)i (the)f Ft(iluShortCharacter)e Fs(string.)0 1936 y Fn(5.7.2.3)23 b(iluCppRuntime)15 b(-)g(String)h(Binding)f(Handle)h(Utilities)1820 2063 y Fs(C)p Ft(++)-1900 b(static)11 b(char*)h Fo (iluCppRuntime::iluFormSBH)20 b Fk(\()11 b Ft(const)g(char*)g Fp(pc)p 1304 2063 V 16 w(serverid)p Ft(,)g(const)208 2125 y(char*)f Fp(pc)p 389 2125 V 17 w(instance)p 556 2125 V 15 w(handle)p Ft(,)g(iluClass)h Fp(the)p 995 2125 V 16 w(ilu)p 1060 2125 V 15 w(class)p Ft(,)g(iluProtocolInfo)208 2187 y Fp(pc)p 254 2187 V 16 w(protocol)p 423 2187 V 15 w(type)i Ft(=)e Fk(\(\()p Ft(iluProtocolInfo)p Fk(\))g Ft(NULL)p Fk(\))p Ft(,)g(iluTransportInfo)e Fp(transport)p 1720 2187 V 15 w(info)208 2250 y Ft(=)i Fk(\(\()p Ft(iluTransportInfo)p Fk(\))f Ft(NULL)p Fk(\))h(\))1820 2335 y Fs(C)p Ft(++)-1900 b(static)11 b(char*)g Fo(iluCppRuntime::iluFormSBHUsingConta)o(ctInfo) 19 b Fk(\()12 b Ft(const)f(char*)208 2398 y Fp(pc)p 254 2398 V 16 w(serverid)p Ft(,)g(const)f(char*)h Fp(pc)p 767 2398 V 17 w(instance)p 934 2398 V 15 w(handle)p Ft(,)f(iluClass)h Fp(the)p 1373 2398 V 16 w(ilu)p 1438 2398 V 15 w(class)p Ft(,)g(const)208 2460 y(char*)f Fp(p)p 369 2460 V 17 w(str)p 432 2460 V 15 w(encodedContactInfo)i Ft(=)g(NULL)f Fk(\))62 2545 y Fs(Use)18 b(these)g(to)g(form)h(a)f(string)f(binding)f (handle)i(from)h(relevant)e(parts,)j(if)f(protocol)d(and/or)i (transport)f(info)g(are)0 2608 y(NULL,)10 b(current)h(defaults)e(are)j (used.)f(For)f(iluFormSBHUsingContactInfo,)f(p)p 1292 2608 V 16 w(str)p 1354 2608 V 16 w(encodedContactInfo)h(is)g(as)g (would)0 2670 y(be)h(obtained)f(from)i(iluParseSBH.)p eop %%Page: 106 107 106 106 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1065 b Fs(106)1820 183 y(C)p Ft(++)-1900 b(static)11 b(ILUCPP_BOOL)g Fo(iluCppRuntime::iluParseSBH)20 b Fk(\()12 b Ft(iluCString)208 246 y Fp(str)p 257 246 14 3 v 15 w(encodedSBH)p Ft(,)g(iluCString*)e Fp(p)p 857 246 V 16 w(str)p 919 246 V 16 w(plainInstanceHandle)h Ft(=)h(NULL,)f(iluCString*)208 308 y Fp(p)p 234 308 V 16 w(str)p 296 308 V 15 w(plainServerID)k Ft(=)c(NULL,)g(iluCString*)f Fp(p)p 1064 308 V 16 w(str)p 1126 308 V 16 w(plainMstid)k Ft(=)e(NULL,)e(iluCString*)208 370 y Fp(p)p 234 370 V 16 w(str)p 296 370 V 15 w(encodedContactInfo)j Ft(=)e(NULL,)g (iluCardinal*)f Fp(p)p 1199 370 V 16 w(card)p 1293 370 V 17 w(encodedContactInfoLen)i Ft(=)208 432 y(NULL,)e(ILUCPP_BOOL*)h Fp(p)p 680 432 V 16 w(b)p 719 432 V 16 w(malloced)p 902 432 V 16 w(contact)p 1050 432 V 16 w(info)h Ft(=)f(NULL)p Fk(\))h(\))62 516 y Fs(Parse)22 b(a)g(string)e(binding)f(handle,)k (returning)d(whichever)h(elements)g(are)h(specified)f(by)f(passing)g (in)h(non-NIL)0 578 y(pointers.)33 b(Caller)18 b(retains)g(ownership)g (of)g(URL)h(argument.)34 b(If)19 b(p)p 1128 578 V 16 w(str)p 1190 578 V 16 w(plainInstanceHandle)d(!=)j(NIL,)g(ownership)0 640 y(of)h(*p)p 107 640 V 16 w(str)p 169 640 V 16 w (plainInstanceHandle)e(is)h(passed)g(to)h(caller)g(iff)g(successful.)37 b(Similarly)20 b(for)g(p)p 1532 640 V 16 w(str)p 1594 640 V 16 w(plainServerID)f(and)0 703 y(p)p 26 703 V 16 w(str)p 88 703 V 16 w(plainMstid.)24 b(*p)p 384 703 V 16 w(str)p 446 703 V 16 w(encodedContactInfo)14 b(is)i(set)f(to)h (point)f(into)f(the)i(given)f(URL)h(\(The)g(whole)f(sequence)h(of)0 765 y(contact)e(info)g(is)g(returned)g(in)g(*p)p 544 765 V 16 w(str)p 606 765 V 16 w(encodedContactInfo\))f(,)j(and)e(*p)p 1173 765 V 16 w(card)p 1267 765 V 16 w(encodedContactInfoLen)f(is)h (set)g(to)g(the)0 827 y(length)d(of)i(the)f(contact)g(info)f (substring;)g(the)h(next)g(character)h(is)f(left)g(unmolested.)i(If)f (the)f(p)p 1494 827 V 16 w(b)p 1533 827 V 16 w(malloced)p 1716 827 V 16 w(contact)p 1864 827 V 16 w(info)0 889 y(out)e(parameter)j(is)d(true,)i(then)e(caller)i(must)e(arrange)i(to)f (free)h(it.)0 1010 y Fn(5.7.2.4)23 b(iluCppRuntime)15 b(-)g(File)g(Descriptor)g(Budget)1820 1135 y Fs(C)p Ft(++)-1900 b(static)11 b(iluCardinal)g Fo(iluCppRuntime::iluGet)o(FDBudget\()19 b Fk(\))1820 1218 y Fs(C)p Ft(++)-1900 b(static)11 b(iluCardinal)g Fo(iluCppRuntime::iluSet)o(FDBudget)20 b Fk(\()11 b Ft(iluCardinal)208 1281 y Fp(card)p 289 1281 V 16 w(size)j Fk(\))62 1364 y Fs(Get)d(and)g(set)g(ILU)g(file)g(descriptor)f(budget.)h (iluSetFDBudget)f(returns)g(the)h(new)h(budget.)e(Because)i(ILU)f(may)h (open)0 1426 y(multiple)j(connections)f(to)i(a)h(server,)h(we)e(need)g (some)h(policy)e(for)h(when)g(to)g(close)g(them.)26 b(That)16 b(policy)f(is)h(this:)j(the)0 1489 y(application)11 b(gives)h(the)g (ILU)g(kernel)h(a)g Ft(")p Fs(File)f(Descriptor)g(Budget)p Ft(")g Fs(\(initally)e(16\).)16 b(The)c(ILU)h(kernel)f(promises)g(to)g (use)0 1551 y(no)g(more)g(than)g(this)f(many)h(File)g(Descriptors)f(at) h(once.Off)g(the)g(top)f(of)h(this)f(budget)g(we)h(take)g(FDs)g(needed) g(for)g(serving)0 1613 y(\(one)k(per)g(listening)d(socket)i(and)h(one)f (per)h(accept\).)25 b(The)16 b(remainder)g(is)f(allocated)g(to)h (outgoing)d(connections)h(\(over)0 1675 y(transports)e(that)h(use)g (FDs)g(---)h(ie,)g(not)f(inmemory\).)18 b(When)13 b(we)h(want)f(to)g (consume)g(a)g(new)h(FD,)g(and)f(there's)g(no)g(room)0 1738 y(left)g(in)g(the)g(budget,)g(we)g(go)g(looking)f(for)h(an)h(idle) e(outgoing)f(connection)h(\(one)i(with)e(no)h(outstanding)d(calls\))j (to)g(close.)0 1800 y(All)h(idle)g(outgoing)f(connections)g(are)i(kept) f(in)h(a)g(doubly-linked)d(list,)i(ordered)h(by)f(when)h(the)f (connection)g(went)g(idle)0 1862 y(\(most)d(recently)g(at)g(the)g (front\).)0 1983 y Fn(5.7.2.5)23 b(iluCppRuntime)15 b(-)g(Memory)g (Management)1820 2108 y Fs(C)p Ft(++)-1900 b(static)11 b(void)h Fo(iluCppRuntime::iluFree)20 b Fk(\()12 b Ft(void*)f Fp(pv)i Ft(/*)e(ILUowned)f(*/)i Fk(\))62 2191 y Fs(Use)f(this)f(to)h (free)h(things)e(returned)g(by)h(ILU)1820 2300 y(C)p Ft(++)-1900 b(static)11 b(void*)h Fo(iluCppRuntime::iluMa)o(lloc)20 b Fk(\()11 b Ft(iluCardinal)g Fp(card)p 1281 2300 V 16 w(size)j Fk(\))62 2383 y Fs(You)d(can)g(use)g(this)f(to)h(malloc)g (things)f(from)h(ILU.)0 2504 y Fo(5.7.3)26 b(iluServer)62 2608 y Ft(iluServer)18 b Fs(provides)e(a)j(the)e(C)p Ft(++)h Fs(view)g(of)g(a)g(kernel)g(server)g(object.)31 b Ft(iluServers)17 b Fs(cannot)h(be)g(copied)f(or)0 2670 y(assigned.)p eop %%Page: 107 108 107 107 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1065 b Fs(107)0 183 y Fn(5.7.3.1)23 b(iluServer)15 b(-)g(Setup)i(and)e(Destruction)1820 305 y Fs(C)p Ft(++)-1900 b(iluServer::iluServer)11 b Fo(\()22 b Ft(char*)11 b Fp(pc)p 732 305 14 3 v 16 w(server)p 859 305 V 16 w(id)16 b Ft(=)11 b(NULL,)g(iluObjectTable*)208 367 y Fp(p)p 234 367 V 16 w(object)p 362 367 V 15 w(table)i Ft(=)f(NULL)f(/*)g(ILUowned)f(*/)i(,)f(char)g(*)g Fp(pc)p 1186 367 V 16 w(protocol)p 1355 367 V 15 w(type)j Ft(=)d(NULL,)208 429 y(iluTransportInfo)e Fp(transport)p 783 429 V 15 w(info)k Ft(=)e(NULL,)g(iluPassport*)f Fp(p)p 1390 429 V 17 w(passport)k Ft(=)d(NULL)g Fk(\))62 509 y Fs(Constructor)18 b(-)h(If)h(no)e(pc)p 490 509 V 17 w(server)p 618 509 V 16 w(id)h(is)f(specified,)j(one)e(is)f(automatically)g(created)h (based)g(on)f(based)h(on)g(time,)0 571 y(hostname,)14 b(and)f(process)g(id.)k(If)d(p)p 563 571 V 16 w(object)p 691 571 V 16 w(table)f(is)g Ft(NULL)p Fs(,)h(a)g(default)e(object)h (table)g(implementation)f(is)h(used.)k(A)d(port)0 634 y(is)e(created)i(and)f(added)f(to)h(the)g(server)g(using)f(the)g (specified)h(protocol)e(and)i(transport,)g(and)f(becomes)i(the)e (default)h(port)0 696 y(of)f(the)f(server.)j(pc)p 299 696 V 16 w(protocol)p 468 696 V 15 w(type)d(and)g(transport)p 813 696 V 15 w(info)h(default)f(to)g(whatever)g(the)h(default)f (protocol)f(and)i(transport)e(are)0 758 y(currently)j(set)g(to.)19 b(Caller)14 b(owns)f(pc)p 589 758 V 16 w(server)p 716 758 V 17 w(id)g(p)p 805 758 V 16 w(object)p 933 758 V 16 w(table,)h(pc)p 1106 758 V 16 w(protocol)p 1275 758 V 15 w(type,)g(transport)p 1557 758 V 15 w(info,)g(and)g(p)p 1774 758 V 16 w(passport.)0 820 y(p)p 26 820 V 16 w(passport)d(points)g (to)h(an)h Ft(iluPassport,)e Fs(defaulted)h(to)g Ft(NULL)h Fs(-)f(this)g(passport)f(containing)g(an)h(ILU)h(GSS)g(identity,)0 883 y(which)d(is)g(used)g(as)h(the)g(identity)e(of)h(the)h(principal)e (offering)i(the)f(service,)h(and)g(put)f(into)f(the)i(connection)e (information)h(in)0 945 y(the)h(string)f(binding)f(handle)i(of)g (objects)f(on)h(that)f(server.)1820 1050 y(C)p Ft(++)-1900 b(virtual)12 b Fo(iluServer::)p Ft(~)p Fo(iluServer)21 b Fk(\()11 b(\))62 1130 y Fs(Destructor)j(-)h(basically)f(destroys)f (the)h(kernel)h(server)g(and)g(breaks)f(all)g(associations)f(between)h (kernel)h(objects)f(in)0 1192 y(this)c(server)h(and)g(their)g(language) f(specific)h(objects.)f(Indirectly)h(also)f(deletes)h(any)g Ft(iluObjectTable)f Fs(used)g(with)g(this)0 1254 y(iluServer.)1820 1359 y(C)p Ft(++)-1900 b(virtual)11 b(void)h Fo(iluServer::iluAddPort) 20 b Fk(\()p Ft(char*)11 b Fp(pc)p 988 1359 V 16 w(protocol)p 1157 1359 V 15 w(type)p Ft(,)120 1421 y Fs(iluTransportInfo)17 b Fp(transport)p 606 1421 V 14 w(info)p Fs(,)k(ILUCPP)p 882 1421 V 17 w(BOOL)e Fp(b)p 1065 1421 V 16 w(become)p 1222 1421 V 17 w(default)p 1366 1421 V 15 w(port)k Fs(=)c Ft(ILUCPP_FALSE)p Fs(,)120 1484 y(iluPassport*)9 b Fp(p)p 382 1484 V 16 w(passport)15 b Fs(=)c Ft(NULL)g Fs(\))62 1589 y(Adds)k(another)h(port)f(to)h(an)g(existing)e(server)i(If)h(b)p 887 1589 V 16 w(become)p 1044 1589 V 17 w(default)p 1188 1589 V 15 w(port)f(is)f Ft(ILUCPP_TRUE)g Fs(the)h(new)g(port)f(will)0 1651 y(become)h(the)f(default)g(port)g(for)h(this)e(server.)25 b(p)p 782 1651 V 16 w(passport)14 b(points)g(to)h(an)h Ft(iluPassport,)e Fs(defaulted)h(to)g Ft(NULL)p Fs(.)24 b(this)0 1713 y(passport)10 b(containing)g(an)i(ILU)f(GSS)h(identity,)e (which)h(is)g(used)g(as)h(the)f(identity)f(of)i(the)f(principal)f (offering)i(the)f(service,)0 1775 y(and)h(put)g(into)g(the)g (connection)g(information)f(in)h(the)h(string)e(binding)g(handle)h(of)h (objects)e(on)i(that)f(server.)k(Caller)d(owns)0 1838 y(the)e(arguments.)1820 1942 y(C)p Ft(++)-1900 b(virtual)11 b(void)h Fo(iluServer::iluRun)20 b Fk(\()11 b Ft(int*)g Fp(p)p 860 1942 V 16 w(i)p 889 1942 V 16 w(stop)p 982 1942 V 16 w(on)p 1044 1942 V 15 w(non)p 1128 1942 V 16 w(zero)j Ft(=)d(NULL)g Fk(\))62 2022 y Fs(This)j(runs)f(the)h(main,)i (outer)e(loop)f(of)h(an)h(iluServer.)20 b(It)15 b(never)f(returns)g(if) g(p)p 1316 2022 V 16 w(i)p 1345 2022 V 16 w(stop)p 1438 2022 V 15 w(on)p 1499 2022 V 16 w(non)p 1584 2022 V 16 w(zero)g(isn't)g(supplied,)0 2085 y(else)e(it)f(returns)h(when)g(*p)p 419 2085 V 15 w(i)p 447 2085 V 16 w(stop)p 540 2085 V 16 w(on)p 602 2085 V 15 w(non)p 686 2085 V 16 w(zero)g(is)g(non)f (zero.)k(If)d(you're)g(running)f(threaded)h(this)f(routine)g(simply)g (goes)0 2147 y(into)f(a)i(sleep)e(loop,)0 2264 y Fn(5.7.3.2)23 b(iluServer)15 b(-)g(Default)g(Accessors)1820 2386 y Fs(C)p Ft(++)-1900 b(static)11 b(char*)h Fo(iluServer::iluGetDefaul)o (tProtocol)20 b Fk(\()11 b(\))1820 2466 y Fs(C)p Ft(++)-1900 b(static)11 b(void)h Fo(iluServer::iluSetDefaul)o(tProtocol\()19 b Ft(char*)11 b Fp(pc)p 1183 2466 V 16 w(new)p 1275 2466 V 16 w(default)p 1418 2466 V 16 w(protocol)j Fk(\))62 2545 y Fs(Get)20 b(and)g(set)g(the)h(default)e(protocol)g(used)h(when)g (adding)f(a)i(port)f(on)f(a)i Ft(iluServer)f Fs(-)g(initialized)f(to)g (what-)0 2608 y(ever)24 b(is)g(set)f(to)h(be)g(the)g(default)f(in)h (the)f(kernel)h(\(found)f(in)h(`)p Fp(ILUSRC)t Ft (/runtime/kernel/iluconf.h)p Fs(')e(or)0 2670 y(`)p Fp(ILUSRC)t Ft(/runtime/kernel/iluwin.h)p Fs('\))p eop %%Page: 108 109 108 108 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1065 b Fs(108)1820 183 y(C)p Ft(++)-1900 b(static)11 b(const)g(iluTransportInfo)g Fo(iluServer::iluGetDefau)o (ltTransport)19 b Fk(\()12 b(\))1820 265 y Fs(C)p Ft(++)-1900 b(static)11 b(void)h Fo(iluServer::iluSetDefaul)o(tTransport\()19 b Ft(iluTransportInfo)208 327 y Fp(ppc)p 277 327 14 3 v 16 w(new)p 369 327 V 16 w(default)p 512 327 V 15 w(transport)p 690 327 V 15 w(info)13 b Fk(\))62 409 y Fs(Get)19 b(and)f(set)h(the)f (default)g(transports)f(used)h(when)h(adding)e(a)i(port)f(on)h(a)g Ft(iluServer)f Fs(-)h(initialized)d(to)i(what-)0 471 y(ever)24 b(is)g(set)f(to)h(be)g(the)g(default)f(in)h(the)f(kernel)h (\(found)f(in)h(`)p Fp(ILUSRC)t Ft(/runtime/kernel/iluconf.h)p Fs(')e(or)0 534 y(`)p Fp(ILUSRC)t Ft(/runtime/kernel/iluwin.h)p Fs('\))10 b(Callee)h(owns)g(pc)p 1101 534 V 16 w(new)p 1193 534 V 16 w(default)p 1336 534 V 16 w(transport)p 1515 534 V 14 w(info.)1820 640 y(C)p Ft(++)-1900 b(static)11 b(iluServer&)g Fo(iluServer::iluGetDefaultS)o(erver)20 b Fk(\()12 b(\))62 722 y Fs(Returns)f(the)g(default)g Ft(iluServer)p Fs(,)f(creating)h(one)g(if)g(need)h(be.)1820 829 y(C)p Ft(++)-1900 b(static)11 b(iluServer*)g Fo (iluServer::iluSetDefault)o(Server)20 b Fk(\()12 b Ft(iluServer)p Fs(&)208 891 y Fp(new)p 287 891 V 16 w(default)p 430 891 V 15 w(server)29 b Ft(\))62 973 y Fs(Sets)11 b(the)g(default)g Ft(iluServer,)f Fs(returns)h(old)f(default,)h(which)g(is)f Ft(NULL)h Fs(if)h(no)e(default)h(currently)f(is)h(set.)0 1092 y Fo(5.7.4)26 b(iluObject)62 1196 y Fs(The)19 b(most)f(base)h (class)f(for)h(all)f(ILU)h(C)p Ft(++)g Fs(objects.)33 b(All)18 b(objects)f(inherit)h(either)g(directly)g(or)h(indirectly)e (from)0 1258 y Ft(iluObject)p Fs(.)j(All)13 b(non-static)g(member)i (functions)d(are)j(virtual)e(to)h(allow)f(creative)h(overrides)f(\(at)i (your)e(own)h(risk)f(of)0 1320 y(course\).)e Ft(iluObjects)g Fs(cannot)f(be)i(copied)e(or)i(assigned.)0 1439 y Fn(5.7.4.1)23 b(iluObject)16 b(-)f(Creation)g(and)g(Destruction)1820 1563 y Fs(C)p Ft(++)-1900 b(iluObject::iluObject)11 b Fo(\()22 b Ft(iluClass)11 b Fp(the)p 820 1563 V 15 w(Class)p Ft(,)g(char*)g Fp(pc)p 1149 1563 V 16 w(instance)p 1315 1563 V 16 w(handle)i Ft(=)e(NULL,)208 1625 y(iluServer)p Fs(&)24 b Fp(the)p 551 1625 V 16 w(server)k Ft(=)d (iluServer::iluGetDefaultServer)p Fs(\()p Ft(\),)208 1687 y Fn(ILUCPP)p 381 1687 V 15 w(BOOL)h Fp(b)p 575 1687 V 16 w(within)p 709 1687 V 15 w(object)p 836 1687 V 15 w(table)h Fn(=)e(ILUCPP)p 1188 1687 V 16 w(FALSE)g(\))62 1769 y Fs(Constructor)10 b(-)i(This)e(constructor)g(must)h(be)g(called) g(\(only\))f(from)i(the)f(constructors)e(for)j(true)f(objects.)62 1856 y(For)h(example,)f(in)g(an)g(implementation)f(of)h(a)h(foo::bar)e (:)145 1943 y Ft(foo_bar_impl\(char*)23 b Fp(pc)p 664 1943 V 16 w(instance)p 830 1943 V 16 w(handle)p Ft(,)h(iluServer&)g (r_an_ilu_server,)f(CORBA\(Boolean\))120 1993 y(b_within_object_table)g (=)i(ILUCPP_FALSE)f(:)369 2043 y (iluObject\(foo\(bar\)::m_ILUClassRecord,)e(pc_instance_handle,)h (r_an_ilu_server,)120 2093 y(b_within_object_table\))g({})62 2205 y Fs(If)17 b(no)f(instance)f(handle)h(is)f(specified,)j(then)d (the)h(value)g(of)g(a)h(monotonicaly)d(increasing,)j Ft(iluServer)f Fs(specific)0 2267 y(counter)e(will)f(be)i(used)f(to)g (generate)h(one.)21 b(If)15 b(no)f(server)h(is)f(specified,)h(then)e (the)i(default)f(server)g(will)g(be)g(used.)21 b(\(The)0 2329 y(default)11 b(server)h(is)f(generated)h(automatically)e(if)i (needed,)g(and)f(has)h(the)f(an)h(id)f(based)g(on)h(time,)g(hostname,)f (and)h(process)0 2392 y(id.\))j(Caller)d(owns)g(pc)p 355 2392 V 16 w(instance)p 521 2392 V 16 w(handle.)i(The)e(new)h (object)e(has)h(a)h(reference)h(count)d(of)i(1.)i(If)e(b)p 1546 2392 V 16 w(within)p 1680 2392 V 14 w(object)p 1806 2392 V 16 w(table)f(is)0 2454 y(true,)k(then)d(it)h(is)g(assumed)h(the) f(object)g(is)g(being)f(created)i(inside)e(an)i(iluObjectTable's)d (iluObjectOfInstanceHandle)0 2516 y(function,)e(meaning)h(that)g(the)g (locks)f(on)h(the)g(server)g(should)f(not)g(be)h(modified.)1820 2623 y(C)p Ft(++)-1900 b(static)11 b(iluObject*)g Fo(iluObject::iluSt)o (ringToObj)o(ect)20 b Fk(\()11 b Ft(char*)208 2685 y Fp(pc)p 254 2685 V 16 w(string)p 375 2685 V 15 w(binding)p 531 2685 V 14 w(handle)i Fk(\))p eop %%Page: 109 110 109 109 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1065 b Fs(109)62 183 y(Given)13 b(a)i(string)d (binding)g(handle)h(\(e.g.)20 b(as)14 b(obtained)f(from)h (iluObjectToString\))d(returns)i(an)h(iluObject*)e(for)i(that)0 246 y(object,)d(with)f(the)h(reference)h(count)f(incremented.)1820 363 y(C)p Ft(++)-1900 b(virtual)12 b Fo(iluObject::)p Ft(~)p Fo(iluO)o(bject)19 b Fk(\()12 b(\))62 454 y Fs(Destructor)i (ensures)g(that)g(this)g(object)g(is)g(completely)g(disassociated)f (from)i(the)g(ILU)f(kernel)h(The)f(most)h(specific)0 516 y(destructor)h(of)h(an)g(object)g(should)e(call)i(iluDeactivate)f (on)g(the)h(object)f(to)h(block)f(any)h(further)g(incoming)f(calls,)i (and)0 578 y(wait)c(for)i(any)f(ongoing)e(calls)h(to)h(complete.)23 b(Next)14 b(it)h(should)e(perform)j(any)f(object)f(specific)g(cleanup.) 23 b(Finally,)15 b(the)0 640 y(destructor)c(in)g Ft(iluObject)g Fs(will)g(break)h(the)f(association)f(between)i(the)f(kernel)h(object)f (and)g(this)g(object,)g(allowing)f(the)0 703 y(kernel)h(object)f(to)h (be)g(potentially)e(freed.)1820 820 y(C)p Ft(++)-1900 b(virtual)11 b(void)h Fo(iluObject::iluDeact)o(ivate)19 b Fk(\()12 b(\))62 911 y Fs(Ensures)j(this)g(object)g(is)g(not)g (available)g(from)h(the)g(outside.)23 b(This)15 b(must)g(be)h(the)g (first)f(thing)f(called)i(by)f(the)h(most)0 973 y(specific)c (destructor)g(of)h(an)g(object.)j(If)d(if)g(isn't,)f(then)h(the)f (potential)f(exists)h(\(in)g(multithread)g(case\))h(for)g(a)h(call)e (to)h(come)0 1035 y(in)g(for)h(an)g(object)f(that's)f(in)i(the)f (middle)g(of)h(destruction)e(-)h(a)h(bad)g(thing!)j(This)c(function)f (blocks)h(until)f(there)h(are)i(zero)0 1098 y(ongoing)9 b(calls.)1820 1215 y(C)p Ft(++)-1900 b(virtual)11 b(void)h Fo(iluObject::iluK)o(ernelObj)o(ectUnli)o(nked)19 b Fk(\()12 b(\))62 1306 y Fs(Called)g(by)f(iluUnlinkKernelOb)o(ject)e(-)j(you)e (can)i(override)f(this)g(virtual)f(function)h(in)g(your)g(objects)f(to) h(do)g(whatever)0 1368 y(you)f(like)h(when)f(the)h(association)e (between)i(your)f(object)g(and)h(the)g(kernel)f(object)h(is)f(broken)g (-)i(e.g.)g(delete)e(yourself)g(The)0 1430 y(implementation)g(in)g Ft(iluObject)h Fs(deletes)g(this.)0 1560 y Fn(5.7.4.2)23 b(iluObject)16 b(-)f(Object)h(Publication)1820 1694 y Fs(C)p Ft(++)-1900 b(virtual)11 b(ILUCPP_BOOL)g Fo(iluObject::iluPubli) o(sh)20 b Fk(\()12 b(\))62 1785 y Fs(Publishes)i(binding)f(information) g(for)i(this)f(object)g(in)h(the)g(binding)e(service)h(Has)h(no)g (effect)g(on)g(object)f(reference)0 1847 y(count.)1820 1964 y(C)p Ft(++)-1900 b(virtual)11 b(ILUCPP_BOOL)g Fo (iluObject::iluWit)o(hdraw)19 b Fk(\()12 b(\))62 2055 y Fs(Removes)g(binding)e(information)h(for)h(this)e(object)h(from)h (the)g(binding)e(service)h(Has)h(no)f(effect)i(on)e(object)g(reference) 0 2117 y(count.)1820 2235 y(C)p Ft(++)-1900 b(static)11 b(void*)h Fo(iluObject::iluLook)o(up)19 b Fk(\()p Ft(char*)11 b Fp(pc)p 971 2235 14 3 v 17 w(instance)p 1138 2235 V 15 w(handle)p Ft(,)g(char*)208 2297 y Fp(pc)p 254 2297 V 16 w(server)p 381 2297 V 16 w(id)p Ft(,)g(iluClass)f Fp(the)p 735 2297 V 16 w(class)j Fk(\))62 2388 y Fs(Used)i(by)h (stubber)e(generated)i(iluLookup)d(functions)h(in)h(derived)g(classes)g (to)g(lookup)f(an)i(object)f(in)g(the)g(binding)0 2450 y(service)h(based)g(on)f(its)g(instance)h(and)f(server)i(id)e(and)h (class.)26 b(Increments)16 b(reference)h(count)e(of)i(object.)25 b(To)16 b(Lookup)0 2512 y(objects)10 b(of)h(type)f(T,)h(use)g(the)f (T::iluLookup\(char*)e Fp(pc)p 882 2512 V 16 w(instance)p 1048 2512 V 15 w(handle)p Fs(,)j(char*)g(pc)p 1362 2512 V 16 w(server)p 1489 2512 V 17 w(id;)f(function)f(produced)i(by)0 2575 y(the)g(stubber.)f(For)i(example:)120 2663 y Ft(mybar_var)24 b(=)50 b(foo\(bar\)::iluLookup\("foo_instance_0")o(,)22 b(pc_serverid)i(\))p eop %%Page: 110 111 110 110 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1065 b Fs(110)0 183 y Fn(5.7.4.3)23 b(iluObject)16 b(-)f(Accessors)1820 310 y Fs(C)p Ft(++)-1900 b(virtual)11 b(iluServer*)g Fo(iluObject::iluGetS)o(erver)20 b Fk(\()12 b(\))62 396 y Fs(Returns)f(pointer)f(to)h(the)g(iluServer)g (that)f(this)g(object)h(resides)f(in.)1820 506 y(C)p Ft(++)-1900 b(virtual)11 b(const)g(char*)g(/*)g(ILUowned)f(*/)j Fo(iluObject::ilu)o(Id)20 b Fk(\()12 b(\))62 591 y Fs(Returns)f(the)g (objects)f(instance)g(id.)1820 702 y(C)p Ft(++)-1900 b(virtual)11 b(const)g(char*)g(/*)g(ILUowned)f(*/)j Fo(iluObject::ilu)o (ServerId)20 b Fk(\()12 b(\))62 787 y Fs(Returns)f(the)g(id)g(of)g(the) g(objects)f(ILU)h(Server.)0 910 y Fn(5.7.4.4)23 b(iluObject)16 b(-)f(Informational)1820 1037 y Fs(C)p Ft(++)-1900 b(virtual)11 b(iluCString)g Fo(iluObject::iluObj)o(ectToSt)o(ring)20 b Fk(\()11 b(\))62 1122 y Fs(Returns)g(the)g(ILU)g(string)f(binding)f (handle)i(for)g(the)g(object.)g(Caller)g(get)g(ownership)f(of)h(the)g (string)1820 1232 y(C)p Ft(++)-1900 b(ILUCPP_BOOL)11 b Fo(iluObject::iluIsCollectibleOb)o(ject)19 b Fk(\()12 b(\))62 1318 y Fs(Returns)f(true)g(if)g(the)g(object)g(is)f(of)h(a)h (collectible)e(class.)1820 1428 y(C)p Ft(++)-1900 b(virtual)11 b(iluCString)g Fo(iluObject::iluObj)o(ectToIORSt)o(ring)20 b Fk(\()11 b(\))62 1514 y Fs(Returns)j(a)g(string)e(which)h(is)h(the)f (object's)g(name)i(and)e(contact)h(information)e(as)i(specified)f(by)h (the)f(CORBA)i(IIOP)0 1576 y(spec)d(-)h(caller)g(gets)f(ownership)f(of) h(the)h(string.)h(May)f(return)f(NULL)g(if)g(the)g(object)g(is)g(not)g (exported)g(through)f(an)h Ft(IIOP)0 1638 y Fs(ilu)p 52 1638 14 3 v 15 w(Port.)g(\(Available)e(only)g(when)h Ft(IIOP)g Fs(support)f(is)g(configured)h(into)f(ILU.\))1820 1748 y(C)p Ft(++)-1900 b(virtual)11 b(iluCString)g Fo (iluObject::iluObj)o(ectToURLSt)o(ring)20 b Fk(\()11 b(\))62 1834 y Fs(Returns)16 b(a)g(string)f(which)g(is)h(the)g (object's)f(name)h(and)g(contact)g(information)f(as)h(specified)f(by)h (an)g Ft(HTTP)g Fs(URL)g(-)0 1896 y(caller)11 b(gets)f(ownership)g(of)h (the)f(string.)g(May)i(return)e(NULL)h(if)f(the)h(object)f(is)h(not)f (exported)g(through)f(an)i Ft(HTTP)g Fs(ilu)p 1862 1896 V 15 w(Port)0 1958 y(\(Available)f(only)g(when)h Ft(HTTP)g Fs(support)f(is)h(configured)f(into)g(ILU.\))1820 2069 y(C)p Ft(++)-1900 b(ILUCPP_BOOL)11 b Fo(iluObject::iluPing\(\))62 2154 y Fs(Returns)i Ft(ILUCPP_TRUE)g Fs(if)h(the)f(true)g(object)g (exists,)h(and)f(the)g(process)g(serving)g(it)g(can)h(be)f(contacted,)h (otherwise)0 2216 y Ft(ILUCPP_FALSE)p Fs(.)1820 2327 y(C)p Ft(++)-1900 b(ILUCPP_BOOL)11 b Fo(iluObject::)p 524 2327 15 3 v 16 w(is)p 573 2327 V 18 w(equivalent\(iluObj)o(ect*)20 b Ft(p_obj)p Fk(\))62 2412 y Fs(Returns)11 b Ft(ILUCPP_TRUE)f Fs(if)i(the)e(two)h(objects)f(denote)h(the)g(same)g(thing.)1820 2522 y(C)p Ft(++)-1900 b(ILUCPP_BOOL)11 b Fo (iluObject::iluInSameServer\(iluO)o(bject)o(*)20 b Ft(p_obj)p Fk(\))62 2608 y Fs(Returns)11 b Ft(ILUCPP_TRUE)e Fs(if)i(the)g(two)f (objects)f(are)j(in)e(the)h(same)g(ILU)g(server.)g(Used,)g(for)g (example,)g(to)g(determine)f(if)0 2670 y(objects)g(are)i(SIBLINGS.)p eop %%Page: 111 112 111 111 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1065 b Fs(111)1820 183 y(C)p Ft(++)-1900 b(virtual)11 b(const)g(char*)g(/*)g(ILUowned)f(*/)j Fo(iluObject::ilu)o (ClassName)21 b Fk(\()12 b(\))1820 272 y Fs(C)p Ft(++)-1900 b(virtual)11 b(const)g(char*)g(/*)g(ILUowned)f(*/)j Fo(iluObject::ilu)o (ClassId)21 b Fk(\()11 b(\))62 361 y Fs(Return)g(the)g(ILU)g(class)g (name)h(and)f(type)g(id)f(-)i(primarily)e(informational)g(use.)0 488 y Fn(5.7.4.5)23 b(iluObject)16 b(-)f(Reference)h(Counting)1820 620 y Fs(C)p Ft(++)-1900 b(virtual)11 b(void)h Fo (iluObject::iluIncrementReferenceCou)o(nt\()19 b Fk(\))1820 708 y Fs(C)p Ft(++)-1900 b(virtual)11 b(void)h Fo (iluObject::iluDecrementReferenceCou)o(nt\()19 b Fk(\))62 797 y Fs(Reference)g(count)d(operations)f(-)j(when)e(an)i(object)e(is)g (first)h(created,)i(it)d(has)h(a)h(reference)g(count)e(of)h(one.)29 b(If)17 b(the)0 860 y(reference)9 b(count)f(ever)g(goes)g(to)g(zero,)h (delete)f(is)g(called)g(on)g(this.)h(CORBA)g(compliant)e(apps)h (\(where)h(objects)e(derive)h(from)0 922 y(CORBA::Object\))j(should)e (use)i(the)g(duplicate)f(and)h(release)h(functionality)c(defined)j(in)g (the)g(CORBA)g(specification.)1820 1037 y(C)p Ft(++)-1900 b(virtual)11 b(iluCardinal)g Fo(iluObject::iluGet)o(ReferenceCount)o (\()20 b Fk(\))62 1126 y Fs(Returns)11 b(what)g(the)g(current)g (reference)h(count)f(is.)1820 1240 y(C)p Ft(++)-1900 b(static)11 b(iluObject*)p 425 1240 15 3 v 29 w Fo (duplicate\(iluObject*)19 b Fp(p)p 926 1240 14 3 v 16 w(obj)q Fk(\))62 1329 y Fs(Increments)12 b(the)e(reference)j(count)d (on)h(the)g(object)f(and)h(returns)g(it.)g(Returns)g(NULL)f(if)h (passed)g(NULL.)1820 1444 y(C)p Ft(++)-1900 b(static)11 b(iluObject*)p 425 1444 15 3 v 29 w Fo(narrow\(iluObject*)20 b Fp(p)p 887 1444 14 3 v 17 w(obj)q Fk(\))62 1533 y Fs(Effectively)11 b(casts)f(the)h(object)g(pointer)f(to)h(an)g(iluObject*.)0 1660 y Fo(5.7.5)26 b(iluObjectTable)62 1765 y Fs(An)13 b(abstract)g(C)p Ft(++)g Fs(class)g(for)g(developers)f(to)h(derive)g (from)g(to)g(provide)f(Object)g(Tables.)17 b(Object)12 b(tables)h(cannot)f(be)0 1827 y(copied)c(or)g(assigned.)h(Besides)f (doing)f(whatever)i(application)d(specific)i(things)f(might)g(need)i (to)f(be)g(done)g(in)g(the)g(construc-)0 1889 y(tor)15 b(and)h(destructor,)g(a)g(class)f(derived)h(from)g Ft(iluObjectTable)f Fs(must)g(provide)g(the)g(iluObjectOfInstanceHandle)0 1951 y(virtual)10 b(member)i(function.)1820 2066 y(C)p Ft(++)-1900 b(virtual)11 b(iluObject*)g Fo(iluObjectTable::iluOb)o (jectO)o(fInstanceHan)o(dle)208 2128 y Fk(\()p Ft(iluCString)f Fp(pc)p 529 2128 V 16 w(instance)p 695 2128 V 16 w(handle)j Ft(/*)e(ILUowned)g(*/)p Fk(\))g Ft(=)g(0;)62 2217 y Fs(Called)i(by)f (ILU)h(to)f(create)h(and)g(return)f(a)h(new)g Ft(iluObject)p Fs(*)e(with)h(the)g(specified)g(instance)g(handle.)j(ILU)e(retains)0 2280 y(ownership)h(of)h(pc)p 304 2280 V 16 w(instance)p 470 2280 V 16 w(handle)f(-)i(i.e.)24 b(copy)15 b(it)g(if)g(you)f(need)i (want)f(to)f(hang)h(on)g(to)g(it.)23 b(Note)15 b(that)g(when)g(in)f (this)0 2342 y(function,)e(you)h(are)g('inside')g(the)f(object's)g (server)h(-)h(i.e.)j(you)12 b(hold)g(the)h(locks)f(on)h(the)g(server)g (-)g(this)f(means)h(that)g(when)0 2404 y(you)e(create)h(the)f(object,)g (you)g(must)g(specify)g(the)g(3rd)g(argument)h(to)e(the)i(object's)e (constructor)g(\(b)p 1573 2404 V 17 w(within)p 1708 2404 V 14 w(object)p 1834 2404 V 16 w(table\))0 2466 y(as)h(true.)1820 2581 y(C)p Ft(++)-1900 b(virtual)11 b(iluServer*)g Fo (iluObjectTable::iluGet)o(Server)20 b Fk(\(\))p Ft(;)62 2670 y Fs(Returns)11 b(the)g(pointer)f(to)h(the)g(iluServer)g(this)f (object)g(table)h(is)g(associated)f(with.)p eop %%Page: 112 113 112 112 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1065 b Fs(112)1820 183 y(C)p Ft(++)-1900 b(virtual)12 b Fo(iluObjectTable::)p Ft(~)p Fo(ilu)o(Obj)o(ectTable)20 b Fk(\()11 b(\))62 273 y Fs(Do)i(whatever)g(destroying)f(the)h(Object)f (Table)h(needs)g(to)g(do)g(to)g(free)h(up)f(resources,)h(etc.)k(It)13 b(gets)g(called)g(when)f(the)0 335 y Ft(iluServer)f Fs(it's)f (associated)g(with)g(it)h(is)g(shut)f(down.)0 463 y Fo(5.7.6)26 b(iluPassport)62 568 y Fs(Encapsulates)10 b Ft(ilu_Passport)g Fs(functionality)1820 683 y(C)p Ft(++)-1900 b(iluPassport::iluPassport) 10 b Fo(\()23 b Ft(iluIdentityInfo)9 b Fp(p)p 1060 683 14 3 v 17 w(identity)p 1218 683 V 14 w(info)k Ft(=)e(NULL)g Fk(\))62 773 y Fs(Constructor)f(-)i(creates)f(and)g(returns)g(a)g (passport,)g(optionally)d(containing)i(the)h(specified)f(identity.)1820 888 y(C)p Ft(++)-1900 b(virtual)12 b Fo(iluPassport::)p Ft(~)p Fo(iluPassport)21 b Fk(\()12 b(\))62 978 y Fs(Destructor)e(-)i (frees)g(any)f(associated)f(identities)f(in)i(addition)e(to)i(freeing)g (the)g(passport)1820 1093 y(C)p Ft(++)-1900 b(static)11 b(iluPassport*)g Fo(iluPassport::iluGetPassport)21 b Fk(\()12 b(\))1820 1182 y Fs(C)p Ft(++)-1900 b(static)11 b(iluPassport*)g Fo(iluPassport::iluSetPassport)21 b Fk(\()p Ft(iluPassport*)10 b Fp(p)p 1427 1182 V 17 w(passport)k Fk(\))62 1334 y Fs(Get)22 b(and)g(set)g(the)g(passport)f(being)h(used)f (for)i(outgoing)d(calls)i(-)g(in)g(the)g(multi-threaded)f(case,)26 b(this)21 b(is)h(per-)0 1396 y(thread)e(Set)h(returns)e(the)h(old)g Ft(iluPassport)p Fs(.)38 b(Note)20 b(that)g(before)g(your)g(thread)g (exits,)i(you)e(should)e(either)i(call)0 1459 y(iluSetPassport\()p Ft(NULL)p Fs(\),)10 b(or)h(delete)g(the)g Ft(iluPassport)f Fs(in)h(use)g(\(assuming)f(it's)h(only)f(in)g(use)h(for)h(a)f(single)f (thread\).)1820 1574 y(C)p Ft(++)-1900 b(static)11 b(iluPassport*)f(/*) h(ILUowned)g(*/)h Fo(iluPassport::iluGetCallerPassport\()20 b Fk(\))62 1664 y Fs(Get)11 b(the)g(passport)f(of)h(the)g(caller.)1820 1779 y(C)p Ft(++)-1900 b(virtual)11 b(void)h Fo (iluPassport::iluAddIdentit)o(y)20 b Fk(\()12 b Ft(iluIdentityInfo)e Fp(p)p 1348 1779 V 16 w(identity)p 1505 1779 V 14 w(info)208 1841 y Ft(/*)h(ILUowned)f(*/)i Fk(\))62 1931 y Fs(Adds)f(identity)e(to) i(Passport.)f(Only)h(one)g(identity)e(of)i(each)h(type)e(is)h(allowed.) 1820 2046 y(C)p Ft(++)-1900 b(virtual)11 b(iluIdentityInfo)f(/*)h (ILUowned)f(*/)j Fo(iluPassport::iluFindIdentity)19 b Fk(\()208 2109 y Ft(iluIdentityType)10 b Fp(p)p 619 2109 V 16 w(identity)p 776 2109 V 14 w(type)j Fk(\))62 2198 y Fs(Returns)e(identity)e(of)j(specified)e(type,)h(if)g(present)g(else) g Ft(NULL)1820 2313 y Fs(C)p Ft(++)-1900 b(static)11 b(iluIdentityInfo)g Fo(iluPassport::iluCopyIdentity)19 b Fk(\()12 b Ft(iluIdentityInfo)208 2376 y Fp(p)p 234 2376 V 16 w(identity)p 391 2376 V 14 w(info)h Fk(\))62 2465 y Fs(Returns)e(a)h(copy)e(of)i(the)e(passed)h(identity)1820 2581 y(C)p Ft(++)-1900 b(ilu_Passport)10 b(/*)h(ILUowned)g(*/)h Fo(iluPassport::iluGetIluPassport)21 b Fk(\(\))62 2670 y Fs(Returns)11 b(the)g(\(kernel\))g(ilu)p 489 2670 V 16 w(Passport)p eop %%Page: 113 114 113 113 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1065 b Fs(113)0 183 y Fo(5.7.7)26 b(iluGSS)62 287 y Fs(Encapsulates)10 b(GSS)i(functionality)c(-)k(only)e(defined)h (when)g(ILU)g(is)f(configured)h(with)f(secure)h(transport.)1820 391 y(C)p Ft(++)-1900 b(static)11 b(iluIdentityInfo)g Fo(iluGSS::iluAcqu)o(ireGSSIdent)o(ity)19 b Fk(\()12 b Ft(gss_cred_id_t)208 454 y Fp(gss)p 270 454 14 3 v 15 w(credential)j Fk(\))1820 533 y Fs(C)p Ft(++)-1900 b(static)11 b(ILUCPP_BOOL)g Fo(iluGSS::iluDecodeGSS)o(Identit)o(y)20 b Fk(\()11 b Ft(iluIdentityInfo)208 596 y Fp(p)p 234 596 V 16 w(identity)p 391 596 V 14 w(info)p Ft(,)f(gss_name_t*)h Fp(p)p 823 596 V 16 w(name)p Ft(,)h(iluFineTime*)e Fp(p)p 1307 596 V 16 w(good)p 1415 596 V 15 w(till)p 1482 596 V 15 w(time)p Ft(,gss_OID)208 658 y Fp(mechanism)p Ft(,)h(ILUCPP_BOOL*) f Fp(p)p 787 658 V 16 w(b)p 826 658 V 16 w(local)p Ft(,)h(iluCardinal*) f Fp(p)p 1300 658 V 16 w(card)p 1394 658 V 17 w(flags)i Fk(\))62 737 y Fp(p)p 88 737 V 16 w(identity)p 245 737 V 15 w(info)f Fs(-)e(input;)g(retain;)g(info)g(to)g(decode)g Fp(p)p 901 737 V 16 w(name)k Fs(-)d(output;)e(name)i(in)f(identity)e Fp(p)p 1516 737 V 16 w(good)p 1624 737 V 16 w(till)p 1692 737 V 14 w(time)12 b Fs(-)e(output;)0 800 y(good-till)15 b Fp(mechanism)20 b Fs(-)e(input;)g(actual)e(mechanism)i(desired;)h (optional)c Fp(p)p 1266 800 V 16 w(b)p 1305 800 V 16 w(local)21 b Fs(-)c(if)g(TRUE,)g(local;)i(otherwise)0 862 y(remote)12 b Fp(p)p 164 862 V 16 w(card)p 258 862 V 16 w(flags)h Fs(-)e(connection)f(flags,)h(as)g(in)g(gss)p 879 862 V 15 w(inquire)p 1024 862 V 16 w(context)1820 966 y(C)p Ft(++)-1900 b(static)11 b(gss_cred_id_t)g Fo (iluGSS::iluAcqui)o(reGSSCredForName)20 b Fk(\()12 b Ft(char*)208 1029 y Fp(pc)p 254 1029 V 16 w(name)p Ft(,)g(iluCardinal)e Fp(card)p 768 1029 V 16 w(lifetime)p Ft(,)h(gss_OID)g Fp(mechanism)p Ft(,)g(ILUCPP_BOOL)208 1091 y Fp(b)p 234 1091 V 16 w(accept)p 366 1091 V 16 w(only)i Fk(\))1820 1170 y Fs(C)p Ft(++)-1900 b(static)11 b(iluCString)g Fo(iluGSS::iluGSSNa)o(meToString)20 b Fk(\()11 b Ft(gss_name_t)g Fp(name)j Fk(\))0 1262 y Fo(5.7.8)26 b(iluMainLoop)62 1366 y Fs(Subclass)21 b(from)h(the)f Ft(iluMainLoop)f Fs(class)h(if)h(you)e(want)h(to)g(have)h(your)f(own)f(version)h(of)g (the)g(main)h(loop.)0 1428 y Ft(iluMainLoops)13 b Fs(cannot)h(be)g (copied)f(or)h(assigned.)20 b(A)14 b(single)f(threaded)g(application)g (should)f(supply)h(all)g(functions.)0 1491 y(An)18 b(application)e (making)h(use)h(of)f(ILU's)h(OS)g(multi-threaded)f(operation)f(should)h (not)g(use)g(a)h(different)g(mainloop.)0 1553 y(If)23 b(you're)e(using)g(your)h(own)f(thread)h(package,)k(you)21 b(must)h(supply)e(all)i(functions,)h(and)f(see)h(the)f(comment)g(for)0 1615 y(iluCppRuntime::iluIn)o(iti)o(alize)1820 1720 y(C)p Ft(++)-1900 b(virtual)11 b(void)h Fo(iluMainLoop::iluRun)19 b Fk(\()12 b Ft(int*)f Fp(p)p 944 1720 V 16 w(i)p 973 1720 V 16 w(stop)p 1066 1720 V 15 w(on)p 1127 1720 V 16 w(non)p 1212 1720 V 15 w(zero)j Fk(\))d Ft(=)h(0;)62 1799 y Fs(Runs)f(the)g(main)g(loop)f(until)g(*p)p 572 1799 V 16 w(i)p 601 1799 V 16 w(stop)p 694 1799 V 15 w(on)p 755 1799 V 16 w(non)p 840 1799 V 15 w(zero)i(is)f(non-zero.)1820 1904 y(C)p Ft(++)-1900 b(virtual)11 b(void)h Fo(iluMainLoop::iluExit)19 b Fk(\()12 b Ft(int*)f Fp(p)p 941 1904 V 16 w(i)p 970 1904 V 16 w(stop)p 1063 1904 V 15 w(on)p 1124 1904 V 16 w(non)p 1209 1904 V 15 w(zero)j Fk(\))e Ft(=)f(0;)62 1983 y Fs(Causes)g(the)g(main)h(loop)e(to)g(exit)1820 2088 y(C)p Ft(++)-1900 b(virtual)11 b(ILUCPP_BOOL)g Fo (iluMainLoop::iluRegisterInput)o(Hand)o(ler)20 b Fk(\()p Ft(int)11 b Fp(i)p 1453 2088 V 16 w(fd)p Ft(,)120 2150 y Fs(void)c(\(*)g Fp(pfunction)p 432 2150 V 13 w(input)p 541 2150 V 15 w(handler)i Fs(\)\(int)e Fp(i)p 801 2150 V 16 w(fd)p Fs(,)g(void*)g Fp(pv)p 1031 2150 V 15 w(input)p 1141 2150 V 14 w(handler)p 1292 2150 V 16 w(arg)i Fs(\),)f(void*)f Fp(pv)p 1567 2150 V 15 w(input)p 1677 2150 V 14 w(handler)p 1828 2150 V 16 w(arg)120 2212 y Fs(\))k(=)g(0;)62 2316 y(Input)c(Handlers)g(-)g(When)g(there)g(is)g(input)g(activity)f(on)h (the)g(file)g(descript)o(or)g(i)p 1247 2316 V 13 w(fd,)i(the)e (mainloop)g(will)g(call)g(the)g(registered)0 2379 y(handler)12 b(procedure)g(pfunction)p 522 2379 V 15 w(input)p 632 2379 V 14 w(handler,)h(passing)e(it)g(i)p 1006 2379 V 16 w(fd)i(and)f(pv)p 1197 2379 V 16 w(input)p 1308 2379 V 15 w(handler)p 1460 2379 V 15 w(arg)h(as)f(arguments.)j(Returns)0 2441 y Ft(ILUCPP_FALSE)10 b Fs(if)h(it)g(can't)g(do)g(it's)g(job)f(due) h(to)g(some)g(resource)g(limitation.)1820 2545 y(C)p Ft(++)-1900 b(virtual)11 b(ILUCPP_BOOL)g Fo (iluMainLoop::iluUnregisterInput)o(Hand)o(ler)20 b Fk(\()12 b Ft(int)f Fp(i)p 1515 2545 V 16 w(fd)p Ft(,)120 2608 y Fs(void)c(\(**)g Fp(ppfunctio)o(n)p 478 2608 V 13 w(input)p 586 2608 V 15 w(handler)j Fs(\)\(int)d Fp(i)p 847 2608 V 15 w(fd)p Fs(,)h(void*)f Fp(pv)p 1077 2608 V 14 w(input)p 1186 2608 V 15 w(handler)p 1338 2608 V 16 w(arg)i Fs(\),)f(void**)f Fp(ppv)p 1659 2608 V 13 w(input)p 1767 2608 V 15 w(handler)p 1919 2608 V 16 w(arg)120 2670 y Fs(\))k(=)g(0;)p eop %%Page: 114 115 114 114 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1065 b Fs(114)62 183 y(Returns)12 b Ft(ILUCPP_FALSE)g Fs(if)g(input)f(on)h(i)p 748 183 14 3 v 16 w(fd)h(was)f(being)g(handled,)g(else)h Ft(ILUCPP_TRUE)p Fs(.)h(Sets)f(function)e(and)h(arg)0 246 y(ptrs)f(to)f(what)h(they)g (were)g(if)g(anything.)1820 356 y(C)p Ft(++)-1900 b(virtual)11 b(ILUCPP_BOOL)g Fo(iluMainLoop::iluRegisterOut)o(put)o(Hand)o(ler)20 b Fk(\()p Ft(int)11 b Fp(i)p 1489 356 V 16 w(fd)p Ft(,)208 418 y(void)g Fk(\()p Ft(*)g Fp(pfunction)p 549 418 V 15 w(output)p 682 418 V 14 w(handler)j Fk(\)\()p Ft(int)e Fp(i)p 977 418 V 16 w(fd)p Ft(,)f(void*)g Fp(pv)p 1249 418 V 16 w(output)p 1383 418 V 14 w(handler)p 1534 418 V 16 w(arg)i Fk(\))p Ft(,)f(void*)208 480 y Fp(pv)p 257 480 V 15 w(output)p 390 480 V 15 w(handler)p 542 480 V 16 w(arg)h Fk(\))f Ft(=)f(0;)62 566 y Fs(Output)i(Handlers)h(-)h (When)f(it)g(is)g(possible)f(to)h(perform)h(output)e(on)i(the)f(file)g (descriptor)g(i)p 1545 566 V 16 w(fd,)i(the)e(mainloop)f(will)0 628 y(call)e(the)g(registered)f(handler)h(procedure)g(pfunction)p 854 628 V 14 w(output)p 986 628 V 15 w(handler,)g(passing)e(it)i(i)p 1357 628 V 16 w(fd)g(and)g(pv)p 1545 628 V 16 w(output)p 1679 628 V 14 w(handler)p 1830 628 V 16 w(arg)g(as)0 690 y(arguments.)1820 801 y(C)p Ft(++)-1900 b(virtual)11 b(ILUCPP_BOOL)f Fo(iluMainLoop::iluUnregisterOut)o(put)o(Han)o(dler)20 b Fk(\()p Ft(int)11 b Fp(i)p 1538 801 V 16 w(fd)p Ft(,)120 863 y Fs(void)30 b(\(**)i Fp(ppfunction)p 527 863 V 14 w(output)p 659 863 V 14 w(handler)j Fs(\)\(int)c Fp(i)p 968 863 V 16 w(fd)p Fs(,)37 b(void*)30 b Fp(pv)p 1251 863 V 16 w(output)p 1385 863 V 14 w(handler)p 1536 863 V 16 w(arg)k Fs(\),)j(void**)120 925 y Fp(ppv)p 192 925 V 16 w(output)p 326 925 V 14 w(handler)p 477 925 V 16 w(arg)13 b Fs(\))f(=)f(0;)62 1036 y(Returns)i Ft(ILUCPP_FALSE)e Fs(if)i(output)e(on)h(i)p 772 1036 V 16 w(fd)h(had)g(a)g(handler,)g (else)f Ft(ILUCPP_TRUE)g Fs(Sets)h(function)e(and)i(arg)g(ptrs)0 1098 y(to)e(what)f(they)h(were)h(if)f(anything.)1820 1208 y(C)p Ft(++)-1900 b(virtual)11 b(iluAlarm)g Fo (iluMainLoop::iluCreateAlarm)20 b Fk(\()12 b(\))f Ft(=)h(0;)62 1294 y Fs(Creates)i(an)f(alarm.)18 b(An)12 b(alarm)i(is)e(an)i(active)e (object)h(which)f(can)h(be)g(set)g(to)f(asynchronously)f(invoke)h(a)h (procedure)0 1356 y(with)d(an)h(argument)f(at)h(a)g(specified)f(time.)i (An)e(alarm)i(may)f(be)g(something)e(like)h(a)h(pointer)f(to)g(a)h (structure)f(that)h(has)f(some)0 1418 y(internal)k(structure,)h(but)f (from)h(the)f(point)g(of)h(view)f(of)g(an)h(alarm)h(user,)f(it's)f (just)g(a)h(handle)f(that)g(is)g(used)g(to)h(specify)f(a)0 1480 y(particular)d(alarm)g(to)g(be)g(set)g(or)g(cleared.)1820 1591 y(C)p Ft(++)-1900 b(virtual)11 b(void)h Fo(iluMainLoop::iluSet)o (Alarm\(iluAl)o(arm)21 b Fp(the)p 1163 1591 V 16 w(alarm)p Ft(,)11 b(iluFineTime)208 1653 y Fp(alarm)p 314 1653 V 16 w(time)p Ft(,)h(void)e Fk(\()p Ft(*)p Fp(pfunction)p 774 1653 V 15 w(alarm)p 892 1653 V 17 w(handler)t Fk(\)\()p Ft(void*)g Fp(pv)p 1261 1653 V 16 w(alarm)p 1380 1653 V 17 w(handler)p 1534 1653 V 15 w(arg)r Fk(\))p Ft(,)i(void*)208 1715 y Fp(pv)p 257 1715 V 15 w(alarm)p 375 1715 V 17 w(handler)p 529 1715 V 16 w(arg)h Fk(\))f Ft(=)f(0;)62 1801 y Fs(Sets)g(up)g(an)g(alarm)g(to)g(call)g(the)f(handler)h (procedure)f(pfunction)p 1083 1801 V 15 w(alarm)p 1201 1801 V 17 w(handler,)h(passing)e(it)i(pv)p 1607 1801 V 15 w(alarm)p 1725 1801 V 17 w(handler)p 1879 1801 V 16 w(arg)0 1863 y(as)g(an)g(argument,)h(when)f(the)g(alarm)p 581 1863 V 16 w(time)h(occurs.)1820 1973 y(C)p Ft(++)-1900 b(virtual)11 b(void)h Fo(iluMainLoop::iluClearAlarm)20 b Fk(\()11 b Ft(iluAlarm)g Fp(the)p 1242 1973 V 16 w(alarm)k Fk(\))d Ft(=)f(0;)62 2059 y Fs(Cancels)h(the)e(alarm)i(\(effectively)f (sets)g(the)g(alarm)g(time)h(to)e(infinity\).)1820 2169 y(C)p Ft(++)-1900 b(virtual)11 b(void)h Fo (iluMainLoop::iluDestroyAlarm)20 b Fk(\()11 b Ft(iluAlarm)g Fp(the)p 1289 2169 V 16 w(alarm)k Fk(\))d Ft(=)f(0;)62 2254 y Fs(Destroys)f(the)h(alarm)h(\(if)f(alarm)h(is)f(set,)g(does)g (not)f(invoke\).)1820 2365 y(C)p Ft(++)-1900 b(static)11 b(void)h Fo(iluMainLoop::iluSet)o(FineTimeFromNow\()21 b Ft(ilu_FineTime*)208 2427 y Fp(p)p 234 2427 V 16 w(finetime)p Ft(,)10 b(ilu_integer)h Fp(i)p 736 2427 V 16 w(secs)p Ft(,)g(ilu_cardinal)f Fp(i)p 1187 2427 V 16 w(msecs)j Fk(\))62 2512 y Fs(Utility)c(function)h(to)h(set)g(the)g(pointed)e(to)i (ilu)p 777 2512 V 16 w(FineTime)g(to)f(a)i(time)f(i)p 1164 2512 V 16 w(secs)g Ft(+)g Fs(i)p 1316 2512 V 16 w(msecs)h(in)f(the)g(future)1820 2623 y(C)p Ft(++)-1900 b(static)11 b(void)h Fo(iluMainLoop::iluSet)o(MainLoop)19 b Fk(\()12 b Ft(iluMainLoop*)208 2685 y Fp(p)p 234 2685 V 16 w(mainloop)p 423 2685 V 15 w(instance)h Fk(\))p eop %%Page: 115 116 115 115 bop 0 -58 a Fs(Chapter)11 b(5:)g(Using)f(ILU)h(with)f(CORBA)i (2.0)f(C)p Ft(++)1065 b Fs(115)1820 183 y(C)p Ft(++)-1900 b(static)11 b(iluMainLoop*)g Fo(iluMainLoop::iluGetMain)o(Loop)20 b Fk(\()11 b(\))62 270 y Fs(Setting)g(the)g(Main)g(Loop)g(to)g(be)g (used)g(-)h(Call)f(iluSetMainLoop)f(set)h(your)g(mainloop)f(as)i(the)f (one)g(for)h(ILU)f(to)g(use.)h(It)0 333 y(should)e(called)g(before)i (any)f(ILU)g(initialization.)1820 445 y(C)p Ft(++)-1900 b(static)11 b(iluAlarm)h Fo(iluMainLoop::iluDef)o(ault)o (LoopCreateAlarm)20 b Fk(\()11 b(\))1820 532 y Fs(C)p Ft(++)-1900 b(static)11 b(void)h Fo(iluMainLoop::iluDefau)o(ltLoop)o (SetAlarm)20 b Fk(\()11 b Ft(iluAlarm)g Fp(the)p 1433 532 14 3 v 16 w(alarm)p Ft(,)208 594 y(iluFineTime)f Fp(alarm)p 599 594 V 17 w(time)p Ft(,)h(void)g Fk(\()p Ft(*)g Fp(pfunction)p 1071 594 V 15 w(alarm)p 1189 594 V 17 w(handler)j Fk(\)\()p Ft(void*)208 656 y Fp(pv)p 257 656 V 15 w(alarm)p 375 656 V 17 w(handler)p 529 656 V 16 w(arg)f Fk(\))p Ft(,)f(void*)f Fp(pv)p 850 656 V 16 w(alarm)p 969 656 V 16 w(handler)p 1122 656 V 16 w(arg)j Fk(\))1820 744 y Fs(C)p Ft(++)-1900 b(static)11 b(void)h Fo(iluMainLoop::iluDefau)o(ltLoop)o(ClearAlarm)21 b Fk(\()11 b Ft(iluAlarm)g Fp(the)p 1486 744 V 16 w(alarm)208 806 y Fk(\))1820 893 y Fs(C)p Ft(++)-1900 b(static)11 b(void)h Fo(iluMainLoop::iluDefau)o(ltLoop)o(DestroyAlarm)21 b Fk(\()11 b Ft(iluAlarm)208 955 y Fp(the)p 267 955 V 15 w(alarm)16 b Fk(\))62 1043 y Fs(When)c(you)f(haven't)h(set)f(the)h (main)g(loop)f(\(i.e.)j(you're)e(using)e(ILU's)i(default)f(loop\),)h (you)f(can)i(call)e(these)h(functions)0 1105 y(to)f(create,)h(set)f (and)g(unset)f(alarms.)i(\(If)g(you)e(set)h(your)g(own)g(main)g(loop,)f (just)g(call)h(its)g(alarm)h(functions.\))0 1242 y Fu(5.8)30 b(CORBA)15 b(2.0)f(C)p Fh(++)i Fu(Considerations)0 1383 y Fo(5.8.1)26 b(ORB)p 236 1383 15 3 v 17 w(init)62 1487 y Fs(The)9 b(CORBA)g Ft(ORB_init)g Fs(function)e(may)i(be)g(called)g (instead)f(of)g Ft(iluCppRuntime::iluInitialize)f Fs(\(which)0 1549 y Ft(ORB_init)k Fs(calls)g(internally\).)h(The)f(orb)h(identifier) e(passed)h(to)h Ft(ORB_init)f Fs(should)f(be)h Ft("ilu")p Fs(.)i(If)f(the)g(command)g(line)0 1611 y(argument)e Ft(-iluthreaded)f Fs(is)h(present)g(in)f(the)h(command)h(line)e (arguments)h(passed)f(to)h Ft(ORB_init)p Fs(,)g(then)g(ILU)g(will)f(be) 0 1673 y(run)i(in)g(threaded)g(mode,)g(otherwise)f(ILU)h(will)g(run)f (single-threaded.)p eop %%Page: 116 117 116 116 bop 0 -58 a Fs(Chapter)11 b(6:)g(Using)f(ILU)h(with)f(C)p Ft(++)1301 b Fs(116)0 183 y Fq(6)36 b(Using)14 b(ILU)h(with)g(C)p Fi(++)0 383 y Fu(6.1)30 b(Introduction)62 488 y Fs(This)14 b(document)g(is)g(for)h(the)g(C)p Ft(++)g Fs(programmer)g(who)f(wishes) g(to)g(use)h(ILU.)g(The)f(following)f(sections)g(will)h(show)0 550 y(how)d(ILU)g(is)f(mapped)i(into)e(C)p Ft(++)h Fs(constructs)f(and) h(how)g(both)f(C)p Ft(++)h Fs(clients)f(and)h(servers)g(are)h (generated)f(and)g(built.)62 639 y(When)22 b(functions)f(are)i (described)f(in)g(this)f(section,)j(they)e(are)h(sometimes)f (accompanied)h(by)f Fp(locking)f(com-)0 701 y(ments)p Fs(,)i(which)d(describe)g(the)g(locking)f(invariants)g(maintained)h(by) g(ILU)h(on)f(a)h(threaded)f(system.)39 b(See)21 b(the)f(file)0 764 y(`)p Fp(ILUSRC)t Ft(/runtime/kernel/iluxport.h)p Fs(')11 b(for)j(more)f(information)f(on)h(this)f(locking)g(scheme,)i (and)f(the)g(types)0 826 y(of)e(locking)f(comments)h(used.)62 915 y(A)i(number)g(of)g(macros)g(are)h(used)e(in)h(function)e (descriptions,)h(to)g(indicated)g(optional)f(arguments,)i(and)g (ownership)0 977 y(of)f(potentially)d(malloc'ed)j(objects.)g(The)f (owner)h(is)f(responsible)f(for)i(freeing)f(the)h(object's)e(storage)i (at)f(an)h(appropriate)0 1039 y(time,)g(and)g(generally)f(makes)i(no)e (interesting)f(guarantees)i(of)g(when)f(that)h(will)e(be.)k(Some)f (types)e(of)h(objects)f(\(generally)0 1102 y(\(fixed-)f(and)h (variable-length\))e(arrays,)i(including)d(strings\))h(are)i(presumed)g (to)e(be)i(mutable)f(by)g(only)g(their)g(owners.)g(The)0 1164 y(macro)17 b Ft(OPTIONAL\()p Fp(type-name)s Ft(\))d Fs(means)i(that)f(the)h(value)f(is)g(either)h(of)g(the)f(type)g (indicated)g(by)g Fp(type-name)p Fs(,)j(or)d(the)0 1226 y(value)d Ft(NULL)p Fs(.)h(This)e(macro)i(may)f(only)f(be)h(used)g (with)f(pointer)g(values.)i(The)e(macro)i Ft(RETAIN\()p Fp(type-name)s Ft(\))e Fs(indicates,)0 1288 y(when)j(used)f(on)h(a)g (parameter)h(type,)g(that)e(the)h(caller)g(retains)f(ownership)g(of)h (the)g(value,)g(and)g(when)g(used)f(on)h(a)g(return)0 1351 y(type,)d(that)g(the)g(called)g(function)g(retains)f(ownership)g (of)i(the)f(value.)h(The)f(macro)h Ft(PASS\()p Fp(type-name)s Ft(\))f Fs(indicates,)g(when)0 1413 y(used)f(on)g(a)g(parameter)h (type,)f(that)g(the)g(caller)g(is)g(passing)f(ownership)g(of)h(the)g (storage)f(to)h(the)g(called)g(function,)g(and)g(when)0 1475 y(used)k(on)g(a)h(return)g(type,)g(that)f(the)g(called)h(function) e(is)h(passing)f(ownership)g(of)i(the)f(called)h(value)f(to)g(the)g (caller.)22 b(The)0 1537 y(macro)12 b Ft(GLOBAL\()p Fp(type-name)s Ft(\))e Fs(means)i(that)e(neither)h(the)g(caller)g(nor)g(the)g(calling) f(function)g(owns)g(the)h(storage.)0 1681 y Fu(6.2)30 b(Mapping)15 b(ILU)h(ISL)f(to)g(C)p Fh(++)62 1786 y Fs(Using)9 b(ILU)i(with)e(C)p Ft(++)i Fs(is)f(intended)f(to)h(eventually)f(be)i (compatible)e(with)h(the)g(OMG)h(CORBA)g(specification.)f(That)0 1848 y(is,)16 b(all)g(of)f(the)g(naming)h(and)f(stub)f(generation)h (comply)g(with)g(the)g(Common)h(Object)f(Request)g(Broker)h (Architecture)0 1911 y(specified)g(mapping)g(for)h(C)p Ft(++)p Fs(,)i(when)e(that)f(specification)f(is)i(available.)28 b(The)16 b(current)h(mapping)f(was)h(designed)f(to)0 1973 y(be)g(usable)f(with)f(a)i(large)g(number)g(of)g(C)p Ft(++)g Fs(compilers,)g(by)f(avoiding)f(problematic)h(constructs)g (such)g(as)g(templates,)0 2035 y(exceptions,)10 b(namespaces,)i(and)f (nested)f(class)h(definitions.)62 2124 y(Note)h(that)f(ILU)h(support)f (for)h(C)p Ft(++)g Fs(does)f(rely)h(on)g(having)f(argument)h (prototypes,)e(all)i(C)p Ft(++)g Fs(library)f(functions,)g(and)0 2186 y(the)g(capabilities)e(of)j(the)e(C)p Ft(++)i Fs(pre-processor.)0 2316 y Fo(6.2.1)26 b(Names)62 2421 y Fs(In)14 b(general,)i(ILU)e (constructs)e(C)p Ft(++)j Fs(names)f(from)h(ISL)f(names)h(by)f (replacing)f(hyphens)g(with)g(underscores.)20 b(Type)0 2483 y(names)11 b(are)f(prepended)g(with)f(their)h(interface)g(name)h (and)f(the)g(string)f(``)p 1144 2483 14 3 v 17 w(T)p 1189 2483 V 16 w(''.)j(Enumeration)d(value)h(namess)g(are)h(formed)0 2545 y(by)i(prepending)f(the)g(enumeration)h(type)f(name)i(and)f(``)p 901 2545 V 17 w('')g(to)g(the)g(ISL)g(enumeration)g(value)f(name.)18 b(Exception)12 b(names)0 2608 y(are)17 b(prepended)f(with)f(their)h (interface)g(name)h(and)f(``)p 880 2608 V 17 w(E)p 925 2608 V 16 w(''.)27 b(Constant)15 b(names)h(are)h(prepended)f(with)f (their)h(interface)0 2670 y(name)c(and)f(``)p 220 2670 V 16 w(C)p 266 2670 V 17 w(''.)p eop %%Page: 117 118 117 117 bop 0 -58 a Fs(Chapter)11 b(6:)g(Using)f(ILU)h(with)f(C)p Ft(++)1301 b Fs(117)62 183 y(Other)12 b(naming)f(conventions)f(may)j (be)f(specified)f(explicitly;)f(see)i(the)g(following)e(section)h(on)g (tailoring)g(names)h(for)0 246 y(more)g(information.)0 371 y Fo(6.2.2)26 b(Types)62 475 y Fs(Records)11 b(turn)g(directly)f (into)g(C)p Ft(++)h Fs(structs.)f(Unions)g(consist)f(of)i(a)h(struct)e (with)g(two)g(fields:)g(the)h(type)f(discriminator,)0 537 y(a)h(field)f(called)h(``discriminator'',)f(and)g(a)h(union)f(of)g (the)h(possible)e(values,)h(called)g(``value''.)i(Arrays)e(map)i (directly)d(into)0 600 y(C)p Ft(++)14 b Fs(arrays.)k(Sequences)13 b(become)h(a)g(C)p Ft(++)f Fs(class)g(with)f(methods)h(and)g (representation)f(analogous)g(to)h(the)g(procedures)0 662 y(and)e(representation)f(that)g(appear)h(in)g(the)g(C)g(mapping.)g (Objects)f(become)i(normal)f(C)p Ft(++)g Fs(classes)f(that)h(are)h (subclasses)d(of)0 724 y(the)i(pre-defined)g(class)f Ft(iluObject)p Fs(.)0 850 y Fn(6.2.2.1)23 b(Sequence)17 b(types)62 954 y Fs(For)h(most)f(sequences)g(types,)i(the)f(generated)f (C)p Ft(++)h Fs(code)g(follows)e(a)i(pattern)f(analogous)f(to)h(that)g (set)g(in)g(the)h(C)0 1016 y(mapping)10 b(and)h(illustrated)f(in)g(the) h(upcoming)f(example.)0 1141 y Fo(6.2.3)26 b(Object)14 b(types)0 1284 y(6.2.4)26 b(Exceptions)62 1388 y Fs(Because)14 b(of)g(the)f(scarcity)g(of)h(implementation)e(of)i(the)f(C)p Ft(++)h Fs(exception)e(mechanism,)j(exceptions)d(are)j(passed)e(by)0 1450 y(adding)e(an)h(additional)d(argument)j(to)f(the)h(beginning)e(of) h(each)i(method,)e(which)g(is)h(a)g(pointer)f(to)g(a)h(status)e (struct,)i(which)0 1512 y(contains)g(an)i(exception)f(code,)h(and)g(a)g (union)e(of)i(all)f(the)g(possible)f(exception)h(value)g(types)g (defined)g(in)g(the)h(interface.)0 1574 y(Method)e(implementations)f (set)h(the)g(exception)f(code,)j(and)e(fill)f(in)h(the)h(appropriate)e (value)h(of)h(the)f(union,)g(to)g(signal)f(an)0 1637 y(exception.)f(Exception)g(codes)h(are)h(represented)f(in)f(C)p Ft(++)i Fs(with)e(values)h(of)g(the)g(type)f Ft(ilu_Exception)p Fs(.)62 1724 y(In)h(a)h(true)f(module,)g(exceptions)f(may)i(be)f (raised)g(by)g(using)e(the)i(function)f Ft(<)p Fp(interface)p Ft(>_G::RaiseException)p Fs(.)1820 1837 y(C)p Ft(++)-1900 b(void)12 b(<)p Fp(interface)p Ft(>)p 324 1837 15 3 v 18 w Fo(G::RaiseException)21 b Fk(\()11 b Ft(RETAIN)p Fk(\()p Ft(<)p Fp(interface)p Ft(>Status)f(*)p Fk(\))i Fp(status)p Ft(,)208 1900 y(GLOBAL)p Fk(\()p Ft(ilu_Exception)p Fk(\))d Fp(code)p Ft(,)j(...)p Fk(\))120 1962 y Fs(Causes)f(an)h (exception)e(code)i(and)f(value)g(for)h(the)f(exception)f(specified)h (by)g Fp(code)j Fs(to)d(be)h(bound)e(in)h Fp(status)p Fs(.)120 2024 y(Besides)f(the)g(two)g(required)g(arguments,)g(the)g (function)f(may)i(take)f(another)g(argument,)h(which)e(should)g(be)120 2086 y(a)i(value)e(of)i(the)f(type)f(implied)h(by)g(the)f(value)h(of)h Fp(code)s Fs(;)e(that)h(is,)g(of)h(the)f(appropriate)f(type)h(to)f(be)i (a)f(value)g(of)120 2149 y(the)i(exception)f(being)g(signalled.)i(Note) f(that)g Ft(RaiseException)f Fs(does)g(not)h(actually)f(cause)i(a)f (transfer)120 2211 y(of)f(control,)g(so)f(that)h(an)g(explicit)f (return)h(statement)g(must)f(follow)g(a)i(call)f(to)g Ft(RaiseException)p Fs(.)0 2336 y Fo(6.2.5)26 b(Constants)62 2440 y Fs(Constants)10 b(are)i(implemented)f(with)f(C)p Ft(++)h(#define)g Fs(statements.)0 2566 y Fo(6.2.6)26 b(Examples)62 2670 y Fs(Here's)12 b(a)f(sample)g(ISL)h(spec,)f(and)g (the)g(resulting)f(C)p Ft(++)h Fs(mappings:)p eop %%Page: 118 119 118 118 bop 0 -58 a Fs(Chapter)11 b(6:)g(Using)f(ILU)h(with)f(C)p Ft(++)1301 b Fs(118)120 183 y Ft(INTERFACE)24 b(Foo;)120 283 y(TYPE)h(String)f(=)h(ilu.CString;)120 333 y(TYPE)g(UnsignedInt)e (=)i(CARDINAL;)120 432 y(TYPE)g(E1)f(=)h(ENUMERATION)f(val1,)g(val2,)h (val3=40)f(END;)120 482 y(TYPE)h(R1)f(=)h(RECORD)f(field1)h(:)g (CARDINAL,)f(field2)g(:)h(E1)g(END;)120 532 y(TYPE)g(A1)f(=)h(ARRAY)g (OF)f(200)h(BYTE;)120 582 y(TYPE)g(A2)f(=)h(ARRAY)g(OF)f(41,)h(3)g(R1;) 120 632 y(TYPE)g(S1)f(=)h(SEQUENCE)f(OF)h(E1;)120 681 y(TYPE)g(U1)f(=)h(UNION)g(R1,)f(A2)h(END;)120 781 y(EXCEPTION)f (Except1)g(:)h(String;)120 881 y(CONSTANT)f(Zero)h(:)g(CARDINAL)f(=)g (0;)120 980 y(TYPE)h(O1)f(=)h(OBJECT)170 1030 y(METHODS)220 1080 y(M1)f(\(arg1)h(:)g(R1\))f(:)h(UnsignedInt)f(RAISES)g(Except1)h (END)170 1130 y(END;)62 1272 y Fs(The)11 b(C)p Ft(++)h Fs(mapping:)120 1375 y Ft(typedef)24 b(ilu_CString)g(Foo_T_String;)120 1425 y(typedef)g(ilu_Cardinal)g(Foo_T_UnsignedInt;)120 1524 y(typedef)g(enum)h(_Foo_T_E1_enum)e({)170 1574 y(Foo_T_E1_val1)h (=)g(1,)170 1624 y(Foo_T_E1_val2)g(=)g(2,)170 1674 y(Foo_T_E1_val3)g(=) g(40)120 1724 y(})h(Foo_T_E1;)120 1773 y(typedef)f(struct)h (_Foo_T_R1_struct)e({)170 1823 y(ilu_Cardinal)h(field1;)170 1873 y(Foo_T_E1)g(field2;)120 1923 y(})h(Foo_T_R1;)120 1973 y(typedef)f(ilu_Byte)g(Foo_T_A1[200];)120 2022 y(typedef)g (Foo_T_R1)g(Foo_T_A2[41][3];)120 2072 y(class)g(_Foo_T_S1_sequence)g({) 145 2122 y(private:)170 2172 y(ilu_Cardinal)g(_maximum;)170 2222 y(ilu_Cardinal)g(_length;)170 2271 y(Foo_T_E1)g(*_buffer;)145 2321 y(public:)170 2371 y(_Foo_T_S1_sequence)f(\(\);)170 2421 y(virtual)h(~_Foo_T_S1_sequence)f(\(\);)170 2471 y(static)h(class)h(_Foo_T_S1_sequence)e(*Create)h(\(ilu_Cardinal)g (initial_size,)f(Foo_T_E1)120 2521 y(*initial_data\);)170 2570 y(virtual)h(ilu_Cardinal)g(Length\(\);)170 2620 y(virtual)g(void)h(Append\(Foo_T_E1\);)170 2670 y(virtual)f(Foo_T_E1)g (RemoveHead\(\);)p eop %%Page: 119 120 119 119 bop 0 -58 a Fs(Chapter)11 b(6:)g(Using)f(ILU)h(with)f(C)p Ft(++)1301 b Fs(119)170 183 y Ft(virtual)24 b(Foo_T_E1)g (RemoveTail\(\);)170 233 y(virtual)g(ilu_Cardinal)g (RemoveAll\(ilu_Boolean)f(\(*matchproc\)\(Foo_T_E1\)\);)170 283 y(virtual)h(Foo_T_E1)g(*)h(Array\(\);)170 333 y(virtual)f(Foo_T_E1) g(Nth\(ilu_Cardinal)g(index\);)120 382 y(};)120 432 y(typedef)g(class)h (_Foo_T_S1_sequence)e(*)i(Foo_T_S1;)120 482 y(enum)g (Foo_T_U1_allowableTypes)d({)j(Foo_T_U1_R1,)f(Foo_T_U1_A2)g(};)120 532 y(typedef)g(struct)h(_Foo_T_U1_union)e({)170 582 y(enum)h(Foo_T_U1_allowableTypes)f(discriminator;)170 632 y(union)h({)220 681 y(Foo_T_R1)g(R1;)220 731 y(Foo_T_A2)g(A2;)170 781 y(})h(value;)120 831 y(})g(Foo_T_U1;)120 930 y(extern)f (ilu_Exception)g(Foo_E_Except1;)123 b(/*)25 b(exception)f(code)h (Except1)f(*/)120 1030 y(typedef)g(struct)h(_Foo_Status_struct)e({)170 1080 y(ilu_Exception)h(returnCode;)170 1130 y(union)g({)220 1180 y(ilu_Cardinal)f(anyvalue;)220 1229 y(Foo_T_String)g(Except1;)170 1279 y(})i(values;)120 1329 y(})g(FooStatus;)120 1429 y(class)f(Foo_T_O1)h(:)f(public)h(iluObject)f({)145 1478 y(public:)170 1528 y(Foo_T_O1\(\);)g(//)g(constructor)170 1578 y(virtual)g(~Foo_T_O1\(\);)g(//)h(destructor)170 1628 y(static)f(class)h(Foo_T_O1)f(*)h(ILUCreateFromSBH\(ilu_CString)d (sbh\);)170 1678 y(Foo_T_UnsignedInt)h(M1)i(\(FooStatus)f(*_status,)g (Foo_T_R1)g(*arg1\);)120 1727 y(};)120 1827 y(#define)g(Foo_C_Zero)g (\(\(ilu_Cardinal\))g(0\))0 1974 y Fu(6.3)30 b(Using)15 b(an)g(ILU)h(module)e(from)g(C)p Fh(++)62 2080 y Fs(A)e(client)f (module)g(may)h(obtain)f(an)g(instance)g(of)h(an)g(ILU)f(object)g(in)g (three)h(basic)f(ways:)h(1\))f(instantiating)e(it)i(directly)0 2142 y(from)f(a)g(string)f(binding)f(handle,)h(2\))h(using)f(the)g (function)g Ft(iluObject::Lookup)f Fs(to)h(locate)h(it)f(via)g(the)h (simple)f(binding)0 2205 y(interface,)19 b(and)e(3\))g(receiving)f(the) h(instance)f(directly)g(as)h(a)g(return)g(value)g(or)g(out)f(parameter) i(from)f(a)h(method)e(on)h(a)0 2267 y(different)11 b(object.)62 2357 y(To)i(instantiate)f(from)i(a)f(string)g(binding)e(handle,)j(a)f (static)g(member)h(function)f(is)f(generated)i(for)f(each)h(subclass)e (of)0 2419 y Ft(class)f(iluObject)f Fs(declared)i(in)e(the)h(C)p Ft(++)h Fs(stubs:)1820 2538 y(C)p Ft(++)-1900 b(OPTIONAL\(class)10 b Fp(T)15 b Ft(*\))e Fp(T)t Fo(::ILUCreateFromSBH)23 b Fk(\()p Ft(ilu_CString)10 b Fp(sbh)5 b Fk(\))62 2630 y Fs(To)11 b(use)g(the)g(simple)g(binding)e(service)i(to)g(locate)g(an) g(object:)p eop %%Page: 120 121 120 120 bop 0 -58 a Fs(Chapter)11 b(6:)g(Using)f(ILU)h(with)f(C)p Ft(++)1301 b Fs(120)1820 183 y(C)p Ft(++)-1900 b(static)11 b(OPTIONAL\(GLOBAL\(void)e(*\)\))j Fo(iluObject::Lookup)20 b Fk(\()11 b Ft(RETAIN)p Fk(\()p Ft(char)g(*)p Fk(\))g Fp(sid)p Ft(,)208 246 y(RETAIN)p Fk(\()p Ft(char)f(*)p Fk(\))i Fp(ih)p Ft(,)e(ilu_Class)h Fp(putative-class)g Fk(\))120 308 y Fs(Locking:)e(Main)j(invariant)e(holds.)120 397 y(Finds)g(and)g(returns)g(the)g(object)g(specified)g(by)g(the)g (given)g(Server)h(ID)g(\()p Fp(sid)5 b Fs(\))10 b(and)g (server-relative)h(Instance)120 459 y(Handle)i(\()p Fp(ih)5 b Fs(\))12 b(by)h(consulting)e(the)i(local)g(domain)g(registry)f(of)h (objects.)k Fp(putative-class)c Fs(is)g(the)g(type)g(that)120 522 y(the)f(object)f(is)g(expected)h(to)f(be)h(of,)g(though)f(the)g (type)h(of)f(the)h(actual)g(object)f(returned)g(may)h(be)g(a)h(subtype) 120 584 y(of)g Fp(putative-class)p Fs(,)g(cast)g(to)f(the)h Fp(putative-class)p Fs(.)j(The)d(return)g(value)g(should)f(be)h (immediately)g(cast)g(to)g(a)120 646 y(value)e(of)g(the)g(C)p Ft(++)g Fs(mapping)g(of)g Fp(putative-class)p Fs(.)0 791 y Fu(6.4)30 b(Implementing)13 b(an)j(ILU)f(Module)g(in)g(C)p Fh(++)62 897 y Fs(For)k(each)g(ILU)f(class)g Fp(interface)p Ft(.)p Fp(otype)s Fs(,)h(ILU)f(will)f(define,)k(in)c(the)i(file)f(`)p Fp(interface)p Ft(.cc)p Fs(',)i(a)f(C)p Ft(++)g Fs(class)e(called)0 960 y Fp(interface)s Ft(_T_)p Fp(otype)s Fs(.)h(To)c(implement)g(a)g (true)g(object)g(for)g Fp(interface)p Ft(.)p Fp(otype)s Fs(,)g(one)g(should)e(further)i(subclass)f(this)g(C)p Ft(++)0 1022 y Fs(class,)i(and)e(override)h(all)g(of)g(its)f(methods.) 19 b(In)14 b(particular,)g(do)g(not)f(let)h(any)f(of)h(the)g(default)g (methods)f(for)h(the)g(class)f(be)0 1084 y(called)e(from)h(your)e (methods)h(for)g(it.)0 1215 y Fo(6.4.1)26 b(Servers)62 1321 y Fs(ILU)16 b(supports,)g(in)g(each)g(address)g(space,)i(multiple) d(instances)g(of)h(something)e(called)i(a)h Fp(kernel)f(server)p Fs(,)i(each)e(of)0 1383 y(which)e(in)g(turn)h(supports)e(some)i(set)f (of)h(object)f(instances.)22 b(A)14 b(kernel)h(server)g Fp(export)t Fs(s)f(its)g(objects)g(by)h(making)f(them)0 1445 y(available)c(to)g(other)g(modules.)g(It)g(may)h(do)f(so)g(via)g (one)h(or)f(more)h Fp(port)t Fs(s,)g(which)e(are)i(abstractly)f(a)g (tuple)g(of)g(\()p Fp(rpc)h(protocol)p Fs(,)0 1508 y Fp(transport)k(type)p Fs(,)i Fp(transport)d(address)r Fs(\).)25 b(For)16 b(example,)i(a)e(typical)f(port)g(might)h(provide)f (access)h(to)f(a)h(kernel)g(server's)0 1570 y(objects)h(via)g Ft(\(Sun)11 b(RPC,)g(TCP/IP,)g(\(host)f(13.24.52.9,)h(UNIX)g(port)g (2076\)\))p Fs(.)30 b(Another)17 b(port)g(on)g(the)h(same)0 1632 y(kernel)11 b(server)g(might)g(provide)f(access)h(to)g(the)g (objects)f(via)h Ft(\(Xerox)g(Courier,)g(XNS)g(SPP,)g(XNS)g(port)g (1394\))p Fs(.)62 1721 y(When)j(creating)f(an)g(instance)g(of)h(a)f (true)h(object,)g(a)g(kernel)f(server)h(for)f(it,)h(and)g(an)f (instance)g(handle)g(\(the)g(name)i(by)0 1784 y(which)f(the)h(kernel)g (server)g(knows)f(it\))h(for)g(it)g(must)f(be)i(determined.)23 b(These)14 b(may)i(be)f(specified)f(explicitly)f(by)i(over-)0 1846 y(riding)e(the)g(default)g Ft(iluObject::ILUGetServer)f Fs(and)i Ft(iluObject::ILUGetInstanceHandle)d Fs(methods,)0 1908 y(respectively.)19 b(The)c Ft(iluObject)e Fs(implementation)g(of)h Ft(ILUGetServer)f Fs(defers)i(to)f Ft(ilu::GetDefaultServer)p Fs(.)0 1970 y(The)d Ft(iluObject)f Fs(implementation)g(of)h Ft(ILUGetInstanceHandle)f Fs(generates)h(a)g(handle)g(that's)f(unique)g (relative)h(to)0 2033 y(the)g(kernel)g(server.)62 2122 y(The)f(kernel)g(server)h(is)e(represented)h(in)g(C)p Ft(++)g Fs(with)g(the)g(class)f Ft(iluServer)p Fs(,)h(which)g(has)g (the)g(following)e(constructor:)1820 2240 y(C)p Ft(++)-1900 b(??)12 b Fo(iluServer::iluServer)21 b Fk(\()12 b Ft(OPTIONAL)p Fk(\()p Ft(const)e(char)h(*)p Fk(\))g Fp(server-id)p Ft(,)208 2303 y(OPTIONAL)p Fk(\()p Ft(iluObjectTable)e(*)p Fk(\))i Fp(object-table)i Fk(\))120 2365 y Fs(Constructs)d(an)h (instance)f(of)i Ft(class)f(iluObject)f Fs(with)g(the)h(given)g Fp(server-id)k Fs(and)c Fp(object-table)p Fs(.)62 2483 y(Note)f(that)g(ILU)g(object)g(IDs,)h(which)e(consist)g(of)i(the)f (kernel)g(server)h(ID,)g(plus)e(the)h(instance)g(handle)f(of)i(the)f (object)g(on)0 2545 y(that)h(server,)h(must)f(be)h(unique)e(``across)i (space)f(and)h(time'',)g(as)g(the)f(saying)f(goes.)i(If)g(no)f(kernel)h (server)f(id)h(is)f(specified,)0 2608 y(ILU)d(will)f(generate)h(one)f (automatically,)h(using)e(an)i(algorithm)f(that)h(provides)e(a)i(high)f (probability)f(of)i(uniqueness.)g(If)h(you)0 2670 y(explicitly)h (specify)h(a)h(kernel)g(server)g(ID,)g(a)h(good)e(technique)f(is)i(to)f (use)h(a)g(prefix)g(or)f(suffix)h(which)f(uniquely)f(identifies)p eop %%Page: 121 122 121 121 bop 0 -58 a Fs(Chapter)11 b(6:)g(Using)f(ILU)h(with)f(C)p Ft(++)1301 b Fs(121)0 183 y(some)13 b(domain)g(in)g(which)f(you)h(can)g (assure)g(the)g(uniqueness)e(of)j(the)e(remaining)h(part)g(of)g(the)g (ID.)h(For)f(example,)i(when)0 246 y(using)7 b(ILU)g(at)h(some)g (project)f(called)h(NIFTY)g(at)g(some)g(internet)f(site)g(in)g(the)h (IP)g(domain)g Ft(department.company.com)p Fs(,)0 308 y(one)j(might)f(use)h(kernel)g(server)h(IDs)f(with)f(names)h(like)g Ft(something.NIFTY.department.company.com)o Fs(.)62 395 y(Once)h(the)e(server)i(is)f(constructed,)f(a)h(port)g(must)g(be)g (added:)1820 508 y(C)p Ft(++)-1900 b(ilu_Boolean)11 b Fo(iluServer::AddPort)21 b Fk(\()p Ft(OPTIONAL)p Fk(\()p Ft(RETAIN)p Fk(\()p Ft(char)10 b(*)p Fk(\)\))i Fp(protocol-info)p Ft(,)208 570 y(OPTIONAL)p Fk(\()p Ft(RETAIN)p Fk(\()p Ft(ilu_TransportInfo)p Fk(\)\))d Fp(transport-info)p Ft(,)g(ilu_Boolean)h Fp(be-default)t Fk(\))120 695 y Fs(Adds)17 b(a)i(port)f(through)f(which)g(the)h(server)h(can)g(be)f (contacted.)32 b(The)19 b Fp(protocol-info)f Fs(and)g Fp(transport-)120 757 y(info)25 b Fs(specify)e(the)g(RPC)i(and)e (transport)f(protocols)g(and)i(their)f(parameters.)49 b(The)23 b Fp(transport-info)120 819 y Fs(has)g(a)g(layered)g (structure,)j(represented)d(by)f(the)h(C)h(type)e Ft(ilu_TransportInfo) p Fs(,)j(described)e(in)120 881 y(`)p Fp(ILUSRC)t Ft (/runtime/kernel/iluxport.h)p Fs('.)10 b(See)h(chapter)g(1)f(for)h(a)g (catalogue)f(of)h(available)f(RPC)120 944 y(and)h(transport)f(layer)h (specifications.)62 1056 y(To)h(export)g(a)g(module)g(for)g(use)g(by)g (other)g(modules,)g(simply)f(instantiate)f(one)i(or)g(more)h(instances) e(of)h(your)g(subtype)0 1119 y(of)f Fp(interface)s Ft(:)p Fp(otype)i Fs(and)e(\(if)g(single-threaded\))f(call)h(the)g(ILU)g(C)p Ft(++)g Fs(event)g(dispatching)e(loop,)h Ft(iluServer::Run)p Fs(.)0 1244 y Fo(6.4.2)26 b(Event)14 b(dispatching)62 1348 y Fs(Most)g(non-threaded)f(long-lived)g(C)h(and)g(C)p Ft(++)h Fs(programs)f(simulate)f(threads)h(with)f Fp(event)h (dispatching)p Fs(,)f(in)h(which)0 1410 y(the)h(program)g(waits)f(in)g (some)h(piece)g(of)g(code)g(called)g(the)g Fp(main)g(loop)h Fs(until)d(an)i Fp(event)k Fs(such)c(as)g(input)e(arriving)h(on)h(a)0 1472 y(file)e(descriptor)g(or)h(the)f(expiration)f(of)i(an)f(alarm)i (signal)d(causes)h(a)h Fp(callback)g(routine)h Fs(to)e(be)g(invoked.)18 b(The)13 b(ILU)h(C)p Ft(++)0 1534 y Fs(runtime,)g(in)e(single-threaded) g(mode,)i(supports)d(this)h(style)h(of)g(operation)f(with)g(various)g (static)g(member)j(functions)c(of)0 1597 y(the)g(class)g Ft(iluServer)p Fs(.)1820 1709 y(C)p Ft(++)-1900 b(static)11 b(ilu_Boolean)g Fo(iluServer::RegisterInputHandler)20 b Fk(\()11 b Ft(int)g Fp(fd)p Ft(,)h(void)208 1772 y Fk(\()p Ft(*)p Fp(callbackRoutine)s Fk(\)\()p Ft(int,)d(void)i(*)p Fk(\))p Ft(,)g(void)g(*)g Fp(callbackArg)r Fk(\))120 1834 y Fs(Register)e(the)h(file)f(descriptor)g Fp(fd)14 b Fs(with)9 b(the)g(ILU)h(kernel)f(so)h(that)f(when)g(ILU)h(kernel)f (event)g(dispatching)f(is)120 1896 y(active)f(\(that)h(is,)g(during)f (the)g Ft(iluServer::Run)g Fs(call\),)h(the)g(function)e Fp(callbackRoutine)j Fs(will)e(be)h(invoked)120 1958 y(with)i(the)h(arguments)g Ft(\()p Fp(fd)p Ft(,)g Fp(callbackArg)r Ft(\))f Fs(whenever)h(input)f(is)h(available)f(on)h(the)g(file)g (descriptor)f Fp(fd)p Fs(.)1820 2071 y(C)p Ft(++)-1900 b(static)11 b(ilu_Boolean)g Fo(iluServer::UnregisterInputHandler)20 b Fk(\()11 b Ft(int)g Fp(fd)16 b Fk(\))120 2133 y Fs(Removes)c(any)f (callback)f(routine)g(registered)h(on)g(file)g(descriptor)f Fp(fd)p Fs(.)1820 2246 y(C)p Ft(++)-1900 b(static)11 b(ilu_Boolean)g Fo(iluServer::Run)21 b Fk(\()11 b Ft(void)g Fk(\))120 2308 y Fs(Invokes)f(the)i(ILU)f(main)g(loop)g(and)g(causes)g (ILU)g(kernel)g(event)g(dispatching)f(to)h(be)g(active.)h(This)e (routine)120 2371 y(never)h(returns.)62 2483 y(Occasionally)k(it)i(is)f (necessary)g(to)g(use)h(a)g(different)f(event)g(dispatching)f (mechanism,)j(typically)d(because)i(some)0 2545 y(other)11 b(work)f(is)h(done)g(inside)e(the)i(main)g(loop)g(of)g(the)f (mechanism.)i(An)f(alternate)g(main)g(loop)f(can)h(be)h(registered)e (for)h(use)0 2608 y(with)g(ILU)h(by)g(creating)g(a)h(subtype)e(of)h (the)g(class)g Ft(iluMainLoop)f Fs(and)h(registering)f(it)h(with)f(the) h(kernel)g(by)g(calling)f(the)0 2670 y(function)f Ft (iluServer::iluSetMainLoop)p Fs(:)p eop %%Page: 122 123 122 122 bop 0 -58 a Fs(Chapter)11 b(6:)g(Using)f(ILU)h(with)f(C)p Ft(++)1301 b Fs(122)1820 183 y(C)p Ft(++)-1900 b(static)11 b(void)h Fo(iluServer::iluSetMainLoop)19 b Fk(\()12 b Ft(RETAIN)p Fk(\()p Ft(iluMainLoop)e(*)p Fk(\))h Fp(ml)16 b Fk(\))120 246 y Fs(Registers)11 b(the)f(main)i(loop)e(object)g Fp(ml)16 b Fs(with)10 b(the)h(runtime)g(kernel.)0 369 y Fo(6.4.3)26 b(Publishing)62 473 y Fs(To)15 b(enable)f(users)g(of)h (your)f(module)g(find)g(the)h(exported)e(objects,)i(you)f(may)h (register)f(the)h(string)e(binding)g(handle)0 536 y(of)i(the)g(object)f (or)h(objects,)h(along)e(with)g(their)g(type)h(IDs,)h(in)f(any)g(name)g (service)g(or)g(registry)f(that)h(is)f(convenient)g(for)0 598 y(you.)25 b(In)15 b(releases)h(1.6--2.0)g(of)g(ILU,)g(we)f(support) g(an)h(experimental)f(simple)g(binding)f(method)h(that)g(allows)g(you)g (to)0 660 y(``publish'')i(an)h(object,)h(which)f(registers)f(it)g(in)h (a)h(domain-wide)e(registry,)i(and)f(then)f(to)h(withdraw)f(the)h (object,)h(if)0 722 y(necessary.)j(Potential)13 b(clients)g(can)i(find) f(the)h(string)e(binding)g(handle)h(of)g(the)h(object)e(by)i(calling)e (a)i(lookup)e(function.)0 785 y Fn(Note)30 b(that)g(this)g(interface)h (and)g(service)e(is)h(experimental,)i(and)e(may)g(be)g(supported)h (differently)g(in)0 847 y(future)26 b(releases)e(of)h(the)h(ILU)e (system.)1820 958 y Fs(C)p Ft(++)-1900 b(ilu_Boolean)11 b Fo(iluObject::ILUPublish)21 b Fk(\(\))120 1021 y Fs(A)10 b(method)f(on)g(instances)g(of)h Ft(class)h(iluObject)p Fs(,)e(it)g(registers)g(the)h(instance)f(with)f(some)i(domain-wide)120 1083 y(registration)j(service.)24 b(The)15 b(object)f(is)h(known)f(by)h (its)f Ft(<)p Fp(Server-ID)p Fs(,)i Fp(Instance-Handle)s Ft(>)e Fs(pair.)23 b(Clients)120 1145 y(may)11 b(find)g(the)g(object)f (by)g(passing)g(this)g(pair)h(to)f(the)h Ft(iluObject::Lookup)f Fs(function.)g(Returns)g(true)h(if)120 1207 y(the)g(object)f(can)i(be)f (successfully)f(published)f(in)h(the)h(local)g(registry.)1820 1319 y(C)p Ft(++)-1900 b(ilu_Boolean)11 b Fo(iluObject::ILUWithdraw)20 b Fk(\(\))120 1381 y Fs(Returns)12 b(true)g(if)g(the)g(object's)f (registration)g(in)g(the)h(local)g(registry)f(can)i(be)f(successfully)f (withdrawn,)g(or)120 1444 y(does)g(not)f(exist.)1820 1555 y(C)p Ft(++)-1900 b(ilu_Boolean)11 b Fo(iluObject::ILUPing)21 b Fk(\()p Ft(ilu_Error*)11 b(p_error)p Fk(\))120 1617 y Fs(Returns)20 b(ilu)p 334 1617 14 3 v 16 w(TRUE)h(if)f(the)h(true)g (object)f(exists,)i(and)f(the)g(process)f(serving)g(it)g(can)h(be)g (contacted,)120 1680 y(otherwise)10 b(ilu)p 360 1680 V 15 w(FALSE.)i(*p)p 583 1680 V 16 w(error)g(is)e(set)h(if)g(some)h (error)f(occurred.)0 1816 y Fu(6.5)30 b(ILU)15 b(API)g(for)g(C)p Fh(++)0 1969 y Fu(6.6)30 b(Generating)13 b(ILU)i(stubs)h(for)f(C)p Fh(++)62 2073 y Fs(To)g(generate)g(C)p Ft(++)h Fs(stubs)d(from)j(an)f (ISL)h(file,)g(you)e(use)h(the)g(program)g(c)p Ft(++)p Fs(-stubber.)23 b(Three)15 b(files)g(are)g(generated)0 2135 y(from)d(the)f(`)p Ft(.isl)p Fs(')g(file)g(\(the)g(extension)e Ft(cpp)j Fs(is)e(used)h(instead)f(of)h Ft(cc)g Fs(when)g(running)f(on)h (Windows\):)37 2222 y Fr(\017)30 b Fs(`)p Fp(interface-name)p Ft(.hh)p Fs(')9 b(contains)f(the)g(class)g(definitions)e(for)j(the)f (types)g(and)h(procedures)f(defined)g(by)g(the)g(interface;)37 2297 y Fr(\017)30 b Fs(`)p Fp(interface-name)p Ft(.cc)p Fs(')12 b(contains)e(the)h(client-side)e(and)i(general)h(code)f(for)g (the)g(interface;)g(and)37 2371 y Fr(\017)30 b Fs(`)p Fp(interface-name)p Ft(-server-stubs.cc)p Fs(')11 b(contains)f(the)h (server-side)f(stubs)g(and)h(code)g(for)h(the)f(interface.)62 2483 y(Typically,)f(clients)g(of)h(a)h(module)f(never)g(have)g(a)h (need)f(for)g(the)g(`)p Fp(interface-name)p Ft(-server-stubs.cc)p Fs(')g(file.)120 2570 y Ft(\045)25 b Fj(c)p Ft(++)p Fj(-stubber)f (foo.isl)120 2620 y Ft(header)g(file)h(interface)f(foo)h(to)f (./foo.hh...)120 2670 y(code)h(for)f(interface)g(foo)h(to)g (./foo.cc...)p eop %%Page: 123 124 123 123 bop 0 -58 a Fs(Chapter)11 b(6:)g(Using)f(ILU)h(with)f(C)p Ft(++)1301 b Fs(123)120 183 y Ft(code)25 b(for)f(server)h(stubs)f(of)h (interface)f(foo)g(to)h(./foo-server-stubs.cc...)120 233 y(\045)62 360 y Fs(The)16 b(option)f Ft(-renames)c Fp(renames-filename)20 b Fs(may)c(be)h(used)f(with)f Ft(c++-stubber)g Fs(to)h(specify)g(particular)g(C)p Ft(++)0 422 y Fs(names)11 b(for)h(ISL)f(types.)g(See)h(the)f(following)e (section)h(for)i(more)f(details.)0 568 y Fo(6.6.1)26 b(Tailoring)14 b(C)p Fl(++)h Fo(Names)62 679 y Fs(It)c(is)f(sometimes)h (necessary)f(to)g(have)h(the)g(C)p Ft(++)g Fs(names)g(of)f(an)h(ILU)g (interface)g(match)g(some)g(other)f(naming)g(scheme.)0 741 y(A)h(mechanism)h(is)f(provided)f(to)h(allow)f(the)h(programmer)i (to)e(specify)f(the)h(names)h(of)g(C)p Ft(++)f Fs(language)g(artifacts) g(directly,)0 804 y(and)g(thus)f(override)h(the)g(automatic)f(ISL)i(to) f(C)p Ft(++)g Fs(name)h(mappings.)62 898 y(To)f(do)g(this,)g(you)g (place)g(a)h(set)f(of)g(synonyms)f(for)i(ISL)f(names)h(in)f(a)g Fp(renames-file)p Fs(,)i(and)e(invoke)f(the)h Ft(c++-stubber)0 960 y Fs(program)g(with)f(the)g(switch)g Ft(-renames)p Fs(,)h(specifying)e(the)i(name)g(of)g(the)f(renames-file.)i(The)f (lines)f(in)g(the)h(file)f(are)i(of)e(the)0 1023 y(form)120 1117 y Fp(construct)k(ISL-name)h(C)p Ft(++)p Fp(-name)0 1243 y Fs(where)d Fp(construct)k Fs(is)11 b(one)h(of)g Ft(method)p Fs(,)g Ft(exception)p Fs(,)g Ft(type)p Fs(,)h Ft(interface)p Fs(,)f(or)g Ft(constant)p Fs(;)g Fp(ISL-name)j Fs(is)d(the)g(name)0 1306 y(of)17 b(the)g(construct,)h(expressed)f (either)g(as)h(the)f(simple)f(name,)k(for)e(interface)f(names,)j(the)d (concatenation)f Fp(interface-)0 1368 y(name)p Ft(.)p Fp(construct-name)k Fs(for)d(exceptions,)h(types,)g(and)f(constants,)h (or)f Fp(interface-name)p Ft(.)p Fp(type-name)p Ft(.)p Fp(method-name)0 1430 y Fs(for)11 b(methods;)e(and)h Fp(C)p Ft(++)p Fp(-name)k Fs(is)c(the)g(name)h(the)f(construct)f (should)g(have)h(in)g(the)g(generated)h(C)p Ft(++)f Fs(code.)i(For)e (example:)120 1525 y Ft(#)25 b(change)f("Foo_T_R1")g(to)h(plain)f("R1") 120 1574 y(type)h(Foo.R1)f(R1)120 1624 y(#)h(change)f(name)h(of)f (method)h("M1")f(to)h("Method1")120 1674 y(method)f(Foo.O1.M1)g (Method1)0 1801 y Fs(Lines)9 b(beginning)g(with)g(the)h(`hash')g (character)h(`)p Ft(#)p Fs(')f(are)h(treated)f(as)h(comment)f(lines,)g (and)g(ignored,)g(in)g(the)f(renames-file.)62 1895 y(This)k(feature)h (of)g(the)g Ft(c++-stubber)f Fs(should)f(be)i(used)g(as)g(little)e(and) i(as)g(carefully)f(as)h(possible,)g(as)g(it)f(can)h(cause)0 1957 y(confusion)9 b(for)h(readers)g(of)g(the)g(ISL)h(interface,)g(in)e (trying)g(to)h(follow)f(the)g(C)p Ft(++)i Fs(code.)g(It)f(can)g(also)g (create)h(name)f(conflicts)0 2020 y(between)h(different)g(modules,)f (unless)g(names)i(are)g(carefully)f(chosen.)0 2185 y Fu(6.7)30 b(Threading)62 2296 y Fs(The)21 b(ILU)f(C)p Ft(++)i Fs(runtime)e(is)g(prepared)h(to)f(be)h(used)f(in)h(either)f(a)h (single-thread)e(or)i(a)g(multi-threaded)f(mode.)0 2359 y(Single-threaded)j(is)h(the)f(default.)50 b(To)24 b(run)g (multi-threaded,)i(the)e(application)e(is)i(responsible)e(for)i (picking)f(a)0 2421 y(threading)18 b(mechanism)i(and)f(making)h(it)e (accessible)h(to)h(ILU.)f(Two)g(calls)g(must)g(be)h(made)g(to)f(make)h (a)g(threading)0 2483 y(mechanism)j(available)e(to)h(ILU.)g(One,)k Ft(iluServer::SetFork)p Fs(,)e(enables)e(ILU)g(to)g(fork)g(new)g (threads.)44 b(The)0 2545 y(other,)18 b Ft(ilu_SetLockTech)d Fs(\(from)i(`)p Fp(ILUSRC)t Ft(/runtime/kernel/iluxport.h)p Fs('\),)f(supplies)f(various)g(thread)0 2608 y(synchronization)9 b(primitives.)j(These)g(calls)f(must)g(be)h(done)g(at)f(startup)g (time,)h(before)g(any)g(ILU)g(servers)f(are)i(created)f(or)0 2670 y(surrogate)e(objects)h(imported.)p eop %%Page: 124 125 124 124 bop 0 -58 a Fs(Chapter)11 b(6:)g(Using)f(ILU)h(with)f(C)p Ft(++)1301 b Fs(124)0 183 y Fu(6.8)30 b(Other)13 b(ILU)j (Considerations)e(For)g(C)p Fh(++)0 324 y Fo(6.8.1)26 b(Libraries)15 b(and)f(Linking)62 428 y Fs(For)d(clients)e(of)h(an)g (ILU)g(module,)g(it)g(is)g(only)f(necessary)h(to)f(link)g(with)g(the)h (`)p Fp(interface-name)p Ft(.o)p Fs(')h(file)f(compiled)g(from)0 490 y(the)i(`)p Fp(interface-name)p Ft(.cc)p Fs(')g(file)g(generated)g (for)g(the)g(interface)g(or)g(interfaces)g(being)f(used,)h(and)g(with)f (the)h(two)f(libraries)0 553 y(`)p Fp(ILUHOME)t Ft(/lib/libilu-c++.a)p Fs(')c(and)h(`)p Fp(ILUHOME)t Ft(/lib/libilu.a)p Fs(')f(\(in)h(this)f (order,)i(as)f(`)p Ft(libilu-c++.a)p Fs(')0 615 y(uses)j(functions)e (in)i(`)p Ft(libilu.a)p Fs('\).)62 702 y(For)16 b(implementors)f(of)h (true)f(classes,)h(or)g(servers,)h(the)e(code)h(for)g(the)f (server-side)g(stubs,)h(in)f(the)g(file)h(`)p Fp(interface-)0 764 y(name)p Ft(-server-stubs.o)p Fs(',)8 b(compiled)g(from)h(`)p Fp(interface-name)p Ft(-server-stubs.cc)p Fs(',)f(should)f(be)h (included)f(along)0 827 y(with)j(the)h(other)g(files)f(and)h (libraries.)0 951 y Fo(6.8.2)26 b(Initialization)13 b(order)62 1055 y Fs(ILU)h(uses)f(the)h(static-object-with-cons)o(tructor)d(trick) i(to)g(effect)i(per-compilation-unit)c(startup)i(code.)19 b(In)14 b(certain)0 1117 y(cases)c(you'll)f(want)g(to)g(ensure)h(that)f (a)i(certain)e(compilation)g(unit's)f(initialization)f(is)i(run)h (before)g(another's.)h(While)e(C)p Ft(++)0 1180 y Fs(defines)k(no)g (standard)g(way)h(to)f(do)g(this,)h(most)f(compilers)g(work)g(like)g (this:)i(compilation)d(units)g(are)i(initialized)e(\(static)0 1242 y(object)h(construtors)f(run\))h(in)g(the)h(order)f(in)h(which)f (they)g(are)h(given)f(to)g(the)g(link-editor.)k(We)d(want)f(to)h(hear)g (about)e(any)0 1304 y(exceptions)e(to)g(this)h(rule.)0 1429 y Fo(6.8.3)26 b(Makefiles)62 1532 y Fs(ILU)9 b(uses)g(the)g Ft(imake)g Fs(system)g(from)h(X11R?)f(to)g(produce)g(`)p Ft(Makefile)p Fs('s)g(from)h(`)p Ft(Imakefile)p Fs('s.)g(For)f(more)h (details)0 1595 y(on)h(this)f(process,)h(Section)g(19.3.1)g([Using)f (Imake)i(with)e(ILU],)h(page)h(263.)p eop %%Page: 125 126 125 125 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(125)0 183 y Fq(7)36 b(Using)14 b(ILU)h(with)g(Java)0 400 y Fu(7.1)30 b(Introduction)62 507 y Fs(This)14 b(document)g(is)g (for)h(the)f(Java)h(programmer)h(who)e(wishes)f(to)i(use)f(ILU.)h(The)g (following)d(sections)h(will)h(show)0 570 y(how)d(ILU)g(is)f(mapped)i (into)e(Java)h(constructs)f(and)h(how)f(both)g(Java)i(clients)e(and)h (servers)g(are)h(generated)f(and)g(built.)0 705 y Fo(7.1.1)26 b(ILU)15 b(and)g(CORBA)62 813 y Fs(ILU)d(for)g(Java)f(is)g(CORBA)i (compatible.)f(Compatibility)d(is)j(a)g(word)f(from)h(the)f(english)g (language;)f(in)i(case)g(of)f(ILU)0 875 y(we)g(mean)h(mainly)f(two)f (things:)62 966 y(1\))h(Ilu)g(can)h(interoperate)e(with)g(other)h (corba)h(compatible)e(orbs.)62 1057 y(2\))g(Applications)d(which)i(are) i(written)d(to)i(use)f(only)g(corba)h(compatible)e(features)i(can)g (switch)f(between)g(ilu)g(and)h(other)0 1119 y(orbs)h(without)e (changing)h(source)h(code.)62 1210 y(Sadly)k(ILU)g(for)h(Java's)f (compatibility)d(is)j(not)g(perfect.)24 b(Not)14 b(all)h(CORBA)h (functions)e(are)h(implemented.)24 b(More)0 1272 y(noticable)19 b(is)g(however)g(the)h(fact)g(that)f(we)h(do)g(only)f(try)g(to)g (achieve)h(source)g(compatibility;)h(there)f(is)f(no)h(binary)0 1334 y(compatibility)9 b(available.)62 1425 y(Compatibility)h(requires) i(the)g(programmers)h(help:)g(Not)f(all)g(programs)g(will)f(be)i (compatible,)f(but)f(it)h(is)g(possible)f(to)0 1488 y(write)g (compatible)f(programs.)62 1578 y(javasoft's)d(interpretation)g(o)o(f)g (the)g(s)o(tandard)f(mapping)o(:)g(\(may)h(or)g(may)g(not)g(be)g (accurate\):)h(http://java.sun.com/produ)o(cts/)o(jdk/)o(idl)o(/do)o (cs/i)o(dl-)0 1641 y(java.html)62 1732 y(The)13 b(standard)g(mapping)f (is)h(available)f(from)i(OMG)f(as)g(PDF)h(document:)g (ftp://ftp.omg.org/pub/do)o(cs/orb)o(os/)o(97-)0 1794 y(03-01.pdf)27 b(or)h(a)g(newer)g(version)e(ftp://www.omg.org/pub/d)o (ocs/fo)o(rmal/98-02)o(-29.pdf)f(or)j(in)f(other)g(formats)0 1856 y(http://www.omg.org/corba/)o(cichpter.htm#mij)o(av)0 2008 y Fu(7.2)j(The)14 b(ISL)i(Mapping)g(to)f(Java)0 2160 y Fo(7.2.1)26 b(Names)62 2268 y Fs(If)15 b(ILU)f(for)h(Java)f(is)f (used)h(in)g(standard)f(mapping)h(mode,)h(its)f(naming)g(scheme)g (matches)h(the)f(CORBA)h(standard.)0 2330 y(Even)10 b(resolution)f(of)h (naming)g(conflicts)g(is)g(mostly)f(CORBA)j(compatible.)e(However)h (for)f(some)h(conflicts)e(there)i(might)0 2392 y(be)i(slight)e (differences,)j(and,)f(Ilu)g(considers)f(certain)h(names)g(to)f(be)h (conflicting)e(which)i(have)g(not)f(been)h(mentioned)f(in)0 2455 y(the)f(corba)g(standard.)62 2545 y(In)17 b(particular)g(ILU)f (considers)g(methods)g(names)i(used)e(by)h(the)f(java.lang.Object)g (class)h(to)f(be)h Ft(")p Fs(reserved)p Ft(")g Fs(and)0 2608 y(causing)11 b(conflicts.)i(Not)e(doing)g(so)g(would)g(generate)h (confusing)f(errors)h(if)g(a)g(generated)g(method)f(would)g(conflict)g (with)0 2670 y(a)h(standard)e(method)h(by)f(using)g(identical)g (arguments.)p eop %%Page: 126 127 126 126 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(126)0 183 y Fo(7.2.2)26 b(Interface)62 289 y Fs(See)12 b(the)f(CORBA)h(standard)e(for)i(modules.)62 377 y(An)f(ISL)h Ft(interface)e Fs(is)h(mapped)g(to)g(a)g(Java)h(package)f(with)f(the)h (same)h(name.)62 466 y(There)g(is)e(a)i(stubber)e(option)g(to)g(put)h (a)g(prefix)g(to)g(the)g(Java)g(package,)h(to)e(make)i(it)f(a)g(nested) g(package.)62 555 y(Avoid)f(IDL)h(features)h(which)e(are)i(not)e(in)h (the)g(scope)g(of)g(a)h(idl)e(module)h(\(=)g(ISL)g(Interface\).)0 684 y Fo(7.2.3)26 b(Basic)15 b(Types)62 789 y Fs(See)d(the)f(corba)g (standard.)62 878 y(The)g Ft(")p Fs(new)p Ft(")g Fs(extended)g(IDL)g (types)f(fixed)h(is)g(not)f(yet)h(supported.)62 967 y(128)18 b(bit)g(floating)f(point)g(values)h(are)h(carried)g(around)f(as)h Ft(")p Fs(xerox.ilu.types.float128)p Ft(")c Fs(but)j(no)g(operations)f (are)0 1029 y(available.)62 1118 y(In)11 b(case)h(of)f Ft(")p Fs(byte)p Ft(")p Fs(,)g(ILU)g(carries)h(the)f(bit)f(pattern,)h (not)f(the)h(numerical)g(value.)0 1247 y Fn(7.2.3.1)23 b(Constant)62 1352 y Fs(See)12 b(the)f(corba)g(standard.)0 1481 y Fo(7.2.4)26 b(Strings)62 1586 y Fs(See)12 b(the)f(corba)g (standard.)0 1716 y Fo(7.2.5)26 b(Pickles)15 b(and)g(Typecodes)62 1821 y Fs(See)d(the)f(corba)g(standard)g(for)g(ANY)g(and)g(Typecodes.)0 1950 y Fo(7.2.6)26 b(Constructed)14 b(Types)0 2096 y Fn(7.2.6.1)23 b(Enumeration)62 2201 y Fs(See)12 b(the)f(corba)g (standard.)0 2330 y Fn(7.2.6.2)23 b(Array)62 2436 y Fs(See)12 b(the)f(corba)g(standard.)0 2565 y Fn(7.2.6.3)23 b(Sequence)62 2670 y Fs(See)12 b(the)f(corba)g(standard.)p eop %%Page: 127 128 127 127 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(127)0 183 y Fn(7.2.6.4)23 b(Record)62 287 y Fs(See)12 b(the)f(corba)g(standard.)0 412 y Fn(7.2.6.5)23 b(Union)62 516 y Fs(See)12 b(the)f(corba)g(standard.)0 641 y Fn(7.2.6.6)23 b(Optional)62 745 y Fs(ISL)18 b(Optionals)d(have)i(no)g(corresponding)e (corba)i(type.)29 b(If)18 b(the)f(base)g(type)f(of)h(the)g(optional)e (maps)j(into)e(a)h(Java)0 807 y(primitive)h(type)i(we)f(will)g (represent)g(the)h(optional)e(with)g(the)h(corresponding)f(Java)i (wrapper)g(or)f(container)g(class.)0 870 y(\(Boolean,)11 b(Character,)h(Double,)e(Float,)h(Integer,)g(Short,)g(Byte,)g(or)g (Long\).)g(The)g(null)e(value)i(represents)f(absence)h(of)f(the)0 932 y(parameter.)62 1019 y(If)17 b(the)e(base)h(type)g(of)g(the)f (optional)f(maps)i(into)f(a)i(Java)f(object)f(type,)i(the)e(optional)f (is)i(mapped)g(as)g(if)g(it)f(weren't)0 1081 y(optional.)10 b(The)h(null)f(value)h(represents)f(absence)i(of)f(the)g(parameter.)62 1169 y(In)f(the)f(case)i(of)e(Java)h(Strings)f(the)g(difference)h (between)g(a)g(null)f(String)g(and)g(an)h(empty)f(string)g(serves)g (this)g(distinction)0 1231 y(perfectly.)0 1356 y Fo(7.2.7)26 b(Object)14 b(Types)62 1460 y Fs(See)e(the)f(CORBA)h(standard)e(for)i Ft(")p Fs(corba)f(interfaces)p Ft(")p Fs(.)0 1585 y Fn(7.2.7.1)23 b(Surrogate)15 b(and)h(True)g(Object)g(Types)62 1689 y Fp(To)h(request)f(creation)h(of)g(an)g(object)f(the)g Ft(createTrueObject)g Fp(method)g(is)h(called.)28 b(The)17 b(implementation)e(of)0 1751 y Ft(createTrueObject)10 b Fp(is)h(expected)f(to)h(call)g Ft(super.returnTrueObject)e Fp(to)i(register)g(the)g(created)g(object.)62 1839 y Fs(True)g(object)g(have)g(to)g(implement)g(all)f(the)h(interfaces)g (required)g(by)g(their)g(type.)62 1926 y(Unlinke,)23 b(CORBA,)g(this)d(is)h(all)g(which)g(is)g(absolutely)e(necessary.)43 b(However,)24 b(unless)c(there)h(is)g(a)h(need)g(to)0 1988 y(do)i(otherwise)f(we)h(strongly)e(recommend)j(extending)e(the)g (base)i(class)e(xerox.ilu.IluObjectBase)g(or)h(the)g(class)0 2050 y(org.omg.CORBA.portable.ObjectImpl.)i(This)15 b(will)h(take)g (care)h(automatically)d(of)j(a)f(long)f(list)g(of)i(problems)e(\(See)0 2113 y(the)f(section)g(about)g(garbage)g(collection\).)21 b(But,)16 b(if)e(you)g(can't)h(use)f(one)h(of)f(those)g(base)h (classes,)g(in)f(ilu)g(you)g(do)g(have)0 2175 y(alternatives.)0 2300 y Fn(7.2.7.2)23 b(Methods,)15 b(Parameters,)h(and)f(Exceptions)0 2442 y(7.2.7.3)23 b(Java)14 b(Garbage)h(Collection,)g(Distributed)g (Garbage)g(Collection,)g(and/or)g(COLLECTIBLE)62 2545 y Fs(The)h(Garbage)f(Collection)g(features)g(in)g(Ilu)h(look)e(much)i (more)g(difficult)e(then)h(they)h(are.)25 b(The)15 b(difficulties)f (arise)0 2608 y(in)f(supporting)f(various)g(important)h(cases)h(in)f (wild)g(combinations.)k(Most)d(likely)e(your)h(application)f(will)h (not)g(use)g(the)0 2670 y(whole)d(span)h(of)g(complexities.)p eop %%Page: 128 129 128 128 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(128)62 183 y(For)15 b(Ilu)f(COLLECTIBLE)g(objects)f(\(see)h(generic)g (Ilu)g(documentation\))f(do)h(not)f(hang)h(onto)f(objects)g(longer)h (then)0 246 y(you)d(need.)g(That)g(is)f(true)h(for)h(both)e(surrogate)h (and)g(true)g(objects.)62 340 y(Non)d(COLLECTIBLE)g(objects)f(are)i (alive)f(until)f(deleted.)j(If)f(you)e(are)i(providing)d(a)j(true)f (object)g(implemementation,)0 403 y(it)k(is)g(your)g(responsibilit)o(y) e(to)i(prevent)f(this)h(object)f(from)i(being)f(garbage)g(collected;)g (Ilu)g(does)g(not)g(necessarily)f(do)h(so.)0 465 y(If)g(the)f(program)g (lets)f(a)i(true)f(object)f(being)h(garbage)g(collected)f(that)h(means) h(Ilu)e(will)g(eventually)g(stop)g(serving)h(it.)62 560 y(There)h(are)f(several)h(means)f(to)g(have)g(Ilu)g(help)f(keeping)h (an)g(object)f(alive:)62 655 y(If)19 b(possible,)f(true)f(objects)g (should)f(extend)h(IluObjectBase.)31 b(This)17 b(would)f(take)i(care)h (of)f(all)f(the)h(complexities)0 717 y(following.)62 812 y(Most)e(direct,)h(the)e(xerox.Ilu.registerTrueObject)f(method)h (provides)g(a)h(lifetime)f(argument.)25 b(This)15 b(should)f(be)i(a)0 874 y(lifetime)h(value)g(as)h(is)f(provided)f(by)h(the)g (xerox.ilu.IluLifetimeArgs)e(class.)30 b(However)18 b(since)f(many)g (registrations)0 937 y(happen)9 b(implicitely)f(or)h(in)h(places)f (which)g(do)g(not)g(provide)g(that)g(argument)g(there)h(are)g(other)f (means)h(to)f(specify)g(lifetime.)62 1032 y(There)j(are)f(two)g(marker) h(interfaces)f(xerox.Ilu.IluLifetimeForget)e(and)i (xerox.Ilu.IluLifetimeRemember)h(which)0 1094 y(can)i(be)f(implemented) g(by)g(true)h(objects.)j(Doing)12 b(so)h(guides)f(Ilu's)h(behaviour)g (if)g(xerox.Ilu.registerTrueObject)f(does)0 1156 y(not)e(specify)h(an)g (explicit)f(method)h(or)g(xerox.Ilu.registerTrueObject)e(is)i(not)g (explicitely)e(used)i(at)g(all.)62 1251 y(Of)h(course)f(the)f (application)g(could)g(simply)g(manage)i(the)f(lifetime)g(itself,)f (but)h(see)g(the)g(note)g(below.)62 1346 y(Note)g(that)g(there)g(is)g (a)g(big)g(difference)h(in)e(whether)h(a)h(true)f(object)g(is)f (extending)g(IluObjectBase)h(or)g(not.)g(Ilu)g(goes)g(to)0 1408 y(tremedous)h(troubles)f(to)h(not)f(require)h(applications)e(to)i (extend)g(a)h(predefined)e(base)i(class.)h(However)e(if)g(this)f (service)i(is)0 1470 y(not)e(needed)h(we)g(recommend)h(applications)d (to)i(simply)f(extend)g(IluObjectBase)g(for)i(true)f(object)f(types.)i (By)f(doing)f(so,)0 1533 y(Ilu)g(can)g(take)f(advantage)h(of)g (inherited)e(code)i(which)f(helps)g(it)h(handle)f(lifetime.)h(If)g(Ilu) g(can)g(finds)f(no)g(hint)g(at)h(all)f(that)g(the)0 1595 y(application)e(is)i(doing)f(something)g(about)g(the)h(lifetime,)h (Ilu's)e(behaviour)h(might)f(become)i(more)g(conservative)e(then)g(the) 0 1657 y(programmer)14 b(likes.)i(\(For)d(CORBA)h(users:)g(ilu's)e (version)g(of)h(org.omg.CORBA.portable.ObjectImpl.java)g(simply)0 1720 y(extends)d(xerox.ilu.IluObjectBase\))62 1814 y(Note)g(to)g(the)g (curious)f(why)h(the)g(internal)g(complexity)f(is)h(necessary:)g(Ilu)g (is)g(implementing)f(weak)h(refs,)i(even)e(on)g(jdk)0 1877 y(version)g(which)h(have)g(no)g(support)e(for)j(it.)62 1972 y(ILU)e(Java)h(reads)f(the)g Ft(ILU_COLLECTABLE_CINFO)e Fs(environment)h(variable)h(for)h(setting)d(up)i(ports)f(for)i(the)f (special)0 2034 y(object)g(used)h(to)g(guide)f(collectible)g(objecs.)0 2182 y Fo(7.2.8)26 b(How)14 b(to)h(make)g(your)g(idl)g(Java)f(friendly) 62 2293 y Fs(Note)d(that)g(you)f(don't)g(have)i(to)e(do)h(this.)g(Ilu)f (will)g(mangle)i(your)e(names)i(if)f(necessary.)62 2388 y(However,)j(if)f(you)f(keep)h(your)g(names)g(Java)g(friendly,)g(your)g (stubs)f(will)g(be)h(easier)g(to)f(read)i(and)f(debug)f(by)h(people)0 2451 y(used)h(to)h(popular)e(java)i(coding)f(standards)g(or)g(the)h (CORBA)h(standard)e(mapping.)21 b(If)15 b(you)g(avoid)f(name)h (conflicts)f(no)0 2513 y(esoteric)e(name)h(mangling)e(needs)h(to)g (happen)g(and)g(your)g(ilu)f(stubs)g(are)i(more)g(likely)e(to)h(match)h (the)f(CORBA)h(standard)0 2575 y(correctly.)26 2670 y(1.)30 b(Avoid)10 b(Java)h(keywords.)g(\(e.g.)h(boolean,)e(int,)h(class,)g (for,)h(...\))p eop %%Page: 129 130 129 129 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(129)26 183 y(2.)30 b(Avoid)10 b(names)i(of)g(Java)g(standard)f (classes)g(\(in)g(the)g(java.lang)h(package\).)h(\(e.g.)g(String,)f (Integer,)g(RuntimeExcep-)90 246 y(tion\))26 323 y(3.)30 b(Avoid)17 b(suffixes)h(which)f(are)i(used)f(by)g(CORBA)h(standard)f (for)h(your)e(type)h(and)g(class)g(names.)34 b(\(e.g.)g(Stubs,)90 385 y(Operations,)10 b(Helper,)i(Holder,)f(ImplBase\))26 463 y(4.)30 b(Avoid)10 b(prefixes)h(which)f(are)i(used)f(by)g(CORBA)h (standard)e(for)h(your)g(type)g(and)g(class)f(names.)i(\(e.g.)g(POA)p 1797 463 14 3 v 17 w(\))26 540 y(5.)30 b(Avoid)10 b(suffixes)g(which)h (are)h(generated)f(by)f(ILU)i(for)f(your)g(type)f(and)h(class)g(names.) h(\(e.g.)p 1551 540 V 28 w(exh)p 1633 540 V 16 w(\))26 618 y(6.)30 b(Avoid)10 b(gratuidous)f(typedefs.)i(\(But)g(it)g(is)f(ok) h(to)g(use)g(typedefs)f(for)i(functional)d(reasons\))26 695 y(7.)30 b(Avoid)10 b(using)g(the)h(same)h(name)f(for)h(the)f (interface)g(and)g(a)h(type.)26 772 y(8.)30 b(As)11 b(a)g(courtesy,)g (try)g(to)g(also)f(avoid)h(names)g(which)g(cause)g(problems)f(for)i (other)f(programming)f(languages.)26 850 y(9.)30 b(Start)11 b(your)g(types,)g(classes)f(and)h(exceptions)f(with)g(capital)h (letters.)3 927 y(10.)30 b(Start)11 b(your)g(methods)f(and)h (enumeration)g(values)f(with)h(small)f(letters)0 1075 y Fu(7.3)30 b(Access)14 b(to)h(standard)g(ILU)h(features)0 1225 y Fo(7.3.1)26 b(Servers)15 b(and)g(Ports)0 1374 y Fn(7.3.1.1)23 b(True)16 b(Servers)62 1480 y Fs(Each)f(object)e (exported)h(by)g(an)g(implementation)f(must)h(belong)f(to)h(a)h(true)f (server,)i(an)e(instance)g(of)g(the)g(Java)h(type)0 1543 y Ft(IluServer)c Fs(which)f(is)h(implemented)f(by)h(the)g Ft(xerox.ilu.IluServer)f Fs(class.)62 1632 y(An)19 b Ft(IluServer)g Fs(instance)g(can)g(be)h(created)g(by)f(calling)f(the)h (function)f Ft(ilu.createServer\()p Fp([serverID])q Ft(\))p Fs(,)0 1695 y(which)11 b(returns)g(a)h(value)g(of)g(type)f Ft(IluServer)p Fs(.)i(If)f Fp(serverID)j Fs(is)d(a)g(string,)f(it)g (specifies)g(the)h(server)g(ID;)f(if)h(it)f(is)h(the)f(Java)0 1757 y(value)g Ft(None)p Fs(,)g(a)h(server)f(ID)g(will)g(be)g(invented) f(automatically.)62 1847 y(Other)h(methods)f(allow)g(the)h (specification)e(of)i(a)g(daemon)g(flags)g(or)g(ports)f(for)h (different)f(transports)g(or)g(protocols,)g(or)0 1909 y(an)h Fp(object)g(table)p Fs(,)g(which)f(allows)g(specification)g(of)h (a)h(callback)f(function)e(for)j(creating)f(true)g(instances)f(on)g (demand.)62 1999 y(The)21 b(first)f(time)h(a)g(true)g(server)g(is)f (created,)k(it)c(becomes)h(the)g(default)f(server.)41 b(The)20 b(default)g(server)h(is)g(used)0 2061 y(for)d(an)g(exported)f (object)g(if)g(a)h(server)g(is)f(not)g(otherwise)g(specified)g(or)h (when)f(it)g(is)g(explicitly)f(requested)h(with)f(the)0 2124 y Ft(defaultServer)9 b Fs(method.)i(If)g(an)f(object)g(is)g (exported)g(before)g(any)g(servers)h(have)f(been)h(created,)g(one)f (will)f(be)i(created)0 2186 y(automatically)d(using)g(default)h (parameters)g(and)h(possibly)d(a)i(message)h(to)e(that)h(effect)h(will) e(be)i(written)e(to)h Ft(System.err)p Fs(.)62 2276 y(An)i(object)g(of)g (type)f Ft(IluServer)h Fs(has)g(an)g(accessor)h(method)e Ft(serverId\(\))h Fs(that)f(returns)h(its)f(server)i(ID.)62 2366 y Fp(Look)d(at)h(the)f(Java)h(classes)f(IluServer)h(and)g(IluPort) f(for)h(details.)g(In)g(general)g(servers)f(may)h(be)g(omitted)f(and)h (a)g(default)0 2428 y(server)h(is)g(used.)g(IluPort)g(as)g(well)g(may)g (be)h(ommited.)62 2518 y Fs(ILU)f(for)h(Java)f(reads)g(the)g Ft(ILU_DEFAULT_CINFO)f Fs(environment)g(variable)h(for)g(setting)f(up)g (default)h(ports.)62 2608 y(See)16 b(the)f(section)f(Java)h(Garbage)g (Collection,)f(Distributed)f(Garbage)i(Collection,)g(and/or)f (COLLECTIBLE)h(for)0 2670 y(how)c(to)f(setting)g(up)h(the)g(port)f (used)h(for)g(implementing)f(COLLECTIBLE)h(objects.)p eop %%Page: 130 131 130 130 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(130)0 183 y Fn(7.3.1.2)23 b(Object)16 b(Tables)62 289 y Fp(Object)22 b(tables)g(are)h(defined)f(in)g(the)h(class)f (IluObjectTable.)44 b(To)22 b(define)h(an)f(object)g(table)g(one)h (subclasses)0 352 y Ft(IluObjectTable)g Fp(and)h(attached)g(the)g (subclasses)f(to)g(an)i Ft(IluServer)e Fp(when)h(the)g(server)h(is)e (created.)51 b(An)0 414 y Ft(IluObjectTable)10 b Fp(can)i(only)e(be)h (attched)g(to)f(one)h Ft(IluServer)p Fp(.)62 503 y(Because)g(the)e (Object)h(Tables)f(calls)g(are)i(made)g(with)e(internal)g(ILU)g(locks)g (held,)h(it)g(must)f(not)h(do)f(recursive)h(calls)f(into)0 565 y(ILU.)0 697 y Fo(7.3.2)26 b(Threading)14 b(and)g(Event)h(Loops)62 803 y Fs(ILU)c(uses)g(Java)g(threads.)g(There)g(is)g(no)g(event)g(loop) f(option.)62 892 y(It)18 b(is)f(possible)f(to)h(change)h(thread)f (priorities)f(by)h(setting)f(properties)h(at)h(start)f(up)g(of)h(the)f (application.)29 b(This)17 b(is)0 954 y(however)11 b Fp(not)k Fs(recommended.)62 1044 y(A)h(few)g(arguments)f(can)h(be)f (passed)g(by)g(setting)f Ft(")p Fs(properties)p Ft(")h Fs(on)g(the)g(thread.)25 b(This)14 b(is)h(motivated)g(by)g(the)g(java)0 1106 y(standard)10 b(mapping)h(which)f(has)h(no)g(place)g(to)g(pass)g (extra)g(arguments.)62 1196 y(However)f(Java)h(threads,)f(if)g(not)g (subclassed)e(do)i(not)g(support)f Ft(")p Fs(properties)p Ft(")p Fs(.)h(To)g(set)g(thread)g(properties,)f(calls)h(need)0 1258 y(be)h(performed)h(from)g(an)f(xerox.ilu.IluServiceThread)0 1389 y Fo(7.3.3)26 b(Custom)15 b(Records)62 1495 y Fs(Record)d(types)e (can)i(be)f(subclassed.)f(The)h(subclass)f(can)h(register)g(itself)f (with)h(the)f(original)g(\(stub\))h(class.)62 1585 y Ft(")p Fs(Custom)i(Records)p Ft(")g Fs(class)f(assign)g(their)h(own)f (class)h(to)f(a)h(\(protected\))g(java.lang.Class)f(variable)h(of)g (the)g(original)0 1647 y(stub)f(class)g(for)g(the)h(record.)j(Whenever) c(ILU)g(needs)h(to)f(allocate)g(an)h(instance)e(of)i(such)f(a)h(record) g(it)f(will)f(allocate)h(a)h(an)0 1709 y(instance)d(of)i(the)e (subclass)g(instead.)0 1840 y Fo(7.3.4)26 b(Custom)15 b(Surrogates)62 1946 y Fs(Surrogate)h(creation)f(can)g(be)h (intercepted.)23 b(To)15 b(do)g(so)g(one)h(registers)e(either)h(a)h (Java)g(class,)g(or,)h(a)f(factory)f(object)0 2009 y(with)k(the)h(stub) g(class)g(implementing)f(a)i(object)e(type.)39 b(See)21 b(the)f(methods)g Ft(IluClassRep.setSurrClass)e Fs(or)0 2071 y Ft(IluClassRep.setSurrFactory)9 b Fs(for)i(details.)0 2202 y Fo(7.3.5)26 b(String)14 b(Binding)g(Handle)g(Formation)62 2308 y Fs(The)20 b(class)f Ft(xerox.ilu.IluSBH)f Fs(provides)g(methods) h(for)h(both)e(scanning)g(and)i(composing)e(string)g(binding)0 2370 y(handles.)0 2502 y Fo(7.3.6)26 b(Simple)14 b(Binding)62 2608 y Fs(An)d(object)g(may)g(be)h(published)d(using)h(the)g(simple)h (binding)e(service)i(by)g(calling)f(the)h(method)0 2670 y Ft(xerox.ilu.IluSimpleBinding.publish\(\))p Fs(.)p eop %%Page: 131 132 131 131 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(131)62 183 y(An)9 b(object)g(may)g(be)g(unpublished)e(by)i(calling)f (the)g(method)h Ft(xerox.ilu.IluSimpleBinding.withdraw\(\))p Fs(.)62 271 y(A)k(published)e(ILU)i(object)g(may)g(be)h(obtained)d(by)i (calling)f Ft(xerox.ilu.IluSimpleBinding.lookup\()p Fp(si)o(d)p Ft(,)0 333 y Fp(ih)p Ft(,)f Fp(cl)t Ft(\))p Fs(,)g(where)h Fp(sid)j Fs(is)c(object's)f(server's)h(server)g(ID,)h Fp(ih)j Fs(is)c(the)g(object's)f(instance)h(handle,)g(and)g Fp(cl)k Fs(is)c(its)f(class.)62 421 y(As)d(alternative)g(to)g (IluSimpleBin)o(ding)o(,)e(the)i Ft(resolve_initial_references)g Fs(method)f(from)h(org.omg.CORBA.ORB)0 483 y(could)j(be)i(used.)0 609 y Fo(7.3.7)26 b(Principal)14 b(Identities)h(and)f(Passports)62 713 y Fs(Passport)7 b(are)g(represented)g(in)g(the)g(class)g Ft(IluPassport)p Fs(.)g(Identities)g(are)g(represented)g(by)g(the)g (class)g Ft(IluIdentity)p Fs(.)0 775 y(The)i(class)f Ft(IluIdentityType)g Fs(represents)h(the)f(type)h(of)g(an)g(identity.)g (A)g(passport)f(can)h(carry)h(at)f(most)f(one)h(IluIdentity)0 837 y(of)i(each)h Ft(IluIdentityType)p Fs(.)62 925 y(Client)k (generated)f(passports)g(are)h(mutable)g(and)g(stay)f(alive)g(until)g (garbage)h(collected.)25 b(Clients)15 b(tell)g(ILU)h(about)0 987 y(their)22 b(passports)f(via)h(the)g(current)h(thread)f(which)g (must)g(be)h(a)g(subclass)e(of)h(IluServiceThread.)46 b(The)22 b(methods)0 1049 y Ft(IluServiceThread.setMyStubPassport)7 b Fs(and)j Ft(IluServiceThread.setStubPassport)d Fs(can)k(be)f(used)0 1112 y(to)15 b(set)g(passports.)23 b(For)16 b(security)e(reasons)h (passports)f(of)i(other)f(threads)g(can)g(not)g(be)h(set.)24 b(\(We)16 b(need)f(to)g(rethink)f(the)0 1174 y(possible)8 b(threats\).)j(However)f(it)f(is)h(possible)e(to)i(clear)h(the)e (passport)g(of)h(any)g(thread)g(\(as)h(this)e(is)g(only)g(a)i(denial)e (of)h(service)0 1236 y(attack\).)62 1324 y(ILU)19 b(generated)g (passports)e(are)i(immutable)g(and)f(can)h(be)g(used)f(only)g(while)g (the)h(call)f(for)h(which)f(it)h(has)f(been)0 1386 y(constructed)8 b(is)h(ongoing.)g(If)h(used)f(afterwards,)h(an)f(exception)f(will)h(be) g(raised.)i(For)e(a)h(client)e(to)h(access)h(an)f(Ilu)g(generated)0 1448 y(passports,)h(the)h(method)g Ft(IluPassport.getSkeletonPassport)d Fs(is)j(used.)62 1536 y(These)j(passport)e(features)i(are)g(carried)g (around)f(fully,)h(but)f(since)g(the)h(api)f(to)g(create)i(identities)c (and)j(identity)e(type)0 1598 y(features)f(are)h(still)e(missing,)g (usefullness)f(of)i(passports)f(is)h(grossly)e(limited.)0 1737 y Fu(7.4)30 b(Building)14 b(ILU)i(for)e(Java)h(Applications)62 1841 y Fs(Please)d(read)f(the)g(introductory)e(section)h(on)h(``Java)h (Administrativia)c(Without)i(ILU'')h(first.)0 1967 y Fo(7.4.1)26 b(Java)14 b(Administrivia)h(Without)e(ILU)62 2071 y Fs(This)h(section)f(will)h(be)h(required)f(knowledge)f(when)h (we)h(explain)e(how)i(to)f(do)g(Java)g(administrativia)f(WITH)h(ILU)0 2133 y(later.)62 2221 y(The)19 b(first)f(time)h(you)f(see)h(any)g(of)g (the)g(standard)f(Java)g(tree)i(structures)d(you)i(are)g(bound)f(to)g (be)h(overwhelmed.)0 2283 y(However,)11 b(it)f(is)f(not)h(that)g(bad)g (if)h(you)e(know)h(some)g(of)h(the)f(reasoning.)g(If)h(you)f(have)g(a)h (good)f(understanding)e(of)i(the)g(Java)0 2345 y(system)h(building)e (concepts)h(without)f(ILU,)j(you)e(will)g(tolerate)h(Java)g(with)f(ILU) h(much)h(better.)62 2433 y(The)f(Java)h(compiler)f(takes)g(Java)g (sources)g(and)g(creates)g(binaries,)g(typically)f(called)h Fp(class)g(files)p Fs(.)g(\(Never)h(mind,)f(that)0 2495 y(the)g(word)g(``class'')g(has)g(as)g(a)h(meaning)f(in)f(the)h(source)g (domain)g(as)g(well\).)62 2582 y(The)g(Java)g(compiler)g(conceptually)f (copes)h(with)f(4)h(file)g(hierarchies.)26 2670 y(1.)30 b(Where)12 b(it)e(takes)h(its)f(source)h(input)f(from.)p eop %%Page: 132 133 132 132 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(132)26 183 y(2.)30 b(Where)12 b(it)e(takes)h(its)f(takes)h(binaries)f (of)h(pre-compiled)g(imported)g(sources.)26 257 y(3.)30 b(Where)12 b(it)e(stores)h(compiled)f(binaries.)26 332 y(4.)30 b(Where)12 b(it)e(loads)g(itself)h(from.)62 444 y(Sad)f(to)e(say,)i(Sun's)e(documentation)g(is)g(not)h(conceptually)e (clean.)k(The)e(functionality)d(is)j(different)g(when)f(directories)0 506 y(are)15 b(specified)e(as)h(command)g(line)g(options)d(or)j(with)f (environment)g(variables.)19 b(It)14 b(feels)g(to)g(us)f(as)h(if)g(Sun) g(changes)f(the)0 568 y(behaviour)d(with)g(every)i(Java)f(release.)26 655 y(1.)30 b(Java)12 b(sources)f(can)i(be)f(thought)e(of)i(as)g(tree)g (structured)f(in)g(the)h(package)g(domain.)i(You)d(may)i(or)f(may)g (not)f(assume)90 718 y(that)i(sources)g(are)h(stored)f(in)g(a)h (similar)f(directory)g(nesting)f(as)h(the)h(package)f(nesting.)k(This)c (is)g(not)g(an)g(important)90 780 y(issue)d(because)h(the)f(Java)h (compiler)f(lets)h(users)f(specify)g(source)h(files)f(explicitly.)f (\(Unless)h(you)g(are)i(working)d(with)90 842 y(very)k(explicit)e Ft(make)i Fs(files,)g(I)h(recommend)f(compiling)f(multiple)f(sources)i (with)f(one)g(single)g(compile)h(command)90 905 y(and)e(letting)f(the)g (Java)i(compiler)f(worry)f(about)h(dependencies.\))26 979 y(2.)30 b(Precompiled)16 b(binaries)g(or)g(jar)h(files)e(can)i(be)f (found)g(using)f(the)h Ft(-classpath)f Fs(command)i(line)f(switch)f(or) h(the)90 1041 y Ft(CLASSPATH)h Fs(environment)g(variable.)30 b(The)18 b(semantics)f(are)h(different!)30 b(The)18 b Ft(-classpath)f Fs(command)h(line)90 1103 y(switch)13 b(must)h(be)g(complete)g(\(including)e(system)i(binaries\),)h(but)e(if) h(the)g Ft(CLASSPATH)g Fs(environment)f(variable)h(is)90 1166 y(used,)j(the)g(standard)e(binaries)h(are)h(automatically)d (accessed.)28 b(You)15 b(can)i(work)f(either)g(way,)i(if)e(you)g(know)f (the)90 1228 y(difference.)90 1302 y(Sadly)d(to)f(say)h(with)f (jdk1.2beta3)f(\(but)h(not)g(jdk1.2beta2\))g(using)f(the)i Ft(CLASSPATH)p Fs(:)g(classes)f(defined)g(by)h(Sun)g(are)90 1364 y(found)g(before)h(user)f(defined)g(classes,)h(even)f(if)h(the)f (CLASSPATH)h(names)g(the)f(user)g(defined)g(class)g(first.)j(Using)90 1427 y(the)c Ft(-classpath)f Fs(command)i(line)f(switch)f(however)g (finds)h(the)g(classes)f(in)h(proper)g(order)g(\(but)g(you)f(need)i(to) e(add)90 1489 y(the)h(system)g(classes)f(to)h(the)g(path\).)90 1563 y(In)e(jdk1.2beta4)f(it)h(is)g(no)g(more)g(possible)f(to)h (replace)g Ft(")p Fs(bootstrap)p Ft(")f Fs(classes)h(using)f Ft(CLASSPATH)g Fs(or)i Ft(-classpath)p Fs(.)90 1625 y(However)i(a)h (new)f Ft(-Xbootclasspath)f Fs(command)h(line)g(option)f(allows)g (\(and)h(is)f(required\))h(to)g(treat)g(ilu)g(classes)90 1688 y(like)f Ft(")p Fs(bootstrap)p Ft(")e Fs(classes.)i(This)f (doesn't)g(work)h(right)f(out)h(the)g(box;)f(more)i(later.)90 1762 y(Some)h(experiments)e(suggest)g(that)h(the)g(compiler)g(may)g (also)g(on)g(the)f(fly)h(generate)h(binaries)e(when)h(needed...)j(We)90 1824 y(don't)10 b(rely)h(on)g(this.)26 1898 y(3.)30 b(The)10 b(most)g(important)f(`monkey)h(wrench')h(to)e(know)h(about)f(is)h (where)h(the)f(compiled)f(binaries)h(are)h(stored.)f(The)g Ft(-d)90 1961 y Fs(option)f(allows)h(one)g(to)h(specify)f(a)h (directory.)g(In)g(the)f(absence)h(of)g(the)g Ft(-d)f Fs(option)g(the)g(compiler)h(uses)f(the)h(working)90 2023 y(directory.)j Fp(With)h Fs(the)d Ft(-d)g Fs(option)f(binaries)g (are)i(stored)e(hierarchically)g(in)h(the)g(destination)e(directory,)i (according)90 2085 y(to)j(their)g(package)g(structure.)24 b Fp(Without)18 b Fs(the)d Ft(-d)g Fs(option)f(binaries)g(are)i(stored) f(directly)f(in)h(the)g(curent)h(working)90 2147 y(directory.)i (Recommendation:)d(Always)e(use)g(the)g Ft(-d)g Fs(option.)k(If)d(the)f Ft(-d)h Fs(option)e(is)h(not)g(used)g(some)g(Java)h(tools)90 2210 y(will)d(not)f(find)h(the)h(binaries...)g(Don't)f(get)h(confused)f (that)f Ft(")p Fs(Hello)h(World)p Ft(")g Fs(programs)h(can)f(be)h (compiled)f(without)90 2272 y Ft(-d)g Fs(option;)e(real)j(programs)f (can't.)26 2346 y(4.)30 b(The)11 b(compiler)g(itself)f(loads)g(its)g (own)g(binaries)g(from)i(the)f Ft(CLASSPATH)f Fs(environment)g (variable.)h(Be)g(warned,)h(that)90 2408 y(is)f(the)g Fp(same)j Fs(environment)c(variable)h(used)g(to)f(locate)h (pre-compiled)g(input)f(sources.)62 2521 y(To)h(make)h(matters)f (worse:)37 2608 y Fr(\017)30 b Fs(Compiling)14 b(native)h(methods)f (needs)h(a)h(tool)e(also)h(called)g(a)g Fp(stub)g(generator)p Fs(.)23 b(These)15 b(``stubs'')g(of)g(course)g(have)90 2670 y(nothing)9 b(to)i(do)g(with)f(what)h(ILU)g(calls)f(``stubs''.)p eop %%Page: 133 134 133 133 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(133)37 183 y Fr(\017)30 b Fs(Does)16 b(the)f(javadoc)h(tool)f(read)h (binaries)g(or)g(sources?)25 b(I)16 b(believe)g(it)f(uses)h(the)g (classpath)f(terminology)f(used)i(to)90 246 y(access)11 b(sources.)h(Note)e(the)h(difference)h(to)e(2\).)37 323 y Fr(\017)30 b Fs(The)11 b(compiler)g(generates)g(more)h(binary)e (files)h(than)g(it)f(takes)h(input)f(files!)0 456 y Fn(7.4.1.1)23 b(Packages)62 562 y Fs(What)11 b(package)h(to)f(use)g(?)i(Java)e(ILU)g (is)g(deeply)g(committed)g(to)g(give)g(the)h(choice)f(to)g(the)g (application.)g(\(That)g(is)g(why)0 625 y(the)g(prefix)g(package)g(is)g (optional\).)62 715 y(An)h(application)e(programmer)i(will)f(face)h (the)g(decision)e(whether)h(the)h(implementation)e(for)i(true)f(object) g(should)f(be)0 777 y(in)h(the)f(package)i(designated)d(for)j(stubs,)e (or)h(in)f(a)i(package)f(of)g(its)f(own.)h(Both)g(choices)g(do)f(make)i (sense;)f(ILU)g(will)f(work)0 839 y(either)g(way)g(and)f(doesn't)g (make)i(that)e(decision)g(for)h(you.)h(In)f(general)g(we)g(expect)g (most)f(applications)f(to)i(prefer)h(working)0 901 y(in)f(one)f(single) g(package.)i(However)f(we)g(can)h(imagine)e(scenarios)h(where)g(for)g (security)f(reasons)h(a)g(stub)f(could)g(be)h(trusted)0 964 y(but)g(a)i(server)f(object)g(might)f(not)h(be)g(trusted,)f(or)i (they'd)e(be)h(signed)g(independently)d(by)j(different)g(entities.)62 1054 y(But)i Fp(please)s Fs(:)g(Don't)f(ever)h(write)f(Java)g(code)h (which)f(is)g(not)g(in)g(a)h(package)g(at)f(all.)k(You)c(will)f(end)i (up)f(putting)f(it)h(in)g(a)0 1116 y(package)h(later)g(anyway.)j(It)d (will)f(be)h(much)g(more)h(work)e(to)h(do)f(that)h(later)f(than)h(to,)g (at)g(the)g(very)g(beginning,)e(set)i(up)g(all)0 1178 y(your)e(commands)g(and)g(files)g(to)f(work)h(with)f(a)i(package.)0 1311 y Fn(7.4.1.2)23 b(Summary)62 1418 y Fs(We)15 b(recommend)h(a)g (compiler)e(usage)h(by)f(which)h(the)f(input,)h(independent)f(of)h(its) f(structure,)h(is)g(compiled)f(into)g(a)0 1480 y(hierarchical)d(file)g (structure)f(depending)g(from)i(a)f(directory)g(called)g(`)p Ft(./classes)p Fs('.)62 1570 y(We)16 b(also)g(recommend)g(putting)e (the)i(`)p Ft(./classes)p Fs(')f(directory)h(into)e(the)i Ft(CLASSPATH)f Fs(so)h(that)f(the)h(Java)f(loader)0 1632 y(finds)c(the)h(compiled)g(binaries.)h(The)f(ILU)g(runtime)g(is)g(in)f (the)h(Java)g(package)g Ft(xerox.ilu)p Fs(.)i(The)e(primary)g (interface)h(is)0 1694 y(the)e(class)g Ft(Ilu)p Fs(.)62 1784 y(With)i(jdk1.2beta3)f(don't)h(use)g Ft(CLASSPATH)g Fs(for)h(output)e(but)h(use)h(the)f Ft(-classpath)g Fs(command)h(line)f (argument.)0 1847 y(The)e(problem)g(is)g(the)f(same)i(for)g(both)e(the) h Ft(")p Fs(java)p Ft(")g Fs(and)g(the)g Ft(")p Fs(javac)p Ft(")g Fs(command.)62 1937 y(With)e(jdk1.2beta4)e Ft(")p Fs(bootclasses)p Ft(")h Fs(can)h(not)g(be)g(overwritten)f(with)g(the)h Ft(CLASSPATH)g Fs(environment)f(variable)h(or)g(the)0 1999 y Ft(-classpath)f Fs(command)h(line)e(argument.)k(However,)e(the)f (standard)g Ft(")p Fs(bootclasses)p Ft(")e Fs(DO)i(contain)g (INCOMPATIBLE)0 2061 y(org.omg)21 b(packages.)41 b(You)21 b(will)f(have)h(to)g(use)f(the)h(new)g Ft(-Xbootclasspath)f Fs(option)g(to)g(treat)h(ilu)g(classes)f(as)0 2123 y Ft(")p Fs(bootclasses)p Ft(")p Fs(.)62 2213 y(This)13 b(doesn't)f(exactly)h(work:)i(There)e(is)g(a)h(bug)f(in)g(jdk1.2beta4)e (which)i(makes)h(the)f(loader)g(for)h(native)e(code)i(miss)0 2276 y(Ilu)d(when)g(Ilu)g(is)f(on)h(the)g(bootclass)e(path;)i(\(The)g (bootclass)e(loader)i(ignores)g(LD)p 1294 2276 14 3 v 16 w(LIBRARY)p 1509 2276 V 16 w(PATH\))62 2366 y(Two)g(possible)e(work) i(arounds:)62 2456 y(1\))i(In)g(a)g(FUTURE)f(jdk)g(\(NOT)g (jdk1.2beta4\))g(there)g(might)g(be)h(a)g(sun.boot.library.path)d (property.)15 b(This)d(property)0 2518 y(need)e(to)h(include)e(the)h (ilu)g(native)g(binaries)f(\(in)h(addition)f(to)h(the)g(jre)h (binaries\))f(to)g(make)h(java)f(find)g(them,)h(if)g(Ilu)f(is)g(loaded) 0 2580 y(with)g(the)h(bootclass)f(loader.)62 2670 y(Example:)p eop %%Page: 134 135 134 134 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(134)62 183 y(java)7 b(-Xbootclasspath:$)p Ft({)o Fs(ILUHOME)p Ft(})p Fs(/l)o(ib/)o(il)o(u.jar:$)p Ft({)p Fs(j)o(ava-s-home)p Ft(})p Fs(/jre/l)o(ib/)o(rt.jar)g(-Dsun)o(.boot)o(.library.path=)o($)p Ft({)p Fs(ILUH)o(OME)p Ft(})p Fs(/li)o(b:$)o Ft({)p Fs(java-)0 246 y(s-home)p Ft(})p Fs(/jre/lib/sparc)i(YourApplication)62 334 y(2\))i(If)g(your)g(license)f(allows)f(this:)h(Simply)g(remove)h (Suns)g(version)e(of)i(the)g(org.omg)f(classes)h(from)g(the)f(rt.jar)h (file.)h(Ilu)0 396 y(then)f(can)g(be)g(loaded)g(with)f(the)h(standard)f (class)h(loader;)g(this)f(will)g(completely)g(avoid)h(that)f(bootclass) g(loader)h(bug.)0 524 y Fo(7.4.2)26 b(Stub)13 b(Generation)62 629 y Fs(To)g(generate)h(Java)f(stubs)f(from)i(an)f(ISL)h(file,)g(use)f (the)g(program)g Ft(java-stubber)p Fs(.)k(Since)d(the)f(stubber)f (creates)i(a)0 691 y(surprisingly)c(large)j(number)g(of)g(Java)g (files,)g(these)f(files)h(must)f(be)h(directed)g(to)f(a)h(designated)f (stub)f(directory.)16 b(For)d(the)0 753 y(same)f(reason)f(a)g(file)g (with)f(a)i(list)e(of)h(generated)g(Java)g(files)g(is)g(generated.)62 841 y(The)g(stubber)f(recognizes)h(the)g(following)e(options)g(or)j (switches:)37 930 y Fr(\017)30 b Fn(-dir)25 b Fp(DIRECTORY)12 b(PATH)90 992 y Fs(The)19 b(stubs)e(are)i(generated)g(into)f(the)g (directory)g(specified)g(by)h(the)f Fp(DIRECTORY)h(PATH)k Fs(argument.)34 b(This)90 1054 y(command)13 b(line)f(option)f(could)h (direct)g(the)g(stubs)g(into)f(the)h(working)g(directory,)g(but)g(if)h (omitted)e(the)i(default)f(path)90 1116 y(is)f(`)p Ft(./javastubs)p Fs('.)37 1192 y Fr(\017)30 b Fn(-xrx)90 1254 y Fs(The)11 b(Xerox)g(PARC)h(Java/ILU)f(mapping)f(is)h(used)f(for)i(this)e (interface.)i(\(See)g(also)e Fn(-omg)p Fs(.\))37 1330 y Fr(\017)30 b Fn(-omg)90 1392 y Fs(More)17 b(or)f(less)f(what)h(we)g (imagined)f(OMG's)h(mapping)f(is)h(is)f(used)h(for)g(this)f(interface.) 26 b(The)16 b(main)g(difference)90 1455 y(between)11 b Fn(-xrx)g Fs(and)g Fn(-omg)g Fs(option)e(are)j(the)f(holder)g (classes;)f(we)h(are)h(working)e(on)h(eliminating)e(this)h(difference.) 37 1530 y Fr(\017)30 b Fn(-flat)90 1593 y Fs(Generate)14 b(all)f(stubs)f(into)h(the)g(designated)f(stub)h(directory)g(directly.) k(This)c(is)g(not)g(recommended)h(because)g(files)90 1655 y(can)e(be)g(overwritten.)f(The)g(default)g(behavior)g(is)g(to)g (write)h(stubs)e(in)h(subdirectories)f(according)h(to)g(their)g (interface)90 1717 y(names.)37 1793 y Fr(\017)30 b Fn(-prefix)25 b Fp(PACKAGE)p 464 1793 14 3 v 16 w(PREFIX)90 1855 y Fs(Generates)11 b(stubs)f(into)g(a)i(package)f(prefixed)g(with)f(the)h (named)g Fp(PACKAGE)p 1334 1855 V 16 w(PREFIX)p Fs(.)37 1931 y Fr(\017)30 b Fn(-noprefix)90 1993 y Fs(Generates)11 b(stubs)g(without)e(package)j(prefix.)g(Recommended)g(for)g(serious)f (interfaces;)g(NOT)g(recommended)h(for)90 2056 y(experimenting.)37 2131 y Fr(\017)30 b Fn(-noserv)90 2194 y Fs(Generates)11 b(stubs)f(which)g(save)i(a)f(few)h(bytes)e(but)g(can't)i(be)f(used)f (on)h(the)g(true)g(side.)37 2269 y Fr(\017)30 b Fn(-reportfile)25 b Fp(REPORT-FILENAME)90 2332 y Fs(Additional)10 b(parameter)k(for)e(a)h (file)f(name.)17 b(A)12 b(list)g(of)g(generated)h(Java)f(files)g(is)g (generated.)j(This)d(list)f(can)i(be)g(used)90 2394 y(to)e(make)h (makefiles,)f(etc.)h Fn(-reportfile)f Fs(has)g(no)g(`suffix')g(version) f(\(see)i(below\).)37 2470 y Fr(\017)30 b Fn(-noreport)90 2532 y Fs(The)11 b(list)f(of)h(generated)g(Java)g(files)g(is)g Fp(not)k Fs(generated.)c Fn(-noreport)h Fs(has)f(no)g(`suffix')g (version)f(\(see)h(below\).)37 2608 y Fr(\017)30 b Fn(-exsuffix)90 2670 y Fs(Define)11 b(a)h(suffix)e(used)h(in)f(the)h(name)h(of)f (exceptions.)p eop %%Page: 135 136 135 135 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(135)62 183 y(All)12 b(command)g(line)g(options)e(\(unless)h(if)h (documented)f(otherwise\))g(have)h(a)h(second)e(variant)h(with)f(a)h (suffix)g Ft(")p Fn(1)p Ft(")p Fs(.)i(If)0 246 y(the)g(command)h(line)f (option)f(with)h(suffix)f(is)h(used,)i(an)e(extra)h(argument)f(for)h (the)f(name)h(of)g(an)f(interface)h(is)f(read,)i(and)0 308 y(the)c(option)f(only)h(affects)g(that)g(interface.)k(The)c (un-suffixed)f(command)i(line)f(options)f(affect)i(all)f(interfaces.)j (Suffixed)0 370 y(command)d(line)e(options)f(override)i(un-suffixed)f (command)i(line)e(options.)g(Option)g(processing)f(is)i(from)h(left)f (to)f(right.)62 460 y(The)h(stubber)f(can)i(be)f(run)g(without)e (arguments)i(to)g(generate)g(a)h(usage)f(message.)0 591 y Fn(7.4.2.1)23 b(Problems)14 b(and)i(Solutions)37 697 y Fr(\017)30 b Fn(Stubbing)f(will)e(create)i(a)f(very)g(large)g(number) h(of)f(files)f(with)h(the)h(Java)e(extension.)35 b(You)28 b(don't)90 759 y(want)d(to)g(loose)e(your)i(source)g(files)g(among)f (the)h(generated)h(stubs.)90 822 y Fs(We)21 b(recommend)g(creating)f(a) h(subdirectory)e(called)i(`)p Ft(./javastubs/)p Fs('.)39 b(All)19 b(generated)i(stubs)e(should)g(be)90 884 y(generated)f(into)g (this)f(directory.)33 b(\(This)17 b(is)h(the)g(default;)k(we)c(do)g (not)g(recommend)h(changes.\))33 b Fp(\(As)19 b(a)f(safety)90 946 y(measure\))13 b(if)e(a)h(non-standard)f(directory)g(is)g(used,)h (the)f(stubber)g(does)h(NOT)f(create)h(it)g(automatically.)g(Unlike)e (the)90 1008 y(top)g(level)h(stub)f(directory,)h(sub)g(directories)f (are)i(created)f(automatically)f(by)h(the)g(stubber.)37 1085 y Fr(\017)30 b Fn(Stubs)c(might)e(have)h(conflicting)f(names.)90 1148 y Fs(Generate)12 b(stubs)f(in)h(a)g(hierarchical)g(directory)f (structure,)h(according)g(to)f(their)h(Java)g(package)g(structure.)h (\(This)f(is)90 1210 y(the)f(default;)f(we)i(do)e(not)h(recommend)h (changes.\))37 1287 y Fr(\017)30 b Fn(Stubs)c(might)e(conflict)h(with)g (manually)e(generated)j(Java)e(sources.)116 1426 y Fs(1.)30 b(Use)22 b(good)f(ILU)h(interface)h(names)f(\(Or)g(OMG)h(IDL)f(module)g (names\).)44 b(This)22 b(is)f(recommended)i(for)180 1488 y(``production'')10 b(ILU)h(use.)116 1565 y(2.)30 b(Direct)16 b(the)h(stubber)f(to)g(generate)h(all)f(stubs)f(into)h(a)h(prefix)f (package)h(stubs.)27 b(This)15 b(is)i(recommended)g(for)180 1628 y(perusing)10 b(non-well-known)f(interfaces.)i(Use)g(the)g Fn(-prefix)h Fs(option)d(to)i(name)h(a)f(prefix.)0 1759 y Fn(7.4.2.2)23 b(Java)14 b(Compilation)62 1865 y Fs(Unless)e(you)h (are)h(using)e(make)i(files,)f(we)h(recommend)g(stubbing)d(into)h (empty)h(directories.)k(This)12 b(allows)g(the)h(Java)0 1927 y(compiler)c(to)g(compile)g(all)g(Java)h(files)e(with)h(an)g (asterisk)g(syntax.)h(Always)e(use)h(the)g Fn(-d)h Fs(option)e(with)h (the)g(Java)g(compiler!!!)62 2017 y(In)i(unix,)e(the)h(report)h(file)f (can)g(be)h(used)e(to)h(generate)h(the)f(list)f(of)h(files)g(to)g(be)g (compiled.)h(It)f(can)h(be)f(used)g(directly)f(with)0 2079 y(a)j(back-quote)e(cat)h(report-file)g(back-quote)f(syntax.)0 2211 y Fn(7.4.2.3)23 b(Execution)62 2317 y Fs(At)11 b(execution)f(time) h(the)g(loader)g(needs)g(to)g(find)26 2406 y(1.)30 b Fn(Your)25 b(application)f(and)h(its)f(regular)h(imports)f(\(binaries;) h(resp.)h(classes\).)10 b Fs(This)g(is)h(normal)g(Java)g(usage.)90 2468 y(Use)g(the)g Ft(CLASSPATH)f Fs(environment)h(variable.)26 2545 y(2.)30 b Fn(Java)c(binaries)h(\(classes\))g(from)g(generated)h (stubs.)19 b Fs(There)14 b(is)f(nothing)f(special)h(here.)19 b(Compile)13 b(the)h(stubs)90 2608 y(into)j(whatever)g(directory)g(you) g(want)g(\(e.g.)32 b(`)p Ft(./classes/)p Fs('\))17 b(and)h(put)f(that)g (directory)g(on)g(the)h Ft(CLASSPATH)90 2670 y Fs(environment)10 b(variable.)p eop %%Page: 136 137 136 136 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(136)26 183 y(3.)30 b Fn(Java)c(binaries)g(\(classes\))g(from)g(ILU)h (runtime)g(support.)17 b Fs(The)c(classes)g(binaries)f(from)h(the)g (ILU)g(runtime)90 246 y(support)e(are)j(compiled)e(into)g(the)h(jar)g (file)g(`)p Fp(ILUHOME)t Ft(/lib/ilu.jar)p Fs(';)f(put)g(this)g(file)h (on)f(your)h Ft(CLASSPATH)90 308 y Fs(environment)23 b(variable.)51 b(\(Some)26 b(of)e(these)g(files)g(win)g(the)g(or.omg)h (class)f(conflict)f(with)h(corresponding)90 370 y(implementations)9 b(deliverd)i(by)g(Sun)g(microsystems.)f(Make)i(sure)f(Ilu's)g(files)g (are)g(found)g(first.\))90 456 y(Java)f(JDK)g(1.1.4)g(starts)f(to)h (garbage)g(collect)g(classes.)g(\(This)g(class)f(collection)g(is)h(too) f(agressive,)h(see)h(below\).)f(ILU)90 518 y(carefully)k(stuffs)g(data) h(into)e(static)h(variables)g(to)g(prevent)h(garbage)f(collection.)21 b(These)14 b(two)g(paradigms)h(do)f(not)90 580 y(work)e(nicely)g (together.)k(To)c(prevent)g(memory)i(smashes,)f(the)f Fn(-noclassgc)g Fs(switch)g(is)g(recommended)h(whenever)90 642 y(executing)d Fp(any)j Fs(Java)f(program)f(with)f(jdk)g(1.1.4)i (and)f(jdk)f(1.1.5)h(if)h(it)e(uses)h(ILU.)90 728 y(There)g(is)g(a)h (known)e(bug)h(in)g(JDK)f(about)h(collection)e(of)j(classes.)f (Furthermore)h(there)f(is)g(a)g(Java)h(language)e(change)90 790 y(for)15 b(collection)e(of)i(classes)f(planned.)22 b(This)14 b(language)g(change)h(will)f(prevent)g(collection)f(of)i (classes)f(until)g(their)90 852 y(class)d(loader)g(is)f(collected.)h (ILU)g(will)f(become)i(simpler)f(once)g(the)g(language)f(change)h(is)g (implemented.)90 938 y(If)c(your)g(java)g(system)g(does)g(no)o(t)g(su)o (ppo)o(rt)g(jar)g(fil)o(es,)e(the)i(classes)g(are)g(compiled)g(into)f (`)p Fp(ILUHOME)t Ft(/lib/javacla)o(sses/)p Fs('.)90 1000 y(The)14 b(reason)g(for)g(this)f(non-standard)g(place)h(is)f(the)h (fact)h(that)e(some)h(ILU)g(developers)f(believe)h(the)g(subdirectory) 90 1062 y(`)p Ft(./classes/)p Fs(')d(should)e(be)j(reserved)f(for)g (some)h(other)e(purpose.)26 1148 y(4.)30 b Fn(C)25 b(binaries)g (\(object)h(files\))e(from)i(ILU)f(runtime)g(support)h(and)f(kernel.)14 b Fs(The)d(C)h(binaries)f(\(object)g(files\))90 1210 y(are)j(accessed)g(using)f(the)g Ft(LD_LIBRARY_PATH)p Fs(.)18 b(The)13 b(path)g(must)h(have)f(an)h(entry)f(pointing)f(into)g (the)i(ILU)f(Java)90 1273 y(runtime)e(directory.)0 1430 y Fn(7.4.2.4)23 b(Debugging)62 1544 y Fs(Use)17 b(of)g(the)f(standard)g (ILU)h(debugging)e(environment)h(variable)g Ft(ILU_DEBUG)g Fs(is)h(recommended;)j(please)c(Sec-)0 1606 y(tion)10 b(16.7)h([Debugging)e(ILU)j(Programs],)g(page)f(231.)62 1704 y(Java)18 b(ILU)g(listens)e(to)h(a)h(large)g(number)g(of)g(Java)f (command)i(line)e(switches.)30 b(The)17 b(simplest)g(one)g(is)h(to)f (set)g(the)0 1767 y Fn(-D)e Fs(command)g(line)f(option)f(\(e.g.)23 b Fn(-Dilu.debug=4)p Fs(\).)f(For)15 b(more)h(specialized)d(command)j (line)e(switches)f(look)h(at)g(the)0 1829 y Ft(xerox.ilu.IluDebug.java) h Fs(file.)29 b(Looking)16 b(at)h(the)g(well)f(documented)h(source)g (code)g(is)f(more)i(relieble)f(then)0 1891 y(duplicating)9 b(the)i(rather)g(fast)g(changing)f(flags)h(in)g(the)g(documentation.)62 1989 y(Note)f(that)g(the)g Fn(-D)g Fs(option)f(of)h(the)g(Java)g (interpreter)g(has)g(no)g(relationship)e(whatsoever)i(to)f(the)h Fn(-d)h Fs(option)e(of)h(the)g(Java)0 2051 y(compiler.)62 2149 y(When)e(using)e Ft(dbx)i Fs(or)g Ft(gdb)p Fs(:)h(The)e(standard)g (Java)h(binaries)e(\(classes\))i(are)g(found)f(automaticly)g(\(without) f(specification)0 2212 y(on)15 b(the)f Ft(CLASSPATH)g Fs(environment)g(variable\))h(when)f(not)g(debugging.)21 b(When)15 b(debugging,)f(those)g(classes)g Fp(must)19 b Fs(be)0 2274 y(specified)10 b(on)h(the)g Ft(CLASSPATH)p Fs(.)g(We)h(don't)e(understand)g(this)g(difference.)0 2431 y Fn(7.4.2.5)23 b(Debugging)15 b(native)f(ILU)h(code)62 2545 y Fs(When)23 b(setting)e(break)h(points)f(with)h(dbx)g(or)g(gdb)g (it)g(is)g(necessary)h(to)f(make)h(ilu)f(wait)g(first.)45 b(Ilu)22 b(supports)0 2608 y(the)e(-Dilu.interactivewait=true)e (property)i(to)g(add)h(an)f(extra)h(interactive)f(wait.)39 b(For)21 b(details)f(look)g(at)g(the)h(class)0 2670 y (xerox.ilu.IluInit2.)p eop %%Page: 137 138 137 137 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(137)0 183 y Fo(7.4.3)26 b(Implementing)15 b(an)f(ILU)i(module)f(in)g (Java)62 291 y Fs(A)10 b(Java)g(program)g(which)f(wants)h(to)f (implement)h(a)g(object)f(type)h Fp(T)k Fs(from)c(interface)g Ft(I)g Fs(needs)g(to)f(create)i(a)f(class)g(which)0 353 y(implements)k(the)g(stubber-generated)f(Java)h(interface)h Ft(I)p Fs(.)21 b(Objects)14 b(of)g(this)f(class)h(then)g(are)h (registered)f(with)f(the)h(ILU)0 416 y(runtime)d(either)g(implicitly)e (or)i(explicitly,)e(or)j(with)e(an)h(object)g(table.)62 507 y(Explicit)26 b(registration)g(allows)g(specification)g(of)h (additional)f(parameters,)32 b(like)27 b(the)g(string)g(binding)e(han-) 0 569 y(dle,)34 b(the)28 b(server,)34 b(and)29 b(more.)66 b(Explicit)27 b(registration)g(done)i(by)f(calling)g(the)h(stubber)f (generated)h(method)0 632 y Ft(I.)p Fp(T)t Ft (_stub.registerTrueObject\(\))p Fs(.)50 b(As)24 b(an)h(alternative,)i (if)e(the)f(programmer)i(is)e(willing)f(to)h(specify)0 694 y(the)11 b(class,)g(he)g(can)h(also)e(use)h(the)g(method)g Ft(xerox.ilu.Ilu.registerTrueObject)d Fs(directly.)62 785 y(Objects)k(are)h(implicitly)e(registered)h(with)g(ILU)g(if)h(they) f(are)i(returned)e(as)h(a)g(result)e(value)i(from)g(a)g(method)f(call)h (that)0 847 y(returns)f(an)g(object)g(type)g(or)g(has)g(an)h(object)e (type)h(as)h(an)f(INOUT)g(or)g(OUT)g(parameter)i(or)e(if)g(they)g(are)h (published)e(using)0 910 y(the)g(Simple)g(Binding)f(mechanism.)0 1047 y Fo(7.4.4)26 b(Hints)14 b(about)g(implicit)g(registration)62 1155 y Fs(If)e(objects)e(are)i(not)e(registered)h(but)f(get)h (auto-registered)f(on)h(use)g(only)f(there)h(are)h(two)f(pitfalls)f(to) g(watch)h(out)g(for.)26 1246 y(1.)30 b(The)15 b(ILU)g(type)g(must)f(be) h(unique.)23 b(If)15 b(no)g(type)f(is)h(given)f(ILU)h(will)f(look)g(at) h(the)g(Java)g(type)g(and)g(make)h(its)e(best)90 1308 y(possible)9 b(guess)i(about)f(the)h(ILU)g(type.)26 1387 y(2.)30 b(The)12 b(ILU)h(type)f(must)g(be)h(loaded.)h(Unless)e(the)g (ILU)h(type)f(is)g(loaded)f(the)i(registrar)f(will)f(never)i(find)f (that)g(type.)j(If)90 1449 y(there)d(is)g(any)g(doubt)e(about)i (whether)f(a)i(stub)e(implementing)f(an)j(ILU)e(type)h(is)g(loaded)f (or)h(not,)g(it)f(might)h(be)g(useful)90 1512 y(to)h(actually)f(load)g (the)h(class.)k(The)c(ilu.load)f(property)h(can)g(be)g(used)g(to)g (load)f(a)i(class)e(from)i(external)f(commands.)90 1574 y(The)e(stubber)f(also)h(generates)g(a)h(special)e(class)h(whose)f (sole)h(purpose)f(is)h(to)g(help)g(load)f(whatever)h(is)g(necessary)g (for)90 1636 y(the)g(registrar)g(to)f(not)h(miss)g(a)g(class.)0 1773 y Fn(7.4.4.1)23 b(Implementation)14 b(Inheritance)0 1927 y(7.4.4.2)23 b(Exporting)15 b(Objects)0 2081 y Fo(7.4.5)26 b(Using)14 b(an)h(ILU)h(module)f(in)g(Java)62 2188 y Fs(A)c(client)g(program)g(may)h(obtain)e(a)h(reference)i(to)d(an)i(ILU) f(object)f(in)h(one)g(of)g(the)g(following)e(ways:)26 2280 y(1.)30 b Fn(True)c(instance)f(creation)p Fs(.)90 2342 y(The)11 b(application)e(may)j(create)g(an)f(true)g(instance)g(of) g(a)g(class.)26 2421 y(2.)30 b Ft(objectFromSBH\(\))90 2483 y Fs(Knowing)c(the)g(string)g(binding)g(handle)g Fp(sbh)31 b Fs(and)c(class)g(\(or)g(superclass\))g Fp(cl)k Fs(of)c(an)g(object,)k(call)c Ft(xe-)90 2545 y (rox.ilu.Ilu.objectFromSBH\()p Fp(sbh)p Ft(,)8 b Fp(cl)t Ft(\))19 b Fs(which)f(returns)h(an)g(instance)f(of)h(that)f(class.)34 b(For)20 b(example,)90 2608 y(to)9 b(obtain)f(an)i(instance)e(of)i(ISL) g(type)f Ft(square)g Fs(from)h Ft(INTERFACE)g(shapes)p Fs(,)g(which)f(has)g(a)h(string)e(binding)g(handle)90 2670 y Fp(sbh)p Fs(,)j(one)g(would)f(call)h Ft (xerox.ilu.Ilu.objectFromSBH\()p Fp(sbh)o Ft(,)e(shapes.square\))p Fs(.)p eop %%Page: 138 139 138 138 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(138)26 183 y(3.)30 b Fn(ILU)25 b(Simple)f(Binding)p Fs(.)90 246 y(Knowing)6 b(the)i(object)f(ID)h Fp(\(sid,)h(ih\))h Fs(and)e(class)f Fp(cl)12 b Fs(of)c(an)g(object)g(that)f(has)h(been)g (published)d(using)i(the)h(simple)f(binding)90 308 y(service,)18 b(call)e Ft(xerox.ilu.IluSimpleBinding.lookup\()p Fp(si)o(d)p Ft(,)8 b Fp(ih)p Ft(,)j Fp(cl)t Ft(\))17 b Fs(which)e(returns)h(an)h (instance)e(of)90 370 y(that)c(class)f(\(or)i(raises)f(an)g(exception)f (if)h(the)g(lookup)f(fails\).)26 454 y(4.)30 b Fn(Return)c(result)f(or) g(parameter)p Fs(.)90 516 y(An)12 b(instance)f(may)h(be)h(received)f (as)g(a)g(result)f(value)h(from)h(a)f(method)g(call)f(that)h(returns)f (an)h(object)g(type)f(or)h(has)g(an)90 578 y(object)e(type)h(as)g(an)h Ft(INOUT)e Fs(or)i Ft(OUT)f Fs(parameter.)0 751 y Fu(7.5)30 b(Notes)15 b(for)f(ILU)h(for)g(Java)g(in)g(applets)62 864 y Fs(Use)e(of)g(ILU)g(in)g(applets)f(is)h(not)f(impossible,)g(but)h (it)f(is)h(not)f(fully)h(supported)e(either.)17 b(Currently,)d(using)d (of)j(ILU)f(in)0 926 y(applets)d(is)h(only)f(recommended)i(for)f (intranet)f(usage)h(but)g(not)f(for)i(generic)f(internet)f (applications.)62 1022 y(There)i(are)f(really)g(three)h(problems:)62 1118 y(ILU)j(for)h(Java)f(is)g(not)f(BINARY)i(CORBA)g(compatible.)23 b(You)15 b(can)g(not)g(receive)h(arbitrary)f(non)f(ILU)h(stubs)f(and)0 1181 y(execute)f(those)f(onb)g(top)g(of)h(Ilu.)j(You)c(have)h(to)f(set) g(up)h(your)f(classpath)g(so)g(that)g(ILU)h(applications)d(load)j(ILU)f (and)h(not)0 1243 y(another)c(orb.)i(This)e(is)h(insofar)f (problematic:)h(If)g(you)f(want)h(your)f(browser)h(to)f(host)g(refular) i(corba)f(applets)f(and)g(ilu)g(using)0 1305 y(applets)g(there)i(is)f (a)h(class)e(conflict)h(problem.)h(This)e(conflict)h(problem)g(can)h (be)f(fixed)g(by)g(using)f(\(different\))i(java-plugin,)0 1368 y(each)h(set)e(up)h(with)f(the)h(class)g(path)g(appropriately.)62 1464 y(ILU)k(has)g(native)f(methods.)21 b(That)15 b(means)g(Ilu)f(must) h(be)g(loaded)f(somewhere/somehow)g(where)h(native)f(methods)0 1526 y(are)23 b(supported.)44 b(ILU)22 b(has)g(been)g(loaded)g(into)f (Hotjava,)k(java-plugin)c(\(Activator\).)44 b(This)21 b(can)i(be)f(solved)g(by)0 1588 y(loading)c(ILU)i(on)f(the)h (classpath,)h(or)e(by)h(using)e(signed)g(signed)h(applets.)36 b(ILU)20 b(also)f(has)g(been)h(loaded)f(into)f(the)0 1650 y(regular)i(Netscape)f(4.05)h(VM,)g(but)f(that)g(needs)h(special)f (setup)f(in)i(the)f(Ilu)h(build)e(process.)37 b(\(See)20 b(Imakefile)g(and)0 1713 y(source/runtime/java/IluMozill)o (aExtra.java\).)62 1809 y(ILU)9 b(does)f(not)g(support)f(class)h (unloading.)h(ILU)f(itself)g(is)g(quite)g(security)g(aware,)i(but)e (there)g(are)i(still)d(some)h(problems.)0 1871 y(In)14 b(particular,)g(there)g(is)f(a)h(security)f(problem)g(if)h(an)g(applet) f(loads)f(malicious)h(stubs)f(and)i(later)g(another)f(applet)g(things)0 1933 y(these)j(are)h(correct)f(stubs.)25 b(To)16 b(prevent)g(class)f (unloading,)h(stubs)f(should)f(be)j(in)e(the)h(same)h(classloader)e(as) h(the)g(ILU)0 1996 y(runtime:)10 b(Either)h(both)f(signed)g(and)h (dynamic,)g(or)h(both)e(on)h(the)f(classpath.)62 2092 y(Very)g(little)f(testing)f(of)i(running)f(ILU)h(in)g(a)g(browser)g(or) g(a)g(java-pluggin)e(has)i(been)g(done.)h(Set)f(up)g(your)f (environment)0 2154 y(that)i(stub)f(classes)g(will)g(never)i(be)f (unloaded.)0 2327 y Fu(7.6)30 b(Notes)15 b(for)f(Java)h(on)g (particular)e(architectures)0 2495 y Fo(7.6.1)26 b(Notes)15 b(for)f(Java)h(on)g(Windows)62 2608 y Fs(Please)20 b(see)f(the)g Ft(")p Fs(Java)p Ft(")g Fs(subsection)f(of)h Ft(")p Fs(Building)f(ILU)p Ft(")h Fs(in)g(the)g(chapter)g(Section)g(10.9)g([Using)f(ILU)h(with)0 2670 y(Microsoft)11 b(Windows],)f(page)h(178.)p eop %%Page: 139 140 139 139 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(139)0 183 y Fo(7.6.2)26 b(Notes)15 b(for)f(Java)h(on)g(Linux)62 290 y Fs(Users)10 b(of)g(Linux)f(Redhat)h(5.1)h(reported)e(problems)h (when)g(Ilu)g(was)g(configured)f(using)g(the)h Ft(")p Fs(poll)p Ft(")f Fs(system)g(call.)i(The)0 352 y(configuration)e (option)h(--with-java-nopoll)e(can)k(be)f(used)g(to)g(force)g(use)g(of) g Ft(")p Fs(select)p Ft(")g Fs(instead)f Ft(")p Fs(poll)p Ft(")p Fs(.)0 485 y Fo(7.6.3)26 b(Native)14 b(threads)h(versus)g(green) h(threads)62 591 y Fs(Only)9 b(unix)f(supports)g(green)h(threads.)i (Unless)d(disabled,)h(ilu)g(will)f(build)g(both)h(version)f(and)h (dynamicly)g(tries)g(to)g(load)0 653 y(whichever)j(version)g(works.)17 b(Sadly)12 b(we)h(do)g(not)f(know)g(how)h(to)f(determine)h(whether)g (java)g(is)f(using)g(green)h(threads)f(or)0 716 y(native)f(threads.)g (Sadly)g(the)g(native)g(code)g(of)h(ilu)e(is)h(different)g(in)g(those)g (two)g(cases.)h(Ilu)f(simply)f(tries)h(one)g(version,)g(and,)0 778 y(if)h(it)f(throws)g(an)h(exception)f(Ilu)g(tries)h(the)g(other)f (version.)i(\(Never)f(mind)g(that)f(the)h(java)f(vm)i(doesn't)d(throw)i (exceptions)0 840 y(bu)f(crashes)g(if)g(tried)g(in)f(the)h(wrong)g (order\))0 973 y Fo(7.6.4)26 b(Java)14 b(releases)62 1079 y Fs(The)e(ilu)g(build)f(builds)g(one)h(version)f(of)h(binary)g (ilu.)i(However,)f(the)f(filenames)g(for)h(the)f(binaries)f(are)i (distinct.)g(It)g(is)0 1142 y(possible)e(to)h(do)g(one)h(ilu)e(build)g (for)i(jdk1.1)f(and)g(one)h(ilu)f(build)f(for)h(jdk1.12beta...)k(each)d (in)f(the)g(same)h(directory.)i(This)0 1204 y(works)c(because)h(the)g (by)f(accident)h(or)f(design,)h(the)f(java)h(classes)f(for)h(jdk)f(1.1) h(and)g(jdk1.12beta)e(are)j(compatible.)g(Ilu)e(at)0 1266 y(runtime)g(decides)f(which)h(version)f(of)h(the)g(native)g (libraries)f(to)h(load.)0 1414 y Fu(7.7)30 b(ILU)15 b(for)g(Java)f (Reference)62 1521 y Fs(The)e(interface)f(is)g(rather)h(large.)g(This)f (section)f(will)h(cover)g(the)h(most)f(important)f(classes)h(but)g (reading)g(the)g(standard)0 1583 y(javadoc)g(documentation)e(or)i (reading)g(the)g(source)g(will)f(be)h(more)h(complete.)0 1716 y Fo(7.7.1)26 b(javadoc)14 b(documentation)62 1822 y Fs(javadoc)i(is)f(about)g(the)g(worst)g(documentation)f(package)i(I)g (have)f(encountered)g(sofar.)26 b(Nevertheless,)16 b(ILU)f(java)0 1884 y(code)c(contains)e(javadoc)h(tags.)h(We)g(think)e(however)h(that) g(reading)g(the)h(source)f(code)h(might)f(be)g(easier)h(then)f(reading) g(the)0 1947 y(javadoc)h(output.)62 2037 y(javadoc)g(documentation:)e (http://java.sun.com/produ)o(cts/)o(jdk/)o(javado)o(c/ind)o(ex.html)0 2169 y Fn(7.7.1.1)23 b(Bugs)62 2276 y Fs(The)11 b(javadoc)g(index)f(is) h(empty.)g(For)h(some)f(reason)g(javasoft)g(prefers)g(to)g(document)f (this)g(bug)h(instead)f(of)h(fixing)f(it.)62 2366 y(javadoc)k (documents)f(features)h(which)g(are)g(not)g(to)f(be)h(used)g(by)g (applications.)k(This)13 b(is)g(an)h(ILU)g(problem)g(as)g(ILU)0 2428 y(declares)d(many)h(features)f(public)f(simply)g(to)h(make)h(them) f(available)f(to)h(stubs.)62 2518 y(It)g(would)f(be)i(nice)f(if)g (javadoc)g(documentation)e(would)h(have)h(links)f(to)h(the)g(source)g (code.)62 2608 y(javadoc)f(has)g(problems)f(handling)g(files)g(in)h(a)g (flat)g(directory,)g(but)f(the)h(java)g(runtime)g(now)f(has)h(been)g (changed)g(to)f(use)0 2670 y(a)j(hierarchical)e(directory.)p eop %%Page: 140 141 140 140 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(140)0 183 y Fn(7.7.1.2)23 b(Build)15 b(of)g(the)h(javadoc)e (documentation)62 289 y Fs(With)f(jdk-1.1)h(you)f(need)h(to)g(manually) f(create)i(an)f(images)g(subdirectory)e(and)i(copy)g(the)f(images.)21 b(\(Ask)13 b(javasoft)0 351 y(why\).)f(Since)g(I)g(don't)f(know)g(how)g (to)g(make)h(the)f(ilu)g(build)f(find)h(the)h(images,)g(the)f(build)f (does)h(not)g(do)g(the)h(javadoc)f(step)0 413 y(automatically.)62 502 y(Another)h(reason)g(to)g(not)g(automatically)f(build)g(the)h (javadoc)g(documentation)e(is)i(that)g(different)g(users)g(might)g (want)0 564 y(to)f(or)g(not)g(include)g(-package)g(and)g(-private)g (features.)i(The)e(third)f(reason)i(for)f(manual)h(build)e(is)h(that)f (some)i(users)f(might)0 627 y(want)g(to)f(include)h(standard)f (packages)h(into)f(the)h(same)h(documentation)d(build.)120 715 y Ft(#)25 b(create)f(a)h(javadocs)f(directory)120 765 y(#)h(we)g(recommend)f(using)g(ILUHOME/doc/javadocs)120 815 y(#)h(\(When)f(making)h(links,)f(they)g(might)h(point)f(to)h(that)g (directory\))120 865 y(mkdir)f(javadocs)120 965 y(#)h(Go)g(to)f(the)h (java)f(sources)120 1014 y(cd)h(ILUSRC/runtime/java/jsrc)120 1114 y(#)g(build)f(the)h(javadoc)f(documentation)g(into)g(the)h (javadocs)f(directory)120 1164 y(javadoc)g(-d)h(javadocs)f (xerox.basics)g(xerox.ilu)g(xerox.ilu.tools)f(org.omg.CORBA)120 1214 y(org.omg.CORBA.portable)g(org.omg.PortableServer)120 1313 y(#)i(copy)f(the)h(javadoc)f(images)h(into)f(the)h(proper)f(place) h(\(not)f(necessary)g(with)h(jdk-)120 1363 y(1.2beta3\))120 1413 y(#)g(\(Substitute)f(the)g(source)h(as)f(you)h(most)g(likely)f (have)g(the)h(images)f(somewhere)g(else...\))120 1463 y(cd)h(javadocs;)f(mkdir)g(images;)g(cd)h(images;)f(cp)h (/project/java/jdk-1.1/docs/api/images/*)120 1512 y(.)0 1642 y Fo(7.7.2)h(Description)14 b(of)h(Java)f(classes)0 1788 y Fn(7.7.2.1)23 b(CORBA)15 b(Exceptions)26 1894 y Fs(1.)30 b(org.omg.CORBA.UserException)26 1970 y(2.)g (org.omg.CORBA.SystemException)26 2059 y(1.)g(org.omg.CORBA.BAD)p 520 2059 14 3 v 17 w(CONTEXT)26 2135 y(2.)g(org.omg.CORBA.BAD)p 520 2135 V 17 w(INV)p 618 2135 V 17 w(ORDER)26 2212 y(3.)g (org.omg.CORBA.BAD)p 520 2212 V 17 w(OPERATION)26 2288 y(4.)g(org.omg.CORBA.BAD)p 520 2288 V 17 w(PARAM)26 2364 y(5.)g(org.omg.CORBA.BAD)p 520 2364 V 17 w(TYPECODE)26 2441 y(6.)g(org.omg.CORBA.COMM)p 567 2441 V 18 w(FAILURE)26 2517 y(7.)g(org.omg.CORBA.DATA)p 551 2517 V 17 w(CONVERSION)26 2594 y(8.)g(org.omg.CORBA.FREE)p 535 2594 V 18 w(MEM)26 2670 y(9.)g(org.omg.CORBA.IMP)p 504 2670 V 18 w(LIMIT)p eop %%Page: 141 142 141 141 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(141)3 183 y(10.)30 b(org.omg.CORBA.INITIALIZE)3 255 y(11.)g(org.omg.CORBA.INTERNAL)3 328 y(12.)g(org.omg.CORBA.INTF)p 525 328 14 3 v 17 w(REPOS)3 400 y(13.)g(org.omg.CORBA.INV)p 505 400 V 17 w(FLAG)3 472 y(14.)g(org.omg.CORBA.INV)p 505 472 V 17 w(IDENT)3 544 y(15.)g(org.omg.CORBA.INV)p 505 544 V 17 w(OBJREF)3 617 y(16.)g(org.omg.CORBA.MARSHAL)3 689 y(17.)g(org.omg.CORBA.NO)p 490 689 V 17 w(IMPLEMENT)3 761 y(18.)g(org.omg.CORBA.NO)p 490 761 V 17 w(MEMORY)3 833 y(19.)g(org.omg.CORBA.NO)p 490 833 V 17 w(PERMISSION)3 905 y(20.)g(org.omg.CORBA.NO)p 490 905 V 17 w(RESOURCES)3 978 y(21.)g(org.omg.CORBA.NO)p 490 978 V 17 w(RESPONSE)3 1050 y(22.)g(org.omg.CORBA.OBJ)p 505 1050 V 17 w(ADAPTER)3 1122 y(23.)g(org.omg.CORBA.OBJECT)p 591 1122 V 17 w(NOT)p 702 1122 V 16 w(EXIST)3 1194 y(24.)g(org.omg.CORBA.PERSIST)p 600 1194 V 18 w(STORE)3 1266 y(25.)g(org.omg.CORBA.TRANSACTIONREQUIRED) 3 1339 y(26.)g(org.omg.CORBA.TRANSACTIONROLLEDBACK)3 1411 y(27.)g(org.omg.CORBA.TRANSIENT)3 1483 y(28.)g (org.omg.CORBA.UNKNOWN)0 1603 y Fn(7.7.2.2)23 b(Holder)15 b(classes)62 1706 y Fs(A)c(means)h(to)f(pass)f(a)i(CORBA)g(things)d(as) j(a)f(reference)h(parameter.)h(Holder)e(classes)f(are)i(mutable.)26 1794 y(1.)30 b(org.omg.CORBA.AnyHolder)26 1866 y(2.)g (org.omg.CORBA.BooleanHolder)26 1938 y(3.)g(org.omg.CORBA.ByteHolder)26 2010 y(4.)g(org.omg.CORBA.CharHolder)26 2082 y(5.)g (org.omg.CORBA.DoubleHolder)26 2155 y(6.)g(org.omg.CORBA.FloatHolder)26 2227 y(7.)g(org.omg.CORBA.IntHolder)26 2299 y(8.)g (org.omg.CORBA.LongHolder)26 2371 y(9.)g(org.omg.CORBA.ObjectHolder)3 2443 y(10.)g(org.omg.CORBA.PrincipalHolder)3 2516 y(11.)g (org.omg.CORBA.ShortHolder)3 2588 y(12.)g(org.omg.CORBA.StringHolder)3 2660 y(13.)g(org.omg.CORBA.TypeCodeHolder)p eop %%Page: 142 143 142 142 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(142)0 183 y Fn(7.7.2.3)23 b(CORBA)15 b(classes)62 288 y Fs(Some)d(of)f(these)g(corba)g(classes)f(do)h(not)g(completely)f (correspond)g(to)h(the)f(standard.)h(The)g(intend)f(is)g(that)h(a)g (the)g(corba)0 350 y(classes)g(look)f(and)h(work)g(like)f(the)h (standard)f(classes)h(as)g(seen)g(by)g(client)f(applications)g(SOURCE)h (code.)26 438 y(1.)30 b(org.omg.CORBA.Any)12 b(A)f(skeleton)f(class)g (to)h(achieve)g(corba)h(source)f(compatibility)26 514 y(2.)30 b(org.omg.CORBA.BOA)15 b(I)f(apologize,)g(but)f(I)h(have)g(no)f (clue)h(what)f(a)h(BOA)g(is,)h(or)e(what)h(it)f(is)g(for,)i(or,)g(whom) f(it)90 576 y(constricts.)c(I'm)i(implementing)e(this)g(to)h(make)g (Ilu)g(look)f(more)i(compatible)f(to)f(CORBA...)26 652 y(3.)30 b(org.omg.CORBA.CompletionStatus)26 727 y(4.)g (org.omg.CORBA.CORBA)p 580 727 14 3 v 18 w(ObjectHelper)10 b(The)h(helper)g(class)g(for)g(CORBA::Object)26 803 y(5.)30 b(org.omg.CORBA.CORBA)p 580 803 V 18 w(ObjectStub)10 b(For)h(the)g(implementation)f(of)h(CORBA::Object)26 878 y(6.)30 b(org.omg.CORBA.portable.ObjectImpl)16 b(CORBA)g(\(but)g (not)f(ilu\))h(requires)f(all)h(true)g(classes)f(to)h(inherit)f(from)90 941 y(this)10 b(class.)26 1016 y(7.)30 b(org.omg.CORBA.Object)12 b(CORBA::Object.)e(\(Not)h(all)g(ilu)f(objects)g(are)i(corba)g (objects!\))26 1092 y(8.)30 b(org.omg.CORBA.ORB)13 b(Makes)e(Ilu)g (look)f(like)h(it)g(were)g(a)h(CORBA)g(ORB)90 1168 y(The)f(way)g Ft(resolve_initial_references)e Fs(works:)90 1243 y(The)14 b(argument)g(is)g(used)g(as)g(a)h(key)f(to)f(access)i(the)f(ORB)h (properties.)k(\(The)c(ORB)g(properties)e(can)h(be)h(set)f(either)90 1305 y(with)f(init,)h(or)h(if)f(not)f(set)h(default)g(to)f(the)h(java)g (system)g(properties)f(and,)i(in)f(case)g(of)h(applications)d(it)h (might)h(read)90 1368 y(environment)e(variables\).)18 b(The)13 b(property)f(is)h(accessed;)h(its)f(value)g(is)g(supposed)e (to)i(be)h(an)f(ilu)f(SBH.)j(The)e(object)90 1430 y(for)e(this)f(SBH)i (is)f(accessed)g(and)g(returned)g(by)g(resolve)p 975 1430 V 15 w(initial)p 1098 1430 V 15 w(references.)90 1506 y(There)h(is)g(an)h(extra)f(twist:)g(If)h(the)f(SBH)g(string)g (starts)f(with)g Ft(")p Fs(file:)p Ft(")h Fs(that)f(adds)h(an)h(extra)f (level)g(of)g(indirection:)f(Ilu)90 1568 y(will)f(access)i(the)e(file)h (and)g(use)g(the)g(contents)f(of)h(the)g(first)g(line)f(as)i(the)f(SBH) g(instead.)90 1643 y(A)g(typical)f(start)h(up)g(using)f(this)g(feature) h(coold)g(look)f(like)g(this:)210 1719 y Ft(org.omg.CORBA.ORB)23 b(orb)i(=)g(...)210 1769 y(org.omg.CORBA.Object)e(objRef)h(=)335 1819 y(orb.resolve_initial_references\("N)o(ameService")o(\);)210 1868 y(org.omg.CosNaming.NamingContext)e(ncRef)i(=)h (NamingContextHelper.narrow\(objRef\);)90 1957 y Fs(When)11 b(starting)f(the)h(application,)e(the)i(property)g(can)g(be)g(set)g(on) g(the)g(command)g(line,)g(for)h(example:)90 2033 y(java)7 b(-Dilu.load=org.omg.CosNaming.)p 782 2033 V 14 w(allJavaStubs:MyAppli) o(cation)o(.)p 1327 2033 V 14 w(allJavaStubs)g (-DNameService=IOR:00000000)o(0000)o(0028)o(494)o(44C3A6F6D)o(672E)o (6F726)o(72F436)o(F734E6)o(16D6)o(96E6)o(72F4E6)o(16D6)o(96E)o(6743)o (6F6E74)o(6578)o(743)o(A312)o(E300)o(0000)o(000)o(0149)o(4C5500)o(0000) o(009)o(A000)o(1000)o(0000)o(000)o(9269)o(6C753A)o(3133)o(2E32)o(2E3)o (1313)o(62E3)o(3322)o(E33)o(6461)o(342E)o(3334)o(366)o(3396)o(3373)o (02E)o(312F31)o(332E)o(322E)o(313)o(1362)o(E333)o(22E3)o(364)o(6134)o (2E33)o(3436)o(633)o(9633)o(7302)o(E30)o(3B4944)o(4C2533)o(416F6D)o (672E)o(6F7267)o(253)o(2464)o(36F734)o(E61)o(6D69)o(6E67)o(2532)o(464E) o(616)o(D696)o(E674)o(36F6E7)o(4657)o(874)o(2533)o(4131)o(2E30)o(3B737) o(56E7)o(2706)o(3407)o(375)o(6E72)o(7063)o(726)o(D3D74)o(637)o(05F313)o (32E3)o(22E3)o(131)o(362E)o(3332)o(5F3334)o(393)o(7370)o(0)90 2095 y(startMyApplication)90 2171 y(or)k(maybe)90 2246 y(java)c(-Dilu.load=org.omg.CosNaming.)p 782 2246 V 14 w(allJavaStubs:MyAppli)o(cation)o(.)p 1327 2246 V 14 w(allJavaStubs)g(-DNameService=file:/tild)o(e/you)o(rName/fileName)90 2309 y(startMyApplication)90 2384 y(The)k(above)g(example)g(loads)f (the)h(CosNaming)f(stubs)f(from)j(the)f(command)g(line.)g(The)g(reason) g(for)g(this)f(is)g(to)h(make)90 2447 y(sure)h(that)f(the)h(stubs)e (are)j(actually)e(loaded)g(before)h(orb.resolve)p 1123 2447 V 16 w(initial)p 1247 2447 V 14 w(references)h(is)f(called.)h(Ilu) f(requires)f(types)90 2509 y(to)g(be)g(registered)g(before)g(an)g (object)g(of)g(that)g(type)f(is)h(read,)h(otherwise)e(the)h(type)f (information)g(will)h(be)g(lost.)26 2584 y(9.)30 b (org.omg.CORBA.TypeCode)3 2660 y(10.)g(org.omg.CORBA.TCKind)p eop %%Page: 143 144 143 143 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(143)0 183 y Fn(7.7.2.4)23 b(Basic)14 b(environment)i(classes)62 287 y Fs(These)11 b(classes)g(are)h(public,)e(but)g(not)h(necessarily)f (considered)g(part)i(of)f(ilu.)26 374 y(1.)30 b(xerox.basics.Consumer0) 12 b(A)i(simple)f(queue)g(with)f(a)i(thread)f(which)g(consumes)f(all)h (elements)h(provided.)j(Class)90 436 y(is)11 b(public;)e(used)i(by)g (ilu)f(but)h(not)f(part)h(of)g(the)g(ilu)g(public)f(api.)26 510 y(2.)30 b(xerox.basics.Environment)10 b(A)i(simple)f(means)h(to)g (access)g(or)g(specify)f(the)h(environment.)h(Class)e(is)h(public;)f (used)90 572 y(by)g(ilu)f(but)h(not)f(part)h(of)g(the)g(ilu)g(public)f (api.)90 646 y(The)g(command)g(line)f(flag)h(interface)g(to)f(load)g (additional)f(classes)h(looks)g(usefull)f(to)i(ilu,)f(but)g(MUST)h(NOT) g(be)g(used)90 708 y(from)16 b(ilu)f(client)g(applications)e(directly.) 24 b(Ilu)15 b(duplicates)f(this)h(functionality)e(with)h(an)i(ilu.load) e(property.)24 b(The)90 771 y(difference)12 b(is)e(the)h (initialization)d(order!)k(The)f(ilu.load)f(property)g(avoids)g(bad)h (initialization)d(order)k(loops.)26 844 y(3.)30 b(xerox.basics.IntTab) 10 b(An)h(IntTab)f(is)h(a)h(hash)e(table)h(which)f(associates)h(int)f (keys)h(with)f(objects.)26 918 y(4.)30 b(xerox.basics.IntTabEnumerator) 9 b(For)j(enumerating)f(IntTab)f(values)26 991 y(5.)30 b(xerox.basics.Queue)10 b(A)i(simple)e(queue)h(class.)26 1065 y(6.)30 b(xerox.basics.NowhereStream)11 b(A)g(trivial)f (OutputStream)h(class)26 1139 y(7.)30 b(xerox.basics.NowhereWriter)10 b(A)h(trivial)f(Writer)h(class)26 1212 y(8.)30 b(xerox.basics.VMExtras) 90 1286 y(Remembers)13 b(objects;)c(better)i(then)g(using)f(static)g (variables)g(as)i(VMExtras)e(also)h(deals)g(with)f(collecting)g (classes.)90 1360 y(High)g(priority)g(thread)h(introducing)e(proper)i (timeslicing)e(into)h(the)h(Java)g(vm.)0 1482 y Fn(7.7.2.5)23 b(ILU)15 b(exceptions)26 1586 y Fs(1.)30 b (xerox.ilu.IluSystemException)26 1660 y(2.)g (xerox.ilu.IluUserException)26 1747 y(1.)g(xerox.ilu.IluRuntimeError)12 b(IluRuntimeError)g(is)h(a)h(handy)f(superclass)f(of)i(some)f (exceptions.)k(IluRuntimeEr-)90 1809 y(ror's)g(do)g(not)f(need)h(to)g (be)g(declared)h(in)e(the)h(throws)f(clause)h(\(and)g(is)g(actually)f (a)i(RuntimeException,)f(not)f(an)90 1871 y(error\).)26 1945 y(2.)30 b(xerox.ilu.IluRuntimeException)8 b(IluRuntimeException)h (is)i(super)f(class)h(of)g(all)g(IluRuntimeExceptions.)e(Run-)90 2007 y(timeException's)g(don't)i(need)g(catch)g(phrases.)26 2081 y(3.)90 2154 y(xerox.ilu.IluBadParameterException)26 2228 y(4.)30 b(xerox.ilu.IluCharacterRangeException)26 2302 y(5.)g(xerox.ilu.IluCustomMappingExcepti)o(on)26 2375 y(6.)g(xerox.ilu.IluEnumerationRangeExceptio)o(n)26 2449 y(7.)g(xerox.ilu.IluInconsistent)o(CallExcept)o(ion)26 2523 y(8.)g(xerox.ilu.IluInternalException)26 2596 y(9.)g (xerox.ilu.IluNoObjectExcepti)o(on)3 2670 y(10.)g (xerox.ilu.IluUnexpectedExceptio)o(n)p eop %%Page: 144 145 144 144 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(144)3 183 y(11.)30 b(xerox.ilu.IluUnionDiscri)o(minantE)o(xceptio)o (n)0 307 y Fn(7.7.2.6)23 b(ILU)15 b(public)g(classes)26 411 y Fs(1.)30 b(xerox.ilu.types.float128)8 b(A)k(class)e(for)i(128)e (bit)h(floats.)26 485 y(2.)30 b(xerox.ilu.Ilu)10 b(The)h(top)g(level)f (public)g(interface)i(to)e(Ilu)26 560 y(3.)30 b(xerox.ilu.IluAny)9 b(Ilu's)i(concrete)g(class)g(to)g(holdCORBA::ANY)26 634 y(4.)30 b(xerox.ilu.IluBatcher)14 b(An)g(IluBatcher)g(represents)g(a)h (batching)e(scope.)21 b(Calls)15 b(made)g(within)d(a)j(batching)e (scope)90 696 y(are)f(batched)f(by)f(the)h(ILU)g(runtime.)26 771 y(5.)30 b(xerox.ilu.IluClassRep)10 b(This)g(represents)h(an)g(ilu)f (class)26 845 y(6.)30 b(xerox.ilu.IluCustomMapping)11 b(An)i(ilu)g(type)g(which)f(supports)g(custom)h(mapping)f(needs)i(to)e (register)h(an)h(object)90 907 y(of)d(IluCustomMapping-type)e(to)i (perform)h(the)e(actual)h(transformation.)26 982 y(7.)30 b(xerox.ilu.IluDataSupport)9 b(An)i(object)f(implementation)g(can)h (help)g(ILU)g(by)g(remembering)h(internal)e(data.)26 1056 y(8.)30 b(xerox.ilu.IluDebug)9 b(The)h(api)g(is)h(private,)f(but)g (the)g(the)h(command)g(line)f(flag)g(interface)h(is)f(of)h(interest)e (to)h(ilu)g(users.)26 1130 y(9.)30 b(xerox.ilu.IluEnvironment)8 b(The)j(api)g(is)g(private.)3 1205 y(10.)30 b(xerox.ilu.IluIdentity)8 b(Representation)j(for)g(ilu)p 868 1205 14 3 v 15 w(IdentityInfo)3 1279 y(11.)30 b(xerox.ilu.IluIdentityTyp)o(e)9 b(Representation)h(for)h (ilu)p 961 1279 V 16 w(IdentityType)3 1354 y(12.)30 b (xerox.ilu.IluIHProposer)13 b(A)h(true)g(object)g(can)g(support)f(this) g(interface)h(to)g(help)g(ilu)f(in)h(making)g(up)g(an)g(instance)90 1416 y(handle)d(if)g(it)f(should)g(be)h(registered)g(without)e(actual)i (instance)f(handle)h(provided.)3 1490 y(13.)30 b (xerox.ilu.IluLifetimeArgs)9 b(Keys)i(to)f(specify)h(lifetime)g (argumens)g(of)g(corba)h(object)3 1565 y(14.)30 b (xerox.ilu.IluLifetimeForget)9 b(Interface)j(to)f(specify)g(lifetime)f (argumens)h(of)h(ilu)e(object)3 1639 y(15.)30 b (xerox.ilu.IluLifetimeRemember)11 b(Interface)h(to)f(specify)f (lifetime)h(argumens)g(of)g(ilu)g(object)3 1713 y(16.)30 b(xerox.ilu.IluObject)9 b(Generic,)j(client)e(visible)g(interface;)h (super)g(interface)g(for)g(all)g(ilu)g(objects.)3 1788 y(17.)30 b(xerox.ilu.IluObjectBase)16 b(Base)i(super)f(class)g(used)g (for)h(surrogate)f(object)g(implementation.)29 b(Class)17 b(is)g(client)90 1850 y(visible.)e(This)d(might)h(as)g(well)f(be)h (used)g(as)g(base)g(class)f(for)i(true)f(objects,)f(at)h(the)g (discretion)f(of)h(the)f(programmer)90 1912 y(\(of)f(the)g(true)g (object's)g(class\).)g(In)g(fact)h(it)e(is)h(HIGHLY)f(RECOMMENDED)i(to) f(extend)f(this)g(class)h(if)g(possible.)3 1987 y(18.)30 b(xerox.ilu.IluObjectTable)12 b(An)j(object)f(table)h(gives)f(the)g (application)g(the)g(ability)f(to)i(create)g(true)g(objects)f(upon)90 2049 y(presentation)e(of)h(an)h(instance)e(handle.)18 b(This)12 b(is)h(used)g(by)g(the)g(application)f(to)h(pass)g(in)g(to)g (the)g(creation)g(of)h(a)f(true)90 2111 y(server.)f(This)e(must)h(be)g (subclassed)f(to)g(be)i(useful.)3 2186 y(19.)30 b (xerox.ilu.IluPassport)9 b(Representation)h(for)i(ilu)p 881 2186 V 15 w(Passport.)3 2260 y(20.)30 b(xerox.ilu.IluPickle)10 b(Representation)g(of)h(typed)f(values)3 2334 y(21.)30 b(xerox.ilu.IluPort)15 b(This)g(is)h(the)g(Java)h(representation)e(of)h (the)g(concept)g(ilu)p 1331 2334 V 15 w(Port.)27 b(Server)18 b(applications)c(should)90 2397 y(create)d(ports)e(with)f(the)i (IluServer)g(interface.)i(However)d(this)g(interface)h(provides)f (additional)f(methods)h(to)g(destroy)90 2459 y(ports.)3 2533 y(22.)30 b(xerox.ilu.IluRootObjectHelper)8 b(Corba)k(style)e Ft(")p Fs(Helper)p Ft(")h Fs(class)g(for)g(the)g(ilu)f(root)h(object.)3 2608 y(23.)30 b(xerox.ilu.IluRT0)9 b(Top)h(level)g(class.)h(However)g (we)f(recommend)i(using)d(xerox.ilu.Ilu)g(for)i(all)f(features)h (available)90 2670 y(in)g(xerox.ilu.Ilu)f(and)h(want)g(to)f(keep)h (xerox.ilu.IluRT0)f(easier)i(to)e(be)i(changed.)p eop %%Page: 145 146 145 145 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(145)3 183 y(24.)30 b(xerox.ilu.IluSerializationContext)8 b(An)j(IluSerializationContext)d(represents)j(an)g(instance)f(of)h(the) g(serialization)90 246 y(guarantee.)26 b(An)15 b(instance)g(is)h(with)f (respect)g(to)h(a)g(particular)f(server)h(and)g(set)g(of)g(calls.)25 b(The)16 b(guarantee)f(is)h(that)90 308 y(the)c(server)g(application)e (code)i(receives)f(calls)h(in)f(the)h(same)g(order)g(as)g(the)g(client) f(application)f(code)i(makes)g(them,)90 370 y(except)d(that)g(calls)f (made)i(after)g(a)g(barrier)f(call)g(can)h(start)f(service)g(before)g (calls)g(made)h(before)g(the)f(same)g(barrier)h(call.)90 432 y(A)k(barrier)g(call)g(is)f(one)g(that)h(raises)f(a)h(system)g (exception)e(whose)h(completion)g(status)f(is)i(MAYBE)g(\(in)f(CORBA)90 495 y(terms,)e(which)e(are)i(not)e(quite)h(right)f(to)g(use)h(here\))h (or)f(that)f(raises)h(the)g(barrier)g(error.)i(The)e(client)f(may)i (not)e(issue)g(any)90 557 y(two)j(of)h(these)f(calls)h(concurrently.)i Ft(<)p Fs(p)p Ft(>)d Fs(The)h(way)g(for)g(a)g(client)f(to)g(associate)g (an)h(IluSerializationContext)d(is)j(to)90 619 y(attach)e(the)g (IluSerializationContext)d(to)j(the)g(thread.)g(This)g(works)f(only)g (from)i(IluServiceThread-s.)3 692 y(25.)30 b(xerox.ilu.IluSBH)11 b(String)h(binding)e(handle)i(access.)i(Parsing)e(or)g(composing)f (SBH's)h(takes)g(the)g(arguments)f(and)90 754 y(builds)i(and)h(IluSBH)h (structure.)21 b(The)14 b(desired)g(information)g(then)g(can)h(be)f (accessed)h(with)f(accessor)g(functions.)90 816 y(Currently)f(IluSBH)h (structure)f(are)h(immutable,)h(however)e(you)g(should)g(not)g(rely)g (on)h(this)e(immutability:)i(future)90 879 y(releases)d(may)h(or)f(may) h(not)e(make)i(this)e(type)h(more)g(lightweight,)e(mutable,)i(and)g (the)g(fields)g(unprotected.)3 951 y(26.)30 b (xerox.ilu.IluServantFinalizable)20 b(A)i(server)g(object)g(can)g (implement)g(this)e(interface)j(to)e(request)h(a)g(call)g(of)90 1014 y(iluServantFinalize)10 b(on)g(its)h(real)g(finalization)f(time.)h (Please)h(no)f(resurection)f(or)h(other)g(fancy)g(usage.)3 1087 y(27.)30 b(xerox.ilu.IluServer)15 b(This)f(is)g(the)h(Java)g (representation)f(of)h(the)g(an)g(ilu)p 1264 1087 14 3 v 15 w(Server.)24 b(Only)15 b(true)g(objects)f(have)h(their)90 1149 y(servers)c(accessible)g(to)f(clients)3 1222 y(28.)30 b(xerox.ilu.IluServerRelocation)10 b(Interface)i(used)e(for)i(clients)e (which)g(need)h(to)g(initiate)f(server)h(relocates.)3 1294 y(29.)30 b(xerox.ilu.IluServiceThread)12 b(Subclass)h(for)h (certain)f(ILU)g(threads.)18 b(This)12 b(class)h(is)g(used)g(to)g(be)h (able)f(to)g(transmit)90 1357 y(extra)g(environment)e(or)h(thread)h (specific)f(information)f(between)h(the)g(ILU)h(kernel)f(and)g(its)g (application.)i(Threads)90 1419 y(forked)e(by)g(ILU)g(for)g(serving)f (skeleton)g(methods)h(do)f(use)h(this)f(thread)h(class.)i(Applications) c(optionally)g(may)i(use)90 1481 y(this)e(thread)h(class)g(when)g (requiring)f(service)h(from)g(ILU.)h(Application)d(use)i(is)f (optional.)3 1554 y(30.)30 b(xerox.ilu.IluSimpleBinding)8 b(Simple)k(binding)d(for)i(ILU.)3 1627 y(31.)30 b (xerox.ilu.IluTransportInfo)9 b(Transport)h(information)g(is)g(useful)h (to)f(describe)h(servers.)3 1699 y(32.)30 b(xerox.ilu.IluTypeCode)9 b(For)j(representation)e(of)h(types...)3 1772 y(33.)30 b(xerox.ilu.IluTypeKind)8 b(For)k(representation)e(of)h(types...)0 1893 y Fn(7.7.2.7)23 b(Internal)15 b(or)g(esoteric)g(classes)62 1997 y Fs(No)10 b(public)e(client)h(use)g(allowed)g(or)h(expected.)g (Either)f(because)h(class)f(is)g(private)g(for)h(stubs)e(or)i(because)f (it)h(is)f(esoteric)0 2059 y(in)i(nature.)g(The)g(source)g(of)g(these)g (classes)g(documents)f(why)h(no)f(use)h(is)g(excpected.)26 2146 y(1.)30 b(xerox.ilu.tools.gnh)26 2219 y(2.)g(xerox.ilu.tools.japp) 26 2306 y(1.)g(xerox.ilu.corba)p 369 2306 V 16 w(ServantFinalizer)26 2379 y(2.)g(xerox.ilu.IluAlarmTech)26 2452 y(3.)g(xerox.ilu.IluCall)26 2524 y(4.)g(xerox.ilu.IluCallException)26 2597 y(5.)g (xerox.ilu.IluClassAccess)26 2670 y(6.)g(xerox.ilu.IluConstantValueKi)o (nd)p eop %%Page: 146 147 146 146 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(146)26 183 y(7.)30 b(xerox.ilu.IluDebugHooks)26 258 y(8.)g(xerox.ilu.IluDebugWriter)26 333 y(9.)g (xerox.ilu.IluExceptionRep)3 408 y(10.)g(xerox.ilu.IluFactory)3 483 y(11.)g(xerox.ilu.IluGCClient)3 558 y(12.)g(xerox.ilu.IluInit)3 632 y(13.)g(xerox.ilu.IluInit2)3 707 y(14.)g(xerox.ilu.IluIOFunctions)3 782 y(15.)g(xerox.ilu.IluMethodArgRep)3 857 y(16.)g (xerox.ilu.IluMethodRep)3 932 y(17.)g(xerox.ilu.IluOInt)3 1007 y(18.)g(xerox.ilu.IluServerConnection)3 1082 y(19.)g (xerox.ilu.IluSkeleton)3 1156 y(20.)g(xerox.ilu.IluSystemExceptionBase) 3 1231 y(21.)g(xerox.ilu.IluWPBase)3 1306 y(22.)g (xerox.ilu.IluSimpleErrors)3 1381 y(23.)g (xerox.ilu.IluSomeSystemException)3 1456 y(24.)g (xerox.ilu.IluSurrogateConnection)3 1531 y(25.)g (xerox.ilu.IluSurrogateObject)3 1606 y(26.)g (xerox.ilu.IluSystemException0)3 1680 y(27.)g(xerox.ilu.IluTypeRep)3 1755 y(28.)g(xerox.ilu.IluUnixIdentit)o(yTyp)o(e)3 1830 y(29.)g(xerox.ilu.IluUserExceptionBase)0 1968 y Fu(7.8)g(Full)14 b(Custom)h(Mapping)62 2072 y Fs(Full)c(custom)g(mapping)f(is)h(the)g (ability)e(to)i(externally)f(specify)h(how)f(an)i(isl)e(type)h(shall)f (be)h(mapped)g(to)g(java.)62 2159 y(It)18 b(is)f(similar)f(to)h(custom) g(records)h(and)f(custom)g(objects,)h(however)f(there)h(is)f(no)g (requirement)g(for)h(the)f(custom)0 2221 y(mapped)11 b(type)g(to)g(be)g(a)g(subtype)f(of)h(the)g(regular)g(mapping.)62 2309 y(There)19 b(is)f(the)g(restriction)f(that)h(custom)g(mapping)g (works)g(only)f(java)h(object)g(types;)j(that)d(means,)j(the)d(regular) 0 2371 y(mapping)11 b(of)i(the)f(ilu)f(type)h(needs)f(to)h(map)h(into)e (a)h(java)h(object)e(type,)h(as)g(well)g(as)g(the)g(custom)g(mapped)g (type)g(must)g(be)g(a)0 2433 y(java)f(object)g(type.)62 2520 y(Full)h(custom)f(mapping)g(is)g(used)h(solely)e(in)i(one)f (address)h(space;)g(communication)f(ilu)g(processes)g(might)g(not)g (know)0 2583 y(about)f(whether)h(or)g(how)g(an)g(ilu)g(type)f(is)h (mapped)g(in)g(the)g(other)g(address)f(space.)62 2670 y(All)h(stubs)f(in)g(one)h(address)g(space)g(however)g(must)g(agree)h (on)e(the)h(mapping)g(of)g(any)g(ilu)f(type.)p eop %%Page: 147 148 147 147 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(147)62 183 y(Custom)12 b(mapping)g(is)f(implemented)h(using)f (stubber)g(options,)g(however)h(there)h(needs)f(to)f(be)i(runtime)f (code)g(which)0 246 y(handles)e(the)h(conversion)f(from)i(and)f(to)f (the)h(regular)g(mapped)h(object.)62 340 y(For)g(full)e(information,)h (check)g(the)g(ILUSRC/examples/javaserial)f(directory)0 486 y Fn(7.8.0.1)23 b(Stubbing)62 597 y Fs(When)11 b(stubbing)e(the)i (custom)g(mapping)f(needs)h(to)g(be)g(specified)f(with)h(an)g (commandline)g(option)120 691 y Ft(-custom)24 b(description-file-name) 62 818 y Fs(We)15 b(are)g(using)f(a)h(file)f(to)g(describe)g(the)h (custom)f(mapping)g(because)g(the)h(actual)f(description)f(too)h (cumberson)g(for)0 880 y(command)e(line)e(options)f(and)i(must)g(be)g (set)g(identical)f(for)i(all)e(stubs)g(accessing)h(a)g(custom)g(mapped) g(type.)62 974 y(The)g(description)d(file)j(is)f(a)h(list)e(of)i (lines.)f(Each)h(line)f(is)g(either)g(a)h(comment,)g(or,)g(a)g(custom)f (mapping)g(description)f(for)0 1036 y(one)i(type.)g(Custom)g(mapping)f (description)g(have)h(five)g(fields)f(separated)h(with)f(white)h (space.)26 1131 y(1.)30 b(1\))11 b(The)g(name)h(of)f(the)g(isl)g (interface)g(\(which)f(contains)g(the)h(isl)g(type\))26 1213 y(2.)30 b(2\))11 b(The)g(name)h(of)f(the)g(isl)g(type)f(to)h(be)g (custom)g(mapped)26 1294 y(3.)30 b(3\))11 b(The)g(java)g(class)g(used)g (to)f(map)i(the)f(isl)f(type)h(into)26 1376 y(4.)30 b(4\))11 b(The)g(java)g(class)g(which)g(is)f(used)h(for)g(holders)26 1458 y(5.)30 b(5\))16 b(If)g(present:)j(The)d(name)g(of)g(a)g(java)f (class)h(which)f(will)f(be)i(loaded)f(by)g(the)h(stub;)g(this)f(is)g (the)g(class)h(which)f(is)90 1521 y(expected)c(to)g(implement)f(the)h (transformations)f(between)h(wire)g(type)g(and)g(custom)f(type.)0 1667 y Fn(7.8.0.2)23 b(Runtime)15 b(features)62 1777 y Fs(Tha)20 b(java)f(interface)h(xerox.ilu.IluCustomMapping)c (describes)j(the)g(functions)f(necessary)h(to)g(implement)g(the)0 1840 y(custom)11 b(mapping.)62 1934 y(An)e(xerox.ilu.IluCustomMapping)e (object)i(must)g(be)h(registered)f(with)f(the)h(helper)h(class)f(for)g (the)g(regularly)g(mapped)0 1996 y(type)i(using)e(the)i(static)g Ft(")p 402 1996 14 3 v 16 w Fs(registerCustomMapping)p Ft(")e Fs(method.)62 2091 y(Custom)j(mapped)h(type)f(and)g(subclassing) e(do)i(interact)g(whith)g(each)h(other:)f(\(Custom)h(mapping)e(works)h (with)g(what)0 2153 y(ilu)e(calls)h(static)f(types.\))26 2247 y(1.)30 b(-When)11 b(you)g(receive)g(a)h(subclass)e(of)h(the)g (static)f(ilu-type;)f(that)i(subclass)f(info)g(gets)h(lost)26 2329 y(2.)30 b(-Because)15 b(of)f(syntax)f(checking)g(you)h(can)g(not)g (transmit)f(a)h(subclass)f(of)h(the)g(static)f(ilu-type,)h(unless)f(it) h(also)f(is)h(a)90 2391 y(subclass)c(of)h(the)g(java)g(class.)g (However)g(in)g(that)f(case)i(that)f(case)g(subclass'ness)e(gets)i (lost.)26 2473 y(3.)30 b(-when)14 b(the)g(static)f(class)h(of)g(an)g (argument)g(is)g(a)g(superclass)f(of)h(something)f(with)g(custom)h (mapping)f(on)h(receive:)90 2536 y(customness)e(is)g(lost)f(and)i(you)f (receive)h(the)g(super)f(class)g(when)h(transmit:)g(syntax)f(checking)g (will)f(not)h(allow)g(this)90 2598 y(unless)f(custom)h(class)g(is)h (also)e(subclass)h(of)g(static)g(class.)j(\(That)d(case)h(is)f(already) h(defined)f(above:)h(subclass'ness)90 2660 y(gets)e(lost\))p eop %%Page: 148 149 148 148 bop 0 -58 a Fs(Chapter)11 b(7:)g(Using)f(ILU)h(with)f(Java)1300 b(148)0 183 y Fn(7.8.0.3)23 b(Transmitting)14 b(arbitrary)h(java)g (objects)62 287 y Fs(This)21 b(application)e(program)j(defines)f(a)g (full)g(custom)g(mapping)g(using)f(the)h(java)g(type)g (java.lang.Object.)41 b(It)0 349 y(furthermore)11 b(uses)g(java)g (serialization)f(to)g(implement)h(the)g(runtime)g(conversion.)62 436 y(The)h(test)e(program)i(for)g(the)f(application)f(program)h(shows) g(how)g(to)g(transmit)f(arbitrary)h(\(though)f(serializable\))h(java)0 499 y(objects.)62 586 y(For)h(full)e(information,)h(check)g(the)g (ILUSRC/examples/javaserial)f(directory)62 673 y(This)15 b(application)f(even)h(transmits)g(Java)h(classes)f(\(byte)g(codes\))g (through)g(ilu.)24 b(Unlike)14 b(RMI,)j(the)f(class)f(itself)g(is)0 735 y(passed)8 b(through)g(ilu.)h(We)h(do)e(not)g(claim)h(the)g (simpler)f(mechanism)h(of)g(RMI)h(wouldn't)d(be)i(sufficient,)f(but)g (by)h(specifying)0 798 y(access)i(of)h(the)f(byte)f(codes)h(we)g(can)h (better)f(show)f(the)h(power)g(of)g(using)f(full)h(custom)f(mapping.)p eop %%Page: 149 150 149 149 bop 0 -58 a Fs(Chapter)11 b(8:)g(Using)f(ILU)h(with)f(Common)i (Lisp)1118 b(149)0 183 y Fq(8)36 b(Using)14 b(ILU)h(with)g(Common)f (Lisp)0 390 y Fu(8.1)30 b(Introduction)62 496 y Fs(This)9 b(document)h(is)f(for)i(the)f(Common)g(Lisp)f(programmer)i(who)f (wishes)f(to)g(use)h(ILU.)h(The)e(following)g(sections)f(will)0 558 y(show)h(how)h(ILU)g(is)g(mapped)g(into)g(Common)g(Lisp)f (constructs)g(and)h(how)g(both)f(Common)i(Lisp)e(clients)g(and)h (servers)g(are)0 621 y(generated)h(and)g(built.)0 768 y Fu(8.2)30 b(The)14 b(ISL)i(Mapping)g(to)f(Common)f(Lisp)62 874 y Fs(Runtime)d(code)g(is)g(in)g(the)g(Common)g(Lisp)f(package)i Ft(ilu)p Fs(.)0 1006 y Fo(8.2.1)26 b(Names)62 1112 y Fs(Names)19 b(from)f(interface)g(specifications)e(are)j(transformed)e (into)g(Lisp)g(names)h(\(case-insensitive\))e(by)i(inserting)0 1174 y(hyphens)10 b(at)h(lower-to-upper)f(case)i(transitions.)d (Hyphens)h(that)g(are)i(already)f(present)g(are)h(maintained)e(as)h (is.)1771 1158 y Fm(1)0 1306 y Fo(8.2.2)26 b(Interface)62 1412 y Fs(A)13 b(separate)f(package)h(is)f(defined)f(for)i(each)g (interface)f(with)g Ft(defpackage)p Fs(.)i(The)e(name)h(of)g(this)e (package)i(is)f(taken)0 1475 y(from)f(the)f(name)g(of)h(the)f (interface.)h(This)e(package)i(uses)e(the)h(packages)g Ft(common-lisp)f Fs(and)h Ft(ilu)p Fs(.)i(The)e(Common)g(Lisp)0 1537 y(names)j(of)g(all)f(entities)f(defined)i(in)f(the)g(ISL)i(are)f (exported)f(from)h(the)g(package,)g(including)e(types,)i(classes,)f (constants,)0 1599 y(accessors,)k(type)e(predicates,)i(generic)f (functions,)f(exceptions,)h(etc.)23 b(Such)15 b(symbols)f(are)h(also)f (shadowed,)i(to)e(avoid)0 1662 y(conflicts)c(with)g(used)h(packages.)g (For)h(example,)f(given)g(the)g(following)e(interface:)120 1751 y Ft(INTERFACE)24 b(MyInterface)g(END;)120 1801 y(EXCEPTION)g(TotalLoser)g(:)h(Person;)120 1851 y(TYPE)g(Person)f(=)h (OBJECT)170 1901 y(METHODS)245 1950 y(FriendsP)f(\(someone)g(:)h (Person\))f(:)h(Boolean)294 2000 y(RAISES)g(TotalLoser)f(END)170 2050 y(END;)62 2167 y Fs(the)11 b(stubber)f(generates)h(the)g (following)e Ft(defpackage)p Fs(:)120 2257 y Ft(\(defpackage)24 b(:my-interface)170 2307 y(\(:use)g(:common-lisp)g(:ilu\))170 2356 y(\(:shadow)g(#:total-loser)g(#:person)g(#:friends-p\))170 2406 y(\(:export)g(#:total-loser)g(#:person)g(#:friends-p\)\))p 0 2462 600 2 v 21 2590 a Fm(1)62 2606 y Fs(This)13 b(causes)g (problems;)h(the)g(ISL)g(names)g Ft(")p Fs(FooBar)p Ft(")g Fs(and)f Ft(")p Fs(foo-bar)p Ft(")h Fs(map)g(to)f(the)g(same)h(Common)h (Lisp)d(name.)62 2669 y(Something)f(will)f(have)h(to)g(change.)p eop %%Page: 150 151 150 150 bop 0 -58 a Fs(Chapter)11 b(8:)g(Using)f(ILU)h(with)f(Common)i (Lisp)1118 b(150)62 183 y(This)15 b(allows)g(symbols)f(defined)i(in)f (the)h Ft(commonlisp)f Fs(package)h(to)f(be)h(used)g(by)f(the)h (automatically)e(generated)0 246 y(code)d(in)g(the)g(generated)g (package,)g(but)f(it)h(also)g(means)g(that)f(the)h(user)g(needs)g(to)g (be)g(careful)g(about)g(using)e(any)i(generated)0 308 y(package.)g(In)d(general,)i(we)e(recommend)i(that)d(you)h(explicitly)f (specify)h(the)g(full)g(name)h(of)f(symbols)g(from)h(ILU)f(interfaces.) 0 425 y Fo(8.2.3)26 b(Basic)15 b(Types)62 529 y Fs(The)c(basic)g(ISL)h (types)e(have)h(the)g(following)e(mapping)i(to)f(Common)i(Lisp)e (types:)37 616 y Fr(\017)30 b Fs(ISL)12 b Ft(BOOLEAN)e Fs(maps)i(to)e(Common)i(Lisp)e Ft(\(or)h(nil)g(t\))37 687 y Fr(\017)30 b Fs(ISL)12 b Ft(BYTE)f Fs(maps)g(to)g(Common)g(Lisp)f Ft(\(unsigned-byte)g(8\))37 758 y Fr(\017)30 b Fs(ISL)12 b Ft(SHORT)e(CARDINAL)h Fs(maps)g(to)g(Common)h(Lisp)e Ft(\(unsigned-byte)g(16\))37 829 y Fr(\017)30 b Fs(ISL)12 b Ft(CARDINAL)e Fs(maps)h(to)g(Common)h(Lisp)e Ft(\(unsigned-byte)g (32\))37 900 y Fr(\017)30 b Fs(ISL)12 b Ft(LONG)f(CARDINAL)f Fs(maps)h(to)g(Common)h(Lisp)e Ft(\(unsigned-byte)g(64\))37 971 y Fr(\017)30 b Fs(ISL)12 b Ft(SHORT)e(INTEGER)h Fs(maps)g(to)g (Common)h(Lisp)e Ft(\(signed-byte)g(16\))37 1042 y Fr(\017)30 b Fs(ISL)12 b Ft(INTEGER)e Fs(maps)i(to)e(Common)i(Lisp)e Ft(\(signed-byte)g(32\))37 1113 y Fr(\017)30 b Fs(ISL)12 b Ft(LONG)f(INTEGER)f Fs(maps)i(to)e(Common)i(Lisp)e Ft(\(signed-byte)g(64\))37 1185 y Fr(\017)30 b Fs(ISL)12 b Ft(CHARACTER)e Fs(maps)h(to)g(Common)h(Lisp)e Ft(character)37 1256 y Fr(\017)30 b Fs(ISL)12 b Ft(SHORT)e(CHARACTER)h Fs(maps)g(to)g(Common)h(Lisp)e Ft(character)37 1327 y Fr(\017)30 b Fs(ISL)12 b Ft(SHORT)e(REAL)h Fs(maps)h(to)e(Common)i (Lisp)e Ft(single-float)37 1398 y Fr(\017)30 b Fs(ISL)12 b Ft(REAL)f Fs(maps)g(to)g(Common)g(Lisp)f Ft(double-float)37 1469 y Fr(\017)30 b Fs(ISL)12 b Ft(LONG)f(REAL)g Fs(maps)g(to)g(Common) g(Lisp)f Ft(double-float)0 1586 y Fn(8.2.3.1)23 b(Constant)62 1690 y Fs(Constants)10 b(are)i(implemented)f(in)f(CL)i(by)f(a)g(value)g (of)g(the)g(appropriate)f(type,)h(defined)g(with)f Ft(defconstant)p Fs(.)0 1807 y Fo(8.2.4)26 b(Strings)62 1911 y Fs(Arrays)11 b(and)g(sequences)g(of)g(CHARACTER)h(\(regular)f(or)g(SHORT\))h(are)g (implemented)e(as)i Ft(simple-string)p Fs(s.)0 2028 y Fo(8.2.5)26 b(Pickles)15 b(and)g(Typecodes)62 2132 y Fs(Pickles)c(are)h(represented)f(with)f(the)h(CLOS)g(class)g Ft(ilu:pickle)62 2219 y Fs(Instances)e(of)h(a)g(pickle)f(may)h(be)g (created)g(by)f(calling)f Ft(cl:make-instance)h Fs(on)g Ft(ILU:PICKLE)p Fs(,)h(with)e(the)i Ft(:VALUE)0 2281 y Fs(and)h Ft(:TYPE)g Fs(keywords,)f(as)i(in)0 2344 y Ft(\(cl:make-instance)e('ilu:pickle)g(:type)h('ilu:cardinal)f(:value)h (3456\))62 2431 y Fs(Pickle)g(has)g(three)g(reader)h(functions)e (defined)h(on)f(it:)37 2518 y Fr(\017)30 b Ft(ilu:pickle-value)10 b Fs(returns)g(the)h(value)g(stored)g(in)f(the)h(pickle)g(as)g(a)h (Lisp)e(value.)37 2589 y Fr(\017)30 b Ft(ilu:pickle-type)10 b Fs(returns)h(the)f(type)h(of)g(the)g(value)g(stored)g(in)f(the)h (pickle.)37 2660 y Fr(\017)30 b Ft(ilu:pickle-bytes)10 b Fs(returns)g(the)h(pickled)g(bytes)f(of)h(the)g(pickle.)p eop %%Page: 151 152 151 151 bop 0 -58 a Fs(Chapter)11 b(8:)g(Using)f(ILU)h(with)f(Common)i (Lisp)1118 b(151)0 183 y Fo(8.2.6)26 b(Constructed)14 b(Types)0 323 y Fn(8.2.6.1)23 b(Enumeration)62 426 y Fs(Enumerations)10 b(are)i(implemented)f(with)f(symbols,)g(as)h(in)0 489 y Ft(\(deftype)g(answer)f(\(\))i(`\(member)e('yes)h('no)g ('maybe\)\))0 611 y Fn(8.2.6.2)23 b(Array)62 715 y Fs(Arrays)11 b(are)h(implemented)f(as)g Ft(simple-array)p Fs(s.)0 838 y Fn(8.2.6.3)23 b(Sequence)62 942 y Fs(Sequences)16 b(are)g(implemented)f(as)g Ft(list)p Fs(s,)i(except)e(for)h(sequences)f (of)g(characters,)i(which)e(are)h(implemented)f(as)0 1004 y Ft(simple-string)p Fs(s.)0 1127 y Fn(8.2.6.4)23 b(Record)62 1231 y Fs(Record)12 b(types)e(are)i(implemented)f(with)f (CL)h Ft(defstruct)p Fs(.)0 1353 y Fn(8.2.6.5)23 b(Union)62 1457 y Fs(Unions)9 b(are)i(implemented)f(as)h(a)g(cons'ed)f(value,)g (with)g(the)g(cdr)h(containing)d(the)j(union)e(type)h(discriminant,)f (and)h(the)0 1519 y(cdr)h(containing)f(the)h(actual)f(value.)0 1642 y Fn(8.2.6.6)23 b(Optional)0 1782 y Fo(8.2.7)j(Object)14 b(Types)62 1885 y Fs(Classes)d(are)h(implemented)f(with)f(CLOS)h Ft(defclass)p Fs(.)62 1973 y(Private)j(slots)f(are)h(created)h(for)f (methods)f(which)h(are)g(specified)g(as)g Ft(functional)p Fs(,)g(and)g(the)g(runtime)f(caches)h(the)0 2035 y(value)d(of)g(this)f (method)h(in)g(such)f(slots)g(after)i(the)e(first)h(call)g(to)g(the)g (method.)62 2122 y(Instances)g(are)h(always)e(subtypes)g(of)h Ft(ilu:ilu-object)p Fs(.)62 2209 y(Methods)20 b(always)g(take)g(as)g (their)g(first)g(argument)g(the)g(object)g(which)f(they)h(are)h(a)g (method)f(on.)38 b(Subsequent)0 2271 y(arguments)13 b(are)h(those)f (specified)g(in)g(the)h(`)p Ft(.isl)p Fs(')f(file.)19 b(Methods)13 b(that)g(have)h Ft(OUT)f Fs(or)h Ft(INOUT)f Fs(arguments)g(may)h(return)0 2334 y(multiple)e(values.)18 b(In)13 b(general,)h(the)f(parameters)h(to)f(a)h(method)f(are)h(the)f Ft(IN)h Fs(and)f Ft(INOUT)g Fs(parameters)h(specified)f(in)f(the)0 2396 y(ISL)i(interface,)g(but)e(not)h(the)g Ft(OUT)g Fs(parameters.)18 b(The)13 b(return)g(values)f(from)i(a)g(method)e(are) i(the)f(specified)g(return)g(value)0 2458 y(for)f(the)g(ISL)g(method,)h (if)f(any,)g(followed)f(by)h(the)g Ft(INOUT)f Fs(and)h Ft(OUT)g Fs(parameters)h(for)f(the)g(method,)g(if)g(any,)h(in)e(the)h (order)0 2521 y(in)f(which)f(they)h(appear)g(in)g(the)g(ISL)g (specification)f(of)h(the)g(method.)62 2608 y(OMG)i(IDL)f(attributes)f (map)h(to)g(a)h(CLOS)g(method)f(of)g(the)g(same)h(name,)g(and)g(a)f (setf)g(method)g(with)g(the)g(same)h(name)0 2670 y(\(unless)d(the)h (attribute)f(is)h(readonly\).)p eop %%Page: 152 153 152 152 bop 0 -58 a Fs(Chapter)11 b(8:)g(Using)f(ILU)h(with)f(Common)i (Lisp)1118 b(152)0 183 y Fn(8.2.7.1)23 b(Surrogate)15 b(and)h(True)g(Object)g(Types)0 324 y(8.2.7.2)23 b(Methods,)15 b(Parameters,)h(and)f(Exceptions)62 428 y Fs(Exceptions)7 b(are)j(represented)e(with)g(CL)h(conditions,)f(defined)g(by)h Ft(define-condition)p Fs(.)g(All)f(ILU)h(conditions)d(are)0 490 y(subtypes)12 b(of)h Ft(ilu:rpc-exception)p Fs(,)g(which)g(is)g(a)h Ft(serious-condition)p Fs(.)j(If)d(an)f(associated)g(value)g(is)g (specified)0 553 y(for)e(an)h(exception)e(it)g(may)i(be)f(accessed)h (in)e(one)h(of)h(the)e(following)g(two)g(ways:)26 640 y(1.)30 b(If)13 b(the)e(name)i(of)f(the)g(value)g(type)f(begins)g(with) h Ft("-ilu-prefix-idlExceptionType-")p Fs(,)e(the)h(value)h(type)g(is) 90 702 y(a)i(generated)f(type)f(from)i(an)f(OMG)h(IDL)f(exception)f (description,)g(and)h(is)g(a)g(record)h(type.)j(In)c(this)f(case,)i (each)g(of)90 764 y(the)g(fields)g(of)h(the)f(record)h(type)f(are)i (placed)e(in)g(the)h(condition)d(individually,)h(and)h(an)h(accessor)g (with)f(that)g(field)90 827 y(name)e(is)f(declared)g(for)g(that)g (field.)26 901 y(2.)30 b(In)13 b(all)g(other)f(cases,)i(there)f(is)g(a) g(single)f(accessor)h(called)g Ft(value)f Fs(through)g(which)g(the)h (associated)f(value)h(may)g(be)90 963 y(read.)0 1088 y Fn(8.2.7.3)23 b(Garbage)15 b(Collection)f(and)i(COLLECTIBLE)0 1241 y Fu(8.3)30 b(Access)14 b(to)h(standard)g(ILU)h(features)0 1382 y Fo(8.3.1)26 b(Servers)15 b(and)g(Ports)0 1523 y Fn(8.3.1.1)23 b(Object)16 b(Tables)0 1664 y(8.3.1.2)23 b(Server)16 b(Relocation)0 1805 y Fo(8.3.2)26 b(Threading)14 b(and)g(Event)h(Loops)0 1946 y(8.3.3)26 b(Custom)15 b(Records)0 2087 y(8.3.4)26 b(Custom)15 b(Surrogates)62 2191 y Fs(Custom)f (surrogates)f(allow)g(the)g(user)h(to)f(specify)g(custom)h(surrogate)f (object)g(types)g(which)g(may)h(have)g(additional)0 2253 y(functionality)f(in)i(terms)h(of)f(caching)g(or)h(other)f(side)g (effects,)i(and)e(have)h(them)f(created)h(instead)f(of)g(the)g(default) g(ILU)0 2315 y(surrogate)h(object)f(type)h(when)g(an)h(instance)e(is)h (received.)28 b(This)15 b(functionality)f(is)i(provided)f(in)h(the)g (Common)h(Lisp)0 2378 y(runtime)11 b(with)f(the)h(function)f Ft(ilu:register-custom-surrogate)p Fs(.)0 2502 y Fo(8.3.5)26 b(String)14 b(Binding)g(Handle)g(Formation)0 2643 y(8.3.6)26 b(Simple)14 b(Binding)p eop %%Page: 153 154 153 153 bop 0 -58 a Fs(Chapter)11 b(8:)g(Using)f(ILU)h(with)f(Common)i (Lisp)1118 b(153)0 183 y Fo(8.3.7)26 b(Principal)14 b(Identities)h(and) f(Passports)62 290 y Fs(It's)21 b(also)g(possible)f(to)g(find)h(out)g (who)g(is)f(making)h(the)g(call)g(by)g(examining)g(the)g(value)g(of)g Ft(ilu:*caller-)0 352 y(identity*)p Fs(.)0 500 y Fu(8.4)30 b(Building)14 b(Common)h(Lisp/ILU)g(Applications)0 649 y Fo(8.4.1)26 b(Stub)13 b(Generation)62 755 y Fs(The)c(program)h(ILU)f Ft(lisp-stubber)f Fs(takes)h(a)g(interface)h(specification)d(\(an)j(`)p Ft(.isl)p Fs(')f(file\))g(and)g(generates)g(lisp)f(code)0 817 y(to)13 b(provide)g(both)f(client-side)g(and)i(server-side)f (support)f(for)i(the)f(interface.)19 b(The)13 b(files)g(are)h (generated)g(in)f(the)g(current)0 880 y(working)d(directory.)h(In)g (particular,)g(the)g(following)e(files)h(are)i(generated:)37 969 y Fr(\017)30 b Fs(`)p Fp(interface-name)p Ft(-sysdcl.lisp)p Fs(')12 b(--)g(tells)f Ft(PDEFSYS)1009 953 y Fm(2)1039 969 y Fs(how)g(to)h(compile)f(and)h(load)f(the)h(other)f(files.)i(It)f (defines)90 1032 y(a)g(Common)h(Lisp)e(module)g Ft(:<)p Fp(interface)p Ft(>)p Fs(,)i(which)e(describes)g(the)h(code)g(needed)g (to)g(support)e(both)h(surrogate)g(and)90 1094 y(true)g(use)g(of)g(the) g(interface.)h(This)e(file)h(is)g(often)f(called)h(a)h Fp(sysdcl)i Fs(for)d(the)g(module.)37 1171 y Fr(\017)30 b Fs(`)p Fp(interface-name)p Ft(-basics.lisp)p Fs(')11 b(--)h(contains)e(lisp)g(code)h(needed)g(by)g(clients)f(of)h(the)g (module;)f(and)37 1249 y Fr(\017)30 b Fs(`)p Fp(interface-name)p Ft(-server-procs.lisp)p Fs(')11 b(--)g(contains)f(lisp)g(code)h(needed) g(by)g(module)g(implementations.)0 1381 y Fo(8.4.2)26 b(Implementing)15 b(an)f(ILU)i(module)f(in)g(Common)g(Lisp)62 1488 y Fs(For)h(each)f(ILU)g(class)g Fp(interface)p Ft(.)p Fp(otype)s Fs(,)g(ILU)g(will)f(define,)i(in)f(the)g(file)g(`)p Fp(interface)p Ft(-server-procs.lisp)p Fs(',)g(a)0 1550 y(CLOS)j(class)f(called)g Fp(interface)s Ft(:)p Fp(otype)p Ft(.IMPL)p Fs(.)29 b(To)18 b(implement)f(a)h(true)f(object)g(for)h Fp(interface)p Ft(.)p Fp(otype)s Fs(,)g(one)g(should)0 1612 y(further)12 b(subclass)e(this)g(CLOS)j(class,)e(and)h(override)f (all)g(of)h(its)f(methods.)h(In)g(particular,)g(do)f(not)g(let)g(any)h (of)f(the)h(default)0 1674 y(methods)e(for)i(the)f(class)f(be)i(called) f(from)g(your)g(methods)f(for)i(it.)62 1764 y(ILU)k(supports,)g(in)g (each)g(address)g(space,)i(multiple)d(instances)g(of)h(something)e (called)i(a)h Fp(kernel)f(server)p Fs(,)i(each)e(of)0 1826 y(which)e(in)g(turn)h(supports)e(some)i(set)f(of)h(object)f (instances.)22 b(A)14 b(kernel)h(server)g Fp(export)t Fs(s)f(its)g(objects)g(by)h(making)f(them)0 1889 y(available)c(to)g (other)g(modules.)g(It)g(may)h(do)f(so)g(via)g(one)h(or)f(more)h Fp(port)t Fs(s,)g(which)e(are)i(abstractly)f(a)g(tuple)g(of)g(\()p Fp(rpc)h(protocol)p Fs(,)0 1951 y Fp(transport)k(type)p Fs(,)i Fp(transport)d(address)r Fs(\).)25 b(For)16 b(example,)i(a)e (typical)f(port)g(might)h(provide)f(access)h(to)f(a)h(kernel)g (server's)0 2013 y(objects)9 b(via)h Ft(\(Sun)h(RPC,)g(TCP/IP,)g(UNIX)g (port)g(2076\))p Fs(.)f(Another)g(port)f(on)h(the)g(same)h(kernel)e (server)i(might)e(provide)0 2075 y(access)i(to)g(the)g(objects)f(via)h Ft(\(Xerox)g(Courier,)g(XNS)g(SPP,)g(XNS)g(port)g(1394\))p Fs(.)62 2165 y(When)d(creating)g(an)h(instance)e(of)i(a)g(true)f (object,)g(a)h(kernel)f(server)h(for)g(it,)f(and)h(an)f(instance)g(id)f (\(the)i(name)g(by)f(which)f(the)0 2228 y(kernel)12 b(server)g(knows)e (it\))i(for)g(it)f(must)g(be)h(determined.)h(These)f(may)g(be)g (specified)f(explicitly)f(by)h(use)h(of)f(the)h(keyword)0 2290 y(arguments)20 b(to)g Ft(commonlisp:make-instance)f (:ilu-kernel-server)g Fs(and)i Ft(:ilu-instance-handle)p Fs(,)0 2352 y(respectively.)10 b(If)i(they)e(are)i(not)e(specified)g (explicitly,)g(the)g(variable)h Ft(ilu:*default-server*)e Fs(will)h(be)h(bound,)f(and)0 2414 y(its)g(value)h(will)f(be)h(used;)g (a)g(default)g(instance)f(handle,)h(unique)f(relative)h(to)g(the)g (kernel)g(server,)g(will)f(be)i(generated.)p 0 2474 600 2 v 21 2590 a Fm(2)62 2606 y Fs(See)i(Section)f(C.1)g([The)g(ILU)g (Common)g(Lisp)f(Portable)h(DEFSYSTEM)g(Module],)h(page)e(291,)i(for)f (a)g(description)62 2669 y(of)e(the)g Ft(PDEFSYS)g Fs(package.)p eop %%Page: 154 155 154 154 bop 0 -58 a Fs(Chapter)11 b(8:)g(Using)f(ILU)h(with)f(Common)i (Lisp)1118 b(154)62 183 y(A)10 b(kernel)f(server)h(may)g(be)g(created)f (by)h(instantiating)c(the)j(class)h Ft(ilu:kernel-server)p Fs(.)f(The)h(keyword)e(argument)0 246 y Ft(:id)k Fs(may)g(be)f (specified)g(to)g(select)h(a)g(name)g(for)g(the)f(server.)i(Note)e (that)g(ILU)h(object)f(IDs,)g(which)g(consist)f(of)i(the)f(kernel)0 308 y(server)g(ID,)h(plus)e(the)g(instance)g(handle)h(of)g(the)f (object)h(on)f(that)h(server,)g(must)g(be)g(unique)f(``across)h(space)g (and)f(time'',)i(as)0 370 y(the)f(saying)f(goes.)i(If)g(no)f(kernel)g (server)g(id)g(is)g(specified,)g(ILU)g(will)g(generate)g(one)g (automatically,)g(using)f(an)h(algorithm)0 432 y(that)f(provides)f(a)i (high)e(probability)f(of)i(uniqueness.)g(If)h(you)f(explicitly)e (specify)i(a)g(kernel)h(server)f(ID,)h(a)g(good)e(technique)0 495 y(is)j(to)g(use)h(a)g(prefix)f(or)h(suffix)f(which)f(uniquely)g (identifies)g(some)i(domain)f(in)g(which)g(you)g(can)h(assure)g(the)f (uniqueness)0 557 y(of)18 b(the)f(remaining)g(part)h(of)f(the)g(ID.)i (For)e(example,)j(when)d(using)g(ILU)g(at)h(some)g(project)f(called)g (NIFTY)g(at)h(some)0 619 y(internet)13 b(site)h(in)f(the)h(IP)h(domain) f Ft(department.company.com)p Fs(,)f(one)h(might)f(use)h(kernel)g (server)h(IDs)f(with)f(names)0 681 y(like)e Ft (something.NIFTY.department.compan)o(y.com)p Fs(.)120 770 y Ft(=>)25 b Fj(\(make-instance)e('ilu:kernel-server)h(:id)g Ft(")p Fj(FOO-SERVER-1)p Ft(")p Fj(\))120 820 y Ft(#)120 870 y(=>)i Fj(\(make-instance)e ('ilu:kernel-server\))120 919 y Ft(#)120 969 y(=>)0 1098 y Fn(8.4.2.1)g(Implementation)14 b(Inheritance)0 1244 y(8.4.2.2)23 b(Exporting)15 b(Objects)62 1349 y Fs(To)c(export)g(a)g(module)g(for)g(use)g(by)g(other)f(modules,)h (simply)f(instantiate)f(one)i(or)g(more)h(instances)e(of)h(your)g (subtypes)0 1411 y(of)g Fp(interface)s Ft(:)p Fp(otype)p Ft(.IMPL)f Fs(\(which)g(will)g(inherit)g(from)i Ft(ilu:ilu-true-object) p Fs(.)120 1500 y Ft(=>)25 b Fj(\(make-instance)e('foo:my-bar.impl)h (:ilu-kernel-server)f(s\))120 1550 y Ft(#)120 1600 y(=>)62 1715 y Fs(The)11 b(simplest)f(Common)i(Lisp)e (``server'')i(code)f(would)f(look)g(something)g(like:)120 1803 y Ft(\(defun)24 b(start-server)g(\(\))170 1853 y(\(make-instance)f ('foo:my-bar.impl\)\))62 1968 y Fs(which)11 b(will)f(create)i(an)f (instance)f(of)h Ft(FOO:MY-BAR.IMPL)f Fs(and)h(export)g(it)g(via)g(a)g (default)g(server.)62 2057 y(To)h(enable)f(users)g(of)h(your)f(module)g (find)g(the)g(exported)g(objects,)g(you)g(may)h(register)f(the)g (string)g(binding)e(handle)i(of)0 2119 y(the)f(object)g(or)g(objects,)g (along)g(with)f(their)h(type)g(IDs,)g(in)g(any)g(name)h(service)g(or)f (registry)f(that)h(is)g(convenient)f(for)i(you.)f(In)0 2181 y(release)h(1.6)g(of)g(ILU,)g(we)g(are)h(supporting)d(an)i (experimental)f(simple)g(binding)f(method)i(that)f(allows)g(you)g(to)h (``publish'')0 2244 y(an)19 b(object,)g(which)f(registers)g(it)g(in)g (a)h(domain-wide)e(registry,)j(and)e(then)g(to)g(withdraw)f(the)i (object,)h(if)e(necessary.)0 2306 y(Potential)12 b(clients)g(can)h (find)g(the)g(string)f(binding)f(handle)h(and)h(type)g(ID)g(of)g(the)g (object)f(by)h(calling)f(a)i(lookup)d(function.)0 2368 y Fn(Note)30 b(that)g(this)g(interface)h(and)g(service)e(is)h (experimental,)i(and)e(may)g(be)g(supported)h(differently)g(in)0 2430 y(future)26 b(releases)e(of)h(the)h(ILU)e(system.)62 2519 y Fs(If)13 b(you)e(wanted)g(to)h(create)h(an)f(instance,)f(and)h (publish)e(it,)i(the)g(code)g(for)g(starting)e(a)j(service)e(might)h (look)f(something)0 2581 y(like)g(this:)120 2670 y Ft(\(defun)24 b(start-server)g(\(\))p eop %%Page: 155 156 155 155 bop 0 -58 a Fs(Chapter)11 b(8:)g(Using)f(ILU)h(with)f(Common)i (Lisp)1118 b(155)170 183 y Ft(\(let*)24 b(\(\(ks)h(\(make-instance)e ('ilu:kernel-server)519 233 y(;;)h(specify)g(the)h(service)f(id)519 283 y(:id)g("service.localdomain.company.com"\)\))344 333 y(\(si)h(\(make-instance)e('foo:my-bar.impl)519 382 y(;;)h(specify)g(the)h(server)519 432 y(:ilu-kernel-server)e(ks)519 482 y(;;)h(specify)g(the)h(instance)f(handle)519 532 y(:ilu-instance-handle)f("theServer"\)\)\))220 582 y(;;)h(the)h(OID)g (for)f("si")h(is)f(now)h("theServer@service.localdomain.company.)o (com")220 632 y(\(ilu:publish)e(si\))220 681 y(si\)\))62 794 y Fs(Someone)12 b(who)e(wanted)h(to)g(use)g(this)f(service)h(could) f(then)h(find)f(it)h(with)f(the)h(following:)120 882 y Ft(\(defun)24 b(find-server)g(\(\))170 932 y(\(ilu:lookup)g('foo:bar) g("theServer@service.localdomain.compa)o(ny.com"\)\))0 1058 y Fn(8.4.2.3)f(Debugging)62 1162 y Fs(To)f(help)g(with)g(finding)f (errors)h(in)g(your)g(methods,)j(the)d(variable)h Ft (*debug-uncaught-conditions*)d Fs(is)0 1225 y(provided.)0 1351 y Fo(8.4.3)26 b(Using)14 b(an)h(ILU)h(module)f(in)g(Common)g(Lisp) 62 1455 y Fs(To)21 b(use)h(a)g(module)f(from)h(Common)g(Lisp,)h(you)e (must)g(first)g(have)h(loaded)f(the)g(PDEFSYS)h(``system'')g(that)0 1517 y(describes)14 b(the)h(module.)23 b(Typically,)15 b(for)g(an)h(ILU)f(interface)g(called)g Fp(Foo)p Fs(,)h(the)f(system)g (can)g(be)g(loaded)g(by)f(invoking)0 1579 y Ft(\(pdefsys:load-system)9 b(:foo\))p Fs(.)18 b(Next,)c(you)f(must)g(bind)f(an)i(instance)f(of)g (an)g(object)g(from)h(that)f(interface.)18 b(The)0 1642 y(most)d(common)h(way)g(of)g(doing)f(this)f(is)i(to)f(receive)h(an)g (instance)f(of)h(an)g(object)f(from)h(a)g(method)g(called)f(on)h (another)0 1704 y(object.)23 b(But)15 b(to)g(get)g(the)g(first)g (object)f(exported)h(by)g(that)f(module,)j(one)e(can)g(use)g(either)g Ft(ilu:sbh->instance)f Fs(or)0 1766 y Ft(ilu:lookup)p Fs(.)0 1892 y Fo(8.4.4)26 b(Dumping)14 b(an)h(image)g(with)f(ILU)62 1997 y Fs(ILU)e(has)f(dynamic)h(runtime)f(state.)h(In)g(particular,)f (after)h(it)f(is)g(initialized,)f(it)i(uses)f(several)g(Common)h(Lisp)f (threads)0 2059 y(to)18 b(maintain)f(part)h(of)g(its)f(state,)j(and)d (may)i(also)e(keep)h(open)g(connections)e(on)i(operating)f(system)g (communication)0 2121 y(interfaces.)d(If)f(you)e(wish)g(to)h(dump)g(an) g(image)g(containing)e(ILU,)j(you)e(must)h(dump)g(the)f(image)i(before) f(initializing)d(the)0 2183 y Ft(ILU)i Fs(module.)62 2271 y(Initialization)h(occurs)h(automatically)g(whenever)g(a)i (instance)e(of)g Ft(ilu:ilu-object)g Fs(or)h Ft(ilu:rpc-server)f Fs(is)0 2333 y(created.)f(Thus)c(you)i(should)e(not)h(create)i(any)e (instances)g(of)h(either)f(true)h(or)g(surrogate)f(ILU)h(objects)f (before)h(dumping)e(the)0 2396 y(image.)14 b(However,)e(you)f(may)h (load)f(all)g(the)h(interface)g(code)g(for)g(any)f(interfaces)h(that)f (you)g(are)h(using,)f(before)h(dumping)0 2458 y(the)f(image.)62 2545 y(Initialization)f(may)j(also)e(be)i(accomplished)e(by)h(an)g (explicit)f(call)h(to)g Ft(ilu:initialize-ilu)p Fs(.)h(You)e(may)i (check)0 2608 y(to)j(see)h(whether)f(the)h(system)f(has)g(been)h (initialized)d(by)i(examining)g(the)g(variable)h Ft (ilu::*ilu-initialized*)p Fs(,)0 2670 y(which)10 b(is)h Ft(t)g Fs(iff)h Ft(ilu:initialize-ilu)d Fs(has)i(been)g(invoked.)p eop %%Page: 156 157 156 156 bop 0 -58 a Fs(Chapter)11 b(8:)g(Using)f(ILU)h(with)f(Common)i (Lisp)1118 b(156)0 183 y Fo(8.4.5)26 b(Notes)15 b(for)f(Microsoft)h (Windows)f(Users)0 332 y Fn(8.4.5.1)23 b(Installation)13 b(on)i(the)h(MS)f(Windows)g(platform)62 438 y Fs(To)f(install)d(the)j (Lisp)e(binding)g(on)h(the)h(MS)g(Windows)e(platform)h(proceed)h(as)g (follows:)g(Copy)f(or)h(rename)g(the)f(file)0 500 y(`)p Ft(ilu-non-threaded-sysdcl.lisp)p Fs(')8 b(in)i(directory)g(`)p Fp(ILUSRC)t Ft(\\runtime\\lisp)p Fs(')g(to)g(`)p Ft(ilu-sysdcl.lisp)p Fs('.)0 562 y(Compile)h(the)g(Lisp)f(runtime)h(files;)f(i.e.,)i(start)f (Allegro)f(and)h(type:)120 652 y Ft(\(load)24 b ("c:\\\\ilu\\\\src\\\\runtime\\\\lisp\\\\compile-files)o(.lisp"\))62 769 y Fs(Copy)13 b(the)g(resulting)e(`)p Ft(*.fsl)p Fs(')i(files)g(and) f(the)h(files)g(`)p Ft(ilu-sysdcl.lisp)p Fs(')f(and)h(`)p Ft(pdefsys.lisp)p Fs(')f(to)g(the)h(Lisp)0 831 y(installation)c (directory)i(\(`)p Fp(ILUHOME)t Ft(\\lisp)p Fs('\).)i(Copy)e(the)h(ILU) f(kernel)h(and)f(Lisp)g(DLLs)g(into)f(a)i(directory)f(that)g(is)h(on)0 893 y(your)f Ft(PATH)p Fs(.)0 1025 y Fn(8.4.5.2)23 b(Allegro)14 b(3.0.1)h(Needs)g Fg(ilu:run-main-)q(loop)62 1131 y Fs(Because)g (Allegro)e(3.0.1)h(is)f(single-threaded,)h(servers)f(on)h(Windows)e (95/NT)h(must)h(run)f(the)h(ILU)g(mainloop.)19 b(To)0 1194 y(run)11 b(it)g(indefinitely,)e(use)120 1283 y Ft (\(ilu:run-main-loop\))62 1400 y Fs(Or)j(allocate)e(a)i(handle,)f (which)f(can)i(later,)f(presumably)g(in)f(a)i(method)f(call,)g(be)g (used)g(to)g(exit)f(the)h(event)g(loop:)120 1490 y Ft(\(setf)24 b(*handle*)h(\(ilu:create-main-loop-handle\)\))120 1539 y(\(ilu:run-main-loop)e(*handle*\))120 1589 y(...)120 1639 y(\(ilu:exit-main-loop)g(*handle*\))62 1756 y Fs(For)f(example,)k (to)21 b(run)h(the)f(example)h(server)g(in)g(directory)f(`)p Ft(examples/test1)p Fs(',)j(start)d(Allegro)g(3.0.1)h(for)0 1818 y(Windows,)10 b(and)h(type)g(the)f(following:)120 1908 y Ft(\(load)24 b ("c:\\\\ilu\\\\examples\\\\test1\\\\load-lisp-exampl)o(e.lisp"\))120 1958 y(\(test1-server:start-server\))120 2007 y(\(ilu:run-main-loop\))0 2139 y Fo(8.4.6)i(The)15 b(Portable)f(DEFSYSTEM)i(Module)62 2245 y Fs(ILU)e(support)e(uses)h(a)h(portable)f(implementation)f(of)h Ft(DEFSYSTEM)g Fs(to)h(specify)f(modules)f(to)i(Common)g(Lisp.)j(See)0 2308 y(Section)11 b(C.1)g([The)h(ILU)f(Common)g(Lisp)g(Portable)f (DEFSYSTEM)i(Module],)f(page)g(291,)g(for)h(details)e(of)h(this)f (system.)0 2439 y Fo(8.4.7)26 b(ILU)15 b(Common)h(Lisp)f(Lightweight)f (Processes)62 2545 y Fs(ILU)h(currently)f(assumes)g(the)h(existence)f (of)h(lightweight)d(process,)j(or)g(thread,)h(support)d(in)i(your)f (Common)h(Lisp)0 2608 y(implementation.)25 b(It)16 b(uses)f(these)h (internally)e(via)i(a)h(generic)f(veneer,)i(described)d(fully)g(in)h (Section)f(D.11)h([The)g(ILU)0 2670 y(Common)c(Lisp)e(Lightweight)e (Process)k(System],)f(page)g(310.)p eop %%Page: 157 158 157 157 bop 0 -58 a Fs(Chapter)11 b(8:)g(Using)f(ILU)h(with)f(Common)i (Lisp)1118 b(157)0 183 y Fo(8.4.8)26 b(Porting)14 b(ILU)i(to)f(a)g(New) g(Common)g(Lisp)h(Implementation)62 291 y Fs(The)24 b(Lisp)f(support)f (provided)h(with)g(ILU)g(includes)g(support)f(for)i(the)g(Franz)g (Allegro)f(Common)h(Lisp)f(4.x)0 353 y(implementation.)f(To)15 b(use)g(ILU)g(with)f(other)h(Common)h(Lisp)e(implementations,)h(please) g(see)g(Section)g(E.6)g([Porting)0 415 y(ILU)c(to)g(Common)g(Lisp)g (Implementations],)f(page)h(316.)0 568 y Fu(8.5)30 b(Common)15 b(Lisp/ILU)g(API)g(Reference)1759 709 y Fs(Method)-1901 b Fo(ilu:ilu-class-info)20 b Fk(\()p Fp(DISC)c Fk(\()p Ft(or)11 b(ilu:ilu-object)f(type-name)p Fk(\)\))h(\()p Fp(WHAT)k Ft(keyword)p Fk(\))208 771 y Fp(=)p Ft(>)10 b Fk(\()p Ft(or)i(string)f(boolean)f(list)p Fk(\))120 833 y Fs(This)i(routine)g(will)h(return)f(the)h(specified)g(piece)g(of) g(information)f(about)h(the)g(ILU)g(class)g(specified)f(with)120 896 y Fp(DISC)p Fs(,)h(which)e(may)i(be)f(either)g(a)g(CLOS)g(class)g (name,)h(or)f(an)g(instance)g(of)g(the)f(class,)h(and)g(with)f Fp(WHAT)p Fs(,)120 958 y(which)f(identifies)g(which)g(piece)i(of)f (information)f(to)h(return.)g Fp(WHAT)k Fs(may)c(have)h(the)f (following)e(values:)157 1049 y Fr(\017)30 b Ft(:authentication)10 b Fs(--)i(what)f(kind)f(of)i(authentication,)d(if)j(any,)f(is)g (expected)g(by)g(the)h(methods)e(of)210 1111 y(this)g(class)157 1190 y Fr(\017)30 b Ft(:brand)11 b Fs(--)g(the)g(brand)g(of)g(the)g (object)g(type,)g(if)g(any)157 1269 y Fr(\017)30 b Ft(:collectible-p)14 b Fs(--)h(whether)g(or)g(not)g(the)f(object)h(type)f(participates)g(in) h(the)g(ILU)g(distributed)210 1331 y(GC)157 1410 y Fr(\017)30 b Ft(:doc-string)10 b Fs(--)i(the)f(doc)g(string)f(specified)g(for)i (the)f(object)f(type)157 1488 y Fr(\017)30 b Ft(:id)11 b Fs(--)h(the)f(ILU)g(unique)f(ID)h(for)g(the)g(object)g(type)157 1567 y Fr(\017)30 b Ft(:ilu-version)8 b Fs(--)h(which)f(version)g(of)h (ILU)g(the)g(stubber)f(that)g(generated)h(the)f(code)h(for)g(this)f (object)210 1629 y(type)j(came)h(from)157 1708 y Fr(\017)30 b Ft(:methods)11 b Fs(--)g(a)h(list)e(of)h(the)g(methods)f(of)i(the)e (object)h(type)157 1786 y Fr(\017)30 b Ft(:optional-p)18 b Fs(--)h(whether)f(values)f(of)i(this)e(class)h(are)h(allowed)f(to)g (be)g Ft(cl:nil)g Fs(\(a)h(CORBA)210 1849 y(excrescence\))157 1927 y Fr(\017)30 b Ft(:name)11 b Fs(--)h(the)e(ILU)i(name)f(of)h(the)e (object)h(type)1759 2047 y(Method)-1901 b Fo(cl:make-instance)11 b('ilu:kernel-server)21 b Fs(&key)12 b(\()p Fp(id)f Ft(string)24 b(nil)p Fs(\))11 b(\()p Fp(unix-port)f Ft(fixnum)208 2110 y(0)p Fs(\))h(\()p Fp(object-table)f Ft(list)h(of)g(2)g(elements) 25 b(nil)p Fs(\))11 b(\()p Fp(protocol)f Ft(string)24 b("sunrpc")p Fs(\))11 b(\()p Fp(transport)208 2172 y Ft(list)g(of)g(string)24 b(\("sunrpcrm")10 b("tcp_0_0"\))p Fs(\))h Fp(=)p Ft(>)g(ilu:kernel-server)120 2234 y Fs(Creates)g(and)f (returns)f(an)h(instance)g(of)g Ft(ilu:kernel-server)p Fs(.)g(If)g Fp(id)15 b Fs(is)10 b(specified,)g(the)f(server)i(has)f (that)120 2296 y(value)j(for)h(its)f(server)h(ID.)g(If)h Fp(unix-port)h Fs(is)d(specified,)h(the)g(server)g(attempts)f(to)g (`listen')g(on)g(that)g(UNIX)120 2359 y(port,)g(if)f(the)h(notion)e(of) h(a)h(UNIX)g(port)f(is)g(applicable.)j(If)e Fp(object-table)h Fs(is)e(specified,)h(it)f(must)g(consist)f(of)120 2421 y(a)i(list)e(of)h(two)g(functions.)h(The)f(first)g(function)f(must)h (take)g(a)h(string,)f(which)f(is)h(the)g(instance)g(handle)f(of)i(a)120 2483 y(desired)e(object)g(on)h(this)e(kernel)i(server,)g(and)g(return)f (a)h(value)g(of)f(type)h Ft(ilu:ilu-true-object)p Fs(.)f(The)120 2545 y(second)j(funtion)g(must)h(free)h(up)e(any)h(resources)g(used)g (by)g(this)f(object)g(table.)23 b(Specific)15 b(protocols)e(and)120 2608 y(transport)d(stacks)g(can)h(be)g(specified)f(with)g(the)h Ft(protocol)f Fs(and)h Ft(transport)f Fs(keywords;)f(these)i(default) 120 2670 y(to)g(whatever)g(defaults)f(were)i(selected)e(when)h(your)g (ILU)g(installation)d(was)j(built.)p eop %%Page: 158 159 158 158 bop 0 -58 a Fs(Chapter)11 b(8:)g(Using)f(ILU)h(with)f(Common)i (Lisp)1118 b(158)1759 183 y(Method)-1901 b Fo(cl:make-instance)11 b('ilu:ilu-true-ob)o(ject)20 b Fs(&key)11 b(\()p Fp(ilu-kernel-server) 208 246 y Ft(ilu:kernel-server)23 b(nil)p Fs(\))11 b(\()p Fp(ilu-instance-handle)e Ft(string)24 b(nil)p Fs(\))12 b Fp(=)p Ft(>)208 308 y(ilu:ilu-true-object)120 370 y Fs(Creates)k(and)g(returns)f(an)h(instance)e(of)i Ft (ilu:ilu-true-object)p Fs(.)24 b(If)16 b Fp(ilu-true-server)i Fs(is)e(specified,)120 432 y(the)11 b(instance)g(is)g(created)h(on)f (the)g(specified)g(server.)h(If)g Fp(ilu-instance-handle)g Fs(is)f(specified,)g(that)g(instance)120 495 y(handle)g(is)f(used.)1744 618 y(Variable)-1901 b Fo(ilu:*caller-identity*)120 681 y Fs(The)24 b(identity)e(of)h(the)h(caller)g(is)f(bound)g(to)g(the)h (special)f(variable)h Ft(ilu:*caller-identity*)p Fs(.)120 743 y(It)e(is)f(a)h(string)e(which)h(begins)g(with)g(the)g(name)h(of)g (an)g(identity)e(scheme,)25 b(followed)20 b(by)i(an)g(iden-)120 805 y(tity)h(in)h(that)g(scheme.)52 b(For)25 b(example,)k(an)24 b(identity)f(in)h(the)g(SunRPC)i(UNIX)e(identity)f(scheme)120 868 y(would)30 b(be)h(something)f(like)g Ft ("sunrpc-unix:2345,67@13.12.11.10")e Fs(\(i.e.,)38 b Ft("sunrpc-)120 930 y(unix:<)p Fp(uid)p Ft(>,<)p Fp(gid)p Ft(>@<)p Fp(hos)o(tname)p Ft(>")p Fs(\).)50 b(If)25 b(no)f(identity)f (is)i(furnished,)i(a)e(zero-length)f(string)g(is)120 992 y(bound.)1739 1116 y(Function)-1902 b Fo(ilu:publish)21 b Fk(\()p Fp(OBJ)15 b Ft(ilu:ilu-object)p Fk(\))10 b Fp(=)p Ft(>)h(boolean)120 1178 y Fs(Accepts)k(an)g Ft(ilu:ilu-object)f Fs(instance)h(and)g(registers)f(it)h(with)f(some)i(domain-wide)e (registration)120 1240 y(service.)30 b(The)18 b(object)e(is)h(known)g (by)g(its)g Fp(object)f(ID)21 b Fs(\(OID\),)d(which)f(is)g(composed)g (of)h(the)f(ID)h(of)f(its)120 1303 y(kernel)9 b(server,)i(plus)d(a)i (server-relative)f(instance)g(ID,)h(typically)d(composed)i(as)h Fp(instance-ID)s Ft(@)p Fp(server-ID)s Fs(.)120 1365 y(Clients)f(may)h(find)f(the)h(object)f(by)h(looking)e(up)h(the)h(OID)g (via)f(the)h Ft(ilu:lookup)f Fs(function.)h(The)g(function)120 1427 y(returns)h(non-)p Ft(cl:nil)f Fs(if)h(the)g(publication)e (succeeded.)1739 1551 y(Function)-1902 b Fo(ilu:withdraw)20 b Fk(\()p Fp(OBJ)c Ft(ilu:ilu-object)p Fk(\))10 b Fp(=)p Ft(>)h(boolean)120 1613 y Fs(If)22 b Fp(OBJ)k Fs(is)21 b(registered,)k(and)c(if)h(it)f(was)h(published)d(by)j(the)f(same)i (address)e(space)h(that)f(is)g(calling)120 1676 y Ft(withdraw)p Fs(,)12 b(its)f(registration)g(is)g(withdrawn.)i(The)f(function)f (returns)h(non-)p Ft(cl:nil)f Fs(if)h(the)g(object)f(is)h(no)120 1738 y(longer)e(published.)1744 1862 y(Variable)-1901 b Fo(ilu:*debug-uncaugh)o(t-)o(condit)o(ions*)120 1924 y Fs(If)18 b Ft(cl:t)p Fs(,)i(causes)d(a)i(server)f(to)f(invoke)g(the)g (debugger)g(when)g(an)h(unhandled)f(error)h(in)f(user)h(code)g(is)120 1986 y(encountered,)c(rather)g(than)g(the)f(default)g(action)h(of)g (signalling)d(an)j(exception)f(back)h(to)f(the)h(caller.)19 b(The)120 2049 y(default)11 b(value)f(is)h Ft(cl:nil)p Fs(.)1739 2173 y(Function)-1902 b Fo(ilu:register-custom-surrogate)21 b Fk(\()p Fp(CLASS-NAME)16 b Ft(symbol)p Fk(\))11 b(\()p Fp(CUSTOM-CLASS)208 2235 y Ft(clos:standard-class)p Fk(\))120 2297 y Fs(Instructs)g(the)i(runtime)f(to)h(create)g(an)g(instance)f(of) g Fp(CUSTOM-CLASS)17 b Fs(whenever)12 b(it)g(would)g(normally)120 2359 y(create)i(a)f(new)g(instance)f(of)i(the)e(ILU)h(object)g(type)f (named)i(by)e Fp(CLASS-NAME)p Fs(,)i(which)f(should)e(be)i(the)120 2422 y(Common)j(Lisp)f(name)h(for)g(the)f(object)g(type.)24 b Fp(CUSTOM-CLASS)19 b Fs(must)c(be)h(a)g(subtype)e(of)h(the)h(class) 120 2484 y(named)c(by)e Fp(CLASS-NAME)p Fs(.)1739 2608 y(Function)-1902 b Fo(ilu:initialize-ilu)120 2670 y Fs(Initializes)10 b(the)h Ft(ILU)g Fs(module.)p eop %%Page: 159 160 159 159 bop 0 -58 a Fs(Chapter)11 b(8:)g(Using)f(ILU)h(with)f(Common)i (Lisp)1118 b(159)1739 183 y(Function)-1902 b Fo(ilu:sbh-)p Ft(>)p Fo(instance)20 b Fk(\()p Fp(PUTATIVE-TYPE-NAME)15 b Ft(symbol)p Fk(\))c(\()p Fp(SBH)16 b Ft(string)p Fk(\))208 246 y Fs(&optional)9 b(\()p Fp(MOST-SPECIFIC-TYPE-ID)17 b Ft(simple-string)24 b(mstid)11 b(of)g(specified)208 308 y(PUTATIVE-TYPE)p Fs(\))f Fp(=)p Ft(>)h(ilu:ilu-object)120 370 y Fs(Accepts)j(an)g(ILU)f(string)g(binding)f(handle)i(and)f(Common) i(Lisp)e(type)g(name,)j(and)e(attempts)f(to)g(locally)120 432 y(bind)g(an)h(instance)f(of)h(that)g(type)f(with)g(the)h(OID)g (specified)f(in)h(the)f(string)g(binding)f(handle.)20 b(If)14 b(no)g(such)120 495 y(instance)g(exists)g(locally,)h(a)g (surrogate)g(instance)f(is)g(created)h(and)g(returned.)23 b(If)15 b(a)h(true)e(instance)g(exists)120 557 y(locally,)c(that)h (instance)f(will)g(be)i(returned.)1739 669 y(Function)-1902 b Fo(ilu:lookup)20 b Fk(\()p Fp(server-id)c Ft(simple-string)p Fk(\))11 b(\()p Fp(instance-handle)h Ft(simple-string)p Fk(\))208 731 y(\()p Fp(PUTATIVE-TYPE-NAME)i Ft(symbol)p Fk(\))d Fp(=)p Ft(>)g Fk(\()p Ft(or)h(nil)f(ilu:ilu-object)p Fk(\))120 793 y Fs(This)f(routine)g(will)g(find)g(and)h(return)g(an)g (object)f(with)g(a)i(server)f(ID)g(of)g Fp(server-id)16 b Fs(and)11 b(instance)f(handle)g(of)120 856 y Fp(instance-handle)p Fs(,)i(if)h(such)g(an)g(object)f(has)h(been)g(registered)g(in)f(the)h (local)g(domain)f(via)h(the)g(ILU)g(simple)120 918 y(binding)c (protocol.)h(See)i(the)f(section)g(on)f(``Exporting)g(Objects'')g(for)i (an)f(example.)1759 1030 y(Method)-1901 b Fo(ilu:ping)21 b Fk(\()p Fp(DISC)15 b Ft(ilu:ilu-object)p Fk(\))c Fp(=)p Ft(>)g Fk(\()p Ft(or)g(t)g(nil)p Fk(\))120 1092 y Fs(Returns)i Ft(cl:t)g Fs(if)h(the)f(true)g(object)g(for)h Fp(DISC)k Fs(exists,)13 b(and)g(the)g(process)g(serving)g(it)g(can)h(be)f (contacted;)120 1155 y Ft(cl:nil)e Fs(otherwise.)p eop %%Page: 160 161 160 160 bop 0 -58 a Fs(Chapter)11 b(9:)g(Using)f(ILU)h(with)f(Scheme)i (\(Guile\))1094 b(160)0 183 y Fq(9)36 b(Using)14 b(ILU)h(with)g(Scheme) f(\(Guile\))0 373 y Fu(9.1)30 b(Introduction)62 477 y Fs(This)10 b(document)g(is)g(for)h(the)g(Scheme)h(programmer)f(who)f (wishes)g(to)g(use)h(ILU.)g(The)f(following)f(sections)g(will)h(show)0 539 y(how)k(ILU)h(is)g(mapped)g(into)f(Scheme)i(constructs)e(and)g(how) h(both)f(Scheme)i(clients)e(and)h(servers)g(are)g(generated)g(and)0 601 y(built.)62 689 y(The)c(Scheme)i(support)c(in)i(ILU)g(was)g(kindly) f(donated)g(by)0 751 y(Siemens)30 b(Corporate)f(Research)h(Inc.)67 b(\()p Ft(http://www.scr.siemens.com/)p Fs(\),)32 b(andwritten)c(by)h (Bill)g(Nell)0 813 y(\()p Ft(mailto:bnell@scr.siemens.com)p Fs(\).)0 952 y Fu(9.2)h(The)14 b(ISL)i(Mapping)g(to)f(Scheme)0 1094 y Fo(9.2.1)26 b(Names)62 1198 y Fs(The)15 b(mapping)f(of)h(ISL)g (names)h(to)e(Scheme)i(names)f(for)h(objects)d(and)i(methods)f(are)i (described)e(in)h(the)f(following)0 1260 y(sections.)c(For)i(all)e (other)h(ISL)h(types)e(and)h(exceptions)f(the)h(Scheme)h(name)g(will)e (be)h Fp(module-name)s Fs(:name.)0 1386 y Fo(9.2.2)26 b(Basic)15 b(Types)62 1490 y Fs(This)e(section)f(describes)h(the)h (mapping)e(of)i(ISL)g(types)f(to)g(Scheme)i(types.)i(Note)d(that)f (some)g(mappings)g(use)g(extra)0 1552 y(precision)g(where)h(it)g(is)f (not)g(necessary.)20 b(This)13 b(is)h(because)g(the)g(Scheme)h(types)e (have)h(no)g(finer)g(distinctions)c(for)15 b(these)0 1614 y(types.)c(The)g(basic)f(ISL)i(types)e(have)i(the)e(following)g (mapping)g(to)h(Scheme)h(constructs:)37 1702 y Fr(\017)30 b Fs(ISL)12 b Ft(boolean)e Fs(is)h(mapped)g(to)g(Scheme)h Ft(boolean)p Fs(;)37 1777 y Fr(\017)30 b Fs(ISL)12 b Ft(short)e(cardinal)h Fs(is)g(mapped)g(to)g(Scheme)h Ft(unsigned)f(long)p Fs(;)37 1852 y Fr(\017)30 b Fs(ISL)12 b Ft(cardinal)e Fs(is)h(mapped)g(to)g(Scheme)h Ft(unsigned)f(long)p Fs(;)37 1927 y Fr(\017)30 b Fs(ISL)12 b Ft(long)f(cardinal)f Fs(is)h(mapped)g(to)g(Scheme)h Ft(pair)f(\(unsigned)g(long)g(.)g (unsigned)f(long\))p Fs(;)37 2002 y Fr(\017)30 b Fs(ISL)12 b Ft(short)e(integer)h Fs(is)g(mapped)g(to)g(Scheme)h Ft(long)p Fs(;)37 2077 y Fr(\017)30 b Fs(ISL)12 b Ft(integer)e Fs(is)h(mapped)g(to)g(Scheme)h Ft(long)p Fs(;)37 2152 y Fr(\017)30 b Fs(ISL)12 b Ft(long)f(int)g Fs(is)f(mapped)i(to)e (Scheme)j Ft(pair)e(\(long)f(.)i(unsigned)e(long\))p Fs(;)37 2227 y Fr(\017)30 b Fs(ISL)12 b Ft(short)e(real)h Fs(is)g(mapped)g(to)g(Scheme)h Ft(double)f(precision)g(real)p Fs(;)37 2302 y Fr(\017)30 b Fs(ISL)12 b Ft(real)f Fs(is)f(mapped)h(to)g (Scheme)h Ft(double)f(precision)g(real)p Fs(;)37 2377 y Fr(\017)30 b Fs(ISL)12 b Ft(short)e(character)h Fs(is)g(mapped)g(to)g (Scheme)h Ft(character)p Fs(;)37 2452 y Fr(\017)30 b Fs(ISL)12 b Ft(character)e Fs(is)h(mapped)g(to)g(Scheme)h Ft(long)p Fs(;)37 2527 y Fr(\017)30 b Fs(ISL)12 b Ft(byte)f Fs(is)f(mapped)h(to)g(Scheme)h Ft(character)p Fs(.)0 2653 y Fn(9.2.2.1)23 b(Constant)p eop %%Page: 161 162 161 161 bop 0 -58 a Fs(Chapter)11 b(9:)g(Using)f(ILU)h(with)f(Scheme)i (\(Guile\))1094 b(161)0 183 y Fo(9.2.3)26 b(Strings)37 287 y Fr(\017)k Fs(ISL)12 b Ft(string)e Fs(is)h(mapped)g(to)g(Scheme)h Ft(string)p Fs(.)37 359 y Fr(\017)30 b Fs(ISL)12 b Ft(wstring)e Fs(is)h(mapped)g(to)g(Scheme)h Ft(vector)f(of)g(unsigned)g(longs)p Fs(.)0 477 y Fo(9.2.4)26 b(Pickles)15 b(and)g(Typecodes)62 581 y Fs(Not)c(implemented)g(yet.)0 699 y Fo(9.2.5)26 b(Constructed)14 b(Types)0 834 y Fn(9.2.5.1)23 b(Enumeration)62 937 y Fs(Implemented)11 b(with)g(a)g(set)g(of)g(symbols)f(bound)g(to)h (the)g(integer)f(values)h(of)g(the)g(enumeration)g(type.)0 1056 y Fn(9.2.5.2)23 b(Array)62 1159 y Fs(Arrays)17 b(are)h (implemented)e(as)h(Scheme)h Ft(vector)p Fs(s.)28 b(For)17 b(arrays,)i(a)e(Scheme)h(function)d(will)h(be)h(generated)g(that)0 1222 y(takes)c(no)f(arguments)h(and)g(returns)f(a)i(vector)f(with)f (dimensions)f(corresponding)g(to)i(the)g(ISL)g(array)h(type.)j(The)c (user)g(is)0 1284 y(responsible)c(for)j(setting)d(elements)i(in)g(the)g (vector.)0 1402 y Fn(9.2.5.3)23 b(Sequence)62 1506 y Fs(Sequences)16 b(are)g(implemented)f(as)g Ft(list)p Fs(s,)i(except)e(for)h(sequences)f(of)g(characters,)i(which)e(are)h (implemented)f(as)0 1568 y Ft(string)p Fs(s.)0 1686 y Fn(9.2.5.4)23 b(Record)62 1790 y Fs(Each)13 b(record)f(is)g(mapped)g (to)g(an)h(ILU-YASOS)f(object.)i(Each)f(object)e(has)h(a)h(constructor) e(named)i(\(make-)p Fp(module-)0 1852 y(name)s Fs(:)p Fp(record-name)s Fs(\))h(that)f(takes)h(no)f(arguments.)20 b(Each)13 b(object)h(also)f(has)h(methods)f(to)g(get)h(and)f(set)h(all) f(the)h(fields)f(of)0 1915 y(that)g(record.)21 b(These)14 b(accessors)f(follow)g(the)h(pattern)g(of)g(\(get-)p Fp(field-name)i Fs(obj\))e(and)f(\(set-)p Fp(field-name)k Fs(obj)c(value\).)20 b(In)0 1977 y(the)11 b(future)g(record)g (constructors)f(will)g(be)h(able)g(to)g(take)g(arguments)g(to)g (initialize)e(their)i(fields.)0 2095 y Fn(9.2.5.5)23 b(Union)62 2199 y Fs(Unions)9 b(are)i(implemented)f(as)h(a)g(cons'ed)f (value,)g(with)g(the)g(cdr)h(containing)d(the)j(union)e(type)h (discriminant,)f(and)h(the)0 2261 y(cdr)g(containing)e(the)h(actual)h (value.)h(For)f(union)e(types,)i(a)g(constructor)e(function)h(taking)f (two)h(arguments)h(is)f(created.)i(The)0 2323 y(first)i(argument)g(is)g (the)g(discriminator)f(and)h(the)h(second)e(is)h(the)h(union)e(value.) 18 b(The)13 b(discriminator)f(of)h(a)h(union)e(can)i(be)0 2386 y(accessed)e(or)f(set)h(using)e(the)h Ft(car)h Fs(and)f Ft(set-car!)g Fs(functions,)g(respectively.)h(The)f(value)g(of)h(a)g (union)e(can)i(be)g(accessed)0 2448 y(or)f(set)g(using)f(the)h Ft(cdr)g Fs(and)g Ft(set-cdr!)g Fs(functions,)e(respectively.)0 2566 y Fn(9.2.5.6)23 b(Optional)62 2670 y Fs(Either)11 b Ft(#f)g Fs(or)g(the)g(value.)g(Note)g(that)f(this)h(mapping)f(is)h (broken)f(for)i(optional)d(boolean)h(types.)p eop %%Page: 162 163 162 162 bop 0 -58 a Fs(Chapter)11 b(9:)g(Using)f(ILU)h(with)f(Scheme)i (\(Guile\))1094 b(162)0 183 y Fo(9.2.6)26 b(Object)14 b(Types)62 287 y Fs(Each)d(object)g(is)g(mapped)g(to)g(an)g(ILU-YASOS)g (object.)62 374 y(Each)j(object)g(type)f(has)h(a)h(constructor)d(named) j(\(make-)p Fp(module-name)s Fs(:)p Fp(object-name)s Fs(\))e(that)h(takes)g(no)f(arguments.)0 436 y(The)e(user)g(should)f (not)g(attempt)h(to)f(create)i(objects)e(using)g(the)h(constructor)f (since)h(these)g(are)g(surrogate)g(objects)f(and)h(not)0 499 y(true)g(objects.)g(All)f(the)h(method)g(names)g(should)f(map)h (exactly)g(as)g(they)g(appear)g(in)g(the)g(ISL)h(definition.)0 623 y Fn(9.2.6.1)23 b(Surrogate)15 b(and)h(True)g(Object)g(Types)1802 752 y Fs(Class)-1901 b Fo(ilu:object)120 814 y Fs(This)13 b(is)h(the)h(root)e(class)h(of)h(all)f(objects)f(in)h(the)h(Scheme)g (LSR.)g(It)g(provides)e(some)i(basic)f(functionality)120 877 y(required)e(by)f(all)h(ILU)f(objects.)i(The)f(public)e(methods)i (are)g(described)f(below.)i(Since)f(ILU-YASOS)g(has)120 939 y(no)h(notion)f(of)i(public)f(or)g(private)g(there)h(are)g (additional)e(methods)h(which)g(are)h(not)f(described)g(here)h(and)120 1001 y(should)c(not)g(ever)i(be)f(called)g(by)g(the)g(user.)157 1088 y Fr(\017)30 b Ft(\(string-binding-handle)9 b Fp(obj)q Ft(\))i Fs(-)h(return)e(the)h(string)f(binding)g(handle)g(of)h Fp(obj)157 1163 y Fr(\017)30 b Ft(\(publish)11 b Fp(obj)q Ft(\))f Fs(-)i(publish)d(this)h(object.)h(Returns)g(a)g(boolean)g (value)f(for)i(success)e(or)i(failure.)157 1238 y Fr(\017)30 b Ft(\(withdraw)11 b Fp(obj)q Ft(\))f Fs(-)i(withdraw)e(this)g(object.) h(Returns)f(a)i(boolean)e(value)h(for)g(success)g(or)g(failure.)157 1312 y Fr(\017)30 b Ft(\(class-name)10 b Fp(obj)q Ft(\))h Fs(-)h(return)e(the)h(class)g(name)h(for)f(this)f(object.)157 1387 y Fr(\017)30 b Ft(\(class-id)11 b Fp(obj)q Ft(\))f Fs(-)i(return)f(the)g(class)f(id)h(for)g(this)f(object.)157 1462 y Fr(\017)30 b Ft(\(get-server)10 b Fp(obj)q Ft(\))h Fs(-)h(get)e(the)h(kernel)g(server)h(that)e(controls)g(this)g(object.) 157 1537 y Fr(\017)30 b Ft(\(get-instance-handle)9 b Fp(obj)q Ft(\))i Fs(-)h(get)f(the)g(instance)f(handle)g(for)i(this)e (object.)157 1611 y Fr(\017)30 b Ft(\(get-kernel-server)10 b Fp(obj)q Ft(\))g Fs(-)i(get)f(the)g(true)g(server)g(for)h(this)e (object.)157 1686 y Fr(\017)30 b Ft(\(get-instance-class-record)9 b Fp(obj)q Ft(\))i Fs(-)g(get)g(the)g(instance)f(class)h(record)g(for)h (this)e(object.)157 1761 y Fr(\017)30 b Ft(\(destroy)11 b Fp(obj)q Ft(\))i Fs(-)g(destroy)g(this)f(surrogate)h(object.)18 b(Unfortunately,)13 b(ILU-YASOS)g(objects)g(are)210 1823 y(not)e(hooked)g(into)g(the)h(scheme)g(garbage)g(collector)f(yet.)i (So,)g(the)f(destroy)f(method)g(must)g(be)h(called)210 1885 y(when)f(you)f(are)i(finished)e(with)g(a)i(surrogate)e(object)h (to)f(prevent)h(memory)h(leaks.)62 1997 y(Surrogate)j(objects)e (present)h(an)g(interface)h(to)f(access)g(a)h(true)f(objects)g(which)f (may)i(or)f(may)h(not)f(live)g(in)f(the)i(same)0 2060 y(address)e(space)h(as)f(the)g(surrogate)g(object.)18 b(The)13 b(user)g(is)g(not)g(allowed)g(to)g(create)h(their)f(own)g (surrogate)f(objects.)18 b(They)0 2122 y(must)11 b(be)g(looked)f(up)h (using)f(a)h(name)h(binding)d(service)j(or)f(through)f(the)g(use)h(if)h (a)f(string)f(binding)f(handle.)62 2209 y(Behind)i(every)g(surrogate)g (object)g(there)g(must)g(be)g(a)h(true)f(object.)g(The)g(user)g(is)g (in)g(charge)g(of)h(defining)e(true)h(objects.)0 2271 y(Implementing)j(a)h(true)f(object)g(for)g(a)h(particular)f(surrogate)g (object)g(is)g(accomplished)f(by)h(subclassing)f(the)h(surrogate)0 2334 y(object)d(class)g(provided)f(by)h(the)g(Scheme)i(stubber.)e(Each) h(true)f(object)g(implementation)f(must)h(override)g(every)h(method)0 2396 y(of)d(the)g(surrogate)g Ft(")p Fs(parent)p Ft(")f Fs(object)h(to)g(work)f(correctly.)j(See)f(the)f(section)f(on)h (ILU-YASOS)g(for)g(implementing)f(objects)0 2458 y(in)j(Scheme.)h (Also,)f(see)g(the)g(examples)g(of)h(a)f(Scheme)h(client)f(and)g (server)g(given)f(in)h(the)g(examples/test1)f(directory.)62 2545 y Fn(IMPORTANT)28 b(CAVEAT)p Fs(:)15 b(When)f(using)f(multiple)g (inheritance)h(with)f(ILU-YASOS)i(objects)e(to)i(implement)0 2608 y Ft(")p Fs(true)p Ft(")g Fs(objects)g(it)g(is)h(important)e(that) h(the)h(correct)g(ILU)g(class)f(record)h(be)g(assigned)e(to)h(the)h (true)g(object.)24 b(The)16 b(class)0 2670 y(record)11 b(of)h(the)f(last)f(class)h(listed)f(in)g(the)h(superclass)f(list)g(of) h(the)g(object)g(definition)e(will)h(be)h(the)g(one)g(used)g(for)g(the) g(object)p eop %%Page: 163 164 163 163 bop 0 -58 a Fs(Chapter)11 b(9:)g(Using)f(ILU)h(with)f(Scheme)i (\(Guile\))1094 b(163)0 183 y(being)10 b(defined.)h(If)h(this)e(is)h (not)f(the)h(desired)g(class)f(record,)i(the)f(implementor)g(must)f (set)h(it)g(by)g(hand.)g(\(Hopefully,)f(in)g(the)0 246 y(future)i(this)f(will)g(be)h(taken)g(care)h(of)f(automatically\).)h (Usually,)e(this)g(is)h(not)f(a)i(problem)f(if)g(you)f(always)h(place)g (the)g(most)0 308 y(specific)f(superclass)f(of)h(an)g(object)g(last)f (in)h(the)g(list)f(of)h(superclasses.)0 433 y Fn(9.2.6.2)23 b(Methods,)15 b(Parameters,)h(and)f(Exceptions)62 537 y Fs(All)8 b(methods)g(take)g(at)g(least)g(two)g(arguments)g(in)g (addition)f(to)h(any)g(other)g(arguments)g(specified)g(in)g(the)g(ISL)h (definition.)0 599 y(The)j(first)f(argument)h(is)f(the)h(object)f(the)h (method)f(is)g(being)g(called)h(on)g(and)f(the)h(second)f(argument)h (is)f(the)h(status)f(object.)0 662 y(The)g(remaining)g(arguments)f(are) i(the)f(same)h(as)f(in)g(the)g(ISL)g(definition.)1802 774 y(Class)-1901 b Fo(ilu:status)120 837 y Fs(This)11 b(is)g(a)h(status)e(object)h(type,)h(used)f(to)h(record)g(the)f (success)g(or)h(failure)g(of)f(all)h(method)f(calls.)i(Later)e(this)120 899 y(will)h(be)h(replaced)h(with)e(catch)h(and)g(throw.)k(Also)12 b(note)h(that)f(even)i(though)d(individual)g(modules)i(create)120 961 y(their)e(own)f(status)g(types,)h(the)g(ilu:status)d(type)j(can)g (still)f(be)h(used)g(in)g(their)f(place.)120 1049 y Ft(ilu:status)g Fs(objects)h(support)e(the)i(following)e(methods:)157 1136 y Fr(\017)30 b Ft(\(get-return-code)10 b Fp(this)r Ft(\))15 b Fs(-)j(get)f(the)g(return)g(code)g(for)g(this)f(status)g (object.)29 b(If)18 b(the)f(value)g(is)210 1198 y(ilu:success)12 b(then)g(the)h(method)g(call)h(was)f(successful.)k(Any)c(other)g(value) g(indicates)f(an)h(exception)210 1261 y(string,)d(which)h(can)g(be)g (printed.)157 1336 y Fr(\017)30 b Ft(\(set-return-code)10 b Fp(this)i Ft(code\))e Fs(-)i(set)f(the)g(return)g(code)g(of)g(this)f (status)g(object.)157 1411 y Fr(\017)30 b Ft(\(get-status-value)10 b Fp(this)r Ft(\))i Fs(-)h(get)g(the)g(value)g(associated)g(with)f(any) h(exception)f(raised)h(in)g(this)210 1473 y(status)f(object.)k(If)e (the)f(call)f(was)h(successful)f(this)g(field)h(should)e(be)i(#f.)18 b(Otherwise)12 b(it)g(will)g(contain)210 1535 y(the)f(contents)f(of)h (an)g(exception)f(record.)157 1610 y Fr(\017)30 b Ft (\(set-status-value)10 b Fp(this)h Ft(value\))j Fs(-)g(set)f(the)h (status)e(value)h(of)h(this)f(status)f(object.)19 b(Used)13 b(for)210 1672 y(setting)d(additional)f(information)h(when)h(an)g (exception)f(is)h(raised.)157 1747 y Fr(\017)30 b Ft (\(get-caller-passport)9 b Fp(this)r Ft(\))h Fs(-)i(get)e(the)h (passport)f(for)i(this)e(method)g(call.)157 1822 y Fr(\017)30 b Ft(\(set-caller-passport)9 b Fp(this)j Ft(passport\))f Fs(-)g(set)g(the)g(passport)f(for)h(this)f(method)h(call.)62 1935 y(Normal)g(methods)g(are)h(called)f(in)f(the)h(following)e (manner:)0 1997 y Ft(\()p Fp(method-name)14 b(object)h(status)c (arguments)r Ft(\))0 2059 y Fs(If)g(any)g(errors)g(are)h(encountered)e (while)g(executing)g(the)g(method,)h(they)f(will)g(be)h(stored)f(in)h (the)f(status)g(object)g(parameter.)0 2122 y(Failed)h(method)g(calls)f (always)h(return)g Ft(#f)p Fs(.)62 2209 y(Arguments)h(defined)h(as)g Ft(")p Fs(out)p Ft(")f Fs(must)h(still)e(be)i(passed)g(as)g (placeholders)f(even)h(though)e(their)i(values)f(are)i(ignored.)0 2271 y(The)g(return)g(values)g(of)g(methods)f(are)i(as)g(follows:)g(If) g(the)f(method)g(has)g(no)g Ft(")p Fs(inout)p Ft(")e Fs(or)i Ft(")p Fs(out)p Ft(")g Fs(parameters,)i(a)e(single)0 2334 y(value)c(is)f(returned.)i(When)f(a)g(method)g(has)g Ft(")p Fs(inout)p Ft(")e Fs(or)i Ft(")p Fs(out)p Ft(")g Fs(parameters)g(the)g(method)g(returns)f(a)i(list)d(of)j(values)e (which)0 2396 y(contains)g(any)h Ft(")p Fs(inout)p Ft(")e Fs(and)i Ft(")p Fs(out)p Ft(")g Fs(values)f(\(in)h(the)g(order)g(they)g (are)h(specified)e(in)h(the)g(ISL)g(definition\))f(followed)g(by)g(the) 0 2458 y Ft(")p Fs(normal)p Ft(")i Fs(return)g(value)g(as)g(the)g(last) f(element)i(of)f(the)g(list.)62 2545 y(All)g(exceptions)e(are)j(raised) e(by)h(setting)e(the)i(return)g(code)g(of)g(a)g(status)f(value)h(to)f (something)g(other)g(than)h(ilu:success.)0 2608 y(Depending)g(on)h(the) g(type)g(of)h(the)f(exception)g(there)g(may)h(also)f(be)h(additional)d (data)i(associated)g(with)f(it)h(that)g(can)h(be)f(set)0 2670 y(using)e(the)h Ft(")p Fs(set-status-value)p Ft(")e Fs(method)h(on)h(a)h(status)e(object.)p eop %%Page: 164 165 164 164 bop 0 -58 a Fs(Chapter)11 b(9:)g(Using)f(ILU)h(with)f(Scheme)i (\(Guile\))1094 b(164)62 183 y(Asynchronous)11 b(methods)i(are)h (available)f(in)g(the)g(Scheme)h(LSR.)g(They)f(will)g(return)g (immediatedly)f(with)h(a)g(return)0 246 y(value)e(of)g(#t.)62 337 y(Functional)h(methods)g(are)h(currently)f(not)g(supported)g(in)g (the)g(Scheme)i(LSR.)g(At)e(the)h(moment)g(they)f(are)h(treated)g(as)0 399 y(normal)e(method)g(calls.)0 536 y Fn(9.2.6.3)23 b(Garbage)15 b(Collection)f(and)i(COLLECTIBLE)62 644 y Fs(At)11 b(the)g(moment)g(garbage)h(collection)d(of)i(surrogate)g (and)g(true)g(objects)f(is)h(not)f(supported.)0 797 y Fu(9.3)30 b(Access)14 b(to)h(standard)g(ILU)h(features)0 950 y Fo(9.3.1)26 b(Servers)15 b(and)g(Ports)0 1103 y Fn(9.3.1.1)23 b(Object)16 b(Tables)62 1211 y Fs(See)c Ft(ilu:create-object-table)p Fs(.)0 1348 y Fo(9.3.2)26 b(Threading)14 b(and)g(Event)h(Loops)62 1456 y Fs(At)e(the)g(moment)g (the)g(Scheme)h(LSR)g(does)f(not)f(support)g(threading,)h(so)g(only)f (the)h(event)g(loop)f(mode)h(of)g(operation)0 1518 y(will)d(work.)0 1655 y Fo(9.3.3)26 b(Custom)15 b(Records)0 1808 y(9.3.4)26 b(String)14 b(Binding)g(Handle)g(Formation)0 1961 y(9.3.5)26 b(Simple)14 b(Binding)0 2115 y(9.3.6)26 b(Principal)14 b(Identities)h(and)f(Passports)0 2284 y Fu(9.4)30 b(Building)14 b(Scheme/ILU)g(Applications)0 2438 y Fo(9.4.1)26 b(Initialization)13 b(order)62 2545 y Fs(All)8 b(object)g(and)g(type)f(definitions)f(are)j (initialized)e(automatically)g(when)h(loading)f(the)h(Scheme)h(code)g (for)f(a)h(particular)0 2608 y(interface.)j(The)f(\(ilu:init\))e (function)h(is)h(used)g(to)g(initialize)f(the)h(GC)g(server)h(and)f (callback)g(object.)g(If)h(the)f(user)g(wishes)g(to)0 2670 y(select)g(their)g(own)f(main)h(loop)g(object,)f(they)h(must)g (register)g(it)f(before)i(calling)e(\(ilu:init\).)p eop %%Page: 165 166 165 165 bop 0 -58 a Fs(Chapter)11 b(9:)g(Using)f(ILU)h(with)f(Scheme)i (\(Guile\))1094 b(165)0 183 y Fo(9.4.2)26 b(ILU-YASOS)62 290 y Fs(The)14 b(ILU)g(version)f(of)h(YASOS)g(is)g(a)g(slightly)d (modified)j(version)f(of)h(the)f(standard)g(YASOS)i(with)e(the)g (following)0 352 y(differences:)37 442 y Fr(\017)30 b Fs(All)19 b(the)g(standard)f(YASOS)i(functions)e(are)i(prepended)f (with)f(the)h(prefix)g Ft(")p Fs(ilu-)p Ft(")p Fs(,)i(so)e(regular)h (YASOS)f(and)90 504 y(ILU-YASOS)11 b(can)h(operate)f(together.)37 581 y Fr(\017)30 b Fs(All)10 b(ILU-YASOS)h(methods)f(make)h(take)g(a)g (variable)f(number)h(of)g(arguments.)f(This)g(is)g(so)h(the)f(same)h (method)g(may)90 643 y(take)g(different)g(numbers)g(of)g(arguments)g (depending)f(on)g(which)h(object)f(it)h(is)g(called)f(with.)37 721 y Fr(\017)30 b Fs(An)12 b(additional)e(function)g(called)i (ilu-bind-arguments)e(is)h(provided)g(to)g(extract)h(multiple)f (arguments)h(from)g(a)g(list)90 783 y(and)h(bind)f(them)h(to)f(symbols) g(\(almost)g(like)h(a)g(let)f(block\).)k(It)d(is)g(provided)e(only)h (as)h(a)h(convienience)d(and)i(is)g(not)f(a)90 845 y(required)f(part)g (of)g(a)h(method)e(definition.)0 977 y Fo(9.4.3)26 b(Where)15 b(to)f(get)h(Guile)f(1.2)i(and)e(SLIB)0 1084 y Fs(Guile)c(1.2)i(\()p Ft(ftp://prep.ai.mit.edu/pub/gnu/guile)o(-1.2.tar.g)o(z)p Fs(\).)0 1146 y(SLIB)g(2b1)e(\()p Ft (http://www-swiss.ai.mit.edu/~jaffer/SLIB.htm)o(l)p Fs(\).)0 1208 y(Guile)17 b(snapshots)e(\()p Ft (ftp://ftp.red-bean.com/pub/guile/guile-sna)o(p.tar.gz)p Fs(\))g(--)j(Guile)e(snapshots)0 1270 y(are)9 b(daily)f(updates)f(of)i (the)f(Guile)g(system,)h(use)f(them)h(at)f(your)g(own)g(risk.)i(Also)e (some)g(snapshots)f(may)i(not)e(be)i(compatible)0 1333 y(with)h(the)h(current)g(implementation)f(of)h(the)g(stubber)f(and)h (runtime.)0 1422 y(See)c(also)g(the)g(Report)g(on)g(the)g(Al)o(gorit)o (hmic)g(Lang)o(uage)g(Scheme)g(--)g(revision)f(4)h(\()p Ft(http:)o(//www-swiss)o(.ai.mit.ed)o(u/~jaffer/r)o(4rs_toc.htm)o(l)p Fs(\))0 1485 y(and)k(the)g(SLIB)h(Reference)g(Manual)g(\()p Ft(http://www-swiss.ai.mit.edu/~jaffer)o(/slib_toc.h)o(tml)p Fs(\).)0 1617 y Fo(9.4.4)26 b(Stub)13 b(Generation)0 1766 y(9.4.5)26 b(Implementing)15 b(an)f(ILU)i(module)f(in)g(Scheme)0 1915 y Fn(9.4.5.1)23 b(Implementation)14 b(Inheritance)0 2063 y(9.4.5.2)23 b(Exporting)15 b(Objects)0 2212 y Fo(9.4.6)26 b(Using)14 b(an)h(ILU)h(module)f(in)g(Scheme)62 2318 y Fs(If)10 b(you)e(are)h(using)f(Guile)g(Scheme,)j(the)d(value)h(of)g (the)f(environment)g(variable)g Ft(LD_LIBRARY_PATH)g Fs(should)f(include)0 2381 y(the)17 b(directory)f(in)h(which)f(the)h Ft(ilu)g Fs(library)g(for)g(Guile)f(has)h(been)g(installed;)h(that's)e (normally)h(`)p Fp(ILUHOME)t Ft(/lib)p Fs('.)0 2443 y(Additionally,)10 b(the)h(environment)g(variable)h Ft(SCHEME_LOAD_PATH)e Fs(should)h(contain)g(`)p Fp(ILUHOME)t Ft(/guile)p Fs(',)h(so)g(that)0 2505 y(the)f(ILU)g(Guile)f(files)h(can)g(be)h(found.)0 2652 y Fu(9.5)30 b(Scheme/ILU)14 b(API)h(Reference)p eop %%Page: 166 167 166 166 bop 0 -58 a Fs(Chapter)11 b(9:)g(Using)f(ILU)h(with)f(Scheme)i (\(Guile\))1094 b(166)37 183 y Fr(\017)30 b Ft(\(ilu:init\))11 b Fs(-)h(called)f(to)h(initialize)e(the)h(scheme)h(interface)g(to)f (ILU.)h(If)g(the)g(user)f(wants)g(to)g(set)h(their)f(own)g(main)90 246 y(loop)h(\(see)h(\(ilu:set-main-loop\)\),)e(they)h(must)g(do)h(so)f (before)h(calling)e(\(ilu:init\).)j(Multiple)d(calls)i(to)f (\(ilu:init\))e(will)90 308 y(have)h(no)g(effect.)37 380 y Fr(\017)30 b Ft(\(ilu:time-now\))10 b Fs(-)i(get)e(the)h(current) g(time)h(in)e(seconds)h(as)g(a)g(floating)f(point)g(value.)37 453 y Fr(\017)30 b Ft(\(ilu:find-class-from-type-name)9 b(name\))f Fs(-)i(get)e(the)h(class)f(record)i(given)e(the)g(type)h (name)g(of)g(an)h(object.)37 525 y Fr(\017)30 b Ft (\(ilu:find-class-from-id)9 b(id\))i Fs(-)h(get)f(the)g(class)f(record) i(given)e(the)h(type)g(id)f(of)i(an)f(object.)37 597 y Fr(\017)30 b Ft(\(ilu-class:name)10 b(class\))h Fs(-)g(given)g(a)g (class)g(record)g(object,)g(get)g(the)g(name)h(of)f(the)g(class.)37 670 y Fr(\017)30 b Ft(\(ilu:create-object-table)9 b(object-of-ih-func)h (free-self-func\))k Fs(-)h(create)h(an)f(object)g(table)90 732 y(given)10 b(a)i(function)e(that)h(converts)f(instance)h(handles)f (to)h(objects)f(and)h(a)h(function)e(that)g(cleans)h(up)g(an)h(object)e (table.)90 794 y(object-of-ih-func)i(must)i(take)g(at)f(least)h(two)f (arguments)g(the)h(first)f(being)g(the)h(object)f(table)g(and)h(the)f (second)g(the)90 857 y(instance)c(handle)g(of)h(the)g(object)f(being)g (requested.)i(The)e(free-self-func)i(must)e(take)h(at)g(least)f(one)h (argument)g(which)90 919 y(is)h(the)g(object)f(table)h(being)f(freed.) 37 991 y Fr(\017)30 b Ft(\(ilu:set-default-server)9 b(server\))i Fs(-)g(set)g(the)g(default)g(server)g(in)g(the)g(process)g(to)f(be)i Ft(")p Fs(server)p Ft(")p Fs(.)37 1064 y Fr(\017)30 b Ft(\(ilu:get-default-server\))9 b Fs(-)j(return)f(the)f(default)h (server)g(object.)37 1136 y Fr(\017)30 b Ft(\(ilu:create-port)10 b(server)h(protocol-type)f(transport-type\))21 b Fs(-)j(create)f(a)h (port)e(on)g(the)h(given)90 1199 y(server.)17 b(protocol-type)10 b(is)j(a)g(string)e(containing)g(the)i(protocol)e(type)i(and)f (transport-type)f(is)h(a)i(vector)e(containing)90 1261 y(the)f(transport)f(layers)h(to)f(use)h(on)g(the)g(given)f(port.)h (protocol-type)e(and)i(transport-type)f(may)h(have)g(the)g(value)g(of)g (#f)90 1323 y(in)g(which)f(case)i(the)f(default)f(protocol)g(and)h (transport)f(types)g(are)i(used.)37 1395 y Fr(\017)30 b Ft(\(ilu:set-server-default-port)9 b(server)i(port\))f Fs(-)i(set)f(the)g(default)f(port)h(for)g(a)h(given)e(server.)37 1468 y Fr(\017)30 b Ft(\(ilu-server:create)10 b(server-name)g (object-table\))22 b Fs(-)h(create)h(a)f(server)g(given)f(a)i(name)f (and)g(an)90 1530 y(object-table.)37 1603 y Fr(\017)30 b Ft(\(ilu-server:id)10 b(server\))h Fs(-)g(return)g(the)g(id)g(of)g(a) h(server.)37 1675 y Fr(\017)30 b Ft(\(ilu-server:add-port)9 b(server)i(protocol-type)f(transport-type)h(make-default\))22 b Fs(-)h(add)g(a)90 1737 y(port)c(to)h(the)f(given)g(server.)38 b(Basically,)22 b(the)d(same)i(as)e Ft(")p Fs(ilu:create-port)p Ft(")p Fs(,)i(except)f(it)f(takes)h(one)f(additional)90 1800 y(argument)10 b Ft(")p Fs(make-default)p Ft(")g Fs(which)g(indicates)f(whether)h(the)g(new)g(port)f(should)g(be)h(made) h(the)f(default)g(one)g(for)g(the)90 1862 y(given)g(server.)37 1934 y Fr(\017)30 b Ft(\(ilu:make-main-loop-id\))7 b Fs(-)j(make)g(an)g Ft(")p Fs(id)p Ft(")e Fs(that)h(can)h(be)f(used)g (to)g(start)g(and)g(stop)f(a)i(main)g(loop)e(execution.)37 2007 y Fr(\017)30 b Ft(\(ilu:free-main-loop-id)9 b(id\))j Fs(-)g(free)h(a)f(main-loop-id)e(created)i(by)g(the)f(function)g (\(ilu:make-main-loop-)90 2069 y(id\).)21 b(This)13 b(should)f(only)i (be)g(used)g(when)g(the)g(id)g(is)f(no)h(longer)g(needed.)21 b(Note:)16 b(the)e(same)h(main)f(loop)g(id)g(can)g(be)90 2131 y(reused)c(for)g(different)f(main)h(loops)f(if)h(desired,)f(but)h (may)g(not)f(be)h(used)f(by)h(multiple)e(main)i(loops)f(at)h(the)f (same)i(time.)37 2204 y Fr(\017)30 b Ft(\(ilu:run-main-loop)10 b(id\))f Fs(-)h(run)g(the)f(ILU)g(main)h(loop.)g(id)f(must)h(be)f(0)h (or)f(an)h(id)f(created)h(by)g(\(ilu:make-main-)90 2266 y(loop-id\).)g(If)h(the)g(id)f(is)g(0)h(the)f(scheme)h(runtime)g(will)e (assign)h(a)h(default)f(id)g(to)h(use.)g(Note:)f(that)g(the)g(0)h(id)f (can)h(be)g(only)90 2328 y(used)g(for)g(one)g(main)g(loop)g(at)g(a)g (time.)37 2401 y Fr(\017)30 b Ft(\(ilu:exit-main-loop)10 b(id\))h Fs(-)g(stop)f(execution)g(of)i(a)f(main)g(loop)g(with)f(the)h (given)f(id.)37 2473 y Fr(\017)30 b Ft(\(ilu:set-main-loop)10 b(main-loop\))16 b Fs(-)h(set)f(the)h(main)f(loop)g(to)g(a)h(user)g (defined)f(main)h(loop)f(object.)27 b(See)90 2535 y (\(make-ilu:main-loop\))10 b(for)h(more)h(information.)37 2608 y Fr(\017)30 b Ft(\(ilu:register-input-handler)9 b(port)i(handler\))k Fs(-)i(register)e(in)h(input)f(handler)g(for)h (the)g(given)g(input)90 2670 y(port.)11 b(handler)g(may)g(be)h(any)f (lambda)g(expression.)p eop %%Page: 167 168 167 167 bop 0 -58 a Fs(Chapter)11 b(9:)g(Using)f(ILU)h(with)f(Scheme)i (\(Guile\))1094 b(167)37 183 y Fr(\017)30 b Ft (\(ilu:unregister-input-handler)9 b(port\))i Fs(-)g(unregister)f(an)h (input)f(handler)h(for)g(the)g(given)g(port.)37 258 y Fr(\017)30 b Ft(\(ilu:register-output-handler)9 b(port)i(handler\))c Fs(-)i(register)f(in)g(output)e(handler)i(for)g(the)g(given)g(output)90 320 y(port.)j(handler)g(may)g(be)h(any)f(lambda)g(expression.)37 395 y Fr(\017)30 b Ft(\(ilu:unregister-output-handler)9 b(port\))h Fs(-)i(unregister)e(an)h(output)f(handler)h(for)g(the)g (given)f(port.)37 470 y Fr(\017)30 b Ft(\(ilu:create-alarm\))10 b Fs(-)h(create)h(an)f(alarm)h(object.)37 544 y Fr(\017)30 b Ft(\(ilu:set-alarm)10 b(alarm)h(time)g(proc\))16 b Fs(-)g(set)f(an)h(alarm)h(object.)25 b(The)16 b(time)f(is)h(given)f(as) h(a)g(floating)f(point)90 607 y(value)c(in)g(seconds.)f(proc)h(is)g(an) g(arbitrary)g(lambda)g(expression.)37 681 y Fr(\017)30 b Ft(\(ilu:clear-alarm)10 b(alarm\))h Fs(-)g(clear)h(the)f(given)f (alarm)i(so)f(it)f(will)g(not)h(be)g(called.)37 756 y Fr(\017)30 b Ft(\(make-ilu:main-loop\))16 b Fs(-)i(this)e(is)h(an)h (ILU-YASOS)g(object)e(is)h(an)h(abstract)f(base)h(class)f(for)h(main)f (loop)90 818 y(objects.)i(If)14 b(the)g(user)g(desires)f(to)h(make)h (their)e(own)h(main)g(loop)f(object,)h(the)g(must)f(subclass)g(from)i (this)e(one)g(and)90 881 y(redefine)e(all)g(of)g(the)g(following)e (methods.)90 955 y(Public)i(Methods:)127 1030 y Fr(\017)30 b Ft(\(run)11 b(this)g(stop\))j Fs(-)g(run)g(this)f(main)i(loop.)k (stop)13 b(is)h(a)g(main-loop-id)f(as)h(described)g(in)g (\(ilu:make-main-)180 1092 y(loop-id\);)127 1167 y Fr(\017)30 b Ft(\(exit)11 b(this)g(stop\))g Fs(-)h(stop)e(this)h(main)g(loop.)h (stop)e(is)h(a)h(main-loop-id)e(as)i(described)f(in)g(\(ilu:make-main-) 180 1229 y(loop-id\);)127 1304 y Fr(\017)30 b Ft (\(register-input-handler)9 b(this)i(port)g(handler\))16 b Fs(-)g(register)g(an)g(input)f(handler)h(for)g(the)g(given)180 1366 y(port.)11 b(handler)g(can)g(be)g(an)h(arbitrary)f(lambda)g (expression;)127 1441 y Fr(\017)30 b Ft(\(register-output-handler)9 b(this)i(port)g(handler\))f Fs(-)g(register)g(an)g(output)f(handler)h (for)g(the)g(given)180 1503 y(port.)h(handler)g(can)g(be)g(an)h (arbitrary)f(lambda)g(expression;)127 1578 y Fr(\017)30 b Ft(\(unregister-input-handler)9 b(this)i(port\))g Fs(-)g(unregister)g (an)g(input)f(handler)g(for)i(the)f(given)f(port;)127 1653 y Fr(\017)30 b Ft(\(unregister-output-handler)9 b(this)i(port\))g Fs(-)g(unregister)f(an)i(input)e(handler)g(for)i(the) f(given)f(port;)127 1727 y Fr(\017)30 b Ft(\(create-alarm)10 b(this\))h Fs(-)h(create)f(an)h(alarm)g(object;)127 1802 y Fr(\017)30 b Ft(\(set-alarm)10 b(this)h(alarm)g(time)g(proc\))g Fs(-)g(set)f(an)h(alarm)g(object)f(\(see)h(ilu:set-alarm)e(for)i(more)h (details\);)127 1877 y Fr(\017)30 b Ft(\(clear-alarm)10 b(this)h(alarm\))g Fs(-)h(clear)f(the)g(given)f(alarm)i(so)f(it)g (won't)f(trigger.)37 1952 y Fr(\017)30 b Ft(\(ilu:sbh-to-object)10 b(sbh)h(class\))f Fs(-)g(takes)g(a)g(string)f(binding)g(handle)g(and)h (a)h(class)e(record)i(and)f(returns)f(the)90 2014 y(object)h (associated)h(with)f(that)g(string)g(binding)g(handle.)g(It)i(also)e (checks)h(to)g(make)h(sure)f(the)g(correct)g(class)g(is)g(set.)37 2089 y Fr(\017)30 b Ft(\(ilu:parse-sbh)10 b(sbh\))17 b Fs(-)h(parse)g(the)f(given)g(string)f(binding)g(handle.)29 b(A)18 b(list)e(is)h(returned)g(which)g(has)g(the)90 2151 y(following)9 b(form:)j(\(instance-handle)d(server-id)i(mstid)g (contact-info)f(length-of-contact-info-sub)o(stri)o(ng\).)37 2226 y Fr(\017)30 b Ft(\(ilu-object:lookup)10 b(server-id)g (instance-handle)g(class\))f Fs(-)g(attempt)f(to)g(lookup)f(an)i (object)f(given)90 2288 y(a)k(server-id,)f(instance-handle)e(and)i (class)g(record.)h(If)g(the)f(lookup)e(fails,)i(#f)g(is)g(returned.)p eop %%Page: 168 169 168 168 bop 0 -58 a Fs(Chapter)11 b(10:)g(Using)f(ILU)h(with)f (Microsoft)h(Windows)991 b(168)0 183 y Fq(10)36 b(Using)14 b(ILU)h(with)f(Microsoft)g(Windows)62 366 y Fs(Note:)e(In)f(this)g (document,)g(when)h(you)f(see)h(a)g(reference)h(to)e(Windows,)f(it)i (applies)e(to)h(Windows)g(95,)g(Windows)f(NT)0 428 y(3.5)g(and)g (Windows)e(NT)i(4.0.)h(Windows)d(3.1)i(is)g(no)f(longer)h(supported,)f (since)g(ILU)h(makes)h(assumptions)c(about)j(the)f(size)0 490 y(of)h(items)g(that)g(can)h(be)f(copied)g(via)g(certain)g (system/library)f(calls)h(\(segment)g(sizes)g(are)h(an)f(issue\).)h (For)f(this)g(reason,)g(ILU)0 553 y(under)h(Windows)e(3.1)j(will)e (only)g(work)h(reliably)f(in)h(all)f(situations)f(with)h(other)h (Windows)f(3.1)h(systems)f(running)g(ILU.)0 726 y Fu(10.1)29 b(Prerequisites)13 b(for)h(using)i(ILU)f(with)g(Microsoft)f(Windows)0 895 y Fo(10.1.1)25 b(Using)15 b(ILU)h(applications)e(on)g(Windows)h(NT) g(and)g(Windows)f(95)62 1008 y Fs(Windows)h(must)i(be)g(set)f(up)h(to)f (use)h Ft(TCP/IP)p Fs(.)28 b(Use)16 b(the)h Ft(Network)11 b(Configuration)f(and)h(Control)16 b Fs(Applet)0 1070 y(under)e(the)h(Windows)e(NT)i(control)f(panel)g(to)g(install)f(and)i (configure)f(your)g Ft(TCP/IP)h Fs(setup.)21 b(For)16 b(Windows)d(95,)i(use)0 1132 y(the)h Ft(Network)g Fs(applet.)27 b(\(See)18 b(your)e(Windows)f(documentation)f(for)j(further)g (details.\))26 b(Try)16 b(all)h(the)f(usual)g Ft(TCP/IP)0 1194 y Fs(applications)9 b(\(e.g.)j Ft(ping)p Fs(,)g Ft(ftp)p Fs(,)f Ft(telnet)p Fs(\))g(to)g(ensure)g(your)f Ft(TCP/IP)h Fs(is)g(working)f(properly.)62 1291 y(You)j(will)f(also)g (need)i(the)e(redistributable)f(Microsoft)i(C)h(Runtime)f(dynamic)f (link)g(library)h(for)g(NT)g(\(for)h(example,)0 1353 y(`)p Ft(MSVCRT20.DLL)p Fs(')h(if)g(using)g(Visual)f(C)p Ft(++)i Fs(2.0)g(or)f(`)p Ft(MSVCRT40.DLL)p Fs(')g(if)h(using)e(Visual) g(C)p Ft(++)i Fs(4.0\))g(on)f(the)g(system.)0 1415 y(The)c(Visual)g(C)p Ft(++)h Fs(redistributable)d(files)i(are)h(located)f(in)g(a)h(`)p Ft(REDIST)p Fs(')f(directory)g(on)g(the)h(Visual)e(C)p Ft(++)i Fs(CD-ROM)g(disc.)0 1477 y(Note)e(that)g(versions)f(of)i (Visual)e(C)p Ft(++)i Fs(later)f(than)g(4.0)h(actually)e(have)i (additional)d(DLLs)i(\(`)p Ft(MSVCRT.DLL)p Fs('\))g(that)g(contain)0 1540 y(the)j Ft(")p Fs(real)p Ft(")g Fs(runtime)f(library.)k(If)d (you've)f(installed)f(Visual)h(C)p Ft(++)p Fs(,)i(then)e(most)h(likely) e(you)h(have)h(the)g(necessary)f(DLLS)0 1602 y(installed.)h([Note)f(-)g (you)g(can)g(determine)g(what)g(dlls)f(a)h(dll)g(or)g(exe)h(imports)e (by)h(using)e(the)i(dumpbin)f(utility)f(that)i(comes)0 1664 y(with)e(Visual)g(C)p Ft(++)p Fs(.])62 1761 y Fn(Be)29 b(careful)g(to)f(use)h(the)g(right)f(Visual)f(C)p Ft(++)h Fn(runtime)h(DLL.)g(In)g(particular,)g(Windows)g(95)e(ships)0 1823 y(with)36 b(one)f(version)h(of)f(the)h(DLL)h(in)e(the)h(`)p Ft(\\WINDOWS\\SYSTEM)p Fn(')f(directory,)k(since)d(many)f(of)g(the)0 1885 y(Windows)25 b(95)f(system)g(applets)h(are)g(written)g(with)g (Visual)f(C)p Ft(++)p Fn(.)0 2025 y Fo(10.1.2)h(Prerequisite)16 b(software)e(to)h(use)g(AND)g(develop)g(ILU)h(applications)d(on)i (Windows)f(NT)i(and)0 2087 y(95.)62 2200 y Fs(This)11 b(release)g(of)h(ILU)f(for)h(Windows)e(NT)h(was)g(originally)f (developed)g(with)g(Microsoft)h(Visual)g(C)p Ft(++)g Fs(Version)g(2.0,)0 2262 y(on)g(Windows)f(NT)h(3.5,)h(and)f(we)h(now)f (build)f(on)h(Windows)f(NT)h(4.0)g(under)g(Visual)g(C)p Ft(++)g Fs(5.0.)h(We)g(have)g(not)e(tried)h(with)0 2325 y(any)i(other)g(compiler.)k(The)c(ILU)g(runtime)g(DLLs)f(for)h(NT)g (are)h(32)f(bit,)g(and)g(a)h(32)e(bit)h(compiler)g(is)f(needed)h(to)g (develop)0 2387 y(applications)8 b(that)i(use)g(them.)i(If)f(you)e (succeed)i(in)f(building)e(ILU)i(or)h(ILU)f(applications)e(for)j(NT)f (with)g(a)g(compiler)h(other)0 2449 y(than)g(Microsoft)g(Visual)f(C)p Ft(++)p Fs(,)i(please)g(report)f(your)g(findings.)f(We)i(simply)e (haven't)h(had)h(time)f(to)g(test)g(ILU)g(with)g(other)0 2511 y(C)h(or)f(C)p Ft(++)g Fs(compilers)g(with)f(Windows.)62 2608 y(Typically,)k(we)g(move)g(to)g(the)g(latest)f(version)g(of)i (Visual)e(C)p Ft(++)h Fs(as)g(soon)f(as)h(it)g(has)g(been)g(shipped)f (to)g(us.)20 b(There)15 b(is)0 2670 y(nothing)9 b(known)h(in)h(ILU)g (that)g(should)e(prevent)i(it)g(from)g(being)g(built)e(with)i(earlier)g (versions)f(of)h(Visual)f(C)p Ft(++)p Fs(.)p eop %%Page: 169 170 169 169 bop 0 -58 a Fs(Chapter)11 b(10:)g(Using)f(ILU)h(with)f (Microsoft)h(Windows)991 b(169)0 183 y Fu(10.2)29 b(Installation)62 290 y Fs(ILU)12 b(comes)f(prebuilt)g(for)g(Windows)f(NT.)i(For)g(the)f (current)g(release)h(of)g(ILU,)f(a)h(single)f(`)p Ft(.ZIP)p Fs(')g(file)g(is)g(the)h(prebuilt)0 353 y(version.)e(The)h(`)p Ft(.ZIP)p Fs(')g(file)g(is)g(created)g(with)f(Nico)g(Mak)i(Computing's) d Ft(WINZIP)p Fs(,)i(which)g(allows)e(long)h(file)h(names)g(and)0 415 y(is)h(available)g(for)h(all)g(versions)e(of)i(Windows.)i(However,) f(if)f(you)f(only)g(have)g Ft(PKZIP)p Fs(,)i(you)e(should)f(be)i(able)g (to)f(extract)0 477 y(the)h(files)f(from)i(the)e(`)p Ft(.ZIP)p Fs(')h(with)f(no)h(problems.)j(Just)c(make)h(sure)g(you)f (use)h(the)g Fn(-d)g Fs(when)g(unzipping)e(so)h(that)g Ft(PKZIP)0 539 y Fs(will)e(preserve)h(the)g(directory)f(structure)g (contained)g(within)g(the)g(`)p Ft(.ZIP)p Fs(')h(file.)h(You)e(should)g (also)g(be)h(aware)h(that)e(we)h(use)0 602 y(long)e(filenames)h(for)g (some)g(of)g(the)f(stubbers,)g(so)h(older)f(versions)g(of)h(PKZIP)g (might)f(truncate)h(the)f(filenames)h(as)g(the)g(files)0 664 y(are)i(extracted.)62 754 y(Determine)h(where)f(you)g(wish)f(to)h (install)e(ILU,)j(e.g.)i(`)p Ft(C:\\ILUWIN)p Fs('.)g(Set)d(the)g (environment)g(variable)f Fp(ILUHOME)0 817 y Fs(to)18 b(this)g(directory)f(\()p Fp(ILUHOME)23 b Fs(is)18 b(needed)h(for)g (building)d(the)i(examples\).)34 b(Unpack)18 b(the)h(distribution)c (into)j(your)0 879 y(installation)8 b(directory)j(using)f Ft(pkzip)h(-d)g(iluwin.zip)g Fs(\(or,)g(if)h(using)e Ft(WINZIP)p Fs(,)h(just)f(open)h(the)g(`)p Ft(.ZIP)p Fs(')g(archive)g(and)0 941 y(press)f(the)h Ft(")p Fs(Extract)p Ft(")f Fs(button\).)g(You)g(should)g(now)g(have)h(subdirectories)e(in)h Fp(ILUHOME)15 b Fs(called)c(`)p Ft(bin)p Fs(',)g(`)p Ft(examples)p Fs(',)0 1004 y(`)p Ft(include)p Fs(',)g(`)p Ft(interfaces)p Fs(')g(and)g(`)p Ft(lib)p Fs('.)62 1094 y(If)i(you'll)e(be)i(developing)d(ILU)j(apps,)f(or)h(building)d(the)i (examples,)h(set)f(the)g(environment)g(variable)g Fp(ILUPATH)k Fs(to)0 1156 y(include)10 b(`)p Fp(ILUHOME)t Ft(\\interfaces)p Fs(')g Fp(ILUPATH)15 b Fs(is)c(the)f(path)h(of)g(directories)f(where)h (interface)g(\(`)p Ft(.isl)p Fs('\))g(files)g(can)0 1219 y(be)k(found.)23 b(For)16 b(example,)g(setting)e Fp(ILUPATH)19 b Fs(to)c(`)p Ft(.;C:\\ILUWIN\\INTERFACES)p Fs(')e(will)h(cause)i(ILU)f (stubbers)f(to)0 1281 y(look)c(for)i(interfaces)f(first)f(in)h(the)g (current)g(directory,)g(then)f(in)h(`)p Ft(C:\\ILUWIN\\INTERFACES)p Fs('.)62 1371 y(Add)g(the)g(`)p Fp(ILUHOME)t Ft(\\bin)p Fs(')g(directory)f(to)h(your)g Fp(PATH)k Fs(environment)10 b(variable.)62 1462 y(Determine)19 b(what)g(common)h(directory)e(share) h(will)f(be)i(used)e(for)i(your)e(applications)f(to)i(publish)e (information)0 1524 y(about)h(ILU)h(objects.)33 b(This)18 b(will)g(commonly)g(be)h(a)g(directory)f(that)g(is)h(exported)f(from)h (a)g(file)g(server)g(and)f(shared)0 1586 y(by)i(all)g(the)g(systems.)38 b(Set)20 b(the)g(environment)f(variable)h Fp(ILU)p 1052 1586 14 3 v 16 w(BINDING)p 1260 1586 V 16 w(DIRECTORY)25 b Fs(to)20 b(this)f(directory)g(e.g.)0 1649 y Fp(ILU)p 79 1649 V 16 w(BINDING)p 287 1649 V 16 w(DIRECTORY)t Ft(=f:\\iluwin\\bindings)p Fs(.)47 b(If)24 b(you)f(do)g(not)f(set)i (this,)h(ILU)f(will)e(default)h(to)0 1711 y(whatever)11 b(value)g(is)f(specified)h(in)g(the)g(file)f(`)p Ft(iluwin.h)p Fs('.)0 1861 y Fu(10.3)29 b(Building)15 b(ILU)62 1968 y Fs(\(For)d(those)e(who)h(just)f(*must*)g(have)h(and)g(build)f(the)h (source!)g(:-\))62 2059 y(If)27 b(you)e(wish)g(to)h(build)e(the)i(ILU)g (system)g(from)g(source,)k(begin)25 b(by)h(obtaining)e(the)i(source)f (distribution)0 2121 y(\(`)p Ft(ilu.tar.gz)p Fs('\).)33 b(There)19 b(is)f(no)g(separate)h(source)f(tree)h(for)g(the)f(Windows)f (version;)k(the)d(same)h(source)f(code)h(is)0 2183 y(used)13 b(for)g(both)f(Unix)g(and)h(Windows.)j(Set)d Fp(ILUHOME)18 b Fs(to)12 b(where)i(you)e(will)g(want)h(ILU)g(to)f(be)i(installed.)h (Determine)0 2246 y(where)f(you)e(wish)h(to)g(install)e(the)i(ILU)h (source,)g(and)f(set)g(the)g(environment)f(variable)h Fp(ILUSRC)18 b Fs(to)13 b(that)g(directory)f(e.g.)0 2308 y(`)p Fp(ILUHOME)t Ft(\\src)p Fs('.)17 b(Unpack)c(the)f(distribution)e (into)i(that)h(directory.)j(Change)d(to)g(the)f Fp(ILUSRC)18 b Fs(directory.)e(Having)0 2370 y(previously)9 b(installed)h(Visual)g (C)p Ft(++)p Fs(,)i(perform)120 2461 y Ft(>)25 b Fj(nmake)f(-f)h (iluwin32.mak)0 2579 y Fs(To)11 b(subsequently)e(install)g(into)h Fp(ILUHOME)p Fs(,)h(perform)120 2670 y Ft(>)25 b Fj(nmake)f(-f)h (iluwin32.mak)f(install)p eop %%Page: 170 171 170 170 bop 0 -58 a Fs(Chapter)11 b(10:)g(Using)f(ILU)h(with)f (Microsoft)h(Windows)991 b(170)0 183 y(Note)11 b(that)f(the)h(default)g (is)f(to)h(build)f(a)i('release')f(version.)g(If)h(you)e(wish)g(to)h (build)f(a)h('debug')g(version)f(perform)120 270 y Ft(>)25 b Fj(nmake)f(-f)h(iluwin32.mak)f(CFG=)p Ft(")p Fj(Win32)g(Debug)p Ft(")0 383 y Fs(To)11 b(clean)g(up)g(after)h(installation)c(perform)120 470 y Ft(>)25 b Fj(nmake)f(-f)h(iluwin32.mak)f(clean)62 582 y Fs(Various)7 b(#defines)g(that)g(det)o(ermine)g(how)f(ILU)h(is)f (bui)o(lt)g(can)h(be)g(foun)o(d)g(i)o(n)g(th)o(e)g(file)g(`)p Ft(ILUSR)o(C/runtime/k)o(ernel/iluwi)o(n.h)p Fs('.)62 669 y(When)17 b(bulding)d(the)i(debug)g(versions)f(of)i(the)f(c,)j(c)p Ft(++)p Fs(,)f(and)f(kernel)f(runtimes,)h(the)g(values)e(of)i(the)f (environment)0 731 y(variables,)i Fp(ILU)p 273 731 14 3 v 16 w(DEBUG)p 446 731 V 16 w(CFLAGS)i Fs(and)d Fp(ILU)p 815 731 V 16 w(DEBUG)p 988 731 V 16 w(CPPFLAGS)j Fs(are)d(passed)g(to)f (the)h(c)g(and)g(c)p Ft(++)g Fs(compiler)0 794 y(command)12 b(lines)f(respectively.)h(This)f(allows)f(the)i(builder)e(to)i(do)f (things)f(like)h(creating)g(source)h(browser)f(files,)h(e.g.)i(set)0 856 y(ILU)p 79 856 V 16 w(DEBUG)p 252 856 V 16 w(CFLAGS=/FR)p Ft(")p Fs(/ilu/browsefiles/)o Ft(")p Fs(,)9 b(set)i(ILU)p 1042 856 V 16 w(DEBUG)p 1215 856 V 16 w(CPPFLAGS=/FR)p Ft(")p Fs(/ilu/browsefiles/)p Ft(")p Fs(.)62 943 y Fn(Note:)27 b Ft(")p Fn(make)f(clean)p Ft(")g Fn(does)g(not)g(work)f(across)h(all)e (versions)h(of)h(Windows.)i(In)e(particular,)h(it)e(will)0 1005 y(not)j(work)f(on)h(systems)e(other)j(than)f(Windows)f(NT.)h(If)g (you)f(are)h(using)f(Windows)g(95,)h(just)g(remove)0 1068 y(all)d(occurrences)j(of)e(the)h(`)p Ft(WinDebug)p Fn(',)f(`)p Ft(WinDebugW)p Fn(',)h(`)p Ft(WinRel)p Fn(',)f(and)h(`)p Ft(WinRelW)p Fn(')f(directories)g(in)g(the)0 1130 y(source)j(tree)g (and)g(examples)f(directories.)36 b(You)29 b(can)g(also)e(safely)h (delete)h(any)f(.map,)i(.ilk,)g(.exp,)h(and)0 1192 y(.pdb)26 b(files)e(you)h(might)f(see.)62 1279 y Fs(Note)11 b(that)g(it)f(is)h (normal)g(to)g(see)h(a)f(number)h(of)f(compiler)g(warnings)f(during)g (the)h(ILU)g(build)f(process.)h(It's)h(also)e(been)0 1342 y(reported)j(that)f(linking)f(in)i(the)f(build)g(can)h(fail)g(if)g (the)g(full)f(Visual)g(C)p Ft(++)h Fs(has)g(not)g(been)g(installed.)i (This)d(is)g(because)h(the)0 1404 y(makefiles)d(used)f(were)h (originally)e(generated)h(by)g(the)h(MSVC)h(Development)d(Environment,) h(which)g(by)h(default)f(adds)g(a)0 1466 y(whole)h(slew)f(of)i (libraries)e(to)h(the)g(link)f(command,)j(e.g.)f(odbc32.lib)e(\(even)h (though)f(ilu)h(doesn't)f(need)h(them,)h(apparently)0 1528 y(the)i(link)f(fails)h(because)h(they)e(cannot)h(be)h(found\).)j (The)c(workaround)g(is)f(to)h(fully)g(install)e(Visual)i(C)p Ft(++)p Fs(,)h(or)g(go)f(modify)0 1591 y(the)e(makefiles)g(to)g(take)g (out)f(those)h(references.)0 1715 y Fo(10.3.1)25 b(Lisp)62 1819 y Fs(If)12 b(you)f(would)f(like)g(to)h(use)g(Allegro)g(Lisp)f(for) h(Windows)f(with)g(ILU,)i(you)e(will)h(have)g(uncomment)g(the)g (appropriate)0 1881 y(lines)c(in)g(the)g(`)p Fp(ILUSRC)t Ft(/stubbers/li)o(sp/iluwin32)o(.mak)p Fs(')g(and)f(`)p Fp(ILUSRC)t Ft(/runtime/lisp/i)o(luwin32.mak)o Fs(')0 1943 y(makefiles,)k(as)g(these)f(components)f(are)i(not)f(built)f(by)h (default.)h(Note)f(that)g(the)g(Allegro)f(Lisp)h(for)h(Windows)d (support)h(was)0 2006 y(graciously)h(contributed)f(by)i(Joachim)g (Achtzehnter)f(and)h(has)g(not)f(been)h(tested)g(at)g(PARC.)h(For)g (more)f(information,)g(see)0 2068 y Ft (http://vanbc.wimsey.com/~joachim/ilu.h)o(tml)p Fs(.)0 2193 y Fo(10.3.2)25 b(Java)62 2296 y Fs(ILU's)7 b(supports)g(Java)g(on) f(Wind)o(ows)g(usi)o(ng)h(eit)o(her)g(Javas)o(oft's)g(J)o(DK)g(1)o(.1)g Ft(http://www)o(.javasoft.c)o(om/products)o(/jdk/1.1/)0 2359 y Fs(,)h(or)f(Microsoft's)g(SDK)g(for)g(Java)g(2.0)g(Beta)g(2)g (Release)g Ft(http://ww)o(w.microsoft)o(.com/java/d)o(ownload/dl)o (_sdk2-)0 2421 y(f.htm)19 b Fs(.)35 b(If)20 b(you're)f(using)e(the)i (Javasoft)f(JDK,you)g(should)g(define)h(the)g(environment)f(variable)g Fp(JAVASDK)24 b Fs(to)0 2483 y(Javasoft.)i(If)17 b(you're)f(using)g (Microsoft's)f(SDK)i(for)f(Java)h(2.0)f(Beta)h(2)f(Release,)j(you)d (should)f(define)h(the)g(environ-)0 2545 y(ment)h(variable)g Fp(JAVASDK)22 b Fs(to)17 b(Microsoft.)30 b(In)17 b(both)g(cases,)i(the) e(environment)f(variable)h Fp(JAVA)p 1660 2545 V 16 w(HOME)22 b Fs(should)0 2608 y(be)e(set)g(to)f(wherever)i(the)e(Java)h (development)f(software)h(was)g(installed,)h(e.g.)38 b(set)20 b(JAVA)p 1560 2608 V 15 w(HOME=e:)p Ft(\\)p Fs(jdk1.1.6,)0 2670 y(or)25 b(set)g(JAVA)p 259 2670 V 15 w(HOME=e:)p Ft(\\)p Fs(SDK-Java.20.)53 b(Be)26 b(sure)f(your)f Fp(CLASSPATH)30 b Fs(environment)24 b(variable)h(includes)p eop %%Page: 171 172 171 171 bop 0 -58 a Fs(Chapter)11 b(10:)g(Using)f(ILU)h(with)f (Microsoft)h(Windows)991 b(171)0 183 y(the)21 b Fp(ILUHOME)t Fs(/lib/javaclasses)d(directory.)40 b(e.g.)h(set)20 b(CLASSPATH=.:.)p Ft(\\)p Fs(classes:e:)p Ft(\\)p Fs(iluwin)p Ft(\\)p Fs(l)o(ib)p Ft(\\)p Fs(j)o(avaclasses.)0 246 y Fn(NOTE:)33 b(In)g(the)g (Microsoft's)e(SDK)i(for)g(Java)e(2.0)h(Beta)h(2)f(Release,)i(you)e (must)h(modify)e(the)i(file)0 308 y Fp(JAVA)p 120 308 14 3 v 15 w(HOME)t Ft(\\)p Fn(include)p Ft(\\)p Fn(native.h)26 b(to)f(correctly)g(reflect)h(the)f(fact)g(that)h(the)f(function)h (RNIGetCompati-)0 370 y(bleVersion)e(is)h(something)f(exported)i(from)f (a)f(dll)h(to)f(Java.)h(i.e.:)120 528 y Ft(#pragma)f(message\()g ("NOTE:)h(ILU)f(mod)h(to)g(native.h)f(-)h(Defining)f (RNIGetCompatibleVer-)120 578 y(sion)h(as)f(dllexport")g(\))120 628 y(/*)h(originally)49 b(DWORD)24 b(__cdecl)g (RNIGetCompatibleVersion\(\);)f(*/)120 677 y(__declspec\(dllexport\))g (DWORD)h(__cdecl)h(RNIGetCompatibleVersion\(\);)120 827 y(NOTE:)f(An)h(ilu)g(build)f(upon)h(Javasoft's)f(JDK)g(1.1.6)h(can)f (be)h(also)g(be)f(used)h(from)120 877 y(applications)f(within)g (JBuilder)g(2,)h(or,)g(Visual)f(Cafe)h(2.5.)120 1076 y(ILU's)f(also)h(supports)f(Java)h(using)f(Javasoft's)g(JDK)h(1.2beta4) f(pre-release.)120 1126 y(You)h(need)f(to)h(set)g(the)f(environment)g (variable)g Fp(JAVA)p 1261 1126 V 16 w(HOME)29 b Ft(to)c(the)f(jre)h (directory)120 1176 y(and)g(the)120 1225 y Fp(JDK)p 207 1225 V 16 w(HOME)k Ft(to)c(the)f(jdk)h(directory.)49 b(Furthermore)24 b(the)g(mak)h(file)f(requires)g(the)h(en-)120 1275 y(vironment)f(variable)g Fp(JAVAUSE12)k Ft(to)c(be)h(set.)74 b(To)25 b(use)g(JDK)f(1.2beta4)h(requires)f(you)120 1325 y(edit)h(the)f(jre/lib/rt.jar)g(file)49 b(so)25 b(that)f(conflicting)g (omg)h(classes)f(are)h(removed)120 1375 y(\(Not)g(necessary)f(with)g (JDK)h(1.2beta2)f(or)h(JDK)f(1.2beta3,)g(but)h(those)f(pre-releases)120 1425 y(have)h(other)f(requirements.\))120 1574 y(NOTE:)g(Build)h(a)g (jar)f(file)h(and)f(the)h(javadoc)f(files)h(manually.)120 1724 y(NOTE:)f(It)h(is)g(possible)f(to)h(manually)f(create)g(a)h (release)f(directories)g(containing)120 1773 y(all)120 1823 y(Javasoft's)g(JDK)h(1.1.6)f(support,)g(JDK)h(1.2beta4)f(support)g (and)h(Microsoft's)f(SDK)g(sup-)120 1873 y(port)h(in)f(a)h(friendly)120 1923 y(co-existing)f(way.)49 b(To)25 b(do)g(this)f(with)h(the)f (current)h(make)f(files:)h(build)f(and)h(install)120 1973 y(for)120 2022 y(Microsoft)f(first.)49 b(Then)25 b(in)g(a)f(new)h(shell)f(\(setup)h(to)g(build)f(for)h(Javasoft's)f (JDK\))120 2072 y(you)120 2122 y(can)h(cd)f(into)h(the)g (src\\runtime\\java)e(directory)h(and)h(re-build)f(just)g(the)h(java)f (runtime.)120 2172 y(Go)h(back)f(to)h(the)g(top)f(and)h(re-install)f (ALL)g(of)h(ilu.)50 b(\(Do)24 b(it)h(in)g(this)f(order,)h(so)f(that)120 2222 y(the)h("better")f(files)g(are)h(installed)f(later.)49 b(The)25 b(three)f(builds)h(use)f(non-conflicting)120 2271 y(names)g(for)h(the)g(one)f(otherwise)g(incompatible)g(dll)h (file;)f(all)h(other)f(files)h(are)120 2321 y(compatible)f(as)h(long)f (as)h(you)g(are)f(not)h(trying)f(to)h(single)f(step)h(or)f(debug)h(ilu) g(it-)120 2371 y(self\).)49 b(The)120 2421 y(build)24 b(is)h(not)g(quite)f(perfect:)g(If)h(building)f(a)h(further)f(ilu)h (system)f(fails)h(because)120 2471 y(existing)f(files)h(from)f(the)h (first)120 2521 y(build)f(interact)h(badly,)f(clean)g(ilu)h(\(having)f (set)h(the)g(environment)e(variables)h(for)120 2570 y(the)h(later)f (system\))g(and)h(build)120 2620 y(ilu)g(system)f(again.)49 b(The)25 b(clean)f(step)h(will)f(leave)h(the)f(imporatnt)g(file)h(from) g(the)120 2670 y(first)f(build)h(alone.)p eop %%Page: 172 173 172 172 bop 0 -58 a Fs(Chapter)11 b(10:)g(Using)f(ILU)h(with)f (Microsoft)h(Windows)991 b(172)0 351 y Fo(10.3.3)25 b(Python)62 455 y Fs(By)7 b(default,)h(the)f(Python)g(Language)g(Specific)g (Runtime)g(is)g(only)g(built)g(if)g(th)o(e)g(environment)g(variabl)o(e) g(PYTHONSRC)0 518 y(is)k(set)h(to)f(point)g(to)g(your)g(Python)g (Source)h(directory)f(which)g(contains)g(the)g(Python)g(Include)g (directory,)h(the)g(Python)e(PC)0 580 y(directory,)15 b(and)g(\(for)g(Python)f(1.4,)j(the)d(Python)g(vc40)h(directory)f (containing)f(python14.lib\))f(\(for)j(Python)f(1.5.1,)i(the)0 642 y(PCBuild)p Ft(\\)p Fs(Release)11 b(directory)g(containing)e (python15.lib\).)62 729 y(If)g(you)f(need)h(these)f(files,)h(please)f (retrieve)g(the)h(Python)e(source)h(from)h(http://www.pytho)o(n.org,)e (as)h(python1.4.tar.gz)0 792 y(for)j(Python)g(1.4,)g(and)g(pyth151.tgz) e(for)j(Python)e(1.5.1.)i(They)e(are)i(NOT)f(distributed)e(with)h(ILU.) 62 879 y(Python)g(1.5.1)i(build)e(is)g(the)h(default)g(ILU)g(Python)f (runtime)h(on)g(Win32.)62 966 y(You)g(will)f(need)h(to)g(put)f (ILUHOME/lib)g(on)h(your)f(PYTHONPATH)h(before)g(using)f(ILU)h(with)f (Python.)62 1053 y(If)15 b(you're)f(going)f(to)g(build)g(ILU)h(from)h (the)f(source)g(tree,)h(and)f(you)g(want)f(to)h(use)g(Python,)g(build)f (Python)g(yourself)0 1115 y(first!)62 1202 y(For)h(Python)e(1.5.1,)j (Ensure)e(that)f(you)h(build)f(the)h(Python)g('Release')h (Configuration)e(as)h(this)f(is)h(set)g(up)g(to)g(use)g(the)0 1265 y(Multithreaded)d(C)j(Runtime)e(DLL.)h(If)g(you)f(really)h(want)f (to)g(build)f(the)i('Debug')f(version)g(of)h(Python,)f(you)g(must)g (adjust)0 1327 y(the)17 b(project)f(to)h(use)g(the)f(Multithreaded)g(C) i(Runtime)e(DLL,)h(NOT)g(the)g(Debug)f(Multithreaded)g(C)h(Runtime)g (DLL.)0 1389 y(Failure)12 b(to)g(do)h(this)e(will)g(cause)i(strange)f (problems)g(as)g(ILU)g(always)g(uses)g(Multithreaded)f(C)i(Runtime)g (DLL.)f(Also,)g(if)0 1452 y(building)d(the)i('Debug')f(version)g(of)h (Python,)g(you)f(should)g(adjust)g(all)g(references)i(to)f (python15.lib)d(in)j(the)g(iluPr15.mak)0 1514 y(file)g(to)g(reflect)g (the)g(fact)h(that)e(it's)h(in)f($\(PYTHONSRC\))p Ft(\\)p Fs(PCbuild)p Ft(\\)p Fs(Debug)62 1601 y(For)j(Python)e(1.4,)i(Edit)e (the)h(file)g(in)f(the)h(PC)h(directory)e(called)h(python)p 1200 1601 14 3 v 15 w(nt.def,)h(so)e(as)i(to)e(also)h(export)f(the)h (following)0 1663 y(symbols:)17 b(start)p 265 1663 V 16 w(new)p 357 1663 V 16 w(thread)e(init)p 564 1663 V 15 w(thread)g(get)p 764 1663 V 16 w(thread)p 894 1663 V 16 w(ident)f(exit)p 1085 1663 V 15 w(thread)h(\(and)g(for)g (compatibility)e(with)h(pythonwin,)0 1725 y(PyArg)p 122 1725 V 16 w(ParseTupleAndKeywords\).)j(Then)c(follow)g(the)g (instructions)e(in)i(the)h(PC/readme.txt)g(file)f(to)h(build)e(Python.) 0 1788 y(Next)f(change)g(the)g(line)f(for)i('ALL')f(in)g($\(ILUSRC\))p Ft(\\)p Fs(runtime)p Ft(\\)p Fs(python)p Ft(\\)p Fs(iluwi)o(n32)o(.mak) e(to)i(ALL)g(:)g(PMAKE14)g(before)0 1850 y(building)g(ILU's)i(Python)g (runtime.)18 b(NOTE:)12 b(You)h(*must*)g(build)f(Python)g(itself.)18 b(ILU)13 b(requires)g(several)g(symbols)g(to)0 1912 y(be)i(exported)f (from)h(the)g(python.dll)d(that)i(are)i(normally)e(not)g(normally)g (exported.)21 b(Before)16 b(building)c(Python,)j(in)f(the)0 1975 y(Python)d(source)h(tree,)i(edit)d(the)h(file)h(in)e(the)h(PC)i (directory)d(called)h(python)p 1199 1975 V 15 w(nt.def,)h(so)f(as)g(to) g(also)g(export)f(the)h(following)0 2037 y(symbols:)17 b(start)p 265 2037 V 16 w(new)p 357 2037 V 16 w(thread)e(init)p 564 2037 V 15 w(thread)g(get)p 764 2037 V 16 w(thread)p 894 2037 V 16 w(ident)f(exit)p 1085 2037 V 15 w(thread)h(\(and)g(for)g (compatibility)e(with)h(pythonwin,)0 2099 y(PyArg)p 122 2099 V 16 w(ParseTupleAndKeywords\).)j(Then)c(follow)g(the)g (instructions)e(in)i(the)h(PC/readme.txt)g(file)f(to)h(build)e(Python.) 0 2161 y(In)f(addition)e(to)i(exporting)e(these)i(additional)e (symbols,)h(building)f(Python)h(yourself)g(ensures)h(that)f(Python)g (is)h(using)e(the)0 2224 y(same)k(C)h(runtime)e(library)h(as)g(ILU.)g (Different)f(C)i(runtime)e(libraries)g(in)h(use)f(at)h(the)g(same)g (time)g(will)f(result)g(in)g(bizarre,)0 2286 y(hard-to-track-down)e (behavior.)0 2417 y Fu(10.4)29 b(Building)15 b(the)g(examples)62 2521 y Fs(To)8 b(build)f(the)h(examples,)h(cd)f(to)g(`)p Fp(ILUHOME)t Ft(\\examples)p Fs('.)i(Ensure)e(that)f(you)h(have)g(set)g Fp(ILUPATH)k Fs(as)c(previously)0 2583 y(discussed.)62 2670 y(For)k(Windows)d(examples,)j(perform)p eop %%Page: 173 174 173 173 bop 0 -58 a Fs(Chapter)11 b(10:)g(Using)f(ILU)h(with)f (Microsoft)h(Windows)991 b(173)120 183 y Ft(>)25 b Fj(nmake)f(-f)h (iluwin32.mak)62 295 y Fs(If)12 b(you)e(wish)h(to)f(build)g(a)i ('debug')e(version)h(perform)120 382 y Ft(>)25 b Fj(nmake)f(-f)h (iluwin32.mak)f(CFG=)p Ft(")p Fj(Win32)g(Debug)p Ft(")62 495 y Fs(This)19 b(will)g(create)h(the)g(example)g(executables)f(in)h (subdirectories)e(of)i(the)f(`)p Ft(example)p Fs(')h(subdirectories,)g (called)0 557 y(`)p Ft(WinRel)p Fs(')9 b(and)g(`)p Ft(WinRelW)p Fs(')g(\(or)h(`)p Ft(WinDebug)p Fs(')f(and)g(`)p Ft(WinDebugW)p Fs(')g(if)g(you)g(built)f(a)h(debug)g(release\))g(which)g(correspond)0 619 y(to)i(the)g(non-Windows)e(and)i(Windows)e(versions)h(of)h(the)g (examples.)62 706 y(Note)g(that)g(it)f(is)h(normal)g(to)g(see)g(a)h (number)f(of)g(compiler)g(warnings)f(during)g(the)h(examples)g(build)f (process.)0 842 y Fu(10.5)29 b(Running)16 b(the)f(examples)62 946 y Fs(Ensure)10 b(that)g(you)h(have)f(set)h Fp(ILU)p 595 946 14 3 v 16 w(BINDING)p 803 946 V 16 w(DIRECTORY)k Fs(as)c(previously)e(discussed.)g(The)i(non-Windows)d(NT)0 1008 y(examples)i(operate)g(just)f(like)g(their)h(Unix)f(counterparts.) h(The)g(Windows)e(examples)i(are)h(simple)e(Windows)f(versions)h(of)0 1070 y(the)h(same)h(programs.)h(To)e(execute)g(them,)h(launch)f(the)h (executables)e(\(from)i(the)g(Windows)e(File)h(Manager,)i(a)f(command)0 1133 y(prompt)g(\(if)g(you)g(are)h(running)d(Windows)h(NT)h(or)g(95,)h (or)f(whatever\),)g(and)g(choose)g(the)g('Run')g(entry)g(from)h(the)f ('Action')0 1195 y(menu.)0 1330 y Fu(10.6)29 b(Developing)14 b(Windows)i(Applications)e(with)h(ILU)62 1434 y Fs(The)f(basic)f (process)f(for)i(using)e(ILU)h(in)g(a)h(Windows)e(application)f(is)i (simple.)18 b(You)13 b(either)g(write)g(a)h(new)f(interface)0 1497 y(description)f(or)i(use)f(an)h(existing)e(one.)20 b(You)13 b(run)h(the)f(stubbers)g(against)f(the)i(interface)g (description)e(to)h(generate)h(stub)0 1559 y(code.)26 b(You)16 b(write)f(calls)h(to)g(the)f(methods)h(exported)f(from)i(the)e (interface)i(in)e(your)h(application,)g(or)g(implement)f(the)0 1621 y(object)9 b(type)h(in)g(your)g(application,)f(depending)f(on)i (whether)g(you're)g(using)f(the)h(module,)g(or)g(providing)e(it.)j (Finally,)f(you)0 1683 y(link)g(your)h(application)e(code)i(together)g (with)f(the)h(generated)g(stub)f(code)h(and)g(the)g(ILU)g(libraries.)0 1807 y Fo(10.6.1)25 b(All)15 b(Applications)62 1910 y Fs(Ensure)i(that)g Fp(WIN32)22 b Fs(is)17 b(defined)g(to)g(the)h (preprocessor)f(when)g(building)f(a)i(32)f(bit)g(ILU)h(application.)29 b(This)17 b(is)0 1973 y(normally)10 b(set)h(by)g(default)g(by)g(Visual) f(C)p Ft(++)p Fs(,)h(but)g(you)f(should)g(verify.)62 2060 y(You)h(need)g(to)g(link)f(with)g(the)h(language)f(specific)h (runtime,)g(the)g(kernel)g(runtime,)g(and)g(the)g(winsock)f(library.)62 2147 y(Set)17 b(the)g(Visual)e(C)p Ft(++)i Fs(code)g(generation)e (compiler)i(option)e(to)h(use)g(the)h(Multithreaded)e(using)g(DLL)h(C)i (runtime)0 2209 y(on)c(Windows)e(NT.)i(This)f(is)g Fp(very)k Fs(important.)h(If)d(you)e(don't)g(do)h(this,)g(then)f(you'll)g(run)h (into)e(a)j(similar)e(problem)h(that)0 2271 y(was)g(described)f(above)g (for)h(the)f(Python)g(runtime.)19 b(Essentially,)12 b(if)i(you)f (create)h(an)g(application)e(that)h(doesn't)g(use)g(the)0 2334 y(Mutithreaded)f(DLL)g(runtime)g(library,)h(then)g(the)f(ILU)h (kernel)f(will)g(be)h(using)e(one)i(copy)f(of)h(the)f(runtime)h (library,)f(and)0 2396 y(your)d(application)f(will)h(be)h(using)e(a)i (completely)f(different)g(one.)i(This)e(will)g(cause)g(all)h(sorts)f (of)g(bizarre)h(behavior.)h(If)f(you)0 2458 y(are)j(debugging)d(your)i (application)e(and)i(you)g(get)g(all)g(sorts)f(of)h(ASSERTs)h(about)e (memory)i(allocation)e(arenas,)i(you've)0 2521 y(made)f(this)e (mistake.)62 2608 y(There)i(is)g(NO)g(need)g(to)f(call)h Ft(ilu_StartWinsock)f Fs(for)h(a)g(Windows)f(NT)h(ILU)g(app.)h(\(It)g (is)e(taken)h(care)h(of)f(for)g(you)0 2670 y(internally)e(in)g(the)h (runtime)g(DLL)g(process)f(attach)h(code\).)p eop %%Page: 174 175 174 174 bop 0 -58 a Fs(Chapter)11 b(10:)g(Using)f(ILU)h(with)f (Microsoft)h(Windows)991 b(174)0 183 y Fo(10.6.2)25 b(Windows)15 b(\(non-console\))e(Applications)62 290 y Fs(We)k(suggest)e(you)h (review)h(and)f(understand)g(the)g(test1)g(examples)g(before)h(you)f (try)h(to)f(build)f(a)i(windowed)e(ILU)0 352 y(application.)9 b(This)f(section)h(tries)g(to)f(highlight)f(some)j(of)f(the)g Fp(important)k Fs(points.)c(Admittedly,)f(the)i(Windows)d(examples)0 415 y(are)12 b(simple)e(and)h(crude)h(as)f(Windows)f(apps)g(go,)h(but)g (they)g(illustrate)e(what)i(you)f(need)h(to)g(do)g(in)g(an)g (application.)62 505 y(In)i(C)p Ft(++)g Fs(ILU)g(apps,)g(you'll)f(be)h (including)d(`)p Ft(Windows.h)p Fs('.)16 b(However,)e(`)p Ft(Windows.h)p Fs(')e(includes)g(`)p Ft(winspool.h)p Fs(')0 567 y(and)f(this)e(file)i(#defines)f Ft(AddPort)h Fs(as)g Ft(AddPortA)p Fs(.)f(This)g(interferes)h(with)f Ft(iluServer::AddPort\(\))p Fs(,)f(so)i(you)f(have)0 629 y(to)h(undefine)f(it)h(\(temporarily)f(at)i(least\).)f(See)h(the)f (`)p Ft(examples\\test1\\cppsrvrw.cpp)p Fs(')e(file)i(for)g(an)g (example.)0 763 y Fo(10.6.3)25 b(Message)16 b(Loop)62 870 y Fs(See)c(the)e(windowed)f(test1)g(server)i(examples)f(for)h(a)g (simplistic)d(timer)j(based)f(means)h(of)f(using)f(ILU)i(in)f(the)g (presence)0 932 y(of)i(a)h(Windows)d(message)j(loop.)g(\(`)p Ft(msgalarm.c)p Fs('\).)h(You'll)d(want)h(to)f(do)h(something)f(about)g (the)h(message)g(loop)g(since)0 994 y(otherwise)f(your)h(Windows)f(app) i(won't)e(service)i(the)f(GUI)g(-)h(it'll)f(just)f(be)i(blocked)e(in)h (an)h(internal)e(call)i(to)f Ft(select\(\))0 1057 y Fs(waiting)c(to)h (deal)g(with)f(ILU)h(activity.)h(This)e(simple)h(timer)g(approach)g (makes)h(use)f(of)g(the)g(ability)f(to)g(associate)h(an)g('alarm')0 1119 y(function)j(with)g(the)g(ILU)h(mainloop.)j(When)d(the)g(alarm)h (goes)e(off)h(\(the)g(example)g(uses)g(every)g(500)f(milliseconds\),)g (the)0 1181 y(alarm)g(function)e(processes)g(any)h(Windows)f(messages)h (that)f(are)i(waiting,)e(then)h(sets)g(the)f(alarm)i(for)g(another)e (period.)62 1271 y(Note)k(that)f(the)g(test1)g(examples)h(were)g (developed)f(with)g(Microsoft's)g Ft(TCP/IP)g Fs(for)h(Windows)e(for)i (Workgroups.)0 1334 y(Some)d(of)f(the)g(behavior)g(may)h(be)f (different)g(under)g(a)h(different)f(winsock)f(implementation)g (\(especially)g(with)g(respect)i(to)0 1396 y(message)g(dispatch)f (during)g Ft(select\(\))h Fs(calls\).)g(If)h(so,)f(please)g(let)g(us)f (know.)0 1545 y Fu(10.7)29 b(Windows)16 b(and)f(the)g(ILU)p 705 1545 18 3 v 22 w(DEBUG)g(settings)62 1652 y Fs(The)10 b Ft(")p Fs(Debugging)p Ft(")e Fs(chapter)h(of)h(this)f(manual)g (describes)g(the)h(facilities)e(available)h(to)h(ILU)f(developers)g (for)h(tracking)0 1714 y(down)k(problems)g(in)h(their)f(applications.) 20 b(One)15 b(of)g(these)f(facilities)g(is)g(the)h Fp(ILU)p 1321 1714 14 3 v 16 w(DEBUG)k Fs(variable.)j(When)15 b(set)f(to)h(a)0 1777 y(value,)c(it)g(causes)g(the)g(ILU)g(kernel)g (and)g(runtime)g(to)f(output)g(various)g(debugging)f(messages.)62 1867 y(For)16 b(applications)d(running)h(under)i(the)f(Unix)f (operating)h(system,)h(all)f(output)f(is)h(sent)g(to)g(the)g(stderr)g (file)g(handle,)0 1929 y(which)f(can)i(be)f(redirected)g(via)f(the)h (normal)g(shell)f(redirection)g(operators.)22 b(However,)16 b(under)f(Windows,)g(this)f(same)0 1991 y(flexibility)h(is)h(missing,)i (since)e(the)h(Windows)e Ft(")p Fs(shell)p Ft(")h Fs(\(`)p Ft(CMD.EXE)p Fs(')h(or)g(`)p Ft(COMMAND.COM)p Fs(',)i(depending)c(on)i (which)0 2054 y(version)h(of)i(Windows)e(you)g(are)i(running\))e (doesn't)h(have)g(the)g(same)h(flexbility.)34 b(Programs)20 b(that)f(aren't)g(console)0 2116 y(applications)14 b(have)h(an)h (additional)e(problem:)19 b(they)c(don't)g(have)h(any)f(place)h(for)g (the)g(output)e(to)h(go,)i(since)e(so-called)0 2178 y Ft(")p Fs(Windowed-API)p Ft(")9 b Fs(applications)f(detach)i (themselves)g(from)h(consoles)e(if)h(they)g(are)h(executed)f(from)h(a)g (command)f(line.)62 2268 y(The)h(debug)f(module)h(in)f(ILU)h(has)g (special)f(code)h(to)g(handle)f(this)g(situation)f(under)h(Windows.)g (Whether)h(or)g(not)f(ILU)0 2331 y(outputs)i(any)i(messages)g(depends)f (on)h(the)g Ft(")p Fs(Debug)g(Level)p Ft(")f Fs(setting.)19 b(This)13 b(can)i(be)f(set)g(two)f(ways:)k(either)d(using)e(the)0 2393 y Fp(ILU)p 79 2393 V 16 w(DEBUG)j Fs(environment)10 b(variable,)h(or)g(via)g(the)g(ilu)p 909 2393 V 15 w(SetDebugLevel\(\)) f(function)g(\(see)h(`)p Ft(debug.c)p Fs(')g(for)g(the)g(whole)0 2455 y(story\).)62 2545 y(Normally,)21 b(when)e(the)g(ILU)g(kernel)g (loads,)i(it)d(checks)h(to)g(see)g(if)h Fp(ILU)p 1265 2545 V 16 w(DEBUG)j Fs(is)c(set.)35 b(If)20 b(it)e(is,)j(it)e(sets)f (the)0 2608 y(appropriate)12 b(debug)g(level)g(in)g(the)g(kernel,)h (and)f(then)g(provides)g(an)g(internal)g(error)h(handler)f(who's)g (only)f(job)h(is)g(to)g(take)0 2670 y(the)g(messages)h(sent)f(out)g(by) g(the)h(kernel)f(and)h(write)f(them)h(to)f(stderr.)k(Of)d(course,)g (there)g(is)f(a)h(function)e(available)h(to)h(let)p eop %%Page: 175 176 175 175 bop 0 -58 a Fs(Chapter)11 b(10:)g(Using)f(ILU)h(with)f (Microsoft)h(Windows)991 b(175)0 183 y(you)13 b(specify)g(your)g(own)g (error)i(handler.)j(Just)13 b(keep)g(in)g(mind)h(that)f(if)g(you)g (don't)g(provide)g(an)h(error)g(handler,)g(and)f(the)0 246 y(kernel)f(outputs)f(a)i(message)g(because)f(of)h Fp(ILU)p 759 246 14 3 v 16 w(DEBUG)k Fs(or)12 b(ilu)p 1048 246 V 16 w(SetDebugLevel\(\))f(being)h(called,)h(then)f(\(by)g (default\),)0 308 y(the)f(debug)f(messages)h(will)f(be)i(sent)e(to)h (stderr.)62 395 y(If)k(you)g(are)g(working)e(with)h(a)h(console-based)f (application)f(under)h(Windows,)g(then)h(this)e(is)h(not)g(a)h (problem.)22 b(The)0 458 y(messages)13 b(will)f(appear)i(in)e(the)h (console)g(that)f(your)h(application)e(owns.)17 b(Unfortunately,)12 b(you)h(can't)g(redirect)g(them)h(to)0 520 y(a)e(file)g(via)g(the)g (command)h(line,)f(since)f(the)h(Windows)f(shell)g(won't)g(let)h(you)f (redirect)h(arbitrary)g(file)g(handles.)h(You)f(can)0 582 y(use)f Fp(ILU)p 151 582 V 16 w(DEBUG)p 324 582 V 16 w(FILE)16 b Fs(to)10 b(redirect)i(debug)e(messages)h(to)g(a)g(named) h(file.)62 670 y(But,)i(if)g(you)e(are)i(working)e(with)h(a)g Ft(")p Fs(real)p Ft(")h Fs(Windows)d(program,)k(there)e(is)g(no)g (console,)g(and)g(sending)f(anything)g(to)0 732 y(stderr)h(causes)h(no) f(output)g(\(since)g(Windows)f(equates)i(stderr)f(to)g(the)h (bit-bucket)e(for)i(Windowed-API)f(applications\).)0 794 y(If)i(you)g(don't)f(take)g(any)h(actions,)g(then)f(the)h(kernel)g (will)e(handle)i(this)e(for)i(you.)22 b(If)15 b(the)g(debug)f(level)h (gets)f(set)g(\(under)0 856 y(Windows\),)e(the)g(kernel)g(attempts)g (to)g(figure)g(out)g(if)g(your)g(application)f(is)h(Windows-based)e(or) j(console-based.)h(If)f(it's)0 919 y(console-based,)d(then)h(the)g (normal)g(debug-output)e(functions)g(are)j(used.)62 1006 y(However,)j(if)g(it)f(appears)g(that)f(you)h(are)h(running)e(a)i (Windows-based)d(application,)i(and)g(you)g(have)g(not)f(provided)0 1069 y(an)f(debug-handler)f(of)h(your)g(own,)g(then)g(the)g(kernel)g (will)f(create)h Ft(")p Fs(Debug)g(Console)p Ft(")f Fs(and)h(send)g (all)g(the)f(debug)h(output)0 1131 y(there)f(for)h(you.)62 1218 y(This)g(means)i(that)e(if)h(you)g(would)e(like)i(to)g(set)f(ILU)p 889 1218 V 16 w(DEBUG,)i(and)e(your)h(application)e(is)i(not)f (console-based,)h(then)0 1281 y(you)e(don't)f(have)h(to)g(do)g (anything)e(special)i(to)f(see)i(the)f(debug)f(output.)g(It's)h (handled)f(for)i(you.)62 1368 y(There)h(are)g(several)f(things)f(to)h (keep)g(in)g(mind)g(about)f(this.)j(The)e(kernel)h(has)f(a)g(very)h (narrow-minded)e(view)h(of)h(how)0 1430 y(to)d(handle)g(this.)h(If)g (you)f(create)h(your)g(own)f(debug)g(handler,)h(and)f(you)g(want)h(to)f (have)h(the)f(debug)g(messages)h(sent)f(to)g(you,)0 1493 y(*don't*)f(set)h Fp(ILU)p 292 1493 V 16 w(DEBUG)p Fs(.)h(Instead,)f (have)g(your)g(application)f(set)h(the)g(debug)g(level)g(*after*)g(you) g(have)g(installed)f(your)0 1555 y(debug)j(handler.)i(If)f(a)g(debug)e (handler)h(other)g(than)g(the)g(default)g(gets)f(installed,)h(the)g (code)g(in)g(`)p Ft(debug.c)p Fs(')g(will)f(assume)0 1617 y(that)g(you)f(are)i(going)e(to)h(handle)f(it)h(automatically,)f (and)h(it)g(won't)f(set)h(up)g(a)g(debug)g(console.)62 1705 y(The)j(way)g(to)g(determine)f(if)h(your)g(application)e(is)h (console-based)g(or)h(Windows-based)e(is)i(to)f(attempt)h(to)f(create)i (a)0 1767 y(console)9 b(\(if)h(you)f(know)g(a)h(better)g(way)g(to)f (determin)h(this,)f(please)h(pass)f(it)h(on\).)g(This)f(is)h(what)f (the)h(kernel)f(does;)h(if)g(the)f(call)0 1829 y(to)j(the)f(WIN32)h (API)g(call)g(AllocConsole\(\))f(succeeds,)h(the)g(kernel)g(assumes)f (\(rightly\))g(that)g(your)h(application)e(doesn't)0 1892 y(have)i(a)g(console,)g(and)f(thus)g(is)h(a)g(Windowed-API)f (application.)h(But,)g(if)g(your)f(app)h(is)f(a)i(Windowed-API)e (application,)0 1954 y(and)i(you)f(create)h(your)f(own)h(console)e (before)i(the)g(kernel)f(does,)h(then)g(AllocConsole\(\))e(will)g (fail,)j(and)e(the)h(kernel)f(will)0 2016 y(use)f(*your*)f(console)g (\(which)h(may)h(not)e(be)h(what)g(you)g(want\).)62 2104 y(So,)g(just)f(keep)g(this)g(is)f(mind:)i(If)f(your)g(application)f(is) h(a)h(Windows)e(app,)i(then)e(setting)g(ILU)p 1531 2104 V 16 w(DEBUG)i(will)e(work)h(for)0 2166 y(you.)h(Just)f(remember)i (that)f(if)g(you)f(want)h(to)g(capture)g(the)g(debug)f(output)f (yourself,)i(you)f(have)h(to)g(make)h(sure)f(and)g(set)g(up)0 2228 y(your)g(handler)f(*before*)h(the)g(debug)g(level)f(gets)h(set)g (in)g(the)f(kernel.)i(See)g(the)f(code)g(in)g(`)p Ft(debug.c)p Fs(')g(for)g(the)g(whole)f(story)0 2354 y Fo(10.7.1)25 b(WINIO)62 2458 y Fs(Note:)9 b(ILU)g(no)f(longer)g(needs)g(WINIO.)h(If) g(the)g(kernel)f(or)h(a)g(runtime)f(needs)g(to)g(output)f(a)i(message:) h(if)f(the)f(application)0 2520 y(is)k(a)h(console)e(app,)i(output)e (will)g(go)h(to)g(that)g(console;)g(else)g(the)g(application)f(must)h (be)g(a)h(Windows)e(app,)i(and)f(ILU)g(will)0 2582 y(create)g(a)f (console)g(window)e(to)i(which)g(output)e(will)h(be)i(sent.)62 2670 y(WINIO)f(is)g(no)g(longer)f(distributed)f(with)h(ILU.)p eop %%Page: 176 177 176 176 bop 0 -58 a Fs(Chapter)11 b(10:)g(Using)f(ILU)h(with)f (Microsoft)h(Windows)991 b(176)0 183 y Fu(10.8)29 b(Misc.)62 290 y Fs(This)10 b(section)h(contains)e(a)j('hodge-podge')e(of)h (information)f(-)i(with)e(little)g(attention)f(paid)i(to)f(formatting.) 0 425 y Fo(10.8.1)25 b(Python)15 b(1.4)g(support)f(-)h(details)62 532 y Fs(This)f(release)g(of)h(ILU)f(supports)f(both)g(Python)h(1.4)g (Python)f(1.5.1)i(\(the)f(default\))g(for)h(Windows.)k(If)c(you)f(want) g(to)0 594 y(use)i(Python)f(1.4,)i(building)d(it)h(as)h(described)g(in) f(the)h(previous)f(Python)g(section)g(of)h(this)f(chapter)h(is)f(a)h (bit)g(involved.)0 657 y(Specifically,)11 b(here's)g(what)g(you)g(need) g(to)f(do:)62 747 y(Assuming)g(we)h(don't)g(have)g(Python)f(at)h(all)g (on)g(the)g(machine.)62 838 y(1.)h(Retrieve)f(the)g(python)f(source)h (from)g(http://www.pytho)o(n.org,)e(as)i(python1.4.tar.gz.)62 928 y(2.)37 b(Edit)19 b(the)g(file)h(in)f(the)h(PC)g(directory)f (called)h(python)p 1035 928 14 3 v 14 w(nt.def,)i(so)e(as)g(to)f(also)g (export)g(the)g(following)f(sym-)0 991 y(bols:)36 b(start)p 208 991 V 15 w(new)p 299 991 V 16 w(thread)24 b(init)p 515 991 V 15 w(thread)g(get)p 724 991 V 16 w(thread)p 854 991 V 16 w(ident)f(exit)p 1054 991 V 16 w(thread)h(and)g(for)g (compatibility)e(with)h(pythonwin,)0 1053 y(PyArg)p 122 1053 V 16 w(ParseTupleAndKeywords\).)62 1143 y(3.)k(Then)17 b(follow)e(the)h(instructions)e(in)i(the)g(PC/readme.txt)h(file)f(to)g (build)f(python.)26 b(\(Ensure)16 b(that)g(the)g(resulting)0 1206 y(python14.dll)8 b(is)j(the)g(dll)f(that)h(gets)g(used)f(by)h (python.\))62 1296 y(4.)h(Go)f(to)g(ILUSRC)p Ft(\\)p Fs(runtime)p Ft(\\)p Fs(python)f(and)h(comment)h(out)f(the)g(line)f(in) h(the)h(iluwin32.mak)d(makefile)j(to)f(allow)f(the)0 1359 y(build)g(of)h(the)g(runtime.)62 1449 y(5.)h(Set)f(the)g (PYTHONSRC)h(environment)e(variable)h(appropriately,)f(e.g.)i(set)f (PYTHONSRC=E:)p Ft(\\)p Fs(Python-1.4src)62 1540 y(6.)58 b(If)28 b(you)e(DON'T)g(want)g(thread)h(support)e(in)h(Python,)k (remove)d(or)g(comment)g(out)f(the)h(line)f(#define)0 1602 y(ILU)p 79 1602 V 16 w(PYTHON)p 280 1602 V 16 w(THREADS)11 b(1)g(from)h(the)e(file)h(ILUSRC)p Ft(\\)p Fs(runtime)p Ft(\\)p Fs(python)p Ft(\\)p Fs(pythonv)o(ersion.wi)o(n)62 1692 y(8.)42 b(Make)22 b(ILU)g(-)f(you)g(should)f(now)h(have)g(the)g (file)g(iluPr.pyd)g(in)g(the)g(appropriate)f(build)g(subdirectory)g(of) 0 1755 y(ILUSRC)p Ft(\\)p Fs(runtime)p Ft(\\)p Fs(python.)62 1845 y(9.)g(Make)15 b(Install)e(ilu)g(-)i(This)e(will)g(copy)h(the)f (*.py)h(files)g(in)g(ILUSRC)p Ft(\\)p Fs(runtime)p Ft(\\)p Fs(python)e(to)i(ILUHOME)p Ft(\\)p Fs(lib.)k(Be)0 1907 y(sure)11 b(to)g(put)f Ft(\\)p Fs(ILUHOME)p Ft(\\)p Fs(lib)g(on)h(your) f(on)h(your)g(PYTHONPATH.)62 1998 y(10.)g(Enjoy.)62 2089 y(You)j(can)g(run)g(several)g(of)g(the)g(Python)f(examples)h(from)g (ILU)g(\(the)g(Python)f(versions)g(of)h(Test1)f(and)h(Bank)g(work;)0 2151 y(Reconnect)d(needs)g(one)g(change)g(to)g(work;)f(change)h Ft(")p Fs(import)g(socket)p Ft(")f Fs(to)h Ft(")p Fs(import)p 1356 2151 V 27 w(socket)p Ft(")p Fs(\).)0 2286 y Fo(10.8.2)25 b(Alternative)14 b(Binding)g(Service)62 2393 y Fs(The)h(ilu)f(binding)f (service)i(\(in)g(ILUSRC/etc/sbserver\))g(is)f(not)g(built)g(under)h (Windows.)21 b(Basically,)16 b(the)f(steps)f(to)0 2455 y(build)c(it)g(are:)62 2545 y(Step)16 b(1:)21 b(Modify)16 b(the)g(makefile)g(for)h(the)f(ILU)g(kernel)g(to)f(include)h(sbilu.obj) e(instead)h(of)h(sbfile.obj.)25 b(If)17 b(you)f(are)0 2608 y(building)f(the)j(kernel)f(from)h(scratch)g(and)f(don't)g(care)i (about)d(dependencies,)j(just)d(replace)j Ft(")p Fs(sbfile)p Ft(")d Fs(with)h Ft(")p Fs(sbilu)p Ft(")0 2670 y Fs(everywhere)11 b(you)g(see)g(it)g(in)g(ilu32.mak.)p eop %%Page: 177 178 177 177 bop 0 -58 a Fs(Chapter)11 b(10:)g(Using)f(ILU)h(with)f (Microsoft)h(Windows)991 b(177)62 183 y(Step)16 b(2:)j(Modify)14 b(the)h(iluwin.h)f(configuration)g(header)h(file)g(to)g(set)g(the)g (necessary)g(parameters)h(for)g(the)f(service.)0 246 y(Specifically,)c(these)g(are)g(the)g(lines)g(you)f(need)h(to)g(worry)g (about:)62 335 y(/*)26 b(Define)g(this)f(to)g(be)h(the)g(value)g(of)g (the)g(ILU)g(simple)f(binding)f(directory,)30 b(if)c(using)f(shared)g (files)h(for)0 397 y(simple)h(binding)e(*/)i(#if)g(!defined\(ILU)p 702 397 14 3 v 16 w(BINDING)p 910 397 V 16 w(DIRECTORY\))h(#define)f (ILU)p 1469 397 V 16 w(BINDING)p 1677 397 V 16 w(DIRECTORY)0 459 y Ft("\\\\)p Fs(project)p Ft(\\\\)p Fs(rpc)p Ft(\\\\)p Fs(current)p Ft(\\\\)p Fs(lib)p Ft(\\\\)p Fs(bi)o(ndi)o(ng)p Ft(")8 b Fs(#endif)62 548 y(Make)i(sure)g(that)e(ILU)p 417 548 V 17 w(BINDING)p 626 548 V 16 w(DIRECTORY)h(is)g(*not*)f(set)i (to)e(a)i(value)f(anywhere)h(in)f(the)g(system.)h(As)f(you)g(can)0 610 y(see)j(from)g(the)g(text,)f(it)h(gets)f(automatically)f(set)i(if)f (you)g(haven't)h(assigned)e(a)i(value.)h(Comment)f(out)f(these)h(lines) e(so)i(that)0 673 y(it)g(doesn't)f(get)h(set.)j(The)e(system)f(decides) f(what)h(type)g(of)h(binding)d(to)i(use)g(based)h(on)f(ILU)p 1469 673 V 16 w(BINDING)p 1677 673 V 16 w(DIRECTORY)0 735 y(having)e(a)i(value)e(or)i(not.)62 824 y(/*)g(Define)g(this)f(to)h (be)h(the)f(domain)g(of)g(the)g(simple)g(binding)e(server,)j(if)g (using)e(ILU)h(service)g(for)h(simple)e(binding)g(*/)0 886 y(/*)g(#undef)f(ILU)p 263 886 V 16 w(BINDING)p 471 886 V 17 w(REALM)h(*/)62 975 y(/*)f(Define)h(this)f(to)g(be)h(the)f (host)g(ip)g(addr)h(of)f(the)h(simple)f(binding)f(server,)i(if)g(using) e(ILU)i(service)f(for)h(simple)f(binding)0 1037 y(*/)h(/*)f(#undef)h (ILU)p 310 1037 V 16 w(BINDING)p 518 1037 V 16 w(HOST)g(*/)62 1126 y(/*)i(Define)g(this)f(to)g(be)h(the)g(network)f(port)h(on)g(the)f (binding)g(host,)g(if)h(using)f(ILU)h(service)g(for)g(simple)g(binding) e(*/)i(/*)0 1189 y(#undef)e(ILU)p 217 1189 V 16 w(BINDING)p 425 1189 V 16 w(PORT)g(*/)62 1278 y(You'll)g(need)h(to)g(uncomment)g (these)g(#defines)f(and)h(give)f(them)i(the)e(appropriate)h(values.)h (See)g(iluconf.h)e(for)i(more)0 1340 y(information)d(about)g(these)h (variables.)62 1429 y(Once)i(you've)e(done)h(all)g(this,)f(you)h(can)g (make)h(the)f(kernel)g(and)g(it)g(will)f(have)h(the)g(simple)f(binding) g(service)h(enabled)0 1491 y(and)f(working.)62 1580 y(The)i(/ilu/etc)d (directory)i(contains)f(directories)g(called)i(sbfile)e(and)h (sbserver.)j(Between)e(the)f(two)g(of)g(them,)h(you)f(can)0 1642 y(build)e(the)h(simple)f(binding)g(server)h(for)g(Windows.)0 1773 y Fo(10.8.3)25 b(Borland)15 b(C)62 1878 y Fs(ILU)e(source)g(does)g (not)f(build)g(with)g(Borland)h(C,)h(but)e(some)h(successful)f (attempts)h(have)g(been)g(reported.)k(Here)d(are)0 1940 y(some)d(of)h(the)e(hints)g(that)h(have)g(been)g(passed)g(back.)62 2029 y(Borland)18 b(doesn't)g(prepend)f(an)i(underscore)f(on)g (Unix-based)f(lib)g(functions)g(-)h(all)g(the)g(various)g(calls)g(in)f Ft(")p Fs(run-)0 2092 y(time/kernel/os/win.h)62 2181 y(Header)j(files)f(-)h(doesn't)f(like)g(declarations)f(of)i(partially)e (typed)h(variables.)36 b(e.g.)i(just)18 b(saying)h(extern)g(struct)p 3 2243 V 16 2243 a(ilu)p 68 2243 V 16 w(DefaultAlarm)p 337 2243 V 16 w(struct.)10 b(This)e(forces)i(the)f(definition)e(of)i (the)g(entity)f(in)h(the)g(header)h(file,)g(requiring)e(it)h(to)g(be)g (removed)0 2305 y(from)j(the)f(source)g(file)g(where)g(it)g(is)f (currently)h(fully)f(defined.)62 2394 y(.def)k(files)e(need)h(to)g (have)f(the)h(VERSION)g(keyword)f(removed,)i(and)f(.def)h(files)e(that) g(reference)i(functions)e(need)h(to)0 2456 y(be)e(changed)g(to)g (reference)h(those)f(functions)e(without)g(underscores.)i(Microsoft)g (uses)f(underscores,)h(Borland)g(doesn't.)62 2545 y(Whatever)16 b(method)g(you)g(use)g(for)g(building)e(ILU,)j(make)f(sure)h(and)f(set) g(the)f Ft(")p Fs(Max)i(errors)g(and)f(warnings)p Ft(")f Fs(to)g(0)0 2608 y(\(don't)c(stop\).)j(ILU)e(generates)g(a)h(number)f (of)g(warnings)f(when)h(build)f(with)g(Borland,)i(and)f(not)f(setting)g (this)g(will)g(cause)0 2670 y(the)g(build)f(to)g(fail)h(with)g(a)g Ft(")p Fs(too)f(many)i(warnings)p Ft(")e Fs(error.)p eop %%Page: 178 179 178 178 bop 0 -58 a Fs(Chapter)11 b(10:)g(Using)f(ILU)h(with)f (Microsoft)h(Windows)991 b(178)62 183 y(Don't)13 b(enable)g(CodeGuard)g (\(Borland's)g(C/C)p Ft(++)h Fs(memory)g(check)g(library;)f(it)g(looks) f(for)i(leaks)f(and)g(other)g(nasties)0 246 y(and)g(logs)f(them\).)18 b(It)13 b(will)f(have)h(a)g(field)g(day)g(with)f(ILU)h(since)g(some)g (parts)g(of)g(the)g(system)f(leak)h(on)g(purpose,)g(like)f(the)0 308 y(stubbers.)0 450 y Fu(10.9)29 b(Files)14 b(in)h(the)g (distribution)62 555 y Fs(Note:)c(this)f(list)g(is)g(in)h(the)g (process)g(of)g(being)f(updated,)h(and)g(may)g(contain)g(some)g (errors.)0 643 y(bin)f(directory)37 732 y Fr(\017)30 b Fs(`)p Ft(c++-stubber.exe)p Fs(')10 b(--)i(console)e(C)p Ft(++)i Fs(stubber)37 808 y Fr(\017)30 b Fs(`)p Ft(c-stubber.exe)p Fs(')10 b(--)i(console)e(C)i(stubber)37 884 y Fr(\017)30 b Fs(`)p Ft(ilu32.dll)p Fs(')11 b(--)g(kernel)g(runtime)g(DLL)37 960 y Fr(\017)30 b Fs(`)p Ft(iluc32.dll)p Fs(')11 b(--)g(C)h(runtime)f (DLL)37 1036 y Fr(\017)30 b Fs(`)p Ft(ilucpp32.dll)p Fs(')11 b(--)g(C)p Ft(++)h Fs(runtime)e(DLL)37 1112 y Fr(\017)30 b Fs(`)p Ft(islscan.exe)p Fs(')11 b(--)g(console)f(ISL)i (scanner)37 1188 y Fr(\017)30 b Fs(`)p Ft(idl2isl.exe)p Fs(')11 b(--)g(IDL)g(to)g(ISL)h(converter)37 1264 y Fr(\017)30 b Fs(`)p Ft(parser32.dll)p Fs(')11 b(--)g(parser)h(DLL)e(for)i (stubbers)37 1340 y Fr(\017)30 b Fs(`)p Ft(python-stubber.exe)p Fs(')10 b(--)i(console)e(python)f(stubber)0 1454 y(lib)h(directory)62 1543 y(\(Note)h(unlabeled)f(entries)h(are)h(the)f(import)f(libraries)g (for)i(their)e(counterparts)h(in)f(the)h(bin)g(directory\))37 1631 y Fr(\017)30 b Fs(`)p Ft(ilu.py)p Fs(')11 b(--)h(python)d(runtime) i(file)37 1707 y Fr(\017)30 b Fs(`)p Ft(ilu32.lib)p Fs(')37 1783 y Fr(\017)g Fs(`)p Ft(iluPr.pyd)p Fs(')11 b(--)g(a)h(dll)e(used)h (by)g(the)g(python)e(runtime)37 1859 y Fr(\017)30 b Fs(`)p Ft(iluRt.py)p Fs(')11 b(--)h(python)d(runtime)i(file)37 1935 y Fr(\017)30 b Fs(`)p Ft(ilu_tk.py)p Fs(')11 b(--)g(python)f(tk)h (file)37 2011 y Fr(\017)30 b Fs(`)p Ft(iluc32.lib)p Fs(')37 2087 y Fr(\017)g Fs(`)p Ft(ilucpp32.lib)p Fs(')37 2163 y Fr(\017)g Fs(`)p Ft(parser32.lib)p Fs(')0 2278 y(include)10 b(directory)h(\(header)g(files)g(need)g(for)g(building)e(ILU)i(apps\)) 37 2366 y Fr(\017)30 b Fs(`)p Ft(ilu.hh)p Fs(')11 b(--)h(main)f(c)p Ft(++)g Fs(runtime)g(header)h(file)37 2442 y Fr(\017)30 b Fs(`)p Ft(ilubasic.h)p Fs(')37 2518 y Fr(\017)g Fs(`)p Ft(iluchdrs.h)p Fs(')11 b(--)g(main)h(c)f(runtime)g(header)g(file)37 2594 y Fr(\017)30 b Fs(`)p Ft(iluconf.h)p Fs(')37 2670 y Fr(\017)g Fs(`)p Ft(ilucstub.h)p Fs(')p eop %%Page: 179 180 179 179 bop 0 -58 a Fs(Chapter)11 b(10:)g(Using)f(ILU)h(with)f (Microsoft)h(Windows)991 b(179)37 183 y Fr(\017)30 b Fs(`)p Ft(iludebug.h)p Fs(')37 257 y Fr(\017)g Fs(`)p Ft(iluerror.h)p Fs(')37 330 y Fr(\017)g Fs(`)p Ft(iluerrs.h)p Fs(')37 404 y Fr(\017)g Fs(`)p Ft(iluhash.h)p Fs(')37 477 y Fr(\017)g Fs(`)p Ft(iluntrnl.h)p Fs(')37 551 y Fr(\017)g Fs(`)p Ft(iluptype.h)p Fs(')37 624 y Fr(\017)g Fs(`)p Ft(ilutypes.h)p Fs(')37 698 y Fr(\017)g Fs(`)p Ft(iluxport.h)p Fs(')11 b(--)g(kernel)g(exports)f(header)i(file)37 771 y Fr(\017)30 b Fs(`)p Ft(iluprotocol.h)p Fs(')37 844 y Fr(\017)g Fs(`)p Ft(ilutransport.h)p Fs(')0 957 y(interfaces)11 b(directory)37 1044 y Fr(\017)30 b Fs(`)p Ft(ilu.isl)p Fs(')37 1117 y Fr(\017)g Fs(`)p Ft(http.isl)p Fs(')0 1229 y(examples)11 b(directory)37 1316 y Fr(\017)30 b Fs(`)p Ft(iluwin32.mak)p Fs(')0 1428 y(examples/httest)37 1516 y Fr(\017)g Fs(`)p Ft(htclient.c)p Fs(')37 1589 y Fr(\017)g Fs(`)p Ft(htclient.mak)p Fs(')37 1663 y Fr(\017)g Fs(`)p Ft(htserver.c)p Fs(')37 1736 y Fr(\017)g Fs(`)p Ft(htserver.mak)p Fs(')37 1810 y Fr(\017)g Fs(`)p Ft(httest.isl)p Fs(')37 1883 y Fr(\017)g Fs(`)p Ft(iluwin32.mak)p Fs(')37 1956 y Fr(\017)g Fs(`)p Ft(README)p Fs(')37 2030 y Fr(\017)g Fs(`)p Ft(webserver.c)p Fs(')37 2103 y Fr(\017)g Fs(`)p Ft(webserver.mak)p Fs(')0 2215 y(examples/iioptest1)37 2303 y Fr(\017)g Fs(`)p Ft(client.c)p Fs(')37 2376 y Fr(\017)g Fs(`)p Ft(client.mak)p Fs(')37 2450 y Fr(\017)g Fs(`)p Ft(iioptest1.isl)p Fs(')37 2523 y Fr(\017)g Fs(`)p Ft(iluwin32.mak)p Fs(')37 2597 y Fr(\017)g Fs(`)p Ft(server.c)p Fs(')37 2670 y Fr(\017)g Fs(`)p Ft(server.mak)p Fs(')p eop %%Page: 180 181 180 180 bop 0 -58 a Fs(Chapter)11 b(10:)g(Using)f(ILU)h(with)f (Microsoft)h(Windows)991 b(180)37 183 y Fr(\017)30 b Fs(`)p Ft(test1.idl)p Fs(')0 295 y(examples/test1)37 382 y Fr(\017)g Fs(`)p Ft(clnconsl.ico)p Fs(')37 456 y Fr(\017)g Fs(`)p Ft(clnt.c)p Fs(')37 530 y Fr(\017)g Fs(`)p Ft(clnt.h)p Fs(')37 604 y Fr(\017)g Fs(`)p Ft(clnt.mak)p Fs(')37 678 y Fr(\017)g Fs(`)p Ft(clntu.c)p Fs(')37 751 y Fr(\017)g Fs(`)p Ft(clntw.c)p Fs(')37 825 y Fr(\017)g Fs(`)p Ft(clntw.ico)p Fs(')37 899 y Fr(\017)g Fs(`)p Ft(clntw.mak)p Fs(')37 973 y Fr(\017)g Fs(`)p Ft(clntw.rc)p Fs(')37 1047 y Fr(\017)g Fs(`)p Ft(cppclnt.cc)p Fs(')37 1120 y Fr(\017)g Fs(`)p Ft(cppclnt.cpp)p Fs(')37 1194 y Fr(\017)g Fs(`)p Ft(cppclnt.mak)p Fs(')37 1268 y Fr(\017)g Fs(`)p Ft(cppclntw.cpp)p Fs(')37 1342 y Fr(\017)g Fs(`)p Ft(cppclntw.mak)p Fs(')37 1416 y Fr(\017)g Fs(`)p Ft(cppsrvr.cc)p Fs(')37 1489 y Fr(\017)g Fs(`)p Ft(cppsrvr.cpp)p Fs(')37 1563 y Fr(\017)g Fs(`)p Ft(cppsrvr.mak)p Fs(')37 1637 y Fr(\017)g Fs(`)p Ft(cppsrvrw.cpp)p Fs(')37 1711 y Fr(\017)g Fs(`)p Ft(cppsrvrw.mak)p Fs(')37 1785 y Fr(\017)g Fs(`)p Ft(iluwin32.mak)p Fs(')37 1858 y Fr(\017)g Fs(`)p Ft(msgalarm.c)p Fs(')37 1932 y Fr(\017)g Fs(`)p Ft(pyClient.py)p Fs(')37 2006 y Fr(\017)g Fs(`)p Ft(pyServer.py)p Fs(')37 2080 y Fr(\017)g Fs(`)p Ft(README)p Fs(')37 2153 y Fr(\017)g Fs(`)p Ft(resource.h)p Fs(')37 2227 y Fr(\017)g Fs(`)p Ft(srvr.c)p Fs(')37 2301 y Fr(\017)g Fs(`)p Ft(srvr.h)p Fs(')37 2375 y Fr(\017)g Fs(`)p Ft(srvr.mak)p Fs(')37 2449 y Fr(\017)g Fs(`)p Ft(srvru.c)p Fs(')37 2522 y Fr(\017)g Fs(`)p Ft(srvrw.c)p Fs(')37 2596 y Fr(\017)g Fs(`)p Ft(srvrw.ico)p Fs(')37 2670 y Fr(\017)g Fs(`)p Ft(srvrw.mak)p Fs(')p eop %%Page: 181 182 181 181 bop 0 -58 a Fs(Chapter)11 b(10:)g(Using)f(ILU)h(with)f (Microsoft)h(Windows)991 b(181)37 183 y Fr(\017)30 b Fs(`)p Ft(srvrw.rc)p Fs(')37 258 y Fr(\017)g Fs(`)p Ft(svrconsl.ico)p Fs(')37 333 y Fr(\017)g Fs(`)p Ft(Test1.isl)p Fs(')37 407 y Fr(\017)g Fs(`)p Ft(Test2.isl)p Fs(')37 482 y Fr(\017)g Fs(`)p Ft(Test3.isl)p Fs(')0 594 y(examples/test2)37 681 y Fr(\017)g Fs(`)p Ft(Batcher.isl)p Fs(')37 756 y Fr(\017)g Fs(`)p Ft(bclient.mak)p Fs(')37 831 y Fr(\017)g Fs(`)p Ft(bclnt.c)p Fs(')37 906 y Fr(\017)g Fs(`)p Ft(bserver.mak)p Fs(')37 980 y Fr(\017)g Fs(`)p Ft(bsvr.c)p Fs(')37 1055 y Fr(\017)g Fs(`)p Ft(Fibber.isl)p Fs(')37 1130 y Fr(\017)g Fs(`)p Ft(fibber.mak)p Fs(')37 1204 y Fr(\017)g Fs(`)p Ft(fprog.c)p Fs(')37 1279 y Fr(\017)g Fs(`)p Ft(iluwin32.mak)p Fs(')37 1354 y Fr(\017)g Fs(`)p Ft(README)p Fs(')0 1466 y(examples/timeit)37 1553 y Fr(\017)g Fs(`)p Ft(client.c)p Fs(')37 1628 y Fr(\017)g Fs(`)p Ft(client.mak)p Fs(')37 1703 y Fr(\017)g Fs(`)p Ft(iluwin32.mak)p Fs(')37 1777 y Fr(\017)g Fs(`)p Ft(prebuiltISL)p Fs(')37 1852 y Fr(\017)g Fs(`)p Ft(README)p Fs(')37 1927 y Fr(\017)g Fs(`)p Ft(server.c)p Fs(')37 2001 y Fr(\017)g Fs(`)p Ft(server.mak)p Fs(')p eop %%Page: 182 183 182 182 bop 0 -58 a Fs(Chapter)11 b(11:)g(Binding)f(Names)h(in)g(ILU) 1239 b(182)0 183 y Fq(11)36 b(Binding)14 b(Names)g(in)h(ILU)0 376 y Fu(11.1)29 b(Introduction)62 480 y Fs(This)12 b(chapter)g (explains)f(some)h(of)h(the)f(issues)f(around)g(binding)g(names)h(to)g (objects)f(and)i(services,)f(and)g(the)g(various)0 542 y(mechanisms)f(that)g(ILU)g(provides)f(to)g(deal)h(with)g(them.)0 682 y Fu(11.2)29 b(ILU)16 b(Simple)e(Binding)62 787 y Fs(ILU)f(includes)e(a)h(simple)g(binding/naming)e(facility.)k(It)e (allows)f(a)i(module)f(to)g Fp(publish)j Fs(an)e(object,)f(so)g(that)g (another)0 849 y(module)e(can)h(import)f(that)g(object)g(knowing)f (only)h(its)g(object)f(ID)i(\(as)g(defined)f(in)g(Chapter)h(1)g([ILU)f (Concepts],)h(page)g(2\).)0 911 y(The)g(interface)g(to)g(this)f (facility)g(is)h(deliberately)f(quite)g(simple;)g(one)h(reason)g(is)g (to)g(allow)f(various)g(implementations.)62 999 y(The)21 b(interface)h(consists)d(of)i(three)g(operations:)29 b Fp(Publish)p Fs(,)23 b Fp(Withdraw)p Fs(,)g(and)e Fp(Lookup)p Fs(.)40 b Ft(Publish)21 b Fs(takes)f(one)0 1061 y(argument,)h(an)e(ILU) f(object.)34 b Ft(Publish)18 b Fs(returns)h(a)g(string)e(that)h(is)h (needed)f(to)h(successfully)e(invoke)g Ft(Withdraw)p Fs(.)0 1124 y Ft(Withdraw)11 b Fs(undoes)f(the)h(effects)h(of)g Ft(Publish)p Fs(,)f(and)g(takes)g(two)g(arguments:)g(\(1\))h(the)f (object)g(in)f(question,)h(and)g(\(2\))g(the)0 1186 y(string)e (returned)g(from)h Ft(Publish)p Fs(.)h(In)f(some)g(langauge)f (mappings,)g(the)g(string)g(is)g(not)g(explicitly)f(passed,)i(but)f (conveyed)0 1248 y(in)k(the)g(language)g(mapping's)f(representation)h (of)g(ILU)g(objects.)18 b Ft(Lookup)13 b Fs(takes)g(two)g(arguments:)i (an)e(object)g(ID)g(and)0 1310 y(a)f(type)g(the)g(identified)e(object)h (should)g(have.)j(If)e(the)g(object)f(with)g(that)g(ID)h(is)g (currently)f(being)g(published,)g(and)h(has)f(the)0 1373 y(given)f(type)h(\(among)g(others\),)g Ft(Lookup)g Fs(returns)g(that)f (object.)62 1461 y(The)f(implementation)e(shipped)h(with)g(this)g (release)h(of)g(ILU)g(can)g(use)f(either)h(an)g(ILU)g(service,)g(or)g (a)g(shared)g(filesystem)0 1523 y(directory,)k(to)f(store)h (information)f(on)g(the)h(currently)f(published)f(objects.)16 b(This)11 b(choice)i(must)g(be)g(specified)f(at)h(system)0 1585 y(configuration)e(time.)16 b(If)d(the)g(shared)f(filesystem)g (approach)h(is)f(used,)h(this)f(directory)g(must)g(be)h(available)f(by) g(the)h(same)0 1647 y(name,)k(on)d(all)h(machines)f(which)g(wish)g(to)h (interoperate.)21 b(The)15 b(way)g(in)f(which)g(clients)g(interact)g (with)g(binding)f(is)h(the)0 1710 y(same,)e(regardless)f(of)g(which)f (approach)h(is)g(selected.)0 1836 y Fo(11.2.1)25 b(Listing)15 b(the)g(Registered)g(Objects)62 1941 y Fs(The)j(simple)f(program)h Ft(ilusbls)f Fs(will)g(list)g(the)g(currently)g(registered)h(objects.) 30 b(It)18 b(may)g(be)g(invoked)e(with)h(an)0 2003 y(argument,)22 b(in)d(which)g(case)h(only)e(those)h(objects)f(with)h(string)f(binding) g(handles)g(containing)g(the)h(argument)g(as)h(a)0 2065 y(substring)9 b(will)h(be)h(listed.)0 2192 y Fo(11.2.2)25 b(Using)15 b(Shared)g(Files)h(for)e(Simple)h(Binding)62 2296 y Fs(If)g(simple)f(binding)f(is)h(to)g(be)h(done)f(with)g(shared)g (files,)h(a)g(default)f(directory)g(is)g(compiled)g(into)g(the)g(ILU)g (library.)0 2359 y(This)20 b(directory)g(may)i(be)f(explicitly)d (specified)j(at)f(system)h(configuration)e(time)i(with)f(the)g Ft(--with-binding-)0 2421 y(dir=)p Fp(DIRECTORY)14 b Fs(switch)c(to)f Ft(configure)p Fs(.)i(\(The)f(compiled-in)f(setting)g (may)i(also)f(be)g(overridden)f(at)i(run)f(time,)h(by)0 2483 y(setting)f(the)h(environment)g(variable)g Ft (ILU_BINDING_DIRECTORY)f Fs(to)h(a)h(different)f(directory.\))h(ILU)f (creates)h(a)g(file)g(in)0 2545 y(this)f(directory)h(for)g(each)h (published)d(object.)15 b(The)d(name)h(of)f(the)g(file)h(is)e(an)i (8-digit)e(hex)h(string,)g(formed)g(by)g(taking)f(the)0 2608 y(CRC-32)h(hash)f(of)h(the)f(server)g(ID)h(and)f(instance)g (handle)f(of)i(the)f(object.)g(The)h(file)f(contains)f(the)h(string)f (binding)g(handle)0 2670 y(of)k(the)g(object)g(and)g(a)h(random)f (string,)h(which)e(serves)h(as)h(the)f(`proof')g(that)g(has)g(to)g(be)g (provided)f(when)h(withdrawing)p eop %%Page: 183 184 183 183 bop 0 -58 a Fs(Chapter)11 b(11:)g(Binding)f(Names)h(in)g(ILU) 1239 b(183)0 183 y(a)14 b(registration.)i(Note)c(that)h(when)g(using)f (the)h(shared)g(file)g(approach,)h(the)f(protection)f(state)g(of)i(the) f(directory)f(must)h(be)0 246 y(such)g(that)f(programs)h(calling)f Ft(Publish)h Fs(can)h(remove)f(files)g(and)g(create)h(new)f(files,)g (and)g(programs)g(calling)g Ft(Lookup)0 308 y Fs(must)e(be)g(able)g(to) g(read)g(files)g(in)g(the)g(directory.)0 446 y Fo(11.2.3)25 b(Using)15 b(an)g(ILU)h(Service)f(for)g(Simple)g(Binding)62 554 y Fs(If)f(an)g(ILU)f(service)h(is)f(used,)h(the)f(situation)e(is)i (a)h(bit)f(more)h(flexible.)j(The)c(idea)h(is)f(that)g(a)h(program)f (called)g Ft(ilusb)0 616 y Fs(is)f(run)h(on)f(some)h(machine,)h(and)e (exports)g(the)g(binding)f(service)i(via)f(a)h(specified)f(port.)k(All) c(clients)g(have)g(compiled-in)0 679 y(knowledge)f(as)h(to)g(which)g (machine)h(and)f(port)g(the)g(binding)e(service)j(is)f(running)f(on,)h (and)g(they)g(contact)g(the)g(service)h(to)0 741 y(perform)h Ft(Publish)p Fs(,)g Ft(Withdraw)p Fs(,)g(and)f Ft(Lookup)g Fs(calls.)18 b(Each)13 b(binding)f(service)h(is)g(given)f(a)i(name,)h (called)e(a)h Fp(binding)0 803 y(realm)p Fs(,)f(which)e(is)g(the)g (name)i(of)e(the)h(`space')g(for)g(which)f(it)g(provides)f(simple)h (binding)f(services.)j(There)f(may)g(therefore)0 865 y(be)k(many)g(instances)e(of)i(the)g Ft(ilusb)f Fs(server)h(running,)g (even)g(on)f(a)h(single)f(machine,)i(each)f(one)g(serving)e(a)j (different)0 928 y(binding)12 b(realm.)20 b(It)14 b(is)f(often)h (useful)f(to)h(establish)e(multiple)g(binding)g(realms)i(for)h (different)e(purposes.)18 b(For)d(instance,)0 990 y(one)c(might)f(be)i (used)e(for)i(everyday)f(registration)e(of)i(services,)g(another)g(for) h(testing,)d(still)h(another)h(for)g(experimenting.)62 1082 y(To)g(start)g(the)g(binding)e(service,)i(run)g(the)g(program)h Fp(ILUHOME)t Ft(/bin/ilusb)p Fs(.)e(It)i(takes)e(the)h(following)e (options:)37 1173 y Fr(\017)30 b Ft(-r)11 b Fp(REALM-NAME)19 b Fs(--)d(this)d(allows)h(specification)f(of)h(the)h Fp(REALM-NAME)k Fs(which)14 b(the)g(server)h(will)f(serve.)90 1236 y(The)d(default)g(is)f(the)h(compiled-in)f(realm)i(name.)37 1315 y Fr(\017)30 b Ft(-h)11 b Fp(IP-ADDRESS)k Fs(--)e(this)e(allows)h (overriding)e(the)i(compiled)g(in)g(IP)h(address)f(for)g(the)g (machine.)j(This)d(switch)f(is)90 1377 y(mainly)g(for)g(multi-ported)f (machines)h(\(machines)g(which)f(have)h(two)g(or)g(more)h(different)f (IP)h(addresses\).)37 1456 y Fr(\017)30 b Ft(-p)11 b Fp(PORT)17 b Fs(--)12 b(this)f(allows)g(overriding)g(the)h(compiled)f (in)h Fp(PORT)17 b Fs(specification.)12 b(This)f(is)h(the)g(port)f(on)h (which)f(the)90 1519 y(server)g(listens)f(for)h(connections.)37 1598 y Fr(\017)30 b Ft(-f)11 b Fp(FILENAME)16 b Fs(--)c(this)e(allows)g (you)h(to)g(specify)f(the)i(name)g(of)f(a)h(file)f(in)g(which)f(the)h (server)h(will)e(store)h(a)h(backup)90 1660 y(of)i(the)g(various)f (registrations)e(currently)j(active.)19 b(If)c(the)e(server)h(is)g (restarted,)h(and)e(this)g(file)h(already)g(exists,)f(the)90 1722 y(server)d(will)e(read)i(this)f(file,)h(and)f(use)g(the)g (registrations)f(in)h(it)g(as)h(the)f(current)g(set)g(of)h (registrations.)f(This)f(file)i(should)90 1785 y(be)h(in)g(a)g (directory)f(which)h(can)g(be)g(read)h(and)e(written)g(by)h(the)g(user) g(identity)e(under)i(which)f(the)h Ft(ilusb)f Fs(program)i(is)90 1847 y(running.)e(The)h(default)g(is)f(a)i(file)f(called)g(`)p Ft(/tmp/ILUSimpleBindingService.)p Fp(REALM-NAME)t Fs('.)37 1926 y Fr(\017)30 b Ft(-s)8 b Fs(--)h(this)e(option)g(enables)h (`protected')g(operation.)h(This)e(prevents)h(active)g(registrations)e (from)j(being)e(overridden;)90 1988 y Ft(Withdraw)15 b Fs(must)g(be)g(called)g(first,)h(to)f(remove)h(the)f(current)g (registration,)g(before)h(a)f(new)g(registration)f(for)h(the)90 2051 y(same)f(object)f(can)h(be)g(made.)20 b(This)12 b(is)h(useful)g(in)g(an)h(environment)f(which)g(only)f(wants)h(to)h (permit)f(certain)h(users)90 2113 y(to)g(change)g(certain)g (registrations.)k(However,)d(without)e(secure)h(communications,)g(this) f(operation)g(is)h(not)f(truly)90 2175 y(secure,)18 b(and)d(enabling)g (it)g(is)g(often)h(clumsy)f(for)h(casual)f(use)h(of)g(the)f(simple)h (binding)e(service.)25 b(The)15 b(default)h(is)90 2238 y(unprotected)10 b(operation.)62 2359 y(By)25 b(default,)j(ILU)d (programs)g(use)f(the)h(compiled-in)f(binding)f(realm,)29 b(host,)f(and)c(port.)52 b(However,)29 b(they)0 2421 y(can)22 b(be)g(directed)g(to)g(use)f(a)i(different)e(combination)g(of) h(these)f(three,)26 b(by)21 b(defining)g(the)h(environment)f(variable)0 2483 y Ft(ILU_BINDING_SERVICE)11 b Fs(to)h(a)h(string)e(of)i(the)f (form)h Ft(")p Fp(REALM)t Ft(:)p Fp(HOST)t Ft(:)p Fp(PORT)t Ft(")p Fs(,)g(before)g(running)e(the)i(program.)0 2545 y(If)h(you)e(want)h(only)f(to)h(override)f(one)h(or)h(two)e(of)h(the)g (compiled-in)f(defaults,)h(use)g(a)h(string)e(with)g(empty)h(fields)f (for)h(the)0 2608 y(other)h(parts.)20 b(For)15 b(example,)h(if)e(you)g (just)f(wanted)g(to)h(redirect)h(to)e(a)i(particular)f(host,)g(you)g (could)f(use)h(a)h(string)e(of)h(the)0 2670 y(form)e Ft(":foo.bar.company.com:")p Fs(,)d(with)h(empty)h(strings)f(for)h Fp(REALM)16 b Fs(and)11 b Fp(PORT)p Fs(.)p eop %%Page: 184 185 184 184 bop 0 -58 a Fs(Chapter)11 b(11:)g(Binding)f(Names)h(in)g(ILU) 1239 b(184)62 183 y(The)12 b(program)g Ft(ilusbls)f Fs(will)f(list)h (all)g(the)g(currently)g(registered)g(objects.)h(It)g(takes)f(an)h (optional)e(string)g(argument.)0 246 y(If)h(the)e(argument)h(is)g (specified,)g(only)f(objects)g(which)g(have)h(that)g(string)f(in)g (their)h(string)f(binding)f(handles)h(will)g(be)h(listed.)0 384 y Fu(11.3)29 b(CORBA)15 b(CosNaming)62 488 y Fs(Another)e(rather)h (different)f(notion)f(of)h(binding)f(is)h(covered)h(by)f(the)g(CORBA)i (standard)d(`COS)j(Naming')e(service.)0 550 y(An)f(implementation)e(of) i(this)f(service)h(is)g(installed)e(with)h(ILU)h(if)g(the)g (configuration)e(options)g(include)h(support)f(for)i(the)0 612 y(C)g(programming)f(language,)f(the)h(OMG)h(IDL)f(interface)g (definition)e(language,)i(and)g(the)g Ft(CORBA)g(IIOP)g Fs(wire)g(protocol.)0 675 y(The)g(interface)g(to)g(the)g(service)g(is)g (defined)f(in)h(`)p Fp(ILUHOME)t Ft(/interfaces/CosNaming.idl)p Fs('.)62 762 y(To)h(start)g(the)g(binding)e(service,)j(run)f(the)g (program)h Fp(ILUHOME)t Ft(/bin/ILUCosNaming)p Fs(.)g(It)f(takes)g(the) g(following)0 825 y(options:)37 912 y Fr(\017)30 b Ft(-p)11 b Fp(PORT)k Fs(--)10 b(this)e(allows)h(specification)f(of)i(the)g(port) f(on)g(which)h(the)f(server)h(will)f(listen)f(for)i(connection)f (requests.)90 974 y(If)16 b(this)f(is)g(not)g(specified,)h(the)f (server)h(will)f(use)g(a)h(randomly)f(assigned)g(free)h(port,)h(and)e (the)g(CORBA)i(IOR)f(for)90 1037 y(the)e(service)g(will)f(differ)i (from)g(invocation)d(to)i(invocation.)19 b(If)c(you)e(want)h(the)g (service)g(to)g(have)h(an)f(unchanging)90 1099 y(CORBA)e(IOR)g(or)f (ILU)g(SBH,)h(this)e(must)h(be)g(specified.)37 1174 y Fr(\017)30 b Ft(-h)11 b Fp(HOSTNAME)k Fs(--)c(this)f(allows)f (overriding)g(the)i(default)f(hostname)g(for)h(the)f(machine.)h(This)f (switch)g(is)g(mainly)90 1236 y(for)17 b(multi-ported)e(machines)i (\(machines)f(which)g(have)h(two)f(or)h(more)g(different)f(IP)i (addresses\).)27 b(The)17 b(default)90 1298 y(hostname)11 b(is)f(whatever)h(is)g(returned)g(by)g(the)f Ft(gethostname\(\))h Fs(system)f(call)h(on)g(your)g(machine.)37 1374 y Fr(\017)30 b Ft(-sid)11 b Fp(SID)j Fs(--)d(this)e(allows)g(specification)g(of)i(a) f(server)h(ID)f(for)h(the)f(root)g(object)f(exported)h(by)g(the)g (naming)g(service,)90 1436 y(and)16 b(all)h(subsequent)e(naming)h (contexts)f(created)i(in)g(that)f(server.)28 b(If)17 b(none)f(is)g(specified,)i(the)e(default)h(used)f(is)90 1498 y Ft("CosNaming_)p Fp(HOSTNAME)t Ft(")p Fs(,)11 b(where)g Fp(HOSTNAME)k Fs(is)c(the)g(hostname)f(being)h(used.)37 1573 y Fr(\017)30 b Ft(-ih)11 b Fp(IH)19 b Fs(--)c(this)e(allows)g (specification)g(of)i(an)g(instance)e(handle)h(for)h(the)f(root)g (object)g(exported)f(by)h(the)h(naming)90 1635 y(service.)c(This)g (defaults)f(to)h Ft("root")p Fs(.)37 1710 y Fr(\017)30 b Ft(-f)11 b Fp(FILENAME)16 b Fs(--)c(this)e(allows)g(you)h(to)g (specify)f(the)i(name)g(of)f(a)h(file)f(in)g(which)f(the)h(server)h (will)e(store)h(a)h(backup)90 1773 y(of)i(the)g(various)f (registrations)e(currently)j(active.)19 b(If)c(the)e(server)h(is)g (restarted,)h(and)e(this)g(file)h(already)g(exists,)f(the)90 1835 y(server)d(will)e(read)i(this)f(file,)h(and)f(use)g(the)g (registrations)f(in)h(it)g(as)h(the)f(current)g(set)g(of)h (registrations.)f(This)f(file)i(should)90 1897 y(be)j(in)g(a)g (directory)f(which)g(can)h(be)g(read)h(and)f(written)e(by)i(the)g(user) g(identity)e(under)h(which)g(the)h Ft(ILUCosNaming)90 1959 y Fs(program)e(is)f(running.)h(The)f(default)h(is)f(a)h(file)g (called)f(`)p Ft(/tmp/ILUCosNaming.)p Fp(SID)s Fs(',)h(where)g Fp(SID)k Fs(is)10 b(the)h(server)90 2022 y(ID)g(specified)g(or)g (defaulted)g(to)f(for)i(the)e(program.)37 2097 y Fr(\017)30 b Ft(-ior)11 b Fs(--)h(if)f(this)f(option)g(is)h(specified,)g(the)g (service)g(will)f(write)h(its)g(CORBA)h(IOR)g(to)f(the)g(standard)f (output)g(after)i(it)90 2159 y(has)h(successfully)e(initialized.)k (This)d(is)g(sometimes)h(useful)f(when)g(this)g(service)h(is)f(being)g (used)h(with)f(a)h(non-ILU)90 2221 y(CORBA)f(ORB.)37 2296 y Fr(\017)30 b Ft(-sid_and_ih_from_IOR)9 b Fp(STRINGIFIED-IOR)18 b Fs(--)12 b(it)f(is)g(sometimes)g(useful)g(to)g(use)g(the)h (`ILUCosNaming')90 2359 y(program)20 b(to)e(mimic)i(the)f(name)h (service)f(provided)f(by)h(another)g(ORB.)h(In)g(particular,)h(this)d (means)i(that)e(the)90 2421 y(root)d(object)g(should)g(have)g(the)h (same)g(server)h(ID)e(and)h(instance)f(handle)g(provided)g(by)g(that)h (other)f(service.)25 b(To)90 2483 y(accomplish)14 b(this,)g(you)g(can)h (start)e Ft(ILUCosNaming)h Fs(with)f(the)h(stringified)f(IOR)i(for)f (that)g(other)g(service,)i(and)e(it)90 2545 y(will)d(use)h(the)g (server)h(ID)f(and)g(instance)f(handle)h(in)g(that)f(IOR)i(for)f(its)g (server)g(ID)h(and)f(instance)f(handle.)j(Note)e(that)90 2608 y(you)g(may)h(also)f(need)h(to)f(specify)h(the)f(port)g(and)h (hostname)f(with)g(the)g Ft(-h)h Fs(and)f Ft(-p)h Fs(options)e(to)h (exactly)g(mimic)h(the)90 2670 y(other)e(service.)p eop %%Page: 185 186 185 185 bop 0 -58 a Fs(Chapter)11 b(11:)g(Binding)f(Names)h(in)g(ILU) 1239 b(185)0 183 y(In)15 b(general,)i(the)e(user)g(shouldn't)f(have)h (to)g(specify)g(the)g(hostname,)h(server)f(ID,)h(instance)f(handle,)h (or)f(filename;)i(the)0 246 y(defaults)10 b(work)h(pretty)f(well.)h(It) g(is)f(useful)h(to)f(specify)h(the)f(port)h(in)f(most)h(applications,)e (just)h(so)h(that)f(the)h(service)g(always)0 308 y(has)g(the)g(same)h (string)e(binding)f(handle,)i(which)f(will)g(be)0 370 y Ft(ilu:)p Fp(SID)s Ft(/)p Fp(IH)t Ft (;IDL\0453Aomg.org\0452FCosNaming\0452FNamingConte)o(xt\0453A1.0;ii)o (op_1_0_1@tc)o(p_)p Fp(HOST)t Ft(_)p Fp(PORT)0 432 y Fs(where)i Fp(SID)p Fs(,)h Fp(IH)p Fs(,)f Fp(HOST)p Fs(,)g(and)g Fp(PORT)k Fs(are)d(the)f(values)f(for)h(the)f(server)i(ID,)f(instance)f (handle,)h(hostname,)g(and)f(port,)h(as)0 495 y(given)e(above.)62 582 y(You)h(should)e(look)i(at)g(any)g(CORBA)h(book,)e(or)i(the)0 644 y(COS)k(Naming)e(service)h(specification)f(\()p Ft (ftp://ftp.omg.org/pub/docs/formal/9)o(7-07-04.pdf)o Fs(\))f(itself,)0 706 y(for)d(more)h(information)e(on)g(how)h(to)f(use) h(the)g(naming)f(service)h(with)f(applications.)g(Note)h(that)f(the)h (ILU)g(implementation)0 769 y(does)j(not)f(include)h(the)g(client-side) e(`Names)j(Library')f(described)g(in)g(the)g(specification.)j (Applications)11 b(are)i(expected)0 831 y(to)e(use)g(the)g(service)g (functionality)d(directly.)p eop %%Page: 186 187 186 186 bop 0 -58 a Fs(Chapter)11 b(12:)g(Threads)f(and)h(Event)g (Loops)1190 b(186)0 183 y Fq(12)36 b(Threads)14 b(and)h(Event)f(Loops) 62 314 y Fs(ILU)i(can)f(be)h(used)f(in)g(either)g(the)g (single-threaded)f(or)i(the)f(multi-threaded)f(programming)h(style.)24 b(This)14 b(chapter)0 376 y(describes)c(the)h(relevant)g(issues.)62 464 y(The)17 b(issue)f(of)h Fp(threadedness)g Fs(appears)g(at)g(two)f (levels:)21 b(within)16 b(a)h(program)g(instance,)g(and)g(again)g(for)g (an)f(entire)0 526 y(distributed)9 b(system.)i(We)g(will)f(first)h (discuss)f(the)h(program)g(level,)g(and)g(then)g(the)g(system)f(level.) 62 613 y(Some)15 b(programming)g(languages)e(are)i(defined)f(to)g (support)f(multiple)g(threads)h(of)g(control.)21 b(Java)14 b(is)g(an)h(example.)0 675 y(Other)g(language)f(definitions)f(are)j (single-threaded,)f(or)h(are)f(silent)f(on)h(this)f(issue.)23 b(Some)16 b(of)f(these,)i(such)d(as)i(C)f(and)0 738 y(C)p Ft(++)p Fs(,)21 b(can)e(be)g(used)f(to)g(write)g(mutli-threaded)g (programs)g(with)g(the)g(use)g(of)h(certain)g(libraries,)h(coding)d (practices,)0 800 y(and)c(compilation)g(switches.)k(ILU)d(can)g(be)g (used)f(in)g(multi-threaded)f(program)i(instances)f(in)g(both)g (inherently)f(multi-)0 862 y(threaded)18 b(languages)f(and)h(some)h(of) f(those)f(where)i(multi-threading)d(is)i(an)g(option;)i(similarly,)g (ILU)e(can)g(be)h(used)0 924 y(in)14 b(single-threaded)g(program)h (instances)e(in)i(both)f(inherently)f(single-threaded)g(languages)h (and)h(all)f(of)h(those)f(where)0 987 y(multi-threading)9 b(is)i(optional.)0 1121 y Fu(12.1)29 b(Multi-Threaded)14 b(Programs)62 1224 y Fs(Use)j(of)g(ILU)g(in)g(multi-threaded)f(program) h(instances)f(mainly)g(raises)h(three)g(issues:)k(\(1\))d(ILU's)e(use)h (of)g(thread)0 1287 y(resources,)22 b(\(2\))d(how)g(to)g(switch)g(ILU)g (to)g(multi-threaded)f(operation)g(\(for)i(languages)f(where)g (multi-threading)f(is)0 1349 y(optional\),)10 b(and)h(\(3\))g(thread)g (synchronization)e(issues.)h(We'll)h(take)g(them)g(in)g(that)g(order.) 62 1436 y(When)h(threads)g(are)g(used,)h(ILU)e(will)g(fork:)i(\(a\))g (a)f(few)h(\(currently)e(6,)i(I)f(think\))f(threads)g(at)h(startup;)f (\(b\))i(a)f(thread)g(for)0 1498 y(each)i(port)f(added)g(to)g(a)g(true) h(server,)g(for)g(each)g(connection)e(to)h(that)f(port,)i(and)f(---)h (if)g(the)f(RPC)h(protocol)e(for)i(that)f(port)0 1561 y(is)e(concurrent)h(\(see)g(See)h(Section)e(13.2.5)h([Protocols)f(and)h (Transports],)f(page)h(211\))g(and)f(the)h(language)f(being)g(used)h (is)0 1623 y(one)f(of)h(C,)g(C)p Ft(++)p Fs(,)h(or)e(Java)h(---)g(a)g (thread)f(for)h(each)g(call)f(received)h(on)f(that)g(connection;)f(and) i(\(c\))g(a)g(thread)f(per)h(user-level)0 1685 y(alarm)g(\(ref)g(???\)) g(\(of)f(which)g(there)g(are)h(none)e(by)h(default\).)62 1772 y(ILU's)16 b(runtimes)f(for)h(both)e(Franz)j(Common)f(Lisp)e(and)i (Java)g(support)e(multi-threading;)h(programmers)i(do)e(not)0 1835 y(need)c(to)g(do)g(anything)e(special)i(in)f(these)h(languages.)62 1922 y(ILU's)i(runtimes)g(for)g(C,)h(Python)e(and)h(C)p Ft(++)h Fs(support)d(both)h(single-threaded)g(and)h(multi-threaded)f (programming;)0 1984 y(they)21 b(assume)g(single-threading)e(by)i (default,)i(and)e(can)h(be)f(switched)f(to)h(multi-threading)e(during)h (initialization)0 2046 y(\(described)11 b(below\).)0 2168 y Fo(12.1.1)25 b(Multi-Threaded)14 b(Programming)i(in)e(C)62 2271 y Fs(By)d(default,)g(the)g(ANSI)g(C)g(language)g(support)e(in)i (ILU)g(is)f(single-threaded.)g(However,)h(an)g(application)e(can)i (switch)0 2334 y(the)h(ILU)g(runtime)g(kernel)f(and)h(ANSI)h(C)f (language)g(support)e(to)i(multi-threaded)f(operation;)g(this)g (involves)f(informing)0 2396 y(the)17 b(ILU)f(runtime)h(of)g(which)f (implementations)f(to)h(use)h(for)g(the)g(threading)e(primitives)h(it)g (needs.)28 b(An)17 b(application)0 2458 y(can)f(directly)f(supply)f (any)i(implementation)e(it)h(wants.)25 b(To)15 b(make)i(this)d(easy)i (in)g(certain)f(common)h(cases,)i(there)d(are)0 2521 y(predefined)c(implementations)e(available)i(for)g(use)g(on)g(systems)f (that)h(support)e(POSIX,)j(Solaris)f(2,)g(or)h(Win32)e(threads.)62 2608 y(To)20 b(directly)g(supply)f(the)h(needed)g(primitives,)i(an)f (application)d(directly)i(switches)f(the)h(ILU)g(runtime)g(kernel)0 2670 y(to)e(multi-threaded)g(operation)g(\(as)h(described)f(in)g (Section)h(A.4.1)g([Control)f(Structure)h(Options],)g(page)g(269\))f (and)p eop %%Page: 187 188 187 187 bop 0 -58 a Fs(Chapter)11 b(12:)g(Threads)f(and)h(Event)g (Loops)1190 b(187)0 183 y(furthermore)17 b(gives)g(ILU's)g(C)g(runtime) g(a)g(procedure)g(that)g(forks)g(a)g(thread)g(\(via)g Ft(ILU_C_SetFork)p Fs(,)h(described)f(in)0 246 y(`)p Ft(iluchdrs.h)p Fs('\).)62 338 y(Instead)9 b(of)g(directly)f(supplying) f(the)h(needed)h(primitives,)g(an)g(application)e(running)h(on)h(one)f (of)i(the)e(relevant)h(systems)0 400 y(can)i(switch)f(to)h (multi-threaded)f(operation)g(by)h(this)f(macro)i(invocation:)120 493 y Ft(ILU_C_USE_OS_THREADS;)62 616 y Fs(This)e(can)h(only)f(be)h (done)g(if)g(the)f(option)g(to)g(do)h(so)f(was)h(enabled)g(during)e (the)i(configuration)e(step)h(of)h(the)g(installation)0 678 y(of)h(ILU;)g(the)h(default)e(in)h(that)g(step)g(is)g(to)g(enable)g (this)f(feature)i(on)f(systems)g(that)g(have)g(an)h(appropriate)e (threading)g(API,)0 741 y(and)g(not)f(on)h(others.)62 833 y(In)g(either)f(case,)i(switching)c(from)k(single-threaded)d(to)h (multi-threaded)f(operation)h(must)g(be)h(done)f(before)h(any)g(calls)0 895 y(to)g Ft(ILU_C_Run)p Fs(,)g Ft(ILU_C_InitializeServer)p Fs(,)e(or)j(anything)d(that)i(relies)f(on)h(a)h(default)e Ft(ilu_Server)h Fs(existing.)62 988 y(In)h(some)g(thread)f(systems,)h (it)f(is)g(important)g(for)h(the)f(``main'')i(thread)e(not)g(to)h(exit) f(before)h(the)f(program)h(is)g(finished)0 1050 y(executing.)17 b(To)12 b(provide)h(for)g(this,)g(your)g(C)g(program)h(should)d(call)i Ft(ILU_C_FINISH_MAIN_THREAD\()p Fp(val)t Ft(\))e Fs(instead)0 1113 y(of)f(simply)f(returning)g(from)i Ft(main\(\))p Fs(.)g(This)e(routine)g(will)g(block)h(if)g(necessary)g(until)e(it)i (is)g(safe)g(for)h(the)e(thread)h(to)g(return,)0 1175 y(and)h(will)f(return)h(the)g(value)g Fp(val)p Fs(.)0 1316 y Fo(12.1.2)25 b(Multi-Threaded)14 b(Programming)i(in)e(Python)62 1425 y Fs(If)g(you)f(have)h(selected)f(support)f(for)i (operating-system)e(level)h(threads)g(and)g(for)h(Python)f(in)g (building)e(ILU,)j(and)f(if)0 1487 y(you)d(have)h(installed)e(Python)g (with)h(support)f(for)i(threading,)f(the)g(ILU)h(support)e(for)i (Python)f(will)f(also)h(support)f(threaded)0 1550 y(operation,)h(using) g(the)h(normal)g(Python)f(threads)h(mechanisms.)62 1642 y(By)28 b(default,)k(Python)27 b(usage)g(will)g(be)h(single-threaded.) 59 b(To)28 b(switch)e(the)i(ILU)g(Python)e(runtime)i(from)0 1705 y(its)d(default)g(assumption)f(of)i(single-threadedness)e(to)h (multi-threaded)g(operation,)j(call)e(the)g(Python)f(function)0 1767 y Ft(ilu.ThreadedOperation\(\))18 b Fs(before)i(calling)f(any)h (ILU)g(functions.)36 b(This)19 b(will)g(switch)g(both)g(the)h(ILU)g (ker-)0 1829 y(nel)11 b(and)g(the)g(Python)f(runtime)h(to)f (multi-threaded)g(operation.)0 1970 y Fo(12.1.3)25 b(Multi-Threaded)14 b(Programming)i(in)e(C)p Fl(++)62 2079 y Fs(To)h(switch)f(the)i(ILU)f (C)p Ft(++)g Fs(runtime)g(from)h(its)f(default)f(assumption)g(of)h (single-threadedness)e(to)i(multi-threaded)0 2141 y(operation,)24 b(call)d Ft(iluServer::SetFork)f Fs(\(described)h(in)h(`)p Fp(ILUHOME)t Ft(/include/ilu.hh)p Fs('\))e(before)i(calling)0 2204 y Ft(iluServer::Run)p Fs(,)c Ft(iluServer::Stoppable_Run)p Fs(,)f Ft(iluServer::iluServer)p Fs(,)g(or)g(anything)e(that)i(relies)0 2266 y(on)d(a)g(default)g Ft(iluServer)g Fs(existing.)k Ft(iluServer::SetFork)13 b Fs(makes)i(a)f(feeble)h(attempt)e(to)h (detect)g(being)f(called)0 2328 y(too)g(late,)h(returning)e(a)i (logical)e(value)h(indicating)e(whether)i(an)g(error)h(was)f(detected)g (\(when)g(an)h(error)g(is)f(detected,)g(the)0 2391 y(switch)g(is)h(not) g(made\).)22 b(This)13 b(detection)g(is)h(not)g(reliable)g(---)h(the)f (caller)h(should)d(take)j(responsibility)c(for)j(getting)f(this)0 2453 y(right.)62 2545 y(Pass)g(to)g Ft(iluServer::SetFork)e Fs(a)i(procedure)g(for)g(forking)f(a)h(new)g(thread.)j(This)c(forking)g (procedure)h(is)f(given)0 2608 y(two)e(arguments:)g(a)h(procedure)g(of) f(one)h(pointer)e(\()p Ft(void)i(*)p Fs(\))g(argument)g(and)f(a)h (pointer)f(value;)g(the)g(forked)g(thread)h(should)0 2670 y(invoke)f(that)h(procedure)g(on)g(that)f(value,)h(terminating)f (when)h(the)g(procedure)g(returns.)p eop %%Page: 188 189 188 188 bop 0 -58 a Fs(Chapter)11 b(12:)g(Threads)f(and)h(Event)g (Loops)1190 b(188)62 183 y(Before)25 b(calling)d Ft(iluServer::SetFork) p Fs(,)j(you)e(must)g(switch)f(ILU's)h(runtime)g(kernel)g(to)g (multi-threaded)0 246 y(operation)9 b(by)g(calling)f Ft(ilu_SetWaitTech)p Fs(,)i Ft(ilu_SetMainLoop)p Fs(,)f(and)g Ft(ilu_SetLockTech)g Fs(as)g(mentioned)g(later)0 308 y(\(see)16 b(Section)e(A.4.1)i([Control)e(Structure)i(Options],)f(page) g(269\).)23 b(ILU's)15 b(C)p Ft(++)h Fs(runtime)f(takes)g(care)h(of)f (forking)f(the)0 370 y(thread)d(to)g(call)g Ft(ilu_OtherNewConnection)p Fs(;)e(you)h(should)g(not)g(call)h Ft(ilu_NewConnectionGetterForked)p Fs(.)0 510 y Fo(12.1.4)25 b(Thread)15 b(Synchronization)62 619 y Fs(Thread)e(synchronization)d(issues)i(are)h(almost)g(invisible)d (in)j(the)f(interfaces)h(that)f(application)f(programers)i(use.)j(In)0 681 y(multi-threaded)c(operation,)h(ILU)h(objects)e(may)i(be)f (operated)g(on)g(concurrently:)h(a)g(multi-threaded)e(client)h(can)h (make)0 744 y(concurrent)h(calls,)h(and)g(a)f(multi-threaded)g(server)g (may)h(receive)g(concurrent)f(calls.)24 b(ILU)15 b(itself)g(does)g(no)g (particular)0 806 y(synchronization)9 b(of)i(application-level)e(code)i (---)h(that's)e(left)h(up)g(to)g(the)g(application.)62 898 y(The)k(one)f(exception,)h(already)g(noted,)g(is)f(Section)g (1.3.1.8)h([Object)f(Tables],)h(page)g(8;)h(their)e(operation)f(is)h (inside)0 961 y(certain)d(of)g(the)f(ILU)h(runtime's)f(mutexes.)h(For)g (the)g(sake)f(of)h(these)g(\(and)f(any)h(unexpected)f(place)h(this)f (issue)f(shows)h(up\),)0 1023 y(we)h(now)g(explain)f(thread)h (synchronization)e(in)i(ILU.)62 1115 y(ILU)j(uses)e(mutex)i(and)f (condition)e(variables)i(to)g(organize)g(its)f(thread)h (synchronization;)f(mutexes)h(are)h(even)g(used)0 1178 y(for)e(the)g(plan)f(for)h(how)g(single-threaded)e(code)i(works.)h(A)f Fp(mutex)i Fs(is)e(a)g(data)g(item)g(that)f(stands)g(for)h(a)g(mutual)g (exclusion)0 1240 y(condition.)k(A)d(mutex)g(can)h(be)f Fp(held)k Fs(by)c(at)h(most)e(one)h(thread)h(at)f(a)g(time.)18 b(We)c(say)f(a)g(thread)g(is)g(either)g Fp(inside)i Fs(a)e(mutex)0 1302 y(\(when)h(it)f(holds)g(the)g(mutex\))h(or)g Fp(outside)h Fs(a)f(mutex)g(\(when)g(it)f(doesn't)g(hold)g(the)h(mutex\).)19 b(Thus)13 b(a)i(region)e(of)h(code)g(in)0 1364 y(which)9 b(at)h(most)g(one)g(thread)g(may)h(be)f(executing)f(at)h(a)g(time)h(is) e(surrounded)g(by)h(mutex)g Fp(acquire)i Fs(\(aka)f Fp(entry)r Fs(\))f(and)g Fp(release)0 1427 y Fs(\(aka)j Fp(exit)t Fs(\))g(operations.)j(The)d(operation)f(of)h(entering)f(a)h(mutex)g (blocks)f(the)g(calling)g(thread)h(until)f(no)g(thread)h(is)f(inside)0 1489 y(the)f(mutex,)g(then)g(enters.)62 1581 y(One)17 b(particularly)e(principled)h(way)g(of)h(thinking)d(about)i(how)g(to)h (use)f(mutexes)g(involves)f(associating)g(a)i Fp(mutex)0 1644 y(invariant)e Fs(with)c(a)h(mutex;)f(the)h(invariant)e(is)h (expected)h(to)f(hold,)g(except)h(perhaps)f(while)g(the)h(mutex)f(is)g (held.)i(Just)e(after)0 1706 y(the)k(mutex)g(is)g(acquired,)h(the)f (invariant)f(is)g(known)g(to)h(hold;)h(it)f(will)f(continue)g(to)g (hold)g(until)g(the)h(code)g(holding)e(the)0 1768 y(mutex)i(changes)h (variables)e(involved)g(in)h(the)h(invariant;)g(such)f(code)h(must)f (restore)g(the)h(invariant)e(before)i(releasing)0 1830 y(the)g(mutex.)25 b(Note)15 b(that)h(this)e(can)j(be)f(a)g(useful)f (way)h(to)f(understand)g(the)g(operation)g(of)h(even)g(single-threaded) e(code)0 1893 y(\(particularly)h(code)i(with)f(a)h(recursive)f(main)h (loop\);)h(for)e(this)g(reason)g(ILU)h(code)f(is)h(fully)e(annotated)h (with)f(respect)0 1955 y(to)f(mutexes,)i(even)f(though)e(that)h(code)h (may)g(operate)g(single-threaded:)i(when)d(a)h(single-threaded)e (program)i(tries)g(to)0 2017 y(acquire)g(a)h(mutex)g(it)f(already)g (holds,)h(a)g(bug)f(is)g(revealed)g(that)g(would)f(otherwise)h(be)h (much)f(harder)h(to)f(track)h(down.)0 2079 y(We)h(do)f(not)g(have)h(a)g (comprehensive)f(description)f(of)i(the)g(full)f(invariant)f (associated)h(with)g(each)h(ILU)g(mutex,)h(but)0 2142 y(we)d(do)f(have)h(parts)f(of)g(some)h(written)f(down)f(near)j(the)e (declarations)f(of)i(the)f(variables)g(involved)f(\(in)h(particular,)h (the)0 2204 y(comments)d(at)f(a)h(variable's)f(declaration)g(may)g(be)h (taken)f(as)h(part)f(of)h(the)f(invariant)f(associated)h(with)f(the)h (mutex)h(that)f(is)0 2266 y(the)g(variable's)f(lock)h(\(see)h (below\)\).)62 2359 y(Another)j(way)h(to)f(think)f(about)h(mutexes)g (is)g(to)g(use)h(them)g(as)f Fp(object)g(locks)i Fs(\(this)d(is)h(a)h (technical)f(term)h(you)f(will)0 2421 y(find)d(in)f(the)h(literature;)g (it)g(has)g(nothing)e(to)i(do)g(with)f Ft(")p Fs(objects)p Ft(")g Fs(as)h(in)g(OOP,)h(but)e(uses)h(a)h(broader)f(sense)g(of)g(the) g(word\).)0 2483 y(A)g(shared)h(\(among)f(threads\))g(variable)g(has)g (a)h(controlling)d(lock,)j(which)e(must)h(be)h(held)f(while)f(reading)h (or)h(writing)d(the)0 2545 y(variable.)20 b(ILU)14 b(rigorously)f (includes)g Fp(locking)f(comments)k Fs(that)e(take)g(the)g(object)f (lock)h(view:)j(for)d(each)h(variable)e(the)0 2608 y(corresponding)e (lock)h(\(or)h(locks,)g(in)f(some)h(cases\))g(is)f(indicated,)h(and)f (each)i(procedure)e(or)h(method)f(has)h(declared)g(pre-)0 2670 y(and)e(post-conditions)d(describing)h(which)i(locks)f(must)h(or)g (must)g(not)f(be)i(held.)p eop %%Page: 189 190 189 189 bop 0 -58 a Fs(Chapter)11 b(12:)g(Threads)f(and)h(Event)g (Loops)1190 b(189)62 183 y(ILU)13 b(has)g(two)f(classes)h(of)g (mutexes:)h(connection)e(mutexes)h(and)g(non-connection)e(mutexes.)17 b(While)12 b(connections)0 246 y(don't)g(show)f(up)h(in)g(the)h(ILU)f (API,)h(they)f(do)g(appear)h(internally,)f(and)g(the)g(connection)f (mutexes)h(figure)g(into)g(the)g(Main)0 308 y(Invariant,)j(which)e (applies)g(to)h(most)g(application)f(code.)20 b(We)15 b(will)e(give)h(no)g(details)f(on)h(connection)f(mutexes)h(in)f(this)0 370 y(section,)d(because)i(applications)d(don't)h(manipulate)g(them.)62 459 y(Here)i(are)g(the)f(non-connection)e(mutexes:)120 548 y Ft(smu:)25 b(global)f(mutex)g(for)h(the)g(server)f(table;)120 598 y(otmu:)g(global)h(mutex)f(for)h(object)f(type)h(data)f (structures;)120 648 y(cmu:)h(global)f(LRU)h(list)f(of)h(connections) 120 697 y(prmu:)f(global)h(mutex)f(for)h(protocol)f(registry)120 747 y(trmu:)g(global)h(mutex)f(for)h(transport)f(registry)120 797 y(gcmu:)g(global)h(mutex)f(for)h(GC)g(data)f(structures)120 847 y(timu:)g(global)h(mutex)f(for)h(alarm)f(implementation.)120 897 y(server:)g(one)h(mutex)f(per)h(server.)62 1012 y Fs(Our)15 b(main)g(technique)e(for)i(avoiding)e(deadlocks)h(is)h(to)f (put)g(a)h(partial)f(order)h(on)f(mutexes,)i(and)f(acquire)g(mutexes)0 1074 y(in)f(an)g(order)g(consistent)e(with)h(the)h(partial)f(order.)20 b(That)13 b(is,)i(a)f(thread)g(may)h(enter)f(mutex)g(B)g(while)f (holding)f(mutex)i(A)0 1137 y(only)c(if)g(A)g Ft(<)h Fs(B)g(\(we)g(have)f(a)h(few)g(carefully)f(managed)h(exceptions)e(to)h (this)g(rule,)h(involving)d(connection)h(mutexes\).)i(For)0 1199 y(non-connection)e(mutexes,)i(the)g(partial)g(order)g(is)g(the)g (transitive)e(closure)i(of)g(the)g(following)e(relationships:)120 1288 y Ft(cmu)25 b(<)f(server)120 1338 y(smu)h(<)f(server)120 1388 y(server)g(<)h(prmu)120 1437 y(server)f(<)h(trmu)120 1487 y(gcmu)g(<)f(server)120 1537 y(gcmu)h(<)f(timu)120 1587 y(cmu)h(<)f(smu)120 1637 y(gcmu)h(<)f(cmu)120 1686 y(cmu)h(<)f(timu)120 1736 y(prmu)h(<)f(otmu)62 1852 y Fs(We)12 b(use)g(the)g(symbols)e Fp(L2)16 b Fs(and)c Fp(L1)f Fs(to)h(stand)f(for)h(the)f(sets)h(of)g(connection)e(and)i (non-connection)e(mutexes)h(held)h(by)0 1914 y(a)i(thread,)f (respectively.)k(We)c(write)g Ft(">)p Fs(=)p Ft(")g Fs(for)g(the)g(set) g(inclusion)e(relation.)17 b(We)d(write)e Ft(")p Fs(L1.sup)h Ft(<)g Fs(X)p Ft(")g Fs(to)g(mean)h(that)0 1976 y(either)f(\(a\))g(L1)g (is)f(empty,)i(or)f(\(b\))g(the)f(maximum)i(elment)f(of)g(L1)f(\(the)h (partial)f(order)h(rule)g(says)f(there)h(must)g(be)g(exactly)0 2039 y(one)e(maximal)h(element)g(whenever)g(L1)f(isn't)f(empty\))i (precedes)g(X)f(in)h(the)f(partial)g(order.)i(We)f(write)f Ft(")p Fs(L1.sup)g(=)g(X)p Ft(")h Fs(to)0 2101 y(mean)g(that)f(L1)g(is) g(not)f(empty)i(and)f(its)f(maximum)i(member)h(is)e(X.)g(We)h(don't)e (speak)i(of)f Ft(")p Fs(L2.sup)p Ft(")f Fs(because)i(a)g(thread)f(is)0 2163 y(allowed)f(to)h(violate)f(the)h(partial)f(order)i(rule)f(with)f (respect)h(to)g(L2)g(mutexes.)62 2252 y(There)h(is)e(a)i(locking)e (invariant)g(called)g(the)h Fp(Main)h(Remnant)p Fs(,)g(but)e(it)h(is)f (only)g(about)h(connection)f(mutexes.)62 2341 y(There)i(is)e(a)i (common)f(locking)f(invariant,)g(called)h(the)g Fp(Main)g(Invariant)t Fs(:)120 2430 y Ft(L1)25 b(=)g({})f(and)h(Main)f(Remnant.)62 2545 y Fs(It)12 b(holds)e(in)i(many)g(places.)h(The)e(Main)h(Invariant) f(is)h(exactly)f(what's)g(guaranteed)g(to)h(hold)e(while)h(an)h (application's)0 2608 y(service)17 b(routines)f(are)h(called.)29 b(The)17 b(Main)h(Invariant)e(is)g(among)h(the)g(things)f(guaranteed)g (to)h(hold)f(while)g(a)i(stub)e(is)0 2670 y(marshalling)d(or)h (unmarshalling.)19 b(The)14 b(Main)g(Invariant)g(is)f(exactly)h(what's) f(guaranteed)h(to)g(hold)f(while)g(waiting)g(for)p eop %%Page: 190 191 190 190 bop 0 -58 a Fs(Chapter)11 b(12:)g(Threads)f(and)h(Event)g (Loops)1190 b(190)0 183 y(I/O)14 b(on)g(a)g(File)g(Descriptor)f(to)h (be)g(enabled.)20 b(The)13 b(Main)i(Invariant)e(is)h(among)g(the)f (things)g(guaranteed)g(to)h(hold)f(while)0 246 y(doing)d(I/O)h(on)g(a)g (File)g(Descriptor.)62 339 y(For)f(variables,)f(the)g(locking)e (comments)j(say)e(what)h(mutexes)g(must)g(be)g(held)f(to)h(access)h (the)e(variable.)j(For)e(procedure)0 402 y(values,)14 b(the)g(locking)e(comments)i(say)g(what)g(mutexes)f(must)h(be)g(held)f (to)h(call)f(the)h(procedure,)h(and,)g(if)f(the)f(procedure)0 464 y(changes)e(the)g(set)g(of)h(held)f(mutexes,)g(how.)h(Both)f(sorts) g(of)g(comment)h(are)g(applicable)f(to)g(procedure-valued)f(variables;) 0 526 y(we)h(prefer)h(to)e(document)h(the)f(locking)g(pre-)h(and)g (post-condition)o(s)d(in)j(a)g(typedef)f(of)h(the)g(procedure)g(type,)g (and)g(describe)0 588 y(the)g(variable/mutex)f(association)f(in)i(the)g (usual)f(way.)62 682 y(We)i(have)g(two)f(sorts)g(of)g(locking)f (comments:)i(those)f(about)g(L1,)h(and)f(those)g(about)g(L2.)i(Locking) d(comments)i(come)0 745 y(in)j(blocks.)22 b(There)15 b(are)h(two)f(kinds)f(of)h(blocks)f(of)h(locking)f(comments:)19 b(a)c Ft(")p Fs(sticky)p Ft(")f Fs(block)g(is)h(followed)f(by)g(a)i (blank)0 807 y(line;)j(a)e Ft(")p Fs(one-shot)p Ft(")e Fs(is)i(not.)27 b(A)17 b(locking)f(comment)h(is)f(also)h(called)f Ft(")p Fs(sticky)p Ft(")g Fs(or)g Ft(")p Fs(one-shot)p Ft(")p Fs(,)i(depending)d(on)h(the)0 869 y(kind)e(of)g(the)g(comment)h (block)f(in)g(which)g(the)g(comment)h(is)f(contained.)21 b(A)14 b(one-shot)f(comment)i(applies)f(only)f(to)h(the)0 931 y(immediately)d(following)e(item.)j(A)g(sticky)e(comment)i(of)f(a)h (certain)f(sort)g(applies)f(to)h(all)g(items)g(between)h(it)e(and)i (the)f(next)0 994 y(sticky)f(comment)h(of)h(the)f(same)g(sort,)g (except)g(those)g(items)f(to)h(which)g(a)g(one-shot)f(comment)i(of)f (the)g(same)h(sort)e(applies.)62 1087 y(The)h(implementation)f(of)i (mutexes)f(can)g(itself)g(be)g(broken;)g(when)g(this)f(is)h(detected,)g (an)h(ILU)f(procedure)g(may)h(raise)0 1150 y(an)g(exception)g (indicating)e(this)h(condition)g(---)i(and)f(when)g(it)g(does,)g(the)g (locking)f(post-condition)f(can)i(not)g(be)g(expected)0 1212 y(to)f(hold.)62 1306 y(ILU)j(also)f(uses)g Fp(condition)e (variables)k Fs(to)e(get)g(high-performance)g(multithreaded)g (operation.)k(A)d(thread)f(can)h Fp(wait)0 1368 y Fs(on)d(a)h (condition)e(variable.)j(Another)e(thread)g(can)h Fp(notify)h Fs(that)e(condition)e(variable.)k(This)e(causes)g(all)h(threads)f (currently)0 1430 y(waiting)h(on)h(the)g(condition)e(variable)h(to)h (return)g(from)h(the)f(wait)f(operation.)17 b(To)c(prevent)f(timing)h (splinters,)f(decisions)0 1493 y(about)g(waiting)f(and)h(notifying)e (should)h(be)h(made)h(inside)f(a)g(mutex.)j(This)d(means)h(the)f(mutex) g(must)g(be)g(released)h(while)0 1555 y(waiting)f(on)h(a)h(condition)d (variable,)k(and)e(there)g(must)h(be)f(no)g(possibilty)e(of)i(a)h (thread)g(switch)e(between)h(the)g(release)h(of)0 1617 y(the)g(mutex)g(and)g(the)g(start)g(of)g(the)g(wait;)h(the)e(wait)h (operation)f(thus)g(takes)h(the)g(mutex)g(as)g(an)h(argument,)g (because)f(in)g(a)0 1679 y(pre-emptive)d(threads)g(environment)f(the)h (release)g(and)g(the)g(wait)g(must)g(be)g(an)g(atomic)g(thread)g (operation.)0 1843 y Fu(12.2)29 b(Single-Threaded)14 b(Programs)62 1953 y Fs(Users)e(of)h(ILU)f(in)g(single-threaded)f (programs)h(typically)f(need)h(to)g(worry)g(about)g(only)f(one)h (thing:)g(the)g(main)h(loop.)0 2016 y(To)h(animate)f(ILU)h(server)g (modules,)g(a)h(single-threaded)d(program)i(needs)g(to)f(be)h(running)e (the)i(ILU)g(main)g(loop.)k(This)0 2078 y(can)11 b(be)h(done,)f(e.g.,)h (by)f(calling)f Ft(ILU_C_Run\(\))g Fs(in)h(C)g(or)g Ft(iluServer::Run)f Fs(in)h(C)p Ft(++)p Fs(.)h(ILU)f(also)f(runs)h(its)f(main)h(loop)0 2140 y(while)g(waiting)f(for)i(I/O)g(involved)e(in)h(RPC)i(\(so)f(that) f(incoming)g(calls)g(may)h(be)g(serviced)g(while)f(waiting)f(for)i(a)g (reply)g(to)0 2203 y(an)f(outgoing)e(call;)i(for)g(more)h(on)f(this,)f (see)i(Section)e(12.3)h([Threadedness)g(in)f(Distributed)f(Systems],)j (page)f(192\).)62 2296 y(The)16 b(problem)f(is,)h(many)g(other)f (subsystems)e(also)i(have)h(or)f(need)h(their)f(own)f(main)i(loop.)23 b(Windowing)14 b(toolkits)0 2359 y(are)h(a)g(prime)g(example.)22 b(When)14 b(a)h(programmer)g(wants)f(to)g(create)h(a)g(single-threaded) e(program)i(that)f(uses)g(both)f(ILU)0 2421 y(and)f(another)g Fp(main)h(looped)j Fs(subsystem,)c(one)g(main)h(loop)e(must)h(be)h (made)g(to)f(serve)g(both)g(\(or)h(all\))f(subsystems.)i(From)0 2483 y(ILU's)j(point)f(of)i(view,)h(there)e(are)h(two)f(approaches)g (doing)f(this:)23 b(\(1\))17 b(use)g(ILU's)h(default)e(main)i(loop,)g (or)g(\(2\))f(use)0 2545 y(some)d Fp(external)19 b Fs(\(to)13 b(ILU\))i(main)f(loop)f(\(this)h(might)f(be)i(the)f(main)g(loop)f(of)i (some)f(other)g(subsystem,)g(or)g(a)h(main)f(loop)0 2608 y(synthesized)d(specifically)g(for)i(the)g(program)g(at)f(hand\).)k (ILU)d(supports)e(both)g(approaches.)16 b(Actually,)c(ILU's)h(runtime)0 2670 y(kernel)f(supports)f(both)g(approaches.)k(Currently)d(no)g (language)g(veneers)g(mention)g(it.)j(This)c(is,)i(in)f(part,)h (because)g(it)e(has)p eop %%Page: 191 192 191 191 bop 0 -58 a Fs(Chapter)11 b(12:)g(Threads)f(and)h(Event)g (Loops)1190 b(191)0 183 y(no)16 b(interaction)f(with)g(the)h(jobs)f(of) i(the)f(language)f(veneers)h(---)h(application)e(code)h(can)h(call)f (this)f(part)h(of)g(the)g(kernel)0 246 y(directly)10 b(\(from)i(any)f(language)g(that)f(supports)f(calling)i(C)g(code\).)0 371 y Fo(12.2.1)25 b(ILU)16 b(Main)f(Loop)g(Functional)f(Spec)62 475 y Fs(ILU)h(needs)f(a)i(main)e(loop)g(that)g(repeatedly)h(waits)f (for)h(I/O)f(being)g(enabled)g(on)h(file)f(descriptors)g(\(a)h(UNIX)g (term\))0 537 y(and/or)e(certain)h(times)g(arriving,)g(and)f(invokes)g (given)g(procedures)g(when)h(the)f(awaited)h(events)f(happen.)19 b(\(Receipt)14 b(of)0 599 y(certain)j(UNIX)g(signals)f(should)g (probably)g(be)h(added)g(to)g(the)g(kinds)f(of)i(things)d(that)i(can)h (be)f(awaited.\))30 b(The)17 b(main)0 662 y(loop)12 b(can)h(be)g (recursively)f(invoked)f(by)h(these)h(given)f(procedures)g(\(see)h (Section)g(12.3)f([Threadedness)g(in)g(Distributed)0 724 y(Systems],)g(page)f(192)f(for)i(a)g(good)e(reason)h(why\),)g(and)g (thus)g(particular)f(instances)h(of)g(the)g(main)g(loop)g(can)g(be)g (caused)h(to)0 786 y(terminate)f(as)g(soon)f(as)i(the)f(currently)f (executing)g(given)h(procedure)g(returns.)62 873 y(For)25 b(a)g(detailed)e(presentation,)j(see)f(the)f(kernel)g(interface)g (version)g(of)g(this)f(functionality,)j(in)e(procedures)0 936 y Ft(ilu_RunMainLoop)p Fs(,)16 b(...)25 b Ft(ilu_UnsetAlarm)14 b Fs(in)h(`)p Ft(iluxport.h)p Fs(';)i(these)e(are)h(generic)f (procedures)g(that)g(call)g(the)0 998 y(actual)c(procedures)f(of)i (whatever)e(main)i(loop)e(is)g(really)h(being)f(used.)h(To)g(see)g(the) g(signatures)f(of)h(the)g(procedures)g(really)0 1060 y(being)h(used,)i(see)g(the)f(definition)e(of)i(type)g Ft(ilu_MainLoop)f Fs(in)h(`)p Ft(iluxport.h)p Fs('.)k([Should)12 b(have)i(a)f(description)f(here)0 1123 y(that)f(doesn't)f(reference)i (`)p Ft(iluxport.h)p Fs('.])0 1248 y Fo(12.2.2)25 b(Using)15 b(ILU's)h(Default)e(Main)h(Loop)62 1352 y Fs(In)21 b(this)e(approach,)k (ILU's)d(default)f(main)i(loop)e(is)h(made)h(to)f(serve)g(the)g(needs)g (of)h(both)e(ILU)h(and)h(the)f(other)0 1414 y(main-loop-using)8 b(parts)h(of)h(the)f(program.)j(When)d(the)h(other)f(main-loop-using)f (parts)h(of)h(the)f(program)h(need)g(to)g(register)0 1476 y(I/O)h(handlers)f(or)i(use)e(alarms,)i(you)f(arrange)h(to)e(call) h(the)g(appropriate)g(generic)g(procedures)f(of)i(the)f(ILU)g(main)g (loop.)0 1602 y Fo(12.2.3)25 b(Using)15 b(an)g(External)g(Main)f(Loop) 62 1706 y Fs(In)i(this)e(approach,)i(you)e(use)h(an)h(external)f(\(to)f (ILU\))i(main)f(loop)f(to)h(serve)g(the)g(needs)g(of)g(ILU)g(\(as)h (well)e(as)i(other)0 1768 y(parts)e(of)h(your)e(program\).)22 b(This)14 b(involves)e(getting)h(ILU)i(to)f(reveal)g(to)g(you)g(its)g (needs)g(for)h(waiting)e(on)h(I/O)g(and)g(time)0 1830 y(passage,)i(and)g(your)f(arranging)g(to)g(satisfy)f(these)h(needs)g (using)f(the)i(services)f(of)g(the)g(external)h(main)f(loop.)24 b(You)15 b(do)0 1892 y(this)10 b(by)i(supplying)d(to)i(ILU,)h(early)g (in)f(the)g(initialization)e(sequence,)j(a)g(metaobject)f(of)g(your)h (creation.)g(ILU)g(reveals)f(its)0 1955 y(needs)i(to)g(you)f(by)h (calls)g(on)g(the)g(methods)f(of)h(this)f(metaobject,)i(and)f(you)g (satisfy)f(them)h(in)g(your)g(implementations)e(of)0 2017 y(these)g(methods.)g(The)g(C)g(type)g(for)g(such)g(a)g(metaobject) g(is)g Ft(ilu_MainLoop)p Fs(,)g(found)f(in)h(`)p Ft(iluxport.h)p Fs('.)62 2104 y(Note)j(that)g(an)h Ft(ilu_MainLoop)e Fs(is)h(responsible)f(for)h(managing)g(multiple)f(alarms.)22 b(Some)15 b(external)f(main)h(loops)0 2167 y(may)g(directly)e(support)g (only)g(one)h(alarm.)22 b(Later)14 b(in)g(`)p Ft(iluxport.h)p Fs(')f(you)h(will)f(find)h(a)g(general)h(alarm)g(multiplexing)0 2229 y(facility,)10 b(which)h(may)h(come)f(in)g(handy)g(in)f(such)h (situations.)62 2316 y(See)19 b(the)e(files)g(in)g(`)p Fp(ILUSRC)t Ft(/runtime/mainloop/)p Fs(')f(for)i(several)f(examples)g (of)h(this)e(approach)h(\(for)h(the)f(X)0 2378 y(Window)10 b(System's)h(various)f(toolkits,)f(like)i(Motif,)g(Xaw,)h(XView,)f(and) g(Tk\).)0 2504 y Fo(12.2.4)25 b(A)16 b(Hybrid)e(Aproach)62 2608 y Fs(Both)f(of)g(the)g(above)g(approaches)g(rely)g(on)g(there)g (being)f(a)i(certain)f(amount)g(of)g(harmony)g(between)g(the)g (functional)0 2670 y(requirements)h(made)h(by)f(some)h(main-looped)e (subsystems)g(and)h(the)g(functional)f(capabilities)g(offered)i(by)f (others.)20 b(It)p eop %%Page: 192 193 192 192 bop 0 -58 a Fs(Chapter)11 b(12:)g(Threads)f(and)h(Event)g (Loops)1190 b(192)0 183 y(also)15 b(relies)g(on)g(the)g(subsystems)f (whose)h Ft(")p Fs(normal)p Ft(")g Fs(main)h(loops)e(are)i(not)f(used)g (being)g(open)g(enough)f(that)h(you)g(can)0 246 y(determine)d(their)f (main)h(loop)f(needs.)i(The)f(conditions)d(cannot)i(be)h(guaranteed)g (in)f(general.)i(We've)g(tried)e(to)g(minimize)0 308 y(the)g(main)g(loop)f(requirements)h(of)g(ILU,)h(and)f(maximize)g(its)g (openness.)62 408 y(We)k(know)e(of)i(an)f(example)h(where)f(neither)g (of)h(the)f(above)g(approaches)g(is)g(workable,)h(and)f(have)g(a)h (solution)d(that)0 470 y(may)g(be)f(of)g(interest.)g(See)h(`)p Fp(ILUSRC)t Ft(/etc/xview/)p Fs(')f(for)g(the)g(\(untested\))f(code.)62 570 y(The)i(problem)f(is)g(with)g(the)g(Xview)g(toolkit)f(\(for)i(the)f (X)h(Window)e(System\).)k(Its)d(main)h(loop)e(cannot)h(be)h (recursively)0 632 y(invoked)f(\(a)h(requirement)g(of)h(ILU\),)f(and)g (the)g(Xview)g(toolkit)e(is)h(not)h(open)f(enough)h(to)f(enable)h(use)g (of)g(any)g(other)g(main)0 695 y(loop.)62 795 y(Our)17 b(solution)e(is)h(to)h(use)f(Xview's)g(main)h(loop)f(as)h(the)g Fp(top)f(level)21 b Fs(main)c(loop,)h(letting)d(ILU)i(use)g(its)f(own)g (main)0 857 y(loop)d(when)g(waiting)f(on)h(RPC)i(I/O.)f(Like)f(the)g (external)h(main)f(loop)g(approach,)h(this)f(requires)g(getting)f(ILU)i (to)f(reveal)0 919 y(its)j(needs)g(for)g(waiting)f(on)h(I/O)g(and)g (time;)j(unlike)c(the)h(external)g(main)h(loop)e(approach,)j(this)d (requires)h Fp(not)k Fs(calling)0 982 y Ft(ilu_SetMainLoop)p Fs(.)10 b(Instead)f(of)g(calling)g Ft(ilu_SetMainLoop)p Fs(,)g(you)g(call)g Ft(ilu_AddRegisterersToDefault)p Fs(,)0 1044 y(which)j(causes)h(ILU's)f(default)g(main)h(loop)f(to)g (reveal)h(ILU's)g(needs)f(to)h(you)f(---)h(in)f(addition)f(to)i(doing)e (everything)g(the)0 1106 y(default)e(main)i(loop)e(normally)g(does.)i (\(Actually,)e(the)h(multiple)f(alarms)h(of)g(ILU)g(have)g(been)g (multiplexed)f(into)g(one)h(here)0 1168 y(for)h(your)g(convenience.\))g (You)g(register)f(these)h(needs)g(with)f(the)h(Xview)g(main)g(loop,)f (and)h(run)g(it)g(at)g(the)g(top)g(level.)62 1268 y(This)21 b(solution)e(is)i(not)g(as)h(good)f(as)h(we'd)f(like;)26 b(it)21 b(does)g(not)g(provide)g(a)h(truly)f(integrated)f(main)i(loop.) 42 b(In)0 1331 y(particular,)16 b(any)f(I/O)g(handler)g(registered)g (through)f(ILU's)h(generic)g(procedures)g(\()p Ft (ilu_RegisterInputSource)p Fs(,)0 1393 y Ft(ilu_RegisterOutputSource)p Fs(\))d(may)j(be)f(called)g(spurriously:)h(due)f(to)g(lack)g(of)g (coordination,)g(both)f(loops)g(may)0 1455 y(decide)20 b(a)g(call)f(is)g(in)h(order)f(\(when,)j(of)e(course,)i(only)d(one)g (call)h(is)f(in)g(order\).)38 b(As)19 b(of)h(release)g(2.0,)i(ILU's)e (own)0 1518 y(I/O)d(handlers)f(are)i(prepared)f(for)g(spurrious)e (calls.)28 b(Application)15 b(programmers)j(are)f(responsible,)g(when)g (they)f(use)0 1580 y Ft(ilu_AddRegisterersToDefault)p Fs(,)c(for)i(making)f(sure)g(their)g(I/O)g(handlers)g(that)f(are)j (registered)d(through)g(ILU's)0 1642 y(generic)f(procedures)g(are)h (prepared)f(for)g(spurrious)f(calls.)0 1831 y Fu(12.3)29 b(Threadedness)15 b(in)g(Distributed)f(Systems)62 1947 y Fs(In)h(a)h(distributed)d(system)h(of)h(interacting)f(program)h (instances,)h(you)e(can)h(\(in)g(principle,)g(even)h(if)f(not)f (\(easily\))h(in)0 2010 y(practice\))f(trace)g(a)g(thread)f(of)h (control)f(across)g(remote)h(procedure)g(calls.)k(Thus)13 b(a)h(distributed)d(system,)j(when)g(viewed)0 2072 y(as)f(a)g(whole,)f (can)h(be)g(seen)f(to)g(be)h(programmed)g(in)f(either)h(a)g (single-threaded)e(or)h(multi-threaded)g(style.)i(ILU)f(aims)g(to)0 2134 y(minimize)d(the)g(consequences)g(of)g(the)g(choice)h(between)f (in-memory)g(and)g(RPC)i(binding,)d(and)h(this)f(requires)h(things)f (not)0 2196 y(usually)j(offered)i(by)g(other)f(RPC)i(systems.)j(Some)c (of)g(these)f(things)f(are)j(required)e(by)g(both)g(the)g (single-threaded)f(and)0 2259 y(multi-threaded)e(styles)g(of)h (programming)g(distributed)e(systems,)h(for)i(related)f(but)f(not)h (quite)f(identical)g(reasons.)62 2359 y(Forget)k(RPC)i(for)e(a)h (moment,)h(and)e(consider)g(a)g(single-threaded)f(program)i(instance.) 20 b(Method)14 b Ft(m1)g Fs(of)h(object)e Ft(o1)0 2421 y Fs(\(we'll)g(write)f(this)g(as)h Ft(o1.m1)p Fs(\))g(may)g(call)g Ft(o2.m2)p Fs(,)g(which)f(may)i(call)e Ft(o3.m3)p Fs(,)i(which)e(may)h (in)g(turn)f(call)h Ft(o1.m1)f Fs(again,)0 2483 y(which)j(could)g(then) h(call)g Ft(o3.m4)p Fs(,)h(and)f(then)f(everything)g(could)g(return)h (\(in)f(LIFO)h(order,)i(of)e(course\).)26 b(Late)16 b(in)f(this)0 2545 y(scenario,)10 b(the)f(call)g(stack)g(of)g(the)g(one)h(thread)f (includes)f(two)g(activations)g(of)h(the)g(very)h(same)g(method)e(of)i (the)f(same)h(object)0 2608 y(\()p Ft(o1.m1)p Fs(\),)i(and)f(another)f (two)h(activations)e(of)j(different)e(methods)h(of)g(a)h(common)f (object)g(\()p Ft(o3)p Fs(\).)h(All)e(this)g(is)h(irrespective)0 2670 y(of)g(module)g(boundaries.)p eop %%Page: 193 194 193 193 bop 0 -58 a Fs(Chapter)11 b(12:)g(Threads)f(and)h(Event)g (Loops)1190 b(193)62 183 y(We)16 b(want)e(to)h(be)h(able)f(to)f(do)h (the)g(same)h(thing)e(in)h(a)g(distributed)e(setting,)i(where,)i(e.g.,) g(each)f(true)f(object)f(is)h(in)g(a)0 246 y(different)f(program)h (instance.)20 b(This)13 b(means)i(that)f(while)f(the)h(ILU)h(runtime)f (is)f(waiting)g(for)i(the)f(reply)g(of)g(an)h(RPC,)h(it)0 308 y(must)10 b(be)g(willing)e(to)h(service)h(incoming)f(calls.)i(This) e(is)g(why)h(ILU)f(requires)h(a)g(recursive)g(main)g(loop)f(in)h (single-threaded)0 370 y(programs.)62 457 y(In)j(fact,)g(one)f(rarely)h (wants)f(single-threaded)f(distributed)f(systems.)k(Indeed,)f(the)f (opportunities)e(for)i(concurrency)0 519 y(are)g(one)f(of)g(the)g(main) g(attractions)f(of)i(distributed)c(systems.)j(In)g(particular,)g (people)g(often)g(try)g(to)g(build)e(multi-threaded)0 582 y(distributed)i(systems)i(out)g(of)g(single-threaded)f(program)i (instances.)k(While)13 b(we)g(hope)h(this)e(confused)h(approach)g(will) 0 644 y(fade)i(as)f(multi-threading)f(support)g(becomes)i(more)g (widespread,)g(we)g(recognize)f(that)g(it)g(is)g(currently)g(an)g (important)0 706 y(customer)e(requirement.)i(Making)e(single-threaded)e (ILU)i(willing)e(to)i(recursively)f(invoke)g(its)g(main)h(loop)f(also)h (makes)0 769 y(single-threaded)f(program)i(instances)f(more)h(useful)f (in)g(a)h(multi-threaded)f(distributed)e(system)i(\(but)g(what)g(you)h (really)0 831 y(want)e(are)h(multi-threaded)e(program)h(instances\).)62 918 y(Threading)i(is)g(also)g(an)g(issue)g(in)g(RPC)i(protocols.)h (Some)f(allow)d(at)i(most)f(one)g(outstanding)e(call)i(per)h (connection.)0 980 y(When)e(using)f(one)h(of)g(these,)h(ILU)f(is)g (willing)e(to)i(use)g(multiple)f(parallel)h(RPC)h(connections,)f (because)g(they're)g(needed)0 1043 y(to)f(make)h(nested)e(calls)h(on)g (the)f(same)i(server.)p eop %%Page: 194 195 194 194 bop 0 -58 a Fs(Chapter)11 b(13:)g(Protocols)f(and)h(Transports) 1201 b(194)0 183 y Fq(13)36 b(Protocols)14 b(and)g(Transports)62 328 y Fs(When)g(two)f(modules)h(of)g(a)g(program)g(are)h(in)f (different)f(address)h(spaces,)h(or)f(use)g(different)g(data)f (representations,)0 390 y(ILU)21 b(forms)f(messages)h(to)f(send)g (across)g(the)h(inter-module)e(boundary;)24 b(we)d(call)f(a)h (particular)f(way)h(of)g(forming)0 453 y(and)15 b(interpreting)e(these) i(messages)g(an)g Fp(RPC)h(protocol)i Fs(\(sometimes)d(simply)f Fp(protocol)t Fs(\).)22 b(These)15 b(messages)g(may)g(be)0 515 y(transported)i(between)h(address)g(spaces)h(in)f(different)g (ways;)j(we)e(call)f(a)h(particular)f(way)g(of)h(moving)e(messages)i(a) 0 577 y Fp(transport)p Fs(.)33 b(This)18 b(chapter)h(describes)f(the)g (various)g(kinds)g(of)h(available)f(ILU)g(protocols)f(and)i (transports.)33 b(ILU)19 b(is)0 639 y(extensible:)14 b(additional)d(RPC)k(protocols)c(and)j(transports)d(can)j(be)g(added,)g (either)f(at)g(compile-time)g(or)g(run-time;)h(this)0 702 y(chapter)d(does)g(not)f(describe)h(how)g(to)f(do)h(so.)62 790 y(When)g(an)h(ILU)f(kernel)g(server)h(exports)e(objects,)h(it)f (does)h(so)g(via)g(one)g(or)h(more)g(contact)e(stacks.)i(Each)f(stack)g (has)g(an)0 853 y(RPC)g(protocol)f(at)g(the)g(top)g(of)g(the)g(stack,)h (forming)f(and)g(interpreting)e(messages,)j(and)f(one)h(or)f(more)h (layers)f(of)g(transport)0 915 y(below)h(the)h(protocol)f(layer,)h (transforming)f(or)i(communicating)e(the)g(messages)h(in)g(various)f (ways.)j(A)e(contact)f(stack)h(is)0 977 y(specified)i(by)h(a)g (protocol-info)f(string)f(and)i(a)h(sequence)e(of)i(transport-info)d (strings;)i(the)g(syntax)e(of)j(these)e(strings)g(is)0 1039 y(defined)d(in)f(this)g(chapter.)0 1183 y Fu(13.1)29 b(Protocols)0 1329 y Fo(13.1.1)c(The)16 b(Abstract)e(ILU)i(Message)g (Protocol)62 1434 y Fs(Before)e(describing)e(any)h(particular)f (protocol,)h(we)g(will)f(describe)g(the)h(abstract)g(ILU)g(protocol,)f (which)h(is)f(layered)0 1496 y(on)j(top)f(of)h(each)g(actual)g (protocol.)21 b(It)15 b(is)f(quite)g(simple.)22 b(Two)15 b(types)f(of)h(messages)g(are)g(used,)h(one)f(to)f(communicate)0 1559 y(parameters)f(to)f(a)h(true)f(method,)h(and)f(the)g(other)g(to)g (communicate)g(results)g(and/or)f(exceptions)g(from)i(the)f(true)h (method)0 1621 y(to)21 b(surrogate)g(caller.)42 b(Parameters)23 b(and)e(values)g(are)h(encoded)f(according)g(to)g(a)g(simple)g (abstract)g(external)g(data)0 1683 y(representation)8 b(format.)k(This)c(abstract)h(protocol)g(identifies)f(what)h (information)f(is)h(passed)g(between)g(modules)g(without)0 1745 y(specifying)h(its)g(exact)h(mapping)g(to)f(bit)h(patterns.)62 1834 y(Additionally,)e(the)h(abstract)h(protocol)f(is)g(capable)h(of)g (being)f(used)h(with)f(either)h(a)g Fp(concurrent)k Fs(or)c(a)g Fp(non-concurrent)0 1896 y Fs(actual)h(protocol.)j(A)e(concurrent)f (protocol)f(is)i(one)f(which)g(allows)g(multiple)f(requests)h(to)g(be)h (outstanding)d(on)i(a)h(single)0 1959 y(connection.)35 b(A)20 b(non-concurrent)e(protocol)h(normally)g(allows)f(only)h(one)g (outstanding)e(request)i(per)h(connection;)0 2021 y(it)d(preserves)g (liveness)f(with)g(such)h(protocols)f(by)h(using)f(multiple)g (connections)f(when)i(needed.)30 b(This)16 b(is)h(to)g(avoid)0 2083 y(introducing)i(deadlocks)i(into)g(a)h(distributed)d(thread;)26 b(ILU)c(does)f(not)g(attempt)g(any)h(scheme)g(for)g(global)e(thread)0 2145 y(identification.)f(However,)c(a)g(client)e(application)g(can)i (inform)f(ILU)g(that)g(a)h(collection)d(of)j(calls)f(belong)f(to)h (logically)0 2208 y(distinct)8 b(threads,)i(thus)f(enabling)f(ILU)i(to) f Fp(pipeline)j Fs(them)e(down)f(a)h(single)e(connection)h(\(if)h(they) f(happen)h(to)f(all)g(be)h(going)0 2270 y(to)k(the)g(same)h(server\).) 21 b(This)13 b(is)h(done)g(by)g(creating)g(a)h(pipeline)e(meta-object)h (and)g(associating)e(it)i(with)f(each)i(of)g(these)0 2332 y(calls.)62 2421 y(ILU)d(normally)f(does)g(not)g(guarantee)g(to)h (deliver)f(calls)g(to)g(server)h(application)e(code)h(in)h(the)f(same)h (order)g(that)f(client)0 2483 y(application)k(code)i(makes)g(them)g (\(of)g(course,)i(a)e(client)f(can)h(refrain)h(from)f(making)g(one)f (call)h(until)e(after)j(receiving)0 2545 y(results)11 b(from)i(a)g(previous)e(one;)i(this)e(is)h(not)g(an)g(instance)g(of)h (ILU)f(doing)f(anything)g(to)h(preserve)g(ordering\).)j(However,)0 2608 y(a)g(client)e(can)i(request)f(special)g(treatment)g(of)h(a)g (collection)d(of)j(calls.)21 b(That)14 b(special)g(treatment)g(is)g(an) g(instance)g(of)g(the)0 2670 y(serialization)8 b(guarantee.)j(The)f (guarantee)g(is)f(this:)h(these)f(calls)h(are)g(delivered)g(to)f (server)h(application)e(code)i(in)g(the)g(same)p eop %%Page: 195 196 195 195 bop 0 -58 a Fs(Chapter)11 b(13:)g(Protocols)f(and)h(Transports) 1201 b(195)0 183 y(order)12 b(that)g(client)f(application)g(code)h (makes)g(them,)h(except)f(that)g(a)g(call)g(made)h(after)g(a)f Fp(barrier)h(call)j Fs(may)d(be)f(delivered)0 246 y(before)i(a)g(call)g (made)g(earlier.)19 b(A)14 b(barrier)g(call)f(is)h(one)f(that)g(raises) h(the)f(system)g(exception)g Ft(BARRIER)p Fs(.)18 b(No)c(two)f(of)g (the)0 308 y(given)f(calls)h(may)g(be)g(executed)g(concurrently.)j(The) d(given)f(calls)h(must)g(all)f(be)i(on)e(objects)g(in)h(the)g(same)g (server.)18 b(That)0 370 y(server)10 b(must)g(export)g(itself)f(via)h (a)h(port)e(that)h(uses)g(a)g(non-concurrent)f(protocol;)g(that)h(port) f(must)h(be)h(the)e(server's)i(default)0 432 y(port)f(\(the)g(only)g (one)g(that)g(clients)f(attempt)h(to)g(use,)h(so)f(far\).)i(The)f (serialization)e(guarantee)h(is)g(requested)g(on)g(a)h(collection)0 495 y(of)g(calls)g(by)g(creating)f(a)i(serializer)f(meta-object)g(and)g (associating)e(it)i(with)f(each)i(of)f(those)f(calls.)0 642 y Fn(13.1.1.1)22 b(Messages)62 754 y Fs(The)15 b(first)g(type)g(of) g(message)h(is)e(called)h(a)h Fp(request)p Fs(.)23 b(Each)15 b(request)g(consists)f(of)h(a)g(code)h(identifying)d(the)i(method)0 816 y(being)e(requested,)i(an)f(authentication)e(block)h(identifying)f (the)i(principal)e(making)i(the)g(call,)h(and)f(a)g(list)f(of)h (parameter)0 878 y(inputs)c(to)h(the)h(method)f(being)g(called.)j(The)d (method)h(is)f(identified)f(by)i(passing)e(the)i(one-based)f(ordinal)g (value)g(\(that)g(is,)0 940 y(the)j(index)f(of)i(the)f(method)g(in)g (the)g(list)f(of)h(methods,)h(beginning)d(with)h(one\))h(of)h(the)f (method,)h(in)f(the)g(list)f(of)h(methods)0 1003 y(as)i(specified)e(in) h(the)g(ISL)h(description)e(of)i(the)f(class)g(which)f(actually)h (defines)g(the)g(method.)24 b(No)15 b(more)h(than)f(65278)0 1065 y(\(1-0xFEFF\))h(methods)f(may)i(be)f(directly)e(specified)i(for)g (any)f(type)h(\(though)e(more)j(methods)e(may)h(be)g(inherited)f(by)0 1127 y(a)h(type\).)25 b(Method)15 b(codes)g(0xFF00)g(to)h(0xFFFF)g(are) g(reserved)g(for)g(ILU)f(internal)g(use.)25 b(The)15 b(principal)g(is)g(identified)0 1189 y(by)d(a)h(block)f(of)h (authentication)d(credentials)i(information)g(which)g(varies)g (depending)f(on)i(the)f(specific)g(authentication)0 1252 y(protocol)g(used.)18 b(These)13 b(credentials)f(may)i(be)f(either)g (in)g(the)g(request)g(header,)i(or)e(may)h(appear)g(as)f(a)h(parameter) g(of)f(the)0 1314 y(request.)e(\(Note:)f(There)g(should)e(also)i(be)g (an)g(ILU)g(protocol)f(version)g(number)i(somewhere)f(here,)h(but)e (there)i(isn't)e(\(yet\).\))62 1409 y(The)k Fp(result)k Fs(message)c(is)f(used)g(to)h(convey)f(return)h(values)f(and)h (exception)e(values)i(from)g(the)g(true)f(method)h(back)g(to)0 1471 y(the)e(caller.)i(It)e(consists)f(of)h(a)h(Boolean)g(value,)f (indicating)f(whether)h(the)g(call)g(was)h(successful)e(\(for)i Ft(TRUE)p Fs(\))f(or)h(signalled)0 1533 y(an)e(exception)e(\(for)j Ft(FALSE)p Fs(\).)f(If)h(successful,)e(the)h(return)f(value)g(\(if)h (any\),)h(follows,)e(followed)f(by)h(the)h(values)f(of)h(any)f Ft(Out)0 1596 y Fs(parameters,)14 b(in)e(the)g(order)g(they)g(are)h (specified)f(as)g(parameters.)k(If)d(an)f(exception)g(was)g(signalled,) f(a)i(value)f(between)g(1)0 1658 y(and)h(2)p Ft(^)p Fs(16-1)e(follows,) h(indicating)f(the)i(ordinal)e(value)i(specific)f(exception)g(in)g(the) g(list)g(specified)g(in)g(the)g(definition)f(of)0 1720 y(the)g(method,)g(followed)f(by)h(a)g(value)g(of)g(the)g(exception)f (type,)h(if)g(any)g(was)h(specified)e(for)h(the)g(exception.)0 1868 y Fn(13.1.1.2)22 b(Parameter)16 b(Types)62 1979 y Fs(Simple)11 b(numerical)h(values,)e(of)i(types)e Ft(integer)p Fs(,)h Ft(cardinal)p Fs(,)g Ft(real)p Fs(,)g(or)h Ft(byte)p Fs(,)f(are)h(passed)e(directly.)62 2074 y Ft(Character)i Fs(values)f(are)i(passed)e(as)h(integer)g(values)f(in)g(the)h(range)g ([0,2)p Ft(^)p Fs(16-1].)i Ft(Short)d(character)g Fs(values)g(are)0 2136 y(passed)i(as)g(integer)g(values)f(in)h(the)g(range)h([0,2)p Ft(^)p Fs(16-1].)j Ft(Long)11 b(character)i Fs(values)f(are)i(passed)f (as)g(integer)g(values)g(in)0 2199 y(the)e(range)g([0,2)p Ft(^)p Fs(32-1].)62 2293 y Ft(Enumeration)k Fs(values)g(are)h(passed)f (as)h(integer)f(values)g(in)g(the)g(range)h([0,2)p Ft(^)p Fs(16-1],)h(the)e(value)g(being)g(the)h(zero-)0 2356 y(based)11 b(ordinal)f(value)g(of)i(the)e(corresponding)g(enumeration)g (value)h(in)g(the)f(original)g(list)g(of)h(enumeration)f(values)h(in)f (the)0 2418 y(definition)f(of)i(the)g(enumerated)h(type.)62 2513 y Ft(Boolean)f Fs(values)f(are)i(passed)f(as)g(as)g(integer)g (values)f(of)i(either)f(0,)g(for)g Ft(FALSE)p Fs(,)h(or)f(1,)g(for)h Ft(TRUE)p Fs(.)62 2608 y Ft(Optional)d Fs(values)g(are)h(passed)e(by)h (first)g(passing)f(a)h(Boolean)g(value,)h(with)e Ft(TRUE)h Fs(indicating)f(that)g(a)i(non-)p Ft(NIL)f Fs(value)0 2670 y(is)i(being)f(passed,)h(and)g(then)g(only)f(in)g(the)h(non-)p Ft(NIL)g Fs(case)g(passing)f(a)i(value)e(of)i(the)f(optional)e(value's) i(indicated)f(type.)p eop %%Page: 196 197 196 196 bop 0 -58 a Fs(Chapter)11 b(13:)g(Protocols)f(and)h(Transports) 1201 b(196)62 183 y Ft(Sequence)10 b Fs(values)f(are)i(passed)f(by)g (first)f(passing)g(a)i(count,)f(as)g(an)g(integer)g(in)f(the)h(range)h ([0,2)p Ft(^)p Fs(32-1])e(for)i(sequences)0 246 y(without)g(limits,)i (or)h(for)f(sequences)g(with)f(limits)h(greater)g(than)g(2)p Ft(^)p Fs(16-1,)g(or)h(an)f(integer)g(in)g(the)g(range)g([0,2)p Ft(^)p Fs(16-1],)h(for)0 308 y(sequences)i(with)g(limits)f(less)i(than) f(2)p Ft(^)p Fs(16,)i(indicating)c(the)j(number)g(of)f(elements)h(in)f (the)h(sequence,)h(and)f(then)f(that)0 370 y(number)11 b(of)g(values)g(of)g(the)g(sequence's)g(base)g(type.)62 457 y Ft(Array)h Fs(values)f(are)h(passed)f(by)g(passing)f(a)i(number)g (of)f(elements)h(of)g(the)f(array's)h(base)f(type)g(corresponding)f(to) h(the)0 519 y(size)g(of)g(the)g(array.)62 607 y Ft(Record)f Fs(values)f(are)i(passed)e(by)h(passing)f(values)g(of)h(types)f (corresponding)g(to)g(the)h(fields)f(of)i(the)e(record,)i(following)0 669 y(the)g(order)g(in)g(which)f(the)h(fields)g(are)g(defined)g(in)g (the)g(ISL)g(definition)e(of)j(the)f(record.)62 756 y Ft(Union)i Fs(values)g(are)h(passed)e(by)h(passing)f(a)h(value)g(of)g (the)g(discriminant)f(type,)h(which)g(indicates)f(which)g(branch)h(of)0 818 y(the)f(union)g(constitutes)e(the)j(union's)e(actual)h(type,)h (usually)f(followed)f(by)h(a)h(value)g(of)g(the)f(union's)f(actual)i (type.)i(If)e(the)0 881 y(discriminant)c(value)h(indicates)f(a)i (branch)f(of)g(the)g(union)f(which)h(has)g(no)g(associate)g(value,)g (only)g(the)g(discriminant)f(value)0 943 y(is)i(passed.)62 1030 y Ft(Object)g Fs(values)g(are)i(passed)d(in)i(several)f(different) g(forms,)h(depending)f(on)g(whether)g(or)g(not)g(the)h(object)e(value)i (is)f(in)0 1092 y(the)j(discriminator)f(position,)g(whether)h(or)g(not) f(the)h(object's)g(type)f(is)h(a)h Ft(singleton)e Fs(type,)i(and)f (whether)g(or)g(not)f(the)0 1155 y(object)d(reference)j(is)e Ft(NIL)p Fs(.)26 1242 y(1.)30 b(The)16 b(first)f(form)h(is)f(used)h (when)f(the)h(object)f(is)g(in)g(the)h(discriminator)e(position)f (\(that)j(is,)g(is)g(the)f(instance)g(upon)90 1304 y(which)10 b(the)g(method)g(is)g(being)g(invoked\),)f(and)i(is)f(an)g(instance)g (of)g(a)h Ft(singleton)f Fs(type.)h(In)f(this)f(case,)j(the)e(object)g (is)90 1366 y(already)g(known)g(to)f(both)h(sides,)g(and)g(the)g (object)g(is)f(passed)h(implicitly;)e(that)i(is,)h(no)f(actual)g(bytes) f(are)i(transmitted.)26 1439 y(2.)30 b(The)13 b(second)g(form)h(is)f (used)g(when)g(the)g(object)g(is)g(in)g(the)g(discriminator)f (position,)g(but)h(is)g(not)g(of)g(a)h Ft(singleton)90 1501 y Fs(type.)f(In)f(this)f(case,)i(the)f(CRC-32)h(of)f(the)f(server) i(ID)f(of)g(the)f(object)h(is)f(passed)g(as)h(a)h Ft(cardinal)e Fs(value,)h(followed)90 1564 y(by)h(the)g(instance)f(handle)h(of)h(the) f(object,)g(as)g(a)h Ft(sequence)d(of)g(short)g(character)h Fs(value.)18 b(Both)13 b(the)g(instance)90 1626 y(handle)i(and)g (server)h(ID)f(must)g(be)h(passed,)g(as)f(the)g(true)h(object)e (previously)g(at)h(the)g(``known)g(address'')g(for)g(the)90 1688 y(object)9 b(may)i(have)f(been)g(replaced)g(by)g(a)h(different)e (object)h(with)f(the)h(same)g(instance)f(handle,)i(in)e(a)i(different)e (kernel)90 1750 y(server.)26 1823 y(3.)30 b(In)16 b(the)f(third)g (case,)j(the)d(object)g(is)h(being)f(passed)g(as)h(a)g(normal)g (parameter,)i(that)d(is,)i(not)e(in)g(the)h(discriminator)90 1886 y(position.)f(In)e(this)f(case,)i(the)f(full)f(string)g(binding)f (handle)i(of)g(the)g(object)f(is)h(passed)f(as)h(a)h Ft(sequence)c(of)h(short)90 1948 y(character)g Fs(value.)26 2021 y(4.)30 b(If)11 b(the)g(object)f(being)g(passed)g(as)h(a)h(normal) e(parameter)i(is)f(the)f(CORBA)i(Nil)e(object)g(reference,)j(it)d(is)g (passed)h(as)f(the)90 2083 y Ft(sequence)h(of)g(short)g(character)f Fs(value)h(of)g(length)f(zero.)0 2204 y Fo(13.1.2)25 b(The)16 b(ONC)e(RPC)i(Protocol)62 2308 y Fs(This)d(section)h (describes)f(the)h(mapping)f(of)i(the)f(abstract)f(ILU)h(protocol)f (into)g(the)h(specific)g(on-the-wire)g(protocol)0 2370 y(used)c(with)g(ONC)g(RPC)377 2353 y Fm(1)408 2370 y Fs(One)g(of)h(the)f(major)h(goals)f(of)g(this)g(mapping)g(is)g(to)g (preserve)h(compatibility)d(with)i(existing)e(Sun)0 2432 y(RPC)k(services)f(that)g(can)g(be)g(described)g(in)g(ISL.)p 0 2464 600 2 v 21 2590 a Fm(1)62 2606 y Fs(RPC:)h(Remote)f(Procedure)g (Call)g(Protocol)f(Specification,)g(Version)g(2;)h(R.)g(Srinivasan.)g (IETF)g(RFC)g(1831,)g(August)62 2669 y(1995.)p eop %%Page: 197 198 197 197 bop 0 -58 a Fs(Chapter)11 b(13:)g(Protocols)f(and)h(Transports) 1201 b(197)62 183 y(Four)15 b(variants)e(of)h(the)g(ONC)g(RPC)i (protocol)c(are)j(provided.)20 b(They)13 b(all)h(have)g(protocol)f (info)h(strings)e(of)j(the)f(form)0 246 y Fp(X)t Ft(sunrpc_2_)p Fp(program-number)t Ft(_)p Fp(program-version)s Fs(,)g(where)h Fp(X)k Fs(is)c(either)g(`c')g(or)g(nil,)h(depending)d(on)i(whether)f (the)0 308 y(protocol)e(is)g(concurrent)h(or)g(not,)g(respectively.)k Fp(program-number)f Fs(and)d Fp(program-version)i Fs(may)f(be)f (specified)g(either)0 370 y(in)g(decimal,)h(or)f(in)f(hexidecimal)h (with)f(a)h(leading)g(string)e(of)j Ft(0x)p Fs(.)j(The)c(program)g (number)g(for)g(non-native-ONC-RPC)0 432 y(ILU)g(object)g(types)g(is)g (always)g(the)g(same)h(\(in)f(ILU)h(2.0alpha1)e(to)h(2.0alpha7,)h Ft(0x61A78)p Fs(;)g(in)f(ILU)g(2.0alpha8)g(and)g(up,)0 495 y Ft(0x61A79)p Fs(\),)e(and)g(the)g(program)g(version)g(varies)g (depending)e(on)i(the)g(specific)g(object)f(type.)62 582 y(Use)h(of)h(ONC)f(RPC)h(requires)f(use)g(of)g(a)h(boundaried)d (transport)h(below)h(it.)0 709 y Fn(13.1.2.1)22 b(Message)15 b(Mappings)62 813 y Fs(The)10 b(request)g(message)g(used)f(is)h(that)f (specified)h(by)f(the)h(ONC)g(RPC)h(protocol.)f(The)g(ILU)g(method)g (index)f(is)h(encoded)0 875 y(as)h(a)g(32-bit)f(number)h(in)f(the)h (``proc'')g(field)f(in)h(the)f(ONC)h(RPC)h(request)f(header.)g (Principal)g(identification)d(is)i(passed)h(in)0 938 y(the)g(``cred'')h(field)f(of)g(the)f(ONC)i(RPC)g(request)f(header.)g (By)h(default,)f(ILU)g(will)f(pass)g(the)h Ft(AUTH_UNIX)f Fs(authentication)0 1000 y(information,)20 b(if)f(no)f(authentication)e (method)j(is)f(specified)g(for)h(the)g(method.)33 b(\(This)18 b(default)g(authentication)f(can)0 1062 y(be)e(disabled)e(by)h (defining)f(the)h(environment)f(variable)h Ft(ILU_NO_SUNRPC_UNIX_AUTH)f Fs(to)h(any)g(value.\))21 b(For)15 b(non-)0 1124 y(singleton)d(object)h (types,)h(the)f(ONC)h(RPC)h(program)f(number)g(passed)g(in)f(the)h (``prog'')f(slot)g(is)h(always)f(the)g(same)i(\(for)0 1187 y(ILU)e(2.0alpha1)f(-)h(2.0alpha7,)f(0x00061a78;)f(for)i(ILU)g (2.0alpha8,)g(0x00061a79\),)e(and)i(the)f(version)g(number)h(passed)0 1249 y(in)j(the)g(``vers'')h(slot)e(is)h(the)g(CRC-32)h(hashed)f(value) g(of)g(the)g(MSTID)h(for)g(the)f(object)f(type)h(on)g(which)g(the)g (method)0 1311 y(being)11 b(invoked)g(is)h(defined.)i(For)e(singleton)e (classes,)j(the)f(program)g(number)g(and)g(version)f(specified)h(in)f (the)h(singleton)0 1373 y(information)i(is)g(used.)22 b(The)15 b(``mtype'')g(field)g(is)f(set)h(to)f Ft(CALL)p Fs(.)23 b(The)14 b(indicated)g(``rpcvers'')h(is)g(2.)22 b(A)15 b(monotonically)0 1436 y(increasing)f(32-bit)g(serial)h(number)h (is)e(used)h(in)g(the)g(``xid'')g(field.)23 b(For)16 b(non-singleton,)e(non-NIL)g(objects,)i(an)f(extra)0 1498 y(argument)f(identifying)f(the)h Fp(discriminant)j Fs(of)e(the)f(message)h(\(the)f(object)g(on)g(which)g(the)h(method)f (is)g(being)f(invoked\))0 1560 y(is)f(marshalled)g(before)h(any)f(of)g (the)h(specified)e(arguments.)k(This)c(discriminant)g(is)h(marshalled)g (as)h(an)f(XDR)h(Unsigned)0 1623 y(Integer,)f(which)g(is)f(the)h (CRC-32)h(of)f(the)g(server)g(ID)g(of)g(the)g(object,)g(followed)e(by)i (an)g(XDR)g(string,)g(which)f(is)g(the)h(plain)0 1685 y(instance)e(handle)h(of)g(the)g(object.)62 1773 y(The)g(reply)f (message)h(used)g(is)f(that)g(specified)g(by)g(the)h(ONC)g(RPC)h (protocol.)e(The)h(``mtype'')g(field)f(is)g(set)h(to)f Ft(REPLY)p Fs(.)0 1835 y(The)j(``stat'')g(field)f(is)h(always)f(set)h (to)g Ft(MSG_ACCEPTED)p Fs(.)j(In)d(the)f Ft(accepted_reply)p Fs(,)h(the)g(authentication)e(verifier)i(is)0 1897 y(always)8 b(NULL.)h(The)g(``stat'')g(field)f(may)i(be)f(non-zero,)g(to)g(signal)f (one)g(of)h(a)h(small)e(number)h(of)h(``standard'')e(exceptions,)0 1959 y(or)k(may)h(be)f(zero.)j(This)c(header)i(is)f(then)f(followed)g (by)h(one)g(of)g(three)h(forms:)g(If)f(a)h(``standard'')f(exception)f (was)h(raised,)0 2022 y(nothing.)j(If)e(the)g(method)g(has)f(no)h (exceptions,)f(the)h(return)g(values)f(and)h(out)f(parameters)i(\(if)f (any\).)k(If)c(the)g(method)f(has)0 2084 y(any)j(exceptions)f(defined,) i(a)g(32-bit)e(value)g(which)h(specifies)f(either)h(successful)f (completion)g(\(a)i(value)f(of)g(0\),)i(or)e(an)0 2146 y(exception)d(\(a)i(value)f(greater)h(than)f(0,)h(which)f(is)g(the)g (ordinal)f(value)i(of)f(the)g(particular)g(exception)f(being)h (signalled)f(in)0 2208 y(the)h(list)e(of)i(exceptions)f(specified)g (for)h(this)e(method\),)j(followed)d(by)i(either)f(the)h(return)f (value)h(and)g(out)f(parameters)h(\(if)0 2271 y(any\),)e(in)g(the)g (case)h(of)f(successful)f(completion,)g(or)i(the)f(exception)f(value)g (\(if)i(any\),)f(in)g(the)g(case)g(of)h(an)f(exception.)0 2397 y Fn(13.1.2.2)22 b(Mapping)15 b(of)g(Standard)h(Types)62 2501 y Fs(The)g(mapping)g(of)g(ILU)g(types)f(into)g(ONC)h(RPC)h(types)e (is)h(accomplished)f(primarily)h(by)f(using)g(the)h(appropriate)0 2564 y(XDR)96 2547 y Fm(2)126 2564 y Fs(representation)10 b(for)h(that)g(type.)p 0 2615 600 2 v eop %%Page: 198 199 198 198 bop 0 -58 a Fs(Chapter)11 b(13:)g(Protocols)f(and)h(Transports) 1201 b(198)62 183 y Ft(Short)11 b(integer)g Fs(and)h Ft(integer)f Fs(types)g(are)i(represented)e(with)g(the)g(XDR)h(Integer) g(type.)h Ft(Long)e(integer)g Fs(types)0 246 y(are)h(represented)f(as)g (an)g(XDR)h(Hyper)e(Integer.)62 337 y Ft(Short)h(cardinal)p Fs(,)k Ft(byte)p Fs(,)h(and)f Ft(cardinal)f Fs(types)f(are)j (represented)e(with)g(the)g(XDR)h(Unsigned)e(Integer)h(type.)0 399 y Ft(Long)d(cardinal)g Fs(types)f(are)i(represented)f(as)g(an)g (XDR)g(Unsigned)f(Hyper)h(Integer.)62 490 y Ft(Short)g(real)f Fs(numbers)g(are)h(encoded)f(as)h(XDR)f(Floating-point.)f Ft(Real)h Fs(numbers)g(are)h(encoded)f(as)h(XDR)f(Double-)0 552 y(precision)15 b(Floating-point.)23 b Ft(Long)11 b(real)16 b Fs(numbers)f(are)i(encoded)f(as)g(XDR)g(Fixed-length)e (Opaque)i(data)f(of)h(length)0 614 y(16.)62 705 y Ft(Array)g Fs(values)g(are)h(encoded)f(as)g(XDR)g(Fixed-length)f(Array,)j(except)e (for)g(two)g(special)g(cases.)26 b(If)17 b(the)f(array)h(is)0 768 y(multi-dimensional,)10 b(it)h(is)h(encoded)f(as)h(a)g(flat)g (rendering)f(into)g(a)h(single-dimensional)e(array)i(in)f(row-major)h (order)g(\(the)0 830 y(last)f(specified)g(index)g(varying)f(most)i (rapidly\).)g(If)g(the)f(array)h(is)f(of)h(element-type)f Ft(byte)h Fs(or)f Ft(short)g(character)p Fs(,)h(it)f(is)0 892 y(encoded)f(as)g(an)g(array)h(of)f(one)g(\(in)g(the)g (one-dimensional)e(case\))j(or)f(more)h(\(in)f(the)f(greater-than-one)h (dimensional)f(case\))0 954 y(values)h(of)i(XDR)f(Opaque)g(Data.)62 1046 y Ft(Record)g Fs(values)g(are)g(encoded)g(as)g(XDR)h(Structures.) 62 1137 y Ft(Union)h Fs(values)g(are)h(encoded)f(as)g(XDR)g (Discriminated)f(Unions,)h(with)f(a)i(discriminant)e(of)h(type)g (``unsigned)f(int'')0 1199 y(containing)d(the)i(ILU)g Ft(short)g(cardinal)g Fs(discriminant.)62 1290 y Ft(Enumeration)17 b Fs(values)h(are)h(encoded)e(as)h(XDR)h(Unsigned)d(Integer)i(\(note)g (that)f(this)g(is)h(different)f(from)i(XDR)0 1352 y(Enumerations,)10 b(which)h(are)h(encoded)e(as)i(XDR)f(Integer\).)62 1443 y Ft(Boolean)f Fs(values)g(are)i(encoded)e(as)g(XDR)h(Unsigned)e (Integer,)i(using)e(the)i(value)f(0)g(for)h Ft(FALSE)g Fs(and)f(the)g(value)g(1)h(for)0 1505 y Ft(TRUE)p Fs(.)62 1596 y Ft(Sequence)22 b Fs(values)g(are)i(encoded)e(as)h(XDR)g (Variable-length)e(Arrays,)26 b(except)c(for)h(several)g(special)f (cases.)0 1659 y(Sequences)17 b(of)f Ft(short)11 b(character)16 b Fs(are)h(encoded)f(as)g(XDR)h(String,)h(sequences)d(of)i Ft(byte)f Fs(are)h(encoded)g(as)f(XDR)0 1721 y(Variable-length)11 b(Opaque)h(Data,)i(and)e(sequences)g(of)h Ft(character)f Fs(are)i(encoded)e(as)h(XDR)f(String,)h(where)g(the)f(string)0 1783 y(is)f(the)g(UTF-2)g(encoding)f(of)h(the)g(Unicode)f(characters)i (in)e(the)h(sequence.)62 1874 y Ft(Optional)k Fs(values)g(are)i (encoded)e(as)h(an)f(XDR)h(Boolean)f(value,)i(followed)d(by)i(another)f (encoded)g(value,)i(if)e(the)0 1937 y(Boolean)c(value)g(is)f(TRUE.)62 2028 y(Instances)17 b(of)h(an)f Ft(object)h Fs(type)f(are)h(encoded)f (as)h(either)f(zero)h(\(in)f(the)h(case)g(of)f(a)h(method)f (discriminant)f(of)i(a)0 2090 y(singleton)9 b(type\),)i(or)g(one,)h (values)e(of)h(type)g(XDR)g(String.)0 2226 y Fo(13.1.3)25 b(The)16 b(Xerox)f(Courier)g(Protocol)62 2334 y Fs(This)e(section)h (describes)f(the)h(mapping)f(of)i(the)f(abstract)f(ILU)h(protocol)f (into)g(the)h(specific)g(on-the-wire)g(protocol)0 2396 y(used)c(with)g(Xerox)g(Courier)449 2379 y Fm(3)467 2396 y Fs(.)i(One)e(of)h(the)f(major)h(goals)f(of)g(this)g(mapping)g(is)g (to)g(preserve)g(compatibility)f(with)g(existing)p 0 2460 600 2 v 21 2499 a Fm(2)62 2515 y Fs(XDR:)i(External)g(Data)g (Representation)f(Standard;)g(R.)i(Srinivasan.)f(IETF)g(RFC)i(1832,)d (August)g(1995.)21 2652 y Fm(3)62 2669 y Fs(Courier:)h(The)g(Remote)h (Procedure)g(Call)f(Protocol;)f(Xerox)h(Corporation,)f(XNSS)i(038112,)e (1981)p eop %%Page: 199 200 199 199 bop 0 -58 a Fs(Chapter)11 b(13:)g(Protocols)f(and)h(Transports) 1201 b(199)0 183 y(Xerox)15 b(Courier)g(services)g(that)f(can)i(be)f (described)f(in)h(ISL.)h(Unfortunately,)f(many)g(if)g(not)f(most)h (important)f(Courier)0 246 y(services)d(use)g Fp(bulk)f(data)h (transfer)p Fs(,)h(something)d(that)i(is)g(still)e(only)h(planned)h (for)g(ILU.)62 333 y(A)18 b(protocol)e(info)g(string)g(for)i(Xerox)f (Courier)g(has)h(the)f(form)g Ft(courier_)p Fp(program-number)t Ft(_)p Fp(program-version)0 395 y Fs(where)e Fp(program-number)k Fs(and)c Fp(program-version)i Fs(may)f(be)f(specified)g(either)f(in)h (decimal,)i(or)e(in)g(hexidecimal)f(with)0 457 y(a)j(leading)e(string)g (of)h Ft(0x)p Fs(.)27 b(The)16 b(program)g(number)h(for)f (non-singleton)e(ILU)i(object)f(types)h(is)f(always)h(\(in)g(ILU)g (2.0\))0 519 y Ft(0x001yxxxx)p Fs(,)8 b(where)h Fp(y)h Fs(is)d(currently)h Ft(1)p Fs(;)g(the)g(specific)g(program)g(number)g (and)g(the)g(program)g(version)f(varies)h(depending)0 582 y(on)j(the)g(specific)f(object)h(type.)g(Courier)g(is)g(a)g (non-concurrent)f(protocol.)62 669 y(Use)h(of)h(Xerox)e(Courier)i (requires)e(use)h(of)h(a)f(boundaried)f(transport)g(below)g(it.)0 787 y Fn(13.1.3.1)22 b(Message)15 b(Mappings)f(--)i(Courier)f(Layer)g (3)62 891 y Fs(The)d(request)g(message)h(used)e(is)h(the)g Ft(CallMessageBody)f Fs(specified)h(in)g(section)f(4.3.1)h(of)h(the)f (Courier)g(protocol.)0 953 y(A)g(monotonically)f(increasing)g(16-bit)g (serial)h(number)h(is)f(passed)f(in)h(the)h Ft(transactionID)e Fs(field;)h(a)h(32-bit)e(program)0 1016 y(number)k(is)e(passed)h(in)g (the)g Ft(programNumber)g Fs(field,)h(a)g(16-bit)e(number)i(is)f (passed)f(in)h(the)h Ft(versionNumber)e Fs(field;)0 1078 y(the)g(ILU)h(method)f(index)f(is)h(passed)g(as)h(a)f(16-bit)g(value)g (in)g(the)g Ft(procedureValue)f Fs(field.)18 b(The)c(program)f(number)h (is)0 1140 y(calculated)f(by)f(computing)g(the)h(CRC-32)h(hash)f(value) g(of)g(the)g(MSTID)h(of)f(the)g(object)f(type)h(on)g(which)f(the)h (method)g(is)0 1202 y(defined,)k(then)e(forming)g(a)h(program)g(number) g(by)g(using)e(the)h(value)h Ft(0x0011)f Fs(for)h(the)g(high-order)e (16)i(bits,)g(and)f(the)0 1265 y(high-order)c(16)h(bits)f(of)h(the)g (CRC)i(for)e(the)g(low-order)f(16)h(bits)f(of)h(the)g(program)h (number.)h(The)e(version)g(number)g(is)f(the)0 1327 y(low-order)g(16)f (bits)g(of)i(the)f(CRC.)62 1414 y(Successful)16 b(replies)g(are)h(sent) f(using)f(the)h(Courier)g Ft(ReturnMessageBody)f Fs(specified)h(in)f (section)h(4.3.3)g(of)g(the)0 1476 y(Courier)g(specification.)24 b(The)16 b Ft(procedureResults)f Fs(field)g(contains)g(the)h(return)g (value,)h(if)f(any,)h(followed)e(by)g(the)0 1539 y Ft(INOUT)c Fs(and)g Ft(OUT)g Fs(parameter)h(values,)f(if)g(any.)62 1626 y(User)j(exceptions)f(are)h(signalled)f(using)f(the)i Ft(AbortMessageBody)f Fs(specified)g(in)g(section)g(4.3.4)h(of)g(the)g (Courier)0 1688 y(specification.)26 b(The)16 b Ft(errorValue)g Fs(field)f(contains)h(a)g(value)g(greater)h(than)f(0,)i(which)e(is)f (the)i(ordinal)e(value)h(of)g(the)0 1750 y(particular)7 b(exception)g(being)g(signal)o(led)g(in)g(th)o(e)g(list)g(of)g(excepti) o(ons)f(specified)h(for)g(this)f(method.)h(The)g Ft(errorArguments)0 1813 y Fs(field)k(contain)f(the)h(exception)f(value,)h(if)g(any.)62 1900 y(System)c(exceptions)g(\(of)g(exception)g(t)o(ype)g Ft(il)o(u.ProtocolE)o(rror)p Fs(\))g(are)g(sig)o(nalled)f(usi)o(ng)h(t) o(he)g Ft(Rejec)o(tMessageBod)o(y)0 1962 y Fs(message)17 b(of)h(section)e(4.3.2.)30 b(The)17 b Ft(rejectionDetail)f Fs(field)h(of)g(the)g(message)g(contains)f(the)h Ft(ProtocolError)0 2024 y Fs(detail.)0 2143 y Fn(13.1.3.2)22 b(Mapping)15 b(of)g(Standard)h(Types)g(--)f(Courier)g(Layer)h(2)62 2247 y Fs(The)10 b(mapping)f(of)h(ILU)f(types)g(into)g(Courier)g(types) g(is)g(accomplished)g(primarily)g(by)g(using)g(the)g(appropriate)g (Courier)0 2309 y(Layer)i(2)g(representation)f(for)i(that)e(type.)62 2396 y Ft(Short)h(integer)16 b Fs(and)f Ft(integer)g Fs(types)g(are)i(represented)e(with)g(the)h(Courier)g Ft(Integer)f Fs(and)h Ft(Long)11 b(Integer)0 2458 y Fs(types.)g Ft(Long)g(integer)f Fs(types)h(are)h(represented)e(as)i(an)f Ft(integer)g Fs(followed)f(by)g(a)i Ft(cardinal)p Fs(.)62 2545 y Ft(Short)f(cardinal)p Fs(,)f Ft(byte)p Fs(,)g(and)f Ft(cardinal)g Fs(types)g(are)h(represented)f(with)g(the)g(Courier)h Ft(cardinal)p Fs(,)f Ft(cardinal)p Fs(,)0 2608 y(and)17 b Ft(long)11 b(cardinal)17 b Fs(types,)i(respectively.)29 b Ft(Long)11 b(cardinal)17 b Fs(types)g(are)h(represented)f(as)h(a)f (big-endian)f(\(most)0 2670 y(significant)9 b(16)i(bits)f(first\))h (Courier)g(array)h(of)f(4)g Ft(cardinal)p Fs(s.)p eop %%Page: 200 201 200 200 bop 0 -58 a Fs(Chapter)11 b(13:)g(Protocols)f(and)h(Transports) 1201 b(200)62 183 y(As)16 b(the)g(Courier)h(protocol)e(does)g(not)h (have)g(any)g(mapping)g(for)g(floating)f(point)g(values,)i Ft(short)11 b(real)16 b Fs(numbers)0 246 y(are)d(passed)f(as)g(a)h (Courier)f Ft(long)f(cardinal)p Fs(,)i Ft(real)f Fs(numbers)g(are)h (encoded)f(as)g(a)h(big-endian)e(array)i(of)f(two)g(Courier)0 308 y Ft(long)f(cardinal)j Fs(values,)h(and)g Ft(long)c(real)k Fs(numbers)f(are)h(encoded)g(as)g(big-endian)e(array)i(of)g(four)g (Courier)f Ft(long)0 370 y(cardinal)d Fs(values.)62 472 y Ft(Array)16 b Fs(values)g(are)h(encoded)f(as)h(Courier)f (one-dimensional)f Ft(array)p Fs(s.)26 b(If)17 b(the)f(array)h(is)f (multi-dimensional,)g(it)0 534 y(is)d(encoded)h(as)f(a)i(flat)e (rendering)g(into)g(a)h(single-dimensional)d(array)j(in)g(row-major)f (order)h(\(the)g(last)f(specified)g(index)0 596 y(varying)d(most)h (rapidly\).)f(If)i(the)f(array)g(is)g(of)g(type)g Ft(byte)f Fs(or)i Ft(short)e(character)p Fs(,)h(the)g(contents)f(of)h(the)g(ILU)g (value)g(are)0 659 y(packed)g(into)e(a)j(Courier)e(array)i(of)f Ft(unspecified)f Fs(two)g(values)g(per)h(array)g(element,)h(so)e(that)g (the)h(Courier)g(array)g(is)f(half)0 721 y(the)h(length)f(of)h(the)g (actual)g(ILU)g(array.)62 823 y Ft(Record)g Fs(values)g(are)g(encoded)g (as)g(Courier)h Ft(record)f Fs(values.)62 924 y Ft(Union)g Fs(values)g(of)g(union)f(types)g(whose)h(discriminant)f(type)g(can)i (be)f(mapped)g(to)g(a)h(16-bit)e(value)h(type)f(in)h(the)g(range)0 987 y([0,2)p Ft(^)p Fs(16-1])j(are)g(passed)g(as)g(Courier)g Ft(choice)f Fs(values.)20 b(Other)13 b(unions)g(are)i(passed)e(as)h(a)g (Courier)g Ft(long)d(cardinal)p Fs(,)0 1049 y(followed)f(by)h(the)g (value)f(of)i(the)f(union's)e(indicated)h(type)h(\(if)g(any\).)62 1151 y Ft(Enumeration)g Fs(values)f(are)i(encoded)f(as)g(Courier)g Ft(enumeration)g Fs(values.)62 1252 y Ft(Boolean)g Fs(values)f(are)i (encoded)f(as)g(Courier)h Ft(boolean)e Fs(values.)62 1354 y Ft(Sequence)k Fs(values)g(are)h(encoded)f(as)g(Courier)h Ft(sequence)p Fs(s,)f(except)h(for)f(several)h(special)e(cases.)22 b(Sequences)14 b(of)0 1416 y Fp(N)21 b Ft(short)11 b(character)p Fs(s)16 b(or)h Ft(byte)p Fs(s)f(are)i(encoded)e(as)h(either)g(a)g (Courier)g Ft(cardinal)p Fs(,)h(for)f(sequences)g(with)e(limits)0 1478 y(less)j(than)g(2)p Ft(^)p Fs(16,)i(or)e Ft(long)11 b(cardinal)p Fs(,)20 b(for)f(sequences)f(with)g(no)g(limits)f(or)i (limits)e(greater)i(than)f(2)p Ft(^)p Fs(16-1,)i(value)0 1541 y(of)d Fp(N)p Fs(,)h(followed)e(by)h Ft(\()p Fp(N)t Ft(+1\)/2)g Fs(values)g(of)g(Courier)h Ft(unspecified)p Fs(,)g(each)g(such)e(value)h(containing)f(two)g Ft(short)0 1603 y(character)11 b Fs(or)g Ft(byte)g Fs(values,)g(packed)g(in)f (big-endian)g(order.)62 1705 y Ft(Optional)h Fs(values)g(are)h(encoded) f(as)g(an)h(Courier)f Ft(boolean)g Fs(value,)h(followed)e(by)h(another) g(encoded)g(value,)g(if)g(the)0 1767 y(Boolean)g(value)g(is)f Ft(TRUE)p Fs(.)62 1869 y(Instances)19 b(of)h(an)g Ft(object)g Fs(type)f(are)h(encoded)g(as)g(either)f(zero)h(\(in)g(the)f(case)i(of)e (a)i(method)e(discriminant)f(of)0 1931 y(a)h(singleton)e(type\),)k(or)e (one)g(values)f(of)h(ISL)g Ft(short)11 b(sequence)g(of)g(short)g (character)p Fs(.)34 b(CORBA)20 b(Nil)e(object)0 1993 y(references)12 b(are)g(represented)f(as)g(a)h(zero-length)e Ft(short)h(sequence)f(of)i(short)f(character)p Fs(.)0 2161 y Fo(13.1.4)25 b(The)16 b(OMG)e(Internet)h(Inter-Orb)f(Protocol)h (\(IIOP\))62 2280 y Fs(This)e(section)h(describes)f(the)h(mapping)f(of) i(the)f(abstract)f(ILU)h(protocol)f(into)g(the)h(specific)g (on-the-wire)g(protocol)0 2342 y(prescribed)d(by)f(the)h(OMG's)h(CORBA) g Ft(Internet)e(Inter-ORB)h(Protocol)f Fs(\()p Ft(IIOP)p Fs(\),)i(version)e(1.0.)62 2444 y(A)j(protocol)e(info)h(string)g(for)h (the)f Ft(IIOP)g Fs(version)g(1.0,)h(with)f(the)g(ILU-to-IIOP)h (mapping)f(version)g(1,)h(has)f(the)h(form)0 2506 y Ft(iiop_1_0_1)p Fs(.)62 2608 y(The)19 b Ft(IIOP)f Fs(is)g(a)g(concurrent)g(protocol;)j (it)d(may)h(be)f(used)g(on)g(top)g(of)g(either)g(a)h(reliable,)h (boundaried)d(or)i(non-)0 2670 y(boundaried,)10 b(transport)g(stack.)p eop %%Page: 201 202 201 201 bop 0 -58 a Fs(Chapter)11 b(13:)g(Protocols)f(and)h(Transports) 1201 b(201)0 183 y Fn(13.1.4.1)22 b(Message)15 b(Mappings)f(--)i(GIOP) 62 292 y Fs(ILU)d(request)f(and)h(reply)f(messages)h(are)g(mapped)g(to) f(GIOP)h(Request)g(and)f(Reply)h(messages)g(fairly)f(directly.)j(The)0 354 y(byte)d(order)g(used)g(is)g(that)g(native)g(to)g(the)g(machine)g (on)h(which)e(the)h(message)h(is)f(being)g(formed.)j(A)e(zero-length)e (service)0 416 y(context)f(is)h(always)f(sent.)62 508 y(In)15 b(a)g(Request)f(message,)i(the)e(operation)f(name)j(is)e(the)g (ISL)h(operation)e(name)i(for)g(the)f(method,)i(with)d(all)h(hyphen)0 571 y(characters)g(in)e(the)h(operation)f(name)i(changed)f(to)f (underscore)h(characters.)18 b(The)13 b(Principal)f(field)h(is)g (always)f(sent)h(as)g(a)0 633 y(zero-length)d(field.)62 725 y(The)g(GIOP)g(CancelRequest,)g(LocateRequest,)f(MessageError,)i (and)e(CloseConnection)f(messages)i(are)g(never)g(sent)0 787 y(by)h(ILU,)g(though)e(one)i(or)g(more)g(of)g(them)g(may)g(be)g (used)g(in)f(the)h(future.)g(ILU)g(will)e(send)i(GIOP)g(LocateReply)f (messages)0 850 y(in)h(response)f(to)h(LocateRequest)f(messages.)0 989 y Fn(13.1.4.2)22 b(Mapping)15 b(of)g(Standard)h(Types)g(--)f(GIOP) 62 1097 y Fs(The)i(mapping)g(of)g(ILU)g(types)f(into)g(IIOP)i(types)e (is)h(accomplished)f(primarily)g(by)h(using)f(the)h(mapping)f(for)h (the)0 1160 y(corresponding)9 b(CORBA)j(type.)62 1252 y Ft(Short)f(integer)f Fs(and)f Ft(integer)h Fs(types)f(are)i (marshaled)f(as)g(CORBA)g Ft(short)g Fs(and)g Ft(long)f Fs(types.)i Ft(Long)g(integer)0 1314 y Fs(types)f(are)i(represented)f (as)g(an)h Ft(integer)e Fs(followed)g(by)h(a)h Ft(cardinal)p Fs(.)62 1406 y Ft(Short)f(cardinal)p Fs(,)e Ft(byte)p Fs(,)g(and)f Ft(cardinal)g Fs(types)f(are)i(marshaled)f(as)h(the)f (CORBA)h Ft(unsigned)h(short)p Fs(,)f Ft(octet)p Fs(,)0 1468 y(and)h Ft(unsigned)g(long)g Fs(types,)g(respectively.)g Ft(Long)h(cardinal)e Fs(types)g(are)i(marshalled)f(as)g(two)f(CORBA)i Ft(unsigned)0 1530 y(long)g Fs(values,)g(and)g(the)g(byte)f(order)i(of) f(the)g(message)g(determines)g(which)f(is)h(marshalled)g(first.)62 1622 y Ft(short)g(real)18 b Fs(numbers)f(are)h(passed)f(as)h(CORBA)h Ft(float)e Fs(values.)30 b Ft(real)18 b Fs(numbers)f(are)i(passed)e(as) g(CORBA)0 1685 y Ft(double)11 b Fs(values,)g(and)g Ft(long)g(real)g Fs(numbers)g(are)g(encoded)g(as)g(big-endian)f(array)i(of)f(16)g (bytes.)62 1777 y Ft(Array)g Fs(values)g(are)h(encoded)e(as)i(CORBA)g Ft(array)e Fs(values.)62 1869 y Ft(Record)h Fs(values)g(are)g(encoded)g (as)g(CORBA)h Ft(struct)f Fs(values.)62 1961 y Ft(Union)g Fs(values)g(are)h(encoded)e(as)i(CORBA)g Ft(union)e Fs(values.)62 2053 y Ft(Enumeration)h Fs(values)f(are)i(encoded)f(as)g(CORBA)h Ft(enum)f Fs(values.)62 2145 y Ft(Boolean)g Fs(values)f(are)i(encoded)f (as)g(CORBA)h Ft(boolean)f Fs(values.)62 2237 y Ft(Sequence)g Fs(values)f(are)i(encoded)f(as)g(CORBA)h Ft(sequence)f Fs(values.)62 2329 y Ft(Optional)k Fs(values)g(are)i(encoded)e(as)h(a)g (CORBA)g Ft(sequence)g Fs(of)f(the)h(base)f(type,)i(with)e(an)g(upper)h (limit)f(of)g(one)0 2391 y(value.)62 2483 y Ft(Object)i Fs(values)g(are)h(passed)f(as)g(an)h Ft(IIOP)f Fs(Interoperable)g (Object)g(Reference)i(\(IOR\),)f(containing)e(at)h(least)g(an)0 2545 y(Internet)10 b(Profile.)i(The)f(IOR)g(may)g(also)g(contain)f(an)h (ILU)g(Profile.)g(In)g(the)g(case)g(of)g(the)g(Internet)f(Profile,)h (the)g(object)f(key)0 2608 y(contains)g(four)g(strings,)g(separated)h (by)f(NUL)h(\(zero)g(octet\))g(characters.)g(The)g(first)f(string)g(is) g(always)h Ft(")p Fs(ilu)p Ft(")p Fs(.)f(The)h(second)0 2670 y(string)e(is)g(the)h(most)f(specific)h(type)f(ID)h(of)g(the)g (object)f(\(in)h(case)g(some)g(intervening)f(ORB)h(decides)g(to)f (re-write)h(the)g(IOR's)p eop %%Page: 202 203 202 202 bop 0 -58 a Fs(Chapter)11 b(13:)g(Protocols)f(and)h(Transports) 1201 b(202)0 183 y(type)p 82 183 14 3 v 16 w(id)10 b(field\).)h(The)f (third)g(string)f(is)h(the)g(server)h(ID)g(of)f(the)g(object's)g (server.)h(The)g(fourth)f(string)f(is)h(the)g(instance)g(handle)0 246 y(of)h(the)g(object.)0 381 y Fo(13.1.5)25 b(The)16 b(Hyper)e(Text)h(Transfer)h(Protocol)f(\()p Fl(HTTP)p Fo(\))62 489 y Ft(HTTP)c Fs(in)f(ILU)g(allows)f(an)i(ILU)f(application) f(to)h(interact)g(with)g(an)g(existing)f(Web)i(resource.)g(That)f(is,)g (Web)h(Browser)0 551 y(to)16 b(ILU,)h(ILU)g(to)f(Web)h(Server,)i(and)d (general)h(ILU)f(to)h(ILU)f(over)h Ft(HTTP)f Fs(is)g(possible.)27 b Ft(HTTP)16 b Fs(is)g(a)h(non-concurrent)0 614 y(protocol.)62 705 y(For)f Ft(HTTP)g Fs(interaction)e(with)h(existing)f(web)h (services,)i(an)f(ILU)g(application)e(must)h(be)h(able)g(to)f(not)g (only)g(get)g(an)0 767 y(object)e(\(a)g(surrogate)g(actually\))f (representing)h(the)g(resource.)k(It)d(must)f(also)f(have)h(some)h (means)f(by)g(which)g(to)g(specify)0 829 y(the)e Ft(HTTP)g Fs(headers)g(and)g(entity)e(body)i(that)f(should)g(be)h(sent)f(with)g (the)h(request.)g(Similarly,)g(an)g(ILU)g(server)g(functioning)0 891 y(as)g(a)h Ft(HTTP)f Fs(accessible)f(Web)i(resource)f(must)g(be)g (able)g(to)g(set)g(status,)f(header)h(and)g(entity)f(body)h(content.)62 982 y(Arbitrary)d(programmers)h(interpretations)d(of)j(these)f Ft(HTTP)g Fs(components)g(cannot)g(be)g(generally)g(mapped)h(into)e Ft(HTTP)p Fs(.)0 1045 y(A)13 b(specific)f(signature)f(is)h(needed)h (for)f(the)h Ft(GET)f(HEAD)g Fs(and)h Ft(POST)f Fs(methods)g(so)g(that) g(the)g(ILU)h(implementation)e(of)h(the)0 1107 y Ft(HTTP)h Fs(protocol)g(can)h(know)e(how)h(to)h(map)g(arguments)f(into)f(actual)i Ft(HTTP)f Fs(format.)19 b(In)14 b(addition,)f(a)h(way)f(is)g(needed)h (to)0 1169 y(distinguish)7 b(these)k(methods)e(intended)h(for)h(use)f (with)g(existing)e(Web)j(services)f(from)i(other)e(methods)g(that)g (may)h(happen)0 1231 y(to)g(have)g(the)g(same)h(name)f(but)g(different) g(signatures.)62 1322 y(This)g(need)h(is)f(addressed)g(by)g(defining)f (a)i(specific)g(type)f(of)g(object)g(that)g(has)h(declarations)e(for)i (how)f(an)h(application)0 1385 y(should)g(structure)i(the)g(arguments)f (/)h(return)g(values)f(for)i(the)e Ft(GET)h(HEAD)g Fs(and)g Ft(POST)g Fs(operations.)19 b(Any)13 b Ft(GET)h(HEAD)g Fs(or)0 1447 y Ft(POST)f Fs(operation)f(invoked)f(on)i(an)g(object)f (that)g(is)h(an)g(instance)f(of)h(this)f(base)g(type)h(\(or)g(an)g (instance)f(of)h(a)g(type)g(derived)0 1509 y(directly)g(or)h (indirectly)e(from)i(that)g(base)f(type\))h(has)f(a)i(particular)e (signature)g(that)g(the)g(ILU)h(protocol)f(implementation)0 1571 y(knows)g(how)h(to)g(map)h(to)f Ft(HTTP)p Fs(.)21 b(This)14 b(type,)h(called)f Ft(Resource)g Fs(in)g(the)g Ft(http)g Fs(interface,)i(is)e(defined)g(in)g(the)g(http.isl)0 1634 y(file,)j(and)f(any)g(application)f(wishing)f(to)i(supply)e(Web)i (compatible)g(objects)f(should)f(make)j(the)f(objects)f(a)h(direct)g (or)0 1696 y(derived)10 b(instance)f(of)h(it.)h(A)f(server)g(for)g (objects)f(acessible)h(via)f Ft(HTTP)h Fs(should)f(be)h(created)g(with) f(the)h(protocol)f(info)g(string)0 1758 y(http)p 75 1758 V 15 w(1)p 113 1758 V 16 w(0,)j(and)f(should)e(use)i(the)g(tcp)g (transport.)62 1849 y(A)f(version)e(of)i Ft(HTTP)f Fs(1.0)h(that)f (supports)f(connection)g(persistence)g(\(i.e.)k(Connection:)d (Keep-Alive)g(headers\))g(can)h(be)0 1911 y(used)h(by)h(specifying)f (the)g(protocol)g(info)g(string)g(http)p 862 1911 V 15 w(1)p 900 1911 V 16 w(0p.)j(In)e(this)f(case,)i(Connection:)e (Keep-Alive)g(headers)h(will)f(be)0 1974 y(automatically)g (appropriately)g(generated)h(on)g(both)f(the)h(client)f(and)h(server)h (sides.)h(Client)d(side)h(connections)e(obtained)0 2036 y(from)15 b(an)g(http)e(URL,)j(e.g.)22 b(from)15 b('Object)p 694 2036 V 16 w(of)p 748 2036 V 16 w(SBH')g(fuctions,)g(will)e(use)i (persistence)f(automatically)f(\(assuming)g(the)0 2098 y(server)f(they're)g(connecting)f(to)g(supports)f(it)i(of)g(course\).)i (Client)d(side)g(connections)g(obtained)f(from)j(ILU)f(style)f(SBH's)0 2160 y(will)f(use)h(whatever)g(protocol)f(the)h(server)g(advertizes.)62 2251 y(See)h(the)f Ft(httest)g Fs(example)g(for)h(a)f(sample)g(use)g (of)h Ft(HTTP)f Fs(in)f(ILU.)62 2342 y(A)15 b(method)g(named)g Ft(GET)g(HEAD)f Fs(or)h Ft(POST)p Fs(,)h(invoked)e(on)g(an)h(object)f (that)h(is)f(a)h(direct)g(or)g(indirect)f(instance)g(of)g(the)0 2405 y Ft(Resource)c Fs(type,)g(automatically)g(has)g(its)g(Request)g (and)g(Response)g(mapped)h(to/from)f Ft(HTTP)g Fs(in)g(a)h(manner)g (compatible)0 2467 y(with)16 b(existing)g(Web)h(services.)30 b(The)17 b(fairly)g(straightforward)f(mapping)g(from)i(the)f(ILU)g Ft(http)g Fs(Interface)h(to)f Ft(HTTP)0 2529 y Fs(Protocol)10 b(is)h(outlined)e(described)i(below:)120 2670 y Ft(ILU)25 b(Method)f(Name)572 b(Method)25 b(name)f(in)h(Request's)f(Request)g (line)p eop %%Page: 203 204 203 203 bop 0 -58 a Fs(Chapter)11 b(13:)g(Protocols)f(and)h(Transports) 1201 b(203)120 233 y Ft(\(if)25 b(using)f(a)h(Proxy)f(server,)h(scheme) f(+)120 283 y(location)g(of)h(object)f(+\))h(ILU)g(Object)f(ID)h(+)120 333 y(any)g(params/queries)e(present)h(in)h(the)120 382 y(Request.URI)f(field)522 b(Request-URI)24 b(in)h(Request's)f(Request)g (line)120 482 y(Request.headers)571 b(Headers)25 b(in)f(Request)120 582 y(Request.body)646 b(Entity-Body)24 b(in)h(Request)120 681 y(Response.status)571 b(Status-Code)24 b(and)h(Reason-Phrase)f(in)g (Re-)120 731 y(sponse's)g(Status-Line)120 831 y(Response.headers)546 b(Headers)25 b(in)f(Response)120 930 y(Response.body)621 b(Entity-Body)24 b(in)h(Response)62 1108 y Fs(The)d Ft(HTTP)g Fs(implementation)e(will)h(automatically)g(insert)g(a)h(Content-Length) e(header)i(when)g(necessary)f(and)0 1170 y(possible,)14 b(and)h(takes)g(care)h(of)f(the)f(colon)h(separators)f(between)h (header)g(names)g(and)g(values.)22 b(It)15 b(will)f(also)g(deal)h(with) 0 1232 y(older)c(servers)g(that)f(sometimes)h(omits)g(the)g(CR)h(from)f (the)g(required)g(CRLF)h(line)f(termination.)62 1327 y(Note)j(that)g(existing)f(Web)h(tools)f(\(e.g.)23 b(browsers\))14 b(will)f(always)h(send)g(the)g('path')g(of)h(the)f(resource.)22 b(On)14 b(the)g(ILU)0 1389 y Ft(HTTP)9 b Fs(end,)h(this)f(means)h(that) f(the)g(object)g(identifier)f(will)h(always)g(begin)g(with)f(a)i (forward)g(slash.)g(For)g(example,)g(asking)f(a)0 1452 y(browser)g(to)g(retrieve)h(http://www.foo.bar.com/hello)o(.html)d (where)j(www.foo.bar.com)g(is)f(serviced)g(by)g(an)h(ILU)f Ft(HTTP)0 1514 y Fs(server,)15 b(will)e(result)h(in)f(that)h(server)g (trying)f(to)g(invoke)g(a)i(GET)e(operation)g(on)h(the)g(object)f (whose)g(object)h(identifier)f(is)0 1576 y(/hello.html.)d(Omitting)f (any)i(path)f(info,)h(i.e.)h(asking)e(the)g(browser)h(to)f(retrieve)h (http://www.foo.bar.com)e(would)h(result)0 1638 y(in)h(a)g(GET)g(on)g (an)g(object)g(whose)f(object)g(identifier)g(is)h(simply)f(/.)62 1733 y(Regarding)26 b(the)f(Request-URI)h(field)g(on)g(the)f(client)g (side,)30 b(it)25 b(is)h(really)f(only)g(necessary)h(to)g(put)f(in)g (any)0 1795 y('param's)31 b(and/or)f('queries'.)68 b(Any)30 b(path)g(information)f(in)h(this)f(field)h(is)g(just)f(ignored,)35 b(since)30 b(the)g(path)0 1858 y(info)d(needed)h(is)f(to)g(form)i(the)e (request)h(is)f(based)g(on)h(the)f(object's)g(instance)g(handle.)61 b(So)28 b(for)g(example,)0 1920 y(a)f(client)e(my)h(simply)f(put)h(the) g(string)f Ft(")p Fs(;param1;param2?query)p Ft(")g Fs(into)g(the)h (Request-URI)g(field)g(instead)f(of)0 1982 y Ft(")p Fs (http://www.foo.bar.com/hello.ht)o(ml;param1;param2?query)p Ft(")p Fs(.)62 2077 y(If)11 b(operations)e(need)h(to)g(occur)g(through) f(a)i(proxy)e(server,)i(the)f(environment)g(variable)f(ILU)p 1530 2077 14 3 v 17 w(HTTP)p 1661 2077 V 16 w(PROXY)p 1831 2077 V 16 w(INFO)0 2139 y(should)h(be)h(set)g(to)f(the)h(proxy)g (server)g(name,)h(colon,)f(and)g(port)g(number)g(e.g.)h (ourproxyserver.foo.bar.com:8000.)62 2234 y(For)18 b(other)e (situations,)g(i.e.)30 b(general)17 b(ILU)g(to)f(ILU)h(communication)f (that)g(just)g(happens)g(to)h(be)g(occurring)f(over)0 2296 y Ft(HTTP)p Fs(,)e(the)f(mapping)f(is)h(still)e(consistent)h(with) g Ft(HTTP)h Fs(protocol,)f(but)h(a)g(more)h(general)f(format)h(is)f (used.)k(ILU)c(specific)0 2359 y(information)c(such)g(as)h(the)g(ilu)p 484 2359 V 15 w(Server)h(ID)f(is)g(placed)f(in)h(a)g(header,)h(and)f (the)g(marshaling)f(of)h(arguments)f(is)h(done)f(entirely)0 2421 y(within)14 b(the)h(entity)f(body.)24 b(In)16 b(keeping)e(with)h (some)h(idea)f(of)h(human)f(readability,)h(marshaled)f(arguments,)i (with)d(the)0 2483 y(exception)d(of)h(potentially)e(huge)i (byte-vectors,)g(are)g(encoded)g(as)g(readable)h(ASCII)g(strings)d(-)j (e.g.)i(3.1416)c(encodes)h(as)0 2545 y Ft(")p Fs(3.1416)p Ft(")p Fs(.)e(Readers)f(concerned)g(about)f(utmost)f(efficiency)i (should)e(note)i(that)f(for)h(general)f(ILU-ILU)h(communication,)0 2608 y(another)17 b(protocol)f(such)h(as)h Ft(ONC)11 b(RPC)17 b Fs(is)g(a)h(much)f(better)g(choice)h(than)f(the)g(current)g Ft(HTTP)g Fs(implementation.)29 b(The)0 2670 y Ft(HTTP)10 b Fs(protocol)f(implementation)f(could)i(however)g(be)g(easily)f (changed)h(to)g(use)g(a)g(more)h(efficient)f(encoding,)f(similar)h(to)p eop %%Page: 204 205 204 204 bop 0 -58 a Fs(Chapter)11 b(13:)g(Protocols)f(and)h(Transports) 1201 b(204)0 183 y(what's)12 b(used)f(in)h Ft(ONC)f(RPC)i Fs(for)f(example.)j(The)d(following)f(grammer)i(describes)f(the)g (on-the-wire)g(mapping)f(of)h(ILU's)0 246 y Ft(HTTP)f Fs(when)g(it)f(is)h(used)g(for)g(general)g(ILU)g(to)g(ILU)g (communication.)120 379 y Ft(\()25 b (------------------------------------)o(-----------)o(----------)o (-------)170 428 y(ILU)f(HTTP)h(on)g(the)f(wire)h(encoding)f(for)h (general)f(ILU)49 b(method)25 b(invocation)170 478 y(\(i.e.)f(when)h (object)f(is)h(not)f(of)h(iluhttp.Resource)f(type\))170 528 y(------------------------------------)o(-----------)o(----------)o (-------)e(\))120 677 y(\()j(------------------------------------)o (-----------)o(----------)o(---)170 727 y(basic)f(items)170 777 y(------------------------------------)o(-----------)o(----------)o (---)120 827 y(\))120 927 y(OCTET)373 b(=)25 b()120 976 y(CHAR)398 b(=)25 b()120 1026 y(ALPHA)373 b(=)25 b()120 1076 y(DIGIT)373 b(=)25 b()120 1126 y(SP)448 b(=)25 b()120 1176 y(CRLF)398 b(=)25 b()120 1275 y(HYPHEN)348 b(=)25 b()120 1325 y(HEX)423 b(=)25 b("A")g(|)f("B")h(|)g("C")f(|)h("D")g(|)g("E")f (|)h("F")g(|)g("a")f(|)h("b")g(|)f("c")120 1375 y(|)h("d")f(|)h("e")g (|)g("f")f(|)h(DIGIT)120 1425 y(ISO-LATIN-1-NO-NULL)e(=)i()120 1524 y(hexbyte)224 b(=)24 b(HEX)h(HEX)120 1574 y(cstring)224 b(=)24 b(ISO-LATIN-1-NO-NULL)f([cstring])120 1624 y(digits)249 b(=)24 b(DIGIT)h([digits])49 b(\()25 b(interpreted)f(as)g(base)h(10)f (\))120 1674 y(octets)249 b(=)24 b(OCTET)h([octets])120 1724 y(nameString)149 b(=)24 b(ALPHA)h([)g(nameStringChars)e(])120 1773 y(nameStringChars)h(=)g(nameStringChar)g([nameStringChars])120 1823 y(nameStringChar)49 b(=)24 b(ALPHA)h(|)g(DIGIT)f(|)h(HYPHEN)120 1973 y(\()g(------------------------------------)o(-----------)o (----------)o(---)170 2022 y(Typed)f(Values)170 2072 y(------------------------------------)o(-----------)o(----------)o (---)120 2122 y(\))120 2222 y(sbh)h(=)f(\(string)h(binding)f(handle)g (-)h(follows)f(IETF)h(rules)f(for)h(URLs\))120 2321 y(typedValues)99 b(=)24 b(typedValue)g([typedValues])120 2421 y(typedValue)124 b(=)24 b(optionalValue)g(|)h(value)120 2521 y(optionalValue)49 b(=)24 b(optional)h([value])120 2620 y(value)249 b(=)24 b(primitiveValue)g(|)h(constructedValue)p eop %%Page: 205 206 205 205 bop 0 -58 a Fs(Chapter)11 b(13:)g(Protocols)f(and)h(Transports) 1201 b(205)120 233 y Ft(\()25 b(-------------)f(Primitive)g(values)g (----------------------)f(\))120 333 y(primitiveValue)h(=)g(integer)74 b(|)25 b(shortInteger)74 b(|)25 b(longInteger)48 b(|)543 382 y(cardinal)h(|)25 b(shortCardinal)49 b(|)25 b(longCardinal)e(|)543 432 y(byte)149 b(|)25 b(boolean)572 b(|)543 482 y(real)149 b(|)25 b(shortReal)149 b(|)25 b(longReal)123 b(|)543 532 y(character)24 b(|)h(shortCharacter)f(|)h(pickle)120 632 y(integer)199 b(=)24 b([-])h(digits)f(CRLF)120 731 y(shortInteger)74 b(=)24 b([-])h(digits)f(CRLF)120 831 y(longInteger)99 b(=)24 b(integer)h(integer)f(\(high)g(word)h(followed) f(by)h(low)f(word\))120 930 y(cardinal)174 b(=)24 b(digits)h(CRLF)120 1030 y(shortCardinal)49 b(=)24 b(digits)h(CRLF)120 1130 y(shortCardinals)f(=)g(shortCardinal)g([shortCardinals])120 1229 y(longCardinal)74 b(=)24 b(cardinal)h(cardinal)f(\(high)g(word)h (followed)f(by)h(low)f(word\))120 1329 y(byte)274 b(=)24 b(0x)h(hexbyte)f(CRLF)120 1429 y(boolean)199 b(=)24 b("TRUE")h(CRLF)f (|)543 1478 y("FALSE")h(CRLF)120 1578 y(real)274 b(=)24 b()h(CRLF) 120 1678 y(shortReal)149 b(=)24 b()h(CRLF)120 1777 y(longReal)174 b(=)24 b(16)h(CRLF)g(\(number)f(of)h(bytes)f(in)h(a)g (long)f(Real\))543 1827 y(hexbyte)h(hexbyte)f(hexbyte)g(hexbyte)g (hexbyte)h(hexbyte)f(hexbyte)120 1877 y(hexbyte)543 1927 y(hexbyte)h(hexbyte)f(hexbyte)g(hexbyte)g(hexbyte)h(hexbyte)f(hexbyte) 120 1977 y(hexbyte)120 2076 y(character)149 b(=)24 b(shortCardinal)120 2176 y(shortCharacter)g(=)g(byte)120 2275 y(pickle)224 b(=)24 b(digits)h(CRLF)f(\(number)h(of)f(bytes)h(in)f(the)h(pickled)f (value\))543 2325 y(octets)h(CRLF)f(\(pickled)g(contents\))120 2475 y(\()h(-------------)f(Constructed)f(values)i (----------------------)e(\))120 2574 y(constructedValue)g(=)i(array)99 b(|)25 b(sequence)99 b(|)25 b(record)f(|)h(union)f(|)593 2624 y(optional)g(|)h(enumeration)f(|)h(object)p eop %%Page: 206 207 206 206 bop 0 -58 a Fs(Chapter)11 b(13:)g(Protocols)f(and)h(Transports) 1201 b(206)120 233 y Ft(array)124 b(=)25 b(typedValues)f(\(Nothing)g (is)h(sent)f(specially)g(to)h(indicate)f(an)h(array,)743 283 y(just)f(the)h(array's)f(contents\))120 382 y(sequence)49 b(=)25 b(digits)f(CRLF)h(\(the)f(sequence)g(length,)h(sequence)f (contents)g(follow\))419 432 y(typedValues)120 532 y(record)99 b(=)25 b(typedValues)f(\(Nothing)g(is)h(sent)f(specially)g(to)h (indicate)f(a)h(record,)743 582 y(just)f(the)h(record's)f(contents)g (follow\))120 681 y(union)124 b(=)25 b(digits)174 b(CRLF)24 b(\(union)h(discriminator\))220 731 y(typedValue)120 831 y(optional)49 b(=)25 b("OPT_PRESENT")148 b(CRLF)50 b(|)419 881 y("OPT_NOT_PRESENT")e(CRLF)120 980 y(enum)149 b(=)25 b(digits)f(CRLF)h(\(the)f(enumeration)g(value\))120 1080 y(object)99 b(=)25 b(nilObject)f(|)h(nonNilObject)120 1180 y(nilObject)f(=)h("7")g(CRLF)f("NIL_OBJ")g(CRLF)120 1279 y(nonNilObject)g(=)h(digits)49 b(CRLF)24 b(\(number)h(of)f (characters)g(in)h(the)g(objects)f(sbh\))294 1329 y(sbh)125 b(CRLF)24 b(\(the)h(objects)f(sbh\))120 1528 y(\()h (------------------------------------)o(-----------)o(----------)o(---) 170 1578 y(requests)170 1628 y(------------------------------------)o (-----------)o(----------)o(---)120 1678 y(\))120 1777 y(methodName)49 b(=)25 b(nameString)120 1877 y(requestBody)f(=)h (arguments)120 1977 y(arguments)74 b(=)25 b(typedValues)120 2076 y(objectDiscriminant)e(=)i(cstring)f(\(discriminant)g(object's)g (instance)g(handle\))120 2176 y(serverId)g(=)h(cstring)f(\(ID)h(of)g (discriminant)e(object's)i(server\))120 2275 y(request)124 b(=)25 b(methodName)f(SP)g(objectDiscriminant)g(SP)g("HTTP/")h (majorVersion)e(".")120 2325 y(minorVersion)h(CRLF)269 2375 y("ILU_ServerID:")g(SP)h(serverId)f(CRLF)469 2425 y("Content-Length:")f(SP)i(digits)f(CRLF)99 b(\(number)25 b(of)f(bytes)h(in)f(the)120 2475 y(requestBody\))469 2524 y(CRLF)469 2574 y([requestBody])p eop %%Page: 207 208 207 207 bop 0 -58 a Fs(Chapter)11 b(13:)g(Protocols)f(and)h(Transports) 1201 b(207)120 233 y Ft(\()25 b(------------------------------------)o (-----------)o(----------)o(---)170 283 y(responses)170 333 y(------------------------------------)o(-----------)o(----------)o (---)120 382 y(\))120 482 y(responseBody)f(=)h(returnvalues)120 582 y(returnvalues)f(=)h(typedValues)120 681 y(response)124 b(=)25 b(normalResponse)e(|)i(exceptionResponse)120 881 y(normalResponse)123 b(=)50 b("HTTP/")24 b(majorVersion)g(".")h (minorVersion)e(SP)i("200")g(SP)f("OK")120 930 y(CRLF)668 980 y("Content-Length:")f(SP)i(digits)f(CRLF)100 b(\(number)24 b(of)h(bytes)120 1030 y(in)g(the)f(response)h(Body\))668 1080 y(CRLF)668 1130 y([responseBody])120 1279 y(exceptionResponse)e(=) i(protocolExcpeption)73 b(|)50 b(\()25 b(problem)f(with)g(protocol)h (itself)120 1329 y(\))618 1379 y(userException)273 b(\()25 b(user)f(method)h(raised)f(exception)120 1429 y(\))120 1578 y(exceptionIndex)223 b(=)25 b(digits)f(\(which)g(exception)g(of)h (the)g(method)f(an)h(excep-)120 1628 y(tion)g(is\))120 1727 y(internalExceptionIndex)e(=)i(digits)f(\(index)g(of)h(internal)f (ilu_ProtocolException\))120 1877 y(userException)g(=)49 b("HTTP/")25 b(majorVersion)e(".")i(minorVersion)f(SP)h(exceptionIndex) 120 1927 y(SP)g("Non_Protocol_Exception")d(CRLF)668 1977 y("Content-Length:")h(SP)i(digits)f(CRLF)100 b(\(number)24 b(of)h(bytes)120 2026 y(in)g(the)f(typedValue)g(response)g(Body\))668 2076 y(CRLF)668 2126 y([typedValue])74 b(\(the)24 b(exception's)g (contents\))120 2275 y(protocolException)f(=)50 b("HTTP/")24 b(majorVersion)g(".")h(minorVersion)e(SP)i(internalEx-)120 2325 y(ceptionIndex)f(SP)h("Protocol_Exception")e(CRLF)668 2375 y("Content-Length:")g(SP)i("0")g(CRLF)99 b(\(number)24 b(of)h(bytes)f(in)120 2425 y(the)h(response)f(Body\))668 2475 y(CRLF)p eop %%Page: 208 209 208 208 bop 0 -58 a Fs(Chapter)11 b(13:)g(Protocols)f(and)h(Transports) 1201 b(208)120 233 y Ft(\()25 b(------------------------------------)o (-----------)o(----------)o(---)170 283 y(End)f(of)h(File)170 333 y(------------------------------------)o(-----------)o(----------)o (---)120 382 y(\))0 621 y Fo(13.1.6)g(The)16 b(World)e(Wide)h(Web)g (HTTP-NG)g(Protocol)g(\(w3ng\))62 730 y Fs(This)27 b(section)f (describes)h(the)g(mapping)f(of)i(the)f(abstract)g(ILU)g(protocol)f (into)g(the)h(specific)g(experimen-)0 792 y(tal)32 b(on-the-wire)f (protocol)g(specified)g(by)h(the)g(World)f(Wide)h(Web's)g(HTTP-NG)f (project,)37 b Ft(w3ng)p Fs(.)74 b(See)0 855 y Ft (http://www.w3.org/Protocols/HTTP-NG/Gr)o(oup/PDG/wir)o(e-protocol)o (/WD-HTTP-NG)o(-wire.html)0 917 y Fs(fora)17 b(full)e(description)g(of) i(the)f(protocol.)26 b(The)16 b(protocol)f(is)h(currently)f(under)i (design,)f(so)g(changes)g(to)g(it)g(should)f(be)0 979 y(anticipated.)62 1071 y(A)c(protocol)f(info)h(string)f(for)h(the)g Ft(w3ng)g Fs(version)f(1.0,)i(has)f(the)g(form)g Ft(w3ng_1.0)p Fs(.)62 1163 y(The)17 b Ft(w3ng)g Fs(protocol)f(is)h(a)g(concurrent)g (protocol;)i(it)d(must)h(be)g(used)g(on)g(top)f(of)i(either)e(a)i (reliable,)h(boundaried)0 1226 y(transport)10 b(stack.)0 1365 y Fo(13.1.7)25 b(The)16 b(Default)d(Protocol)i(and)g(Transport)62 1473 y Fs(Server)j(applications)e(can)h(create)h(ports)f(without)e (specifying)h(which)h(protocol)f(and)h(transport)f(to)h(use.)30 b(In)17 b(this)0 1536 y(case,)h Fp(the)d(default)g(protocol)g(and)g (transport)k Fs(will)c(be)h(used.)25 b(Which)15 b(protocol)g(and)g (transport)g(are)h(the)g(defaults)f(is)g(a)0 1598 y(consequence)e(of)h (which)g(are)g(included)f(in)h(the)f(configuration)g(step)g(performed)h (at)g(the)g(start)g(of)g(installing)d(ILU.)j(The)0 1660 y(first)c(protocol)f(from)h(the)g(following)f(list)g(that)g(is)h (included)f(in)h(the)g(configuration)e(is)i(the)g(default:)g(sunrpc,)g (courier,)h(iiop,)0 1722 y(http.)j(The)f(default)f(transport)f(is)h (chosen)g(to)g(be)g(a)h(configured)f(transport)f(appropriate)h(for)g (the)h(default)f(protocol.)i(That)0 1785 y(is,)d(sunrpcrm)g(over)g(TCP) h(for)f(sunrpc)g(or)g(courier,)h(bare)f(TCP)h(for)f(iiop)f(and)h(http.) 0 1941 y Fu(13.2)29 b(Transports)62 2050 y Fs(A)10 b(transport)f(stack) h(consists)e(of)j(a)f(sequence)g(of)g(transport)f(layers.)i(The)f (last,)g(or)h(``bottom'',)f(layer)g(does)g(some)g(kind)0 2112 y(of)15 b(low-level)f(I/O;)g(the)h(other)g(layers)g(are)g (``filters'')g(or)g(``modifiers'')g(on)g(the)g(transport)e(services)i (provided)f(by)g(the)0 2175 y(lower)f(part)g(of)g(the)g(stack.)k(That) 12 b(is,)i(every)f(tail)f(of)h(a)h(transport)e(stack)g(implements)h(an) g(abstraction)f(called)g(simply)h(``a)0 2237 y(transport'')d(\(in)h (English;)e(in)i(C,)h(it)e(is)h Ft(ilu_Transport)p Fs(\);)f(each)i (transport)e(layer)h(\(except)g(the)g(bottom\))f(implements)h(a)0 2299 y(transport)f(in)h(terms)g(of)g(another)g(transport)f(\(the)h(one) g(implemented)g(by)f(the)h(rest)g(of)h(the)f(stack\).)62 2391 y(Transport)i(stacks)f(are)j(used)e(in)g(two)g(roles,)h(active)f (and)g(passive.)18 b(A)13 b(client)g(uses)g(a)h(transport)e(stack)h(in) g(the)g(active)0 2453 y(role)h(to)g(contact)f(a)i(server;)g(a)g(server) f(uses)g(a)g(transport)f(stack)h(in)g(the)f(passive)h(role)g(to)f(wait) h(for)g(connection)f(requests)0 2516 y(from)f(clients.)e(The)h(passive) f(role)h(for)h(a)f(transport)f(stack)h(is)g(called)g(a)g Fp(mooring)p Fs(.)62 2608 y(A)k(transport)f(stack)h(is)g(specified)f (by)h(a)h(sequence)f(of)g(strings,)g(each)g(one)g(of)g(which)g (specifies)f(a)i(transport)e(layer.)0 2670 y(This)c(section)g(is)h(a)h (catalog)e(of)h(the)g(built-in)f(kinds)f(of)j(transport)e(layers)g(and) h(their)g(specification)f(strings.)p eop %%Page: 209 210 209 209 bop 0 -58 a Fs(Chapter)11 b(13:)g(Protocols)f(and)h(Transports) 1201 b(209)62 183 y(Some)17 b(transports)d(convey)i(delimited)e (messages)i(\(where)g(each)h(message)f(is)f(a)h(byte)g(sequence\),)h (others)e(simply)0 246 y(convey)i(a)g(byte)f(sequence)h(\(that)g(must)f (be)i(parsed)e(into)g(messages)h(by)g(something)f(else\).)29 b(The)17 b(former)h(are)f(called)0 308 y(boundaried,)25 b(the)e(latter)g(are)h(not.)47 b(Some)24 b(RPC)h(protocols)c(require)j (a)f(boundaried)f(transport,)k(others)c(require)0 370 y(non-boundaried)9 b(transports.)62 465 y(Some)j(transports)e(are)i (reliable,)g(and)f(some)g(aren't.)i(Unreliable)d(transports)g(are)i (deprecated)f(in)g(ILU,)h(but)e(included)0 527 y(for)e (interoperability)d(with)i(existing)f(software)i(that)f(uses)g(only)g (unreliable)g(transports.)h(With)f(these)h(transport,)f(messages)0 589 y(may)14 b(be)f(delivered)f(more)i(than)e(once.)18 b(The)13 b(ILU)g(implementation)e(of)i(UDP)g(on)g(the)g(server)g(side)g (filters)f(out)g(multiple)0 652 y(receipts)h(of)h(the)f(same)h (request.)k(Asynchronous)11 b(methods)i(may)h(not)f(be)g(called)g(over) h(this)e(transport)g(mechanism,)j(as)0 714 y(reliable)d(delivery)f(of)h (the)g(request)f(packet)h(cannot)g(be)g(recognized)g(by)f(the)h(client) g(side.)h(Non-asynchronous)d(methods)0 776 y(use)h(the)g(reply)g (message)g(as)g(an)g(acknowledgement)g(that)f(the)h(request)g(was)g (received.)1391 760 y Fm(4)0 923 y Fo(13.2.1)25 b(TCP)62 1035 y Fs(A)11 b Ft(TCP)h Fs(transport)d(layer)j(is)e(reliable,)h(not)g (boundaried,)f(and)h(goes)g(on)g(the)g(bottom.)62 1129 y(A)g Ft(TCP)h Fs(transport)d(is)i(specified)g(by)f(a)i Fp(transport-info)f Fs(of)h(the)f(form)g Ft(tcp_)p Fp(host)t Ft(_)p Fp(port)t Ft([_)p Fp(buffersize)s Ft(])p Fs(.)62 1224 y(The)17 b Fp(host)j Fs(needs)c(to)g(convey)g(an)g(IP)h(address.) 27 b(The)17 b Fp(host)j Fs(can)c(either)g(be)h(a)g(dotted)e(decimal)i (notation)d(of)j(an)g(IP)0 1286 y(address)g(\(e.g.,)k Ft(13.2.116.14)p Fs(\),)f(or)e(be)g(a)g(hostname)f(that)g(can)i(be)f (mapped)g(into)e(an)i(IP)h(address.)31 b(The)18 b(optional)0 1349 y Fp(buffersize)c Fs(parameter)f(is)e(an)g(unsigned)f(integer;)h (it)g(can)h(be)f(used)g(to)g(control)g(the)g(size)h(of)f(buffers)h (allocated)f(for)g(use)h(in)0 1411 y(the)f(transport,)f(where)i(buffer) f(usage)g(is)g(allowed)f(by)h(the)g(higher-level)f(transport)g(or)h (protocol.)62 1506 y(In)e(ILU,)f(a)h(TCP)f(mooring)g(always)f(bound)g (to)h(a)h(particular)e(IP)i(address.)h(However,)f(the)f Fp(host)k Fs(in)7 b(a)i Ft(TCP)f Fp(transport-info)0 1568 y Fs(used)17 b(to)g(create)g(a)h(mooring)f(can)g(use)g(special)g (notations)e(to)i(mean)h Ft(")p Fs(pick)e(any)h(IP)h(address)f(of)g (this)f(host)p Ft(")p Fs(.)29 b(Those)0 1630 y(notations)9 b(are)j Ft(0)p Fs(,)g Ft(0.0.0.0)p Fs(,)f(and)g Ft(localhost)p Fs(.)h(When)f(one)g(of)g(these)g(notations)e(is)i(used,)g(the)g(ILU)h (runtime)f(picks)f(an)0 1692 y(IP)k(address)f(and)g(binds)f(the)h (mooring)g(to)g(that)f(address.)18 b(These)13 b(special)g(notations)e (are)j(replaced)f(with)g(either)g(a)h(name)0 1755 y(or)i(address)f(of)h (the)g(host)f(when)g(an)h(SBH)g(is)g(produced;)h(an)f(SBH)g(cannot)g (contain)e(such)i(special)f(notations.)23 b Ft(0)16 b Fs(and)0 1817 y Ft(0.0.0.0)9 b Fs(are)i(replaced)f(by)f(an)h(address;)f Ft(localhost)h Fs(is)f(replaced)h(by)f(a)h(name,)h(if)f(possible,)f (and)g(perhaps)h(an)g(address)0 1879 y(otherwise.)16 b(The)e(first)e(replacement)i(name)f(considered)g(is)f Ft(")p Fs(the)h(hostname)p Ft(")g Fs(of)g(the)g(machine.)18 b(Exactly)12 b(what)h(this)f(is)0 1942 y(\(and)i(how)g(it)g(is)g(set\)) g(is)f(system)h(specific,)h(but)f(you)f(should)g(beware)i(that)f(it)f (may)i(or)f(may)h(not)f(be)g(a)h(Fully)e(Qualified)0 2004 y(Domain)j(Name.)28 b(If)17 b(it)f(can)h(be)f(converted)g(to)g(an) h(IP)g(address)e(by)i(the)f(usual)f(means,)k(and)d(a)h(socket)f(bound)f (to)h(that)0 2066 y(address,)c(that)g(name)g(is)g(used.)i(Otherwise,)d (the)h(replacement)g(is)g Ft(")p Fs(127.0.0.1)p Ft(")f Fs(\(the)h(loopback)f(address)h(---)h(an)f(address)0 2128 y(that)g(means)h Ft(")p Fs(this)f(machine)p Ft(")h Fs(everywhere\))g(or)g Ft(")p Fs(localhost)p Ft(")e Fs(\(the)h (canonical)g(name)i(for)f(the)f(loopback)g(address\))g(and)0 2191 y(the)k(mooring's)g(socket)g(is)g(bound)f(to)i(0.0.0.0)f(\(the)h Ft(")p Fs(any)p Ft(")f Fs(address\).)27 b(We)17 b(bind)f(to)g(0.0.0.0)h (rather)f(than)h(127.0.0.1)0 2253 y(because)11 b(some)h(systems)e (\(e.g.,)i(Linux\))e(won't)h(let)g(us)f(bind)h(to)f(127.0.0.1.)p 0 2332 600 2 v 21 2465 a Fm(4)62 2482 y Fs(Query:)j(can)g(requests)e (be)i(larger)f(than)g(the)g(UDP)h(packet)f(size?)j([No])d(How)g(then)g (are)h(they)f(segmented?)i([They're)62 2544 y(not;)f(replies)f(aren't)g (either])h(Note:)g(This)f(should)f(probably)g(be)i(replaced)g(by)f(a)h (reliable)f(UDP)h(protocol,)f(in)g(which)62 2606 y(each)k(message)f(is) f(acknowledged)g(by)h(the)f(receiver.)24 b(This)14 b(would)g(allow)g (use)h(of)g(asynchronous)e(methods)h(over)62 2669 y(UDP.)e(Of)f (course,)h(ONC)f(RPC)h(would)e(not)h(cooperate.)p eop %%Page: 210 211 210 210 bop 0 -58 a Fs(Chapter)11 b(13:)g(Protocols)f(and)h(Transports) 1201 b(210)62 183 y(If)12 b(you)e(use)h(a)h(host)e(name)h(instead)f(of) h(an)h(address,)f(think)e(about)i(how)f(widely)g(it)h(can)g(be)g (interpreted.)g(If)g(it's)g(a)g(Fully)0 246 y(Qualified)e(Domain)h (Name,)i(the)e(client)f(has)i(to)f(be)g(able)g(to)g(use)g(the)g(DNS)h (to)f(resolve)g(it)f(---)i(but)f(not)g(all)g(systems)f(include)0 308 y(DNS)15 b(support.)20 b(If)15 b(it's)f(not)g(a)h(FQDN,)g(the)f (resulting)f(SBH)i(can)g(only)f(be)g(distributed)f(within)f(the)j (organization)e(that)0 370 y(manages)e(the)g(name's)h(mapping.)62 467 y(The)e Fp(port)k Fs(can)d(either)f(be)g(a)g(decimal)h(string)d (identifying)g(a)j(specific)e(port)h(\(which,)g(of)g(course,)h(must)f (not)f(be)h(used)g(for)0 529 y(anything)f(else\),)i(or,)h(for)e(a)i (mooring,)e(be)h Ft(0)p Fs(,)g(which)f(constitutes)f(a)i(request)f(for) h(a)g(new,)g(unused)f(port.)h(In)g(the)f(latter)g(case,)0 591 y(a)i(decimal)f(string)f(for)h(that)g(port)f(will)g(be)i (substituted)c(in)j(the)g(transport-info.)62 688 y(Examples)g(are:)120 784 y Ft(tcp_augustus_0)120 834 y(tcp_13.2.116.14_12321)120 884 y(tcp_localhost_12321)120 934 y(tcp_0_0)0 1086 y Fo(13.2.2)25 b(UDP)62 1199 y Fs(A)11 b Ft(UDP)h Fs(transport)d(is)i (boundaried,)f(not)h(reliable,)g(and)g(on)g(the)g(bottom.)62 1296 y(A)i Ft(UDP)f Fs(transport)g(supports)f(only)g(messages)i(that)f (are)h(no)f(longer)g(than)g(the)h(maximum)g(size)f(of)h(a)g Ft(UDP)f Fs(packet;)h(an)0 1358 y(attempt)e(to)f(send)h(a)h(longer)e (message)i(will)e(cause)h(an)g(I/O)g(error)h(to)f(be)g(raised)g(in)f (the)h(sender.)62 1454 y(One)18 b(could)f(imagine)h(creating)g(a)g (reliable)g(boundaried)f(transport)f(layer,)21 b(either)c(using)g Ft(RDP)h Fs(\(an)g Ft(IP)h Fs(protocol)0 1517 y(similar)13 b(to)g Ft(UDP)p Fs(;)g(see)h(RFC)g(1151\))f(or)g(building)e(on)i Ft(UDP)p Fs(.)18 b(Of)13 b(course,)i(such)d(a)i(transport)e(layer)h (could)g(not)f(be)i(used)f(to)0 1579 y(communicate)e(with)f(ONC)i (RPC/UDP)g(peers.)62 1676 y(A)h Ft(UDP)f Fs(transport)f(is)h(specified) g(by)g(a)h Fp(transport-info)g Fs(of)f(the)h(form)g Ft(udp_)p Fp(host)t Ft(_)p Fp(port)t Fs(.)h(The)e Fp(host)k Fs(and)c Fp(port)17 b Fs(convey)0 1738 y(IP)12 b(host)e(address)h(and)g(port)f (just)g(as)h(for)h Ft(TCP)p Fs(.)62 1834 y(Examples)f(are:)120 1931 y Ft(udp_augustus_0)120 1981 y(udp_13.2.116.14_12321)120 2030 y(udp_localhost_12321)120 2080 y(udp_0_0)0 2233 y Fo(13.2.3)25 b(SunRPC)15 b(Record)g(Marking)62 2346 y Fs(A)i Ft(SunRPC)11 b(Record)g(Marking)16 b Fs(transport)g(is)g (reliable)g(and)h(boundaried,)g(and)g(is)f(built)f(on)i(top)f(of)h (some)g(other)0 2408 y(transport)11 b(that)g(is)h(reliable)f(and)h(not) f(boundaried.)i(A)f Ft(SunRPC)f(Record)g(Marking)g Fs(transport)g (layer)h(is)g(specified)f(by)h(a)0 2470 y Fp(transport-info)f Fs(of)h(the)f(form)g Ft(sunrpcrm)p Fs(.)62 2567 y(The)g(canonical)g (form)h(is:)120 2663 y Ft(sunrpcrm)p eop %%Page: 211 212 211 211 bop 0 -58 a Fs(Chapter)11 b(13:)g(Protocols)f(and)h(Transports) 1201 b(211)0 183 y Fo(13.2.4)25 b(World)15 b(Wide)g(Web)f(Consortium)h (MUX)g(Transport)62 287 y Fs(The)h Ft(World)10 b(Wide)h(Web)h (Consortium)e(MUX)15 b Fs(transport)g(filter)g(is)g(reliable)f(and)i (boundaried,)f(and)h(will)e(run)h(only)0 349 y(on)h(top)g(of)g(the)g (TCP)h(transport.)26 b(It)16 b(supports)f(multiple)g(virtual)g (transport)g(channels)g(over)i(a)f(single)g(TCP/IP)h(trans-)0 412 y(port.)37 b(Each)20 b(channel)g(can)g(be)g(used)f(with)g(a)i (different)e(server)h(and/or)g(protocol)e(and/or)h(transport)g(stack.) 38 b(Both)0 474 y(outgoing)16 b(and)h(incoming)g(channels)g(can)h(be)g (used)g(with)e(the)i(same)g(TCP/IP)h(connection,)f(so)g(the)f(MUX)i (protocol)0 536 y(supports)h(callbacks)h(through)f(a)i(firewall.)42 b(The)22 b(MUX)g(protocol)e(also)h(supports)f(message)i(fragmentation)e (and)0 598 y(interleaving,)f(and)g(provides)e(application-level)f(flow) j(control.)33 b(The)18 b(protocol)g(supported)f(is)h(as)h(documented)f (in)0 661 y Ft(http://www.w3.org/Protocols/MUX/WD-mux)o(-961023.htm)o (l)p Fs(,but)c(with)i(the)h(modifications)f(suggested)0 723 y(in)8 b Ft(http://lists.w3.org/Archives/Member/w3c-mux)o (/msg00039.h)o(tml)p Fs(.A)e Ft(World)11 b(Wide)g(Web)g(Con-)0 785 y(sortium)g(MUX)k Fs(transport)f(layer)i(is)e(specified)h(by)g(a)h Fp(transport-info)f Fs(of)h(the)f(form)h Ft(w3mux_)p Fp(CHANNEL-ID)s Fs(,)g(where)0 847 y Fp(CHANNEL-ID)e Fs(specifies)d(an)g(18-bit)f(channel)h(number.)h(If)g(the)f Fp(CHANNEL-ID)j Fs(is)d(specified)f(as)i Ft(0)f Fs(when)g(creating)g(a) 0 910 y(mooring,)g(a)g(random)h(available)e(channel)h(ID)g(will)f(be)h (assigned.)62 997 y(The)g(canonical)g(form)h(is:)120 1084 y Ft(w3mux_0)120 1134 y(w3mux_258049)0 1258 y Fo(13.2.5)25 b(Generic)15 b(Security)g(Service)g(\(GSS\))62 1362 y Ft(GSS)10 b Fs(transport)e(layers)h(may)h(be)f(added)g(to)g(a)h (transport)e(stack)h(to)g(provide)f(some)i(form)g(of)f(authenticated)f (connection.)0 1424 y(It)15 b(uses)f(the)h(IETF)g(Common)g (Authentication)d(Technology)h(Working)h(Group's)g(Generic)h(Security)f (Service)h(\(GSS\))0 1487 y(API)c(to)f(add)g(various)f(flavors)h(of)h (security)e(to)h(the)g(messages)h(that)f(flow)f(back)i(and)f(forth)g (over)h(the)f(transport.)g(Generally)0 1549 y(speaking,)16 b(each)g(outgoing)d(message)i(will)g(be)g(``wrapped'')h(by)f(the)g (standard)g(GSS)h(routine)e Ft(gss_wrap)p Fs(,)i(and)g(each)0 1611 y(incoming)e(message)h(will)f(be)h(``unwrapped'')g(by)f(the)h (standard)f(GSS)i(routine)e Ft(gss_unwrap)p Fs(.)22 b(This)14 b(transport)g(also)0 1673 y(includes)c(a)h(mechanism)g(for)g (identifying)e(callers)h(that)h(is)f(integrated)g(with)g(the)g (specific)h(security)f(scheme)h(being)f(used.)62 1761 y(Use)18 b(of)f(this)g(transport)f(requires)h(linking)f(against)g(a)i (GSS)g(library,)h(implemented)e(according)g(to)h(the)f(ANSI)h(C)0 1823 y(mapping)10 b(for)i(the)f(GSS)g(spec,)h(and)f(against)f(an)h (implementation)f(of)h(the)g(specific)g(GSS)h(scheme)f(being)g(used.)62 1910 y(The)22 b Ft(security)g Fs(transport)f(layer)i(is)f(reliable)f (and)i(unboundaried,)g(and)f(requires)g(a)h(reliable,)i(boundaried,)0 1972 y(transport)8 b(stack)i(below)e(it.)j(It)e(is)g(specified,)h(on)f (the)g(server)h(side,)g(by)f(a)h(string)e(of)i(the)f(form)h Ft(gss_1_)p Fp(SCHEME-NAME)t Fs(,)0 2035 y(where)21 b Fp(SCHEME-NAME)k Fs(identifies)19 b(some)h(specific)g(GSS)h(security)f (scheme.)40 b(Scheme)21 b(names)g(are)g(typically)0 2097 y(dotted-decimal)14 b(strings,)h(representing)f(OIDs)h(for)g(specific)g (schemes.)24 b(Two)15 b(special)g(names)g(are)h(also)f(understood,)0 2159 y Ft(")p Fs(Xerox.ILU.GSS.NIL)p Ft(")d Fs(and)f Ft(")p Fs(Xerox.ILU.GSS.SSL)p Ft(")p Fs(.)h(Examples)f(are:)120 2246 y Ft(gss_1_Xerox.ILU.GSS.NIL)e Fs(--)j(use)f(security)f(with)g (the)h(ILU)g(GSS)h(NIL)f(scheme)120 2296 y Ft (gss_1_1.2.840.113550.9.1.3)e Fs(--)j(another)e(way)h(of)h(saying)e (the)h(same)g(thing)p eop %%Page: 212 213 212 212 bop 0 -58 a Fs(Chapter)11 b(14:)g(Security)1505 b(212)0 183 y Fq(14)36 b(Security)62 337 y Fs(There)11 b(are)h(a)f(number)g(of)f(components)g(that)g(make)i(up)e(a)h (successful)f(security)g(policy)f(for)i(an)g(application)e(based)i(on)0 399 y(a)f(distributed)d(object)i(system.)h(Only)f(a)h(few)g(of)f(them)h (deal)f(with)g(the)g(distributed)e(object)i(system.)i(This)d(document)h (gives)0 461 y(an)j(overview)g(of)g(some)h(of)f(the)g(issues,)g(and)g (explains)f(how)g(they)h(may)h(be)f(achieved)g(with)f(the)h(mechanisms) g(provided)0 524 y(in)h(ILU)h(2.0.)19 b(For)14 b(a)h(fuller)e (discussion)e(of)j(the)g(issues,)f(see)h(the)g(OMG)g(Security)f (Working)g(Group's)g(white)g(paper)h(on)0 586 y(security,)i Ft(http://www.omg.org/docs/1994/94-04-16.)o(ps)p Fs(.)22 b(There)16 b(are)g(a)g(number)f(of)h(things)e(which)h(are)0 648 y(often)c(lumped)f(under)h(the)g(umbrella)g(of)g(`security'.)g (They)g(include:)37 739 y Fr(\017)30 b Fp(identities)16 b Fs(--)i(some)e(partitioning)f(and)h(naming)g(scheme)i(that)e(lets)g (the)g(system)h(separate)f(one)h(principal)f(from)90 801 y(another;)37 879 y Fr(\017)30 b Fp(authentication)14 b Fs(--)g(a)g(way)g(of)g(proving)e(that)h(an)h(entity)e(claiming)h (some)h(identity)e(actually)h(has)g(the)h(right)f(to)g(that)90 941 y(identity;)37 1019 y Fr(\017)30 b Fp(communications)18 b(authentication)i Fs(--)g(some)g(way)f(of)h(proving)e(that)h(a)h (message)g(supposedly)d(sent)i(by)g(some)90 1082 y(identity)9 b(actually)i(was)g(sent)f(by)h(that)g(identity;)37 1160 y Fr(\017)30 b Fp(communications)12 b(integrity)i Fs(--)g(some)g(way)g (of)f(knowing)f(that)h(a)h(received)g(message)f(is)h(the)f(same)h (message)g(that)90 1222 y(was)d(sent,)g(that)g(no)f(bits)g(were)i (altered)f(along)f(the)h(way;)37 1300 y Fr(\017)30 b Fp(communications)9 b(privacy)i Fs(--)g(some)f(way)f(of)h(concealing)f (the)h(contents)e(of)i(a)h(message)f(from)g(all)g(but)f(the)g(intended) 90 1362 y(recipient;)37 1440 y Fr(\017)30 b Fp(authorization)13 b Fs(--)g(a)g(mechanism)g(for)g(deciding)e(whether)h(an)h(identity)d (should)h(be)i(allowed)f(access)h(to)f(some)g(data)90 1503 y(or)f(function;)37 1581 y Fr(\017)30 b Fp(auditing)11 b Fs(--)h(a)g(way)f(of)g(remembering,)h(securely,)f(who)g(did)f(what)h (to)g(what.)0 1699 y(Some)18 b(of)e(these)h(items)f(are)i(more)f (complex)g(than)f(they)g(appear)i(to)e(be)h(at)g(first)f(glance.)28 b(For)17 b(example,)i(the)e(notion)0 1762 y(of)f(authentication)e (includes)i(not)f(only)h(the)g(mechanisms)g(needed)g(to)g(check)h (identities,)f(but)f(also)h(the)g(more)h(social)0 1824 y(problems)g(of)g(effective)h(password)e(and)i(key)f(management.)31 b(Authorization)15 b(and)i(auditing)f(may)i(include)e(various)0 1886 y(schemes)f(of)f(payment)g(and)g(chargeback,)i(for)e(access)h(to)f (services.)21 b(They)14 b(are)h(also)f(inter-related;)h(communications) 0 1948 y(privacy)c(is)f(a)i(kind)e(of)h(authorization)f(problem.)62 2039 y(ILU)16 b(provides)e(two)g(major)i(hooks)e(for)i(an)f (application)f(to)h(use)g(in)g(implementing)f(a)i(security)e(policy.)24 b(The)15 b(first)0 2101 y(is)j(a)g(flexible)g(notion)e(of)i (identities.)31 b(The)18 b(second)g(is)f(an)i(interface)f(to)g (communications)f(security)g(which)g(allows)0 2164 y(authentication,)g (integrity,)h(and)f(privacy)g(to)g(be)h(provided)e(in)h(all)g(message)h (traffic)g(between)f(two)g(ILU-connected)0 2226 y(programs.)12 b(We)f(believe)g(that)f(with)h(these)f(two)h(mechanisms,)h(arbitrary)e (security)h(policies)f(can)h(be)g(implemented)g(with)0 2288 y(ILU.)0 2438 y Fu(14.1)29 b(Identities)62 2545 y Fs(Identities)17 b(are)i(ways)f(in)g(which)f(authorization)f (principals)h(in)h(a)h(security)e(system)h(are)h(named.)33 b(They)18 b(can)g(be)0 2608 y(various;)10 b(human)h(names,)h(social)f (security)f(numbers,)i(computer)f(login)f(accounts,)h(and)g(credit)g (cards)g(are)h(all)f(examples)0 2670 y(of)g(identities.)e(ILU)i (provides)e(a)j(few)f(prespecified)f(identity)f(types,)h(one)h(of)g (which)f(\(the)h(GSS)g(identity\))e(is)h(flexible)g(and)p eop %%Page: 213 214 213 213 bop 0 -58 a Fs(Chapter)11 b(14:)g(Security)1505 b(213)0 183 y(user-extensible.)9 b(In)h(addition,)f(the)h Ft(ilu_IdentityType)e Fs(data)i(type)g(in)f(the)h(kernel)g(exports)e(a) j(meta-object)f(protocol)0 246 y(for)h(defining)f(new)h(identity)f (types,)g(which)h(can)g(be)g(used)g(by)g(various)f (application-specific)f(protocols)h(and)h(transports.)62 333 y(ILU)f(also)f(defines)g(a)h Fp(passport)p Fs(,)f(which)f(is)h(a)h (data)g(structure)f(which)f(can)i(contain)f(an)h(arbitrary)f(number)g (of)h(identities.)0 395 y(Identities)i(are)j(communicated)e(during)g (calls)g(through)f(an)i(ILU)g(interface)g(by)f(having)g(the)g(caller)h (pass)g(a)g(passport)e(as)0 457 y(part)g(of)g(the)g(call,)g(so)g(that)g (the)f(implementor)h(of)g(the)g(true)g(method)g(can)g(find)f(out)h (which)f(principal)g(is)h(making)f(the)h(call.)0 519 y(This)e(passport)g(transfer)h(can)g(be)g(accomplished)g(automatically) e(as)j(part)e(of)i(the)e(wire-protocol)g(used)h(in)f(the)h(call,)g(or)h (on)0 582 y(a)g(per-connection)e(basis)g(by)h(the)g(transport)e (machinery,)j(or)f(explicitly)e(as)j(a)f(parameter)h(of)f(the)g(call.) 62 669 y(The)g(identity)f(types)g(provided)g(in)h(ILU)g(2.0)g(are:)37 756 y Fr(\017)30 b Ft(ilu_ConnectionIdentity)9 b Fs(--)j(a)f(string)f (identifying)f(the)i(connection)f(over)h(which)g(the)f(call)h(was)h (made;)37 827 y Fr(\017)30 b Ft(ilu_SunRPCAuthUnixIdentity)19 b Fs(--)i(a)g(data)g(structure)g(\(see)g(`)p Ft (runtime/kernel/iluxport.h)p Fs(')e(for)90 890 y(details\))d (identifying)f(the)i(\(unauthenticated\))e(user)i(ID,)g(group)g(ID,)g (and)g(UNIX)g(group)f(memberships)h(on)f(the)90 952 y(\(putative\))10 b(calling)g(machine)h(\(this)f(identity)f(type)i(is)f(only)g(available) h(if)g(ILU)g(has)f(been)h(configured)g(with)f(support)90 1014 y(for)h(the)g Ft(sunrpc)g Fs(protocol\);)37 1085 y Fr(\017)30 b Ft(ilu_GSSIdentity)18 b Fs(--)h(an)g(opaque)f(value)h (which)f(identifies)f(the)i(caller)g(via)g(one)f(or)h(more)h(GSS)f (security)90 1148 y(mechanisms)12 b(\(this)g(identity)f(type)h(is)g (only)f(available)h(if)h(support)e(for)i(the)f Ft(security)g Fs(transport)f(layer)i(has)f(been)90 1210 y(configured)e(into)g(ILU\).) 62 1322 y(Passports,)17 b(and)f(the)g(identities)e(in)i(them,)i(are)f (represented)f(in)g(different)g(ways)g(in)f(different)h (language-specific)0 1384 y(runtimes.)30 b(This)17 b(section)g (contains)f(only)h(a)h(brief)g(description)e(of)h(the)h(various)e (identity)g(types;)k(refer)f(to)e(the)g(ILU)0 1447 y(documentation)11 b(for)h(your)g(programming)g(language)g(to)f(see)i(how)f(passports)e (and)j(identities)d(are)j(manipulated)e(in)h(that)0 1509 y(language.)62 1596 y(The)j(`connection')e(identity)f(can)j(be)g(used)e (to)h(display)f(the)h(apparent)h(IP)g(host)e(address)h(of)g(the)g (caller;)i(due)e(to)g(the)0 1658 y(possibility)g(of)j(IP)h(packet)f (spoofing)f(in)h(IPv4,)i(that)d(address)h(should)f(not)g(be)i(relied)f (upon)f(for)i(security)e(purposes.)0 1721 y(Another)f(problem)h(with)f (using)g(connection)f(identities)g(in)i(server)g(applications)e(is)h (that)h(ILU)g(will)f(close)g(them)h(and)0 1783 y(re-constitute)c(them)h (at)g(need,)h(which)e(means)i(that)e(a)i(client)e(might)g(in)h(the)g (extreme)h(case)f(use)g(a)h(different)f(connection)0 1845 y(for)20 b(every)g(call.)37 b(This)19 b(renders)h(the)f (connection)g(identity)f(somewhat)h(inappropriate)f(for)i(identifying)e (particular)0 1907 y(client-server)11 b(`sessions'.)62 1995 y(The)k(`Sun)g(RPC)g(Unix)f(Authentication')e(identity)h(follows)g (the)i(`system)f(authentication')e(scheme)k(described)e(in)0 2057 y(Internet)d(RFC)h(1831.)e(It)h(contains)f(the)g(host)g(IP)i (address,)f(the)f(UNIX)h(user)g(ID,)g(and)g(the)g(UNIX)g(group)f(ID)h (of)g(the)g(caller,)0 2119 y(and)i(a)g(list)e(of)i(the)g(UNIX)f(groups) g(to)g(which)g(the)h(caller)f(belongs.)j(Note)e(that)f(the)g(user)h(ID) g(and)f(group)g(ID)h(are)h(relative)0 2181 y(to)d(the)g(caller's)g (host,)g(not)f(the)i(server's)f(host.)g(This)f(information)g(is)h(only) g(passed)f(if)h(the)h(caller)f(is)g(running)f(on)h(a)g(UNIX)0 2244 y(machine,)h(and)f(if)h(the)f(protocol)f(used)h(in)g(the)g (connection)f(is)h(the)g Ft(sunrpc)g Fs(protocol.)g(Note)g(that)f(this) h(information)f(may)0 2306 y(be)h(easily)g(spoofed)f(if)h(the)g (communications)f(channel)h(is)f(insecure.)62 2393 y(The)i(`GSS')h (identity)e(may)h(contain)g(multiple)f(different)g(identities,)g(in)h (the)g(form)h(of)f(GSS)h(`names'.)i(GSS)e(naming)0 2455 y(is)g(flexible)g(and)h(extensible,)f(so)g(should)f(be)i(able)g(to)f (represent)h(any)f(type)g(of)h(name)g(desired.)1531 2439 y Fm(1)1569 2455 y Fs(These)f(identities)f(may)0 2518 y(be)h(reliable,)f(even)h(in)f(the)g(face)h(of)g(insecure)f(networks,)g (if)g(they)g(have)h(been)f(negotiated)f(and)h(communicated)h(with)e(an) 0 2580 y(appropriately)g(secure)i(GSS)g(security)e(mechanism.)16 b(Any)11 b(effective)i(security)f(mechanism)g(for)h(use)f(with)f(ILU)i (should)p 0 2615 600 2 v eop %%Page: 214 215 214 214 bop 0 -58 a Fs(Chapter)11 b(14:)g(Security)1505 b(214)0 183 y(use)14 b(some)g(form)h(of)f(GSS)h(identity.)j(ILU)c (provides)f(ways)h(to)f(retrieve)i(parameters)f(of)g(the)g(GSS)h (identity,)e(including)0 246 y(the)j Ft(gss_name_t)f Fs(of)h(the)f(caller,)j(the)d(lifetime)h(of)g(the)f(security)g (context,)i(and)e(the)h(security)f(mechanism)h(that)f(has)0 308 y(validated)10 b(the)i(identity)d(and)j(protected)e(the)i (communications.)f(There)h(are)g(also)f(routines)f(to)h(convert)g(a)h Ft(gss_name_t)0 370 y Fs(value)i(to)h(a)g(printable)f(string,)g(and)h (to)f(create)i(a)f(GSS)g(identity)e(given)h(a)h(value)g(of)g(type)f Ft(gss_cred_id_t)p Fs(.)21 b(Further)0 432 y(information)10 b(on)h(the)g(GSS)g(can)h(be)f(found)g(in)f(the)h(ILU)g(distribution,)e (in)h(the)h(directory)g(`)p Fp(ILUSRC)t Ft(/GSS/doc/)p Fs('.)0 967 y Fu(14.2)29 b(Communications)15 b(Security)62 1171 y Fs(ILU)c(provides)f(for)h(transparent)f(communication)g(between) h(ILU)g(address)f(spaces)h(when)g(an)g(operation)f(is)h(invoked)0 1233 y(on)i(a)h(foreign)f(\(supported)f(outside)g(the)i(calling)e (address)h(space\))h(object)f(reference.)20 b(There)13 b(is)h(a)f(generic)h(scheme)g(for)0 1295 y(securing)9 b(inter-address-space)g(communication,)h(using)f(the)h(IETF)g(Common)h (Authentication)c(Technology)i(working)0 1357 y(group's)h(Generic)h (Security)g(Service)h(\(GSS\))g(API.)g(\(The)f(ILU)g(distribution)d (also)i(provides)g(an)i(implementation)d(of)i(the)0 1420 y(GSS,)16 b(which)e(contains)g(a)i(meta-object)f(protocol)e(allowing)h (specific)h(security)f(mechanisms)h(to)f(be)i(registered)e(with)0 1482 y(and)g(used)f(by)h(the)g(GSS)g(shell)f(implementation.\))19 b(Inside)13 b(the)h(generic)f(mechanism,)j(specific)d(security)g (mechanisms)0 1544 y(can)e(be)h(selected)e(to)h(give)g(various)f (degrees)h(of)g(protection.)62 1731 y(The)e(GSS-based)g (inter-address-space)f(security)g(provides)g(message)h(integrity)e (and/or)i(message)g(privacy)f(services,)0 1793 y(depending)15 b(on)h(which)f(specific)h(services)g(are)h(requested)e(of)h(the)g (specific)g(security)f(mechanism)i(selected)f(for)g(use.)0 1855 y(All)c(parts)g(of)h(the)f(message)h(are)g(protected;)f(all)h (messages)f(on)g(a)h(secured)g(transport)e(are)j(sent)e(as)g (record-marked)i(GSS)0 1918 y(tokens.)c(Multiple)g(tokens)g(may)i(be)f (sent)f(for)h(a)h(single)e(RPC-level)h(message;)g(some)g(security)g (mechanisms)f(may)i(insert)0 1980 y(empty)h(padding)f(messages)i(to)f (further)g(confuse)g(traffic)h(analysis)e(attacks.)18 b(This)13 b(inter-address-space)f(security)h(may)0 2042 y(also)f(be)i(used)e(for)h(ILU)g(`transport-buffer-based')f(object)g (persistence)h(mechanisms,)g(but)g(it)f(is)h(not)f(clear)h(to)g(us)g (what)0 2104 y(security)d(implications)f(this)h(has.)p 0 2551 600 2 v 21 2590 a Fm(1)62 2606 y Fs(The)k(current)f(ILU)g(GSS)h (implementation)f(only)f(allows)g(one)i(name)g(per)g(GSS)g(identity.)i (This)d(restriction)f(will)g(be)62 2669 y(lifted)f(in)f(the)h(future.)p eop %%Page: 215 216 215 215 bop 0 -58 a Fs(Chapter)11 b(14:)g(Security)1505 b(215)52 1250 y @beginspecial 77 @llx 333 @lly 520 @urx 633 @ury 4430 @rwi @setspecial %%BeginDocument: security-diagram.idraw /arrowHeight 10 def /arrowWidth 5 def /IdrawDict 52 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 reencodeISO 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 /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 %I Idraw 10 Grid 9.21785e-40 4.95096e-40 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.799705 0 0 0.799705 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Green 0 1 0 SetCBg none SetP %I p n %I t [ 1.05614 -0 -0 1.25477 59.6745 48.8864 ] concat %I 38 295 533 590 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 1 SetP %I t [ 1.06889 -0 -0 0.97619 53.7289 198.143 ] concat %I 62 510 510 550 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 1 SetP %I t [ 1.55882 -0 -0 0.97619 23.3529 196.619 ] concat %I 62 446 230 486 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Yellow 1 1 0 SetCBg %I p 1 SetP %I t [ 1 -0 -0 1 58 186 ] concat %I 62 318 230 358 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Yellow 1 1 0 SetCBg %I p 1 SetP %I t [ 1 -0 -0 1 58 186 ] concat %I 254 318 406 358 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Yellow 1 1 0 SetCBg %I p 1 SetP %I t [ 1 -0 -0 1 58 186 ] concat %I 430 318 542 422 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 1 SetP %I t [ 1 -0 -0 1 58 186 ] concat %I 62 382 326 422 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 1 SetP %I t [ 1 -0 -0 1 58 186 ] concat %I 62 254 294 294 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 296 723 ] concat %I [ (Application code) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 176 659 ] concat %I [ (stub code) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 136 595 ] concat %I [ (marshalling code \(RPC message formation\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 136 531 ] concat %I [ (security transport layer) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 360 531 ] concat %I [ (GSS shell) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 512 579 ] concat %I [ (specific) (GSS) (security) (mechanism) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 200 467 ] concat %I [ (TCP/IP stream) ] Text End Begin %I Line %I b 65535 2 1 1 [] 0 SetB %I cfg Red 1 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 58 186 ] concat %I 70 334 70 278 Line %I 1 End Begin %I Line %I b 65535 2 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 58 186 ] concat %I 214 342 270 342 Line %I 1 End Begin %I Line %I b 65535 2 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 58 186 ] concat %I 390 326 446 326 Line %I 1 End Begin %I Line %I b 65535 2 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 58 186 ] concat %I 446 526 446 406 Line %I 1 End Begin %I Line %I b 65535 2 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 58 186 ] concat %I 70 462 70 414 Line %I 1 End Begin %I Line %I b 65535 2 1 1 [] 0 SetB %I cfg Red 1 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 58 186 ] concat %I 278 278 590 278 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 464 459 ] concat %I [ (\(to peer\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-bold-r-normal-*-14-*-*-*-*-*-*-* Helvetica-Bold 14 SetF %I t [ 1 0 0 1 200 767 ] concat %I [ (Layers of ILU communications security \(simplified\)) ] Text End Begin %I Line %I b 65535 2 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Yellow 1 1 0 SetCBg %I p 0 SetP %I t [ 1 -0 -0 1 58 186 ] concat %I 70 398 70 350 Line %I 1 End Begin %I Line %I b 65535 2 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Yellow 1 1 0 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 58 186 ] concat %I 70 526 70 478 Line %I 1 End Begin %I Line %I b 65535 2 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 28 356 ] concat %I 412 356 412 172 Line %I 1 End End %I eop showpage end %%EndDocument @endspecial 62 1549 a(ILU)12 b(communications)e(security)h(is)g (orthogonal)f(to)h(the)h(choice)f(of)h(RPC)h(protocol)d(or)i(transport) e(mechanism.)j(The)0 1611 y(ILU)e(transport)f(stack)h(consists)e(of)i (the)g(following)e(pieces:)i(an)g(application)e(layer,)j(which)e(calls) h(into)f(a)i(caller-side)e(stub)0 1674 y(layer,)15 b(which)e(calls)g (into)g(RPC-mechanism-specific)h(marshalling)f(code,)i(which)e(calls)g (into)g(one)g(or)h(more)g(transport)0 1736 y(filters,)h(arranged)f(in)g (a)h(stack.)21 b(For)15 b(example,)g(an)g(application)d(in)i(C)p Ft(++)h Fs(may)g(call)f(into)f(the)h(stubs)g(for)g(some)h(specific)0 1798 y(interface,)g(which)e(call)g(down)g(into)f(the)i(RPC)g(message)g (marshalling)e(code,)j(which)e(calls)g(down)g(to)g(the)g(compression)0 1861 y(transport)18 b(layer)h(\(passing)e(it)h(either)h(whole)f(RPC)i (messages)f(or)g(fragments)f(thereof\),)k(which)c(calls)g(down)g(to)g (the)0 1923 y(security)10 b(transport)g(layer)i(\(which)e(turns)h(byte) f(streams)i(passed)e(from)i(above)f(into)f(security)g(data)i(tokens\),) e(which)h(calls)0 1985 y(down)h(to)g(a)i(simple)e(record-marking)h (layer)g(\(which)f(puts)g(32-bit)f(length)h(headers)h(on)f(each)i(GSS)f (data)g(token\),)g(which)0 2047 y(calls)j(down)g(to)f(the)i(TCP/IP)g (transport)e(layer)h(\(which)g(actually)g(writes)f(the)h(bytes)g(to)g (the)g(TCP/IP)h(stream\).)28 b(Thus,)0 2110 y(each)13 b(message)g(passed)f(between)g(address)h(spaces)f(in)g(this)g(example)h (is)f(a)h(record-marked)g(GSS)g(token)f(containing)f(an)0 2172 y(encrypted)f(signed)g(compressed)g(fragment)h(of)g(a)g(full)f (RPC)i(message.)f(The)g(fragment)g(may)g(be)g(a)g(`improper')g (fragment)0 2234 y(--)g(a)g(whole)e(RPC)j(message.)f(Note)f(that)g (this)f(is)h(only)f(one)i(possible)d(ILU)i(transport)g(stack;)f(the)i (layers)f(may)h(be)f(arranged)0 2296 y(in)15 b(other)h(orders,)h (within)d(some)i(constraints.)24 b(In)16 b(particular,)h(our)f(current) g(design)e(requires)i(the)f(security)g(transport)0 2359 y(layer)10 b(to)g(be)h(immediately)f(above)g(a)g(GSS)h(token)f (record-marking)g(layer,)h(which)f(in)f(turn)h(must)g(be)h(immediately) e(above)0 2421 y(the)15 b(actual)g(transport)f(layer)h(\(the)g(layer)h (which)e(actually)g(writes)h(to)g(the)g(TCP/IP)h(buffers,)g(for)g (instance\).)23 b(The)15 b(GSS)0 2483 y(token)h(record-marking)g(layer) g(may)h(adapt)f(to)g(the)g(particular)g(security)f(scheme)i(being)f (used;)i(in)e(particular,)h(if)f(the)0 2545 y(wire)f(format)g(of)f(the) h(security)e(mechanism)i(already)g(specifies)f(record-marking)g (information,)h(the)f(record-marking)0 2608 y(layer)e(will)g(simply)f (interpret)h(that)f(information,)h(rather)h(than)f(adding)f(any)h(new)g (information)g(to)g(the)g(packets)g(passing)0 2670 y(through)e(it.)p eop %%Page: 216 217 216 216 bop 0 -58 a Fs(Chapter)11 b(14:)g(Security)1505 b(216)0 183 y Fn(14.2.0.1)22 b(Kernel)16 b(Servers)62 290 y Fs(ILU)f(objects)f(are)i(managed)f(by)g Fp(kernel)g(servers)p Fs(.)23 b(There)15 b(may)h(be)f(multiple)f(kernel)h(servers)g(per)g (address)g(space.)0 353 y(Each)g(kernel)g(server)g(`owns')g(some)g(set) g(of)g(ILU)g(object)f(instances,)h(and)g(manages)g(certain)g (functionality)e(for)i(those)0 415 y(instances.)g(One)e(item)f(of)h (functionality)d(managed)j(by)g(an)f(kernel)h(server)g(is)f (communication)g(with)g(kernel)g(servers)h(in)0 477 y(other)f(address)g (spaces.)k(This)c(inter-kernel-server)g(communication)f(is)h(always)g (performed)h(between)g(a)g(`true')f(kernel)0 539 y(server,)f(or)f Fp(TKS)p Fs(,)g(and)g(its)f(counterpart)h(in)f(another)h(address)f (space,)i(the)f(`surrogate')f(kernel)h(server,)h(or)f Fp(SKS)p Fs(.)h(Instances)0 602 y(in)f(a)i(TKS)f(are)g(those)f(which)h (actually)f(contain)g(implementations)f(for)i(the)f(operations)g(of)h (the)g(instances')e(types,)i(so)f(the)0 664 y(TKS)15 b(may)h(be)f(thought)e(of)i(as)g(the)g(`server-side')g(kernel)g (server.)23 b(A)16 b(SKS)f(manages)g(surrogate)g(or)g(proxy)f (instances)0 726 y(for)f(some)g(subset)f(of)g(the)h(instances)f (managed)h(by)f(its)g(corresponding)f(TKS,)i(so)g(the)f(SKS)i(may)f(be) g(thought)e(of)i(as)f(the)0 788 y(`client-side')e(kernel)i(server.)h (There)f(may)g(be)g(many)g(SKSs)f(corresponding)f(to)i(any)f(single)f (TKS,)i(but)f(there)h(may)g(only)0 851 y(be)i(one)f(SKS)i(for)e(each)i (TKS)e(in)h(any)f(one)h(address)f(space.)19 b(All)13 b(inter-address-space)g(communication)f(is)h(between)h(a)0 913 y(SKS)e(and)f(its)f(corresponding)f(TKS.)0 1048 y Fn(14.2.0.2)22 b(Creating)15 b(Ports)62 1155 y Fs(Selection)c(of)g (security)g(mechanisms)g(for)h(access)f(to)g(instance)g(operations)f (is)g(done)h(by)g(calls)g(to)g(the)g(ILU)g(kernel)h(on)0 1217 y(the)g(server)h(side)e(which)h(create)h(`ports')e(on)h(true)g (kernel)h(servers.)h(Each)f(port)e(describes)h(a)h(particular)e (communication)0 1279 y(mechanism)h(which)f(SKS's)h(may)g(use)g(in)f (communicating)g(with)g(the)g(TKS.)h(Each)g(port)f(may)h(independently) e(select)h(an)0 1342 y(RPC)j(protocol)e(and)h(transport)f(stack,)i(and) f(\(if)g(the)g(transport)f(stack)h(includes)f(the)h(security)f (transport)g(layer\))i(identify)0 1404 y(which)c(security)g(mechanism)h (to)g(use,)g(and)f(which)h(server-side)f(identity)f(to)i(use)f(in)h (establishing)d(security)i(contexts)f(via)0 1466 y(that)14 b(security)f(mechanism.)21 b(Communication)14 b(with)f(that)h(TKS)g(by) g(any)g(of)h(its)e(corresponding)g(SKS's)i(may)f(then)g(be)0 1528 y(accomplished)f(through)f(any)h(of)g(the)h(ports)e(on)h(the)g (TKS.)h(In)g(the)f(call)g(to)g(create)h(a)g(port,)g(the)f(server-side)g (application)0 1591 y(code)c(passes)g(a)h(passport)e(containing)g(an)h (ILU)h(GSS)g(identity,)e(which)h(is)g(used)f(as)i(the)f(identity)f(of)h (the)g(principal)g(offering)0 1653 y(the)i(service,)g(and)g(put)g(into) f(the)h(connection)f(information)g(in)g(the)h(string)f(binding)f (handle)i(of)g(objects)f(on)h(that)g(server.)0 1787 y Fn(14.2.0.3)22 b(Client)15 b(Connections)g(to)g(Ports)62 1895 y Fs(When)g(a)h(client)e(decides)g(to)h(use)g(a)g(particular)g (object,)g(it)g(consults)e(the)i(string)f(binding)f(handle)h(of)h(the)g (object)g(to)0 1957 y(discover)9 b(communication)f(parameters)i(for)g (that)f(object,)g(including)f(the)h(parameters)h(of)g(the)f(various)g (ports)f(of)i(the)f(TKS)0 2019 y(for)j(the)f(object.)i(The)f(client)f (then)g(creates)h(a)g(SKS)g(for)g(the)g(TKS,)g(if)g(one)f(does)h(not)f (already)g(exist)g(in)h(its)e(address)i(space,)0 2081 y(and)k(indicates)e(which)h(types)g(of)h(communication)f(channels)g(it) g(wishes)g(to)g(use.)26 b(A)16 b(communication)e(channel)i(is)f(an)0 2144 y(abstraction)8 b(which)h(incorporates)g(the)g(notions)f(of)i(RPC) g(protocol)f(\(say,)h(the)f(OMG)h Ft(IIOP)p Fs(,)h(though)d(others)h (are)h(possible)0 2206 y(with)h(ILU\),)h(message)h(transport)d(\(say,)j (TCP/IP\),)g(and)f(possible)e(message)i(transformations)f(such)g(as)h (compression)f(or)0 2268 y(security.)20 b(Note)14 b(that)g(TKS's)g(can) h(force)g(a)f(particular)g(communication)f(channel)h(type)g(by)g (either)g(only)f(opening)g(one)0 2330 y(port,)e(or)g(only)f(telling)g (this)g(particular)g(client)h(about)f(one)h(of)g(its)g(ports.)62 2421 y(When)22 b(a)g(client)g(opens)f(a)h(communications)f(channel)g (of)i(a)f(particular)f(type,)k(the)d(SKS)g(initialization)d(code)0 2483 y(automatically)9 b(creates)i(the)f(proper)g(RPC)i(protocol)d (object)g(and)h(transport)g(layer)g(stack)g(on)g(the)g(client)g(side,)g (initializing)0 2545 y(each)20 b(layer)h(in)e(the)h(transport)f(stack)g (as)h(appropriate.)37 b(If)21 b(the)f(transport)e(stack)i(includes)f (the)g(security)g(transport)0 2608 y(layer,)f(it)e(also)g(initializes)f (this)g(layer.)28 b(The)17 b(security)e(transport)h(layer)g(is)g (written)g(against)g(the)g(GSS)h(C)g(API,)h(using)0 2670 y(no)d(extensions.)22 b(The)16 b(initialization)c(code)j(retrieves)g (the)h(client's)e(identity)f(\(from)k(the)e(passport)f(of)h(the)g (client\),)h(the)p eop %%Page: 217 218 217 217 bop 0 -58 a Fs(Chapter)11 b(14:)g(Security)1505 b(217)0 183 y(server's)11 b(identity)e(\(one)h(of)h(the)g(parameters)g (of)g(the)f(port,)h(and)f(passed)g(as)h(a)g(parameter)h(to)e(the)h (secure)g(transport)e(layer's)0 246 y(initialization)d(code\),)k(and)e (the)h(specific)f(security)g(mechanism)i(to)e(use)h(\(specified)f(as)h (a)g(string,)f(which)h(may)g(be)g(either)f(the)0 308 y(GSS-specified)i(string)g(form)h(of)g(the)f(security)g(mechanism)g (OID,)h(or)g(an)g(ILU)f(nickname)h(for)f(it)h(\(an)f(optional)f (feature\)\).)0 370 y(The)h(init)e(code)i(then)f(calls)g Ft(gss_init_sec_context\(\))f Fs(with)h(the)h(client)e(credentials,)i (the)f(server)h(identity,)f(and)g(the)0 432 y(security)g(mechanism.)i (Any)f(context)f(token)g(output)f(by)i(that)f(call)h(is)g(passed)f (through)g(the)g(lower-level)h(transport)e(layers)0 495 y(to)14 b(the)g(TKS,)h(where)g(it)f(is)g(passed)g(to)g Ft(gss_accept_sec_context\(\))p Fs(.)20 b(Any)14 b(return)g(token)g(is) g(passed)g(back,)i(etc,)0 557 y(until)9 b(the)h(security)f(context)g (is)h(established.)g(This)f(sequence)h(of)g(messages)g(is)g(called)g (the)g(security)g(context)f(handshake.)62 647 y(Note)15 b(that)g(at)h(this)e(time,)j(and)e(in)g(all)g(future)g(uses)g(of)h(the) f(channel,)h(the)g(actual)f(transport)f(mechanism,)j(TCP/IP,)0 710 y(is)f(used)f(only)g(to)h(convey)f(GSS)i(tokens)e(back)h(and)f (forth,)j(typically)c(with)h(some)h(simple)g(record-marking)g(protocol) 0 772 y(which)d(may)i(either)f(be)g(provided)f(by)h(the)g(particular)g (wire)g(format)g(of)h(the)f(security)f(mechanism)h(\(if)h(any\),)g(or)f (via)g(an)0 834 y(additional)c(optional)g(record)i(marking)g(layer)g (between)g(the)f(security)g(layer)h(and)g(the)g(TCP/IP)g(layer.)i(No)e (recognizable)0 896 y(RPC)g(messages)f(are)h(ever)g(sent)e(on)h(the)g (TCP/IP)h(connection.)0 1031 y Fn(14.2.0.4)22 b(Calls)62 1138 y Fs(After)15 b(the)e(client)h(has)g(opened)f(a)i(channel)f(to)f (the)h(TKS,)h(calls)e(may)i(be)f(made)h(on)f(objects)f(in)h(that)f (TKS.)i(When)f(a)0 1201 y(call)g(is)f(made,)i(the)f(client)e(calls)i (down)e(into)h(the)h(marshalling)e(stubs)g(with)h(an)h(indication)e(of) h(which)g(channel)h(is)f(to)g(be)0 1263 y(used)h(for)h(the)g(call.)22 b(If)15 b(no)g(port)f(is)g(specified,)h(the)g(SKS)g(makes)g(the)g (choice)f(according)g(to)h(simple)f(defaulting)f(rules.)0 1325 y(Typically,)c(a)i(SKS)g(has)f(only)f(one)h(channel)g(open)g(to)f (its)h(TKS,)g(and)g(the)g(client)g(accepts)g(it)g(by)g(default.)g(The)g (marshalling)0 1388 y(stubs)h(build)g(up)h(the)h(appropriate)e(RPC)j (message,)f(and)g(dispatch)e(it,)h(either)h(whole)e(or)i(in)f (fragments,)h(to)f(the)g(top)g(layer)0 1450 y(of)g(the)g(transport)g (stack.)i(For)f(the)f(purpose)f(of)i(this)e(discussion)f(we'll)i(use)g (the)g(term)h(fragment,)g(but)f(it)f(is)h(important)g(to)0 1512 y(remember)i(that)d(a)i(whole)e(message)h(is)g(also)g(a)g(valid)f (`fragment'.)k(Each)e(layer)f(of)g(the)g(transport)f(stack)h (transforms)f(the)0 1574 y(fragment)h(in)f(some)h(way,)g(and)g(passes)f (it)g(to)h(the)f(next)h(lower)f(layer.)i(In)f(particular,)g(the)f (security)g(transport)g(layer)h(takes)0 1637 y(the)d(fragment)i(and)e (applies)g Ft(gss_wrap\(\))g Fs(to)g(it,)h(using)f(the)g(security)g (context)g(that)g(was)g(negotiated)g(when)g(the)h(channel)0 1699 y(was)h(set)f(up.)h(The)g(wrap)g(procedure)g(may)g(perform)g (either)g(message)g(integrity)e(on)h(the)h(fragment,)g(or)g(message)g (privacy,)0 1761 y(or)j(both.)k(This)13 b(produces)g(a)i(GSS)f(data)g (token,)g(which)f(is)g(passed)g(to)h(the)f(next)h(lowest)e(layer)i(for) g(possible)e(additional)0 1823 y(transformation)f(and)h(eventual)f (transport)g(to)g(the)h(TKS.)h(On)e(the)h(true)g(side,)g(the)g(stack)f (is)h(reversed;)g(a)g(GSS)h(data)f(token)0 1886 y(coming)h(in)g(is)f (passed)h(to)g Ft(gss_unwrap\(\))p Fs(,)g(which)f(either)h(verifies)g (the)g(message)g(integrity)f(check,)i(or)f(decrypts)f(the)0 1948 y(token)e(to)h(produce)g(a)g(fragment,)h(or)f(both,)g(and)g(sends) f(it)h(up)g(to)g(the)f(next)h(highest)f(level.)0 2099 y Fu(14.3)29 b(Using)16 b(the)f(GSS)g(Transport)f(Filter)62 2206 y Fs(To)g(use)f(GSS)i(security)e(in)g(an)h(ILU)g(application,)f (either)g(client)g(or)h(server,)h(your)e(ILU)h(installation)d (configuration)0 2268 y(must)h(have)g(included)f(the)h(GSS)h(transport) e(filter.)k(You)d(will)f(also)h(need)g(an)h(implementation)e(of)h(the)g (GSS,)h(with)f(the)g(C)0 2330 y(API)g(specified)e(in)h(the)f(now)h (obsolete)f(internet)g(draft)h(`)p Fp(ILUSRC)t Ft (/GSS/doc/draft-ietf-cat-gssv2-cbind-)0 2393 y(01.txt)p Fs('.)g(The)g(ILU)g(distribution)d(comes)j(with)f(such)h(an)g (implementation,)f(in)h(the)f(directory)h(`)p Fp(ILUSRC)t Ft(/GSS/)p Fs(',)g(and)0 2455 y(will)f(build)g(and)h(use)g(this)f (implementation)g(unless)g(another)g(is)h(explicitly)e(specified)i(at)g (configuration)e(time.)62 2545 y(To)14 b(export)g(an)g(object)g(via)g (a)g(secure)h(connection,)f(the)g(true)g(module)g(will)f(need)h(to)g (\(1\))g(establish)f(an)h(identity)e(via)0 2608 y(some)j(GSS)f(scheme,) j(and)d(\(2\))g(create)h(a)g(true)f(kernel)h(server)f(with)g(a)g(port)g (that)g(uses)g(the)g(GSS)h(transport)e(filter)h(in)g(its)0 2670 y Ft(tinfo)d Fs(stack.)g(In)g(this)f(discussion,)f(we'll)i(use)g (the)g(ANSI)g(C)h(mappings)e(and)h(funtions.)p eop %%Page: 218 219 218 218 bop 0 -58 a Fs(Chapter)11 b(14:)g(Security)1505 b(218)62 183 y(To)11 b(establish)e(an)i(identity,)e(the)h(true)h (module)f(must)h(first)f(acquire)g(GSS)i(credentials)d(for)i(some)g (identity)e Ft(+)i Fs(security-)0 246 y(mechanism)g(pair;)g(see)h(the)e (documentation)g(on)h(the)g(GSS)g(in)g(`)p Fp(ILUSRC)t Ft(/GSS/doc/)p Fs(')g(to)g(see)g(how)g(to)g(do)g(this,)f(or)h(take)0 308 y(a)k(look)f(at)h(the)g(code)f(in)h(`)p Fp(ILUSRC)t Ft(/examples/test1/srvr.c)p Fs('.)21 b(Then)15 b(the)f(module)h(will)e (create)j(an)f(ILU)g Fp(GSS)0 370 y(identity)p Fs(,)f(by)h(calling)f (the)h(C)g(API)h(function)d Ft(ILU_C_AcquireGSSIdentity)p Fs(.)21 b(This)14 b(identity)f(must)i(be)g(placed)g(in)0 432 y(an)g(ILU)f(passport,)g(by)h(calling)e(either)h(of)h(the)f (functions)f Ft(ILU_C_CreatePassport)g Fs(or)h Ft(ILU_C_AddIdentity)p Fs(.)0 495 y(The)g(server)g(module)f(then)h(creates)g(a)g(TKS)g(by)g (calling)f Ft(ILU_C_InitializeServer)p Fs(,)g(passing)f(in)i(as)g (parameters)0 557 y(a)f(transport)f(info)h(list)e(which)i(includes)e (the)i(GSS)g(transport)f(filter,)i(and)e(the)h(passport.)j(A)d (suitable)e(transport)h(info)g(list)0 619 y(should)g(contain)h(a)h (record-marking)g(layer)g(immediately)f(below)g(the)h(GSS)g(transport)f (filter,)h(and)g(may)g(need)g(another)0 681 y(record-marking)19 b(layer)f(above)h(the)f(GSS)h(transport)f(filter,)i(depending)e(on)g (the)g(RPC)i(protocol)d(being)h(used.)34 b(For)0 744 y(example,)12 b(if)e(the)h(protocol)f(being)g(used)g(is)h Ft(sunrpc)p Fs(,)g(an)g(appropriate)f(transport)g(info)g(list)g(would)g (be)h Ft({)g("sunrpcrm",)0 806 y("gss_1_Xerox.ILU.GSS.NIL",)e ("sunrpcrm",)h("tcp_0_0")h(})p Fs(.)16 b(For)e(the)e(CORBA)i Ft(IIOP)p Fs(,)f(which)g(does)f(not)0 868 y(need)j(a)h(record-marking)f (layer)h(below)e(it,)i(a)g(suitable)e(layering)h(would)f(be)h Ft({)c("gss_1_Xerox.ILU.GSS.NIL",)0 930 y("sunrpcrm",)f("tcp_0_0")h(})p Fs(.)62 1054 y(You)h(will)f(note)g(that)h(there)g(are)h(two)e (parameters)i(in)e(the)h(transport)f(info)h(string)e(for)j(the)f(GSS)g (transport)f(filter,)h Ft("1")0 1116 y Fs(and)h Ft("Xerox.ILU.GSS.NIL") p Fs(.)i(The)e(first)f(is)g(the)h(ILU)g(version)f(number)h(of)f(the)h (GSS)h(transport)d(filter;)i(the)g(second)0 1178 y(identifies)g(the)i (security)e(mechanism)i(being)f(used)h(`behind')f(the)g(GSS)h(shell.)22 b(This)14 b(security)f(mechanism)i(identifier)0 1240 y(is)j(typically)f(specified)h(as)g(a)h(dotted-decimal)f (representation)f(for)i(the)f(ISO)h(OID)f(for)h(that)f(security)g (mechanism.)0 1303 y(For)d(example,)h(to)f(specify)f(the)g(Kerberos)h (5)g(security)e(mechanism,)k(you)d(would)f(use)i(the)f(string)g Ft("1.3.5.1.5.2")p Fs(,)0 1365 y(which)e(is)g(the)h(assigned)f(OID)g (for)h(the)g(Kerberos)g(5)f(security)g(mechanism.)17 b(The)c(GSS)g(transport)f(filter)g(can)h(recognize)0 1427 y(a)23 b(small)g(number)g(of)g(nicknames)g(for)g(security)f (mechanisms)h(\(currently)f(just)g Ft("Xerox.ILU.GSS.NIL")f Fs(and)0 1490 y Ft("Xerox.ILU.GSS.SSL")p Fs(\).)27 b(You)17 b(should)e(consult)h(your)g(GSS)i(implementation)d(to)i(see)g(what)g (specific)f(security)0 1552 y(mechanisms)11 b(are)h(supported,)e(and)h (what)g(the)g(ISO)g(OIDs)g(for)g(them)h(are.)62 1675 y(When)g(the)f(client)g(makes)g(a)h(call)g(on)f(an)g(object)g(exported) g(via)g(a)h(secure)g(channel,)g(the)f(client)g(may)h(have)f(to)g (provide)0 1737 y(an)17 b(identity)d(of)j(its)e(own,)j(if)f(the)f (security)f(mechanism)i(selected)f(by)g(the)h(true)f(module)g(requires) g(one.)28 b(To)16 b(do)g(this,)0 1800 y(the)f(client)f(performs)h(the)f (same)i(steps)e(the)g(true)h(module)g(went)f(through:)j(calling)c(the)i (GSS)g(to)g(acquire)g(credentials,)0 1862 y(and)j(then)g(calling)g(the) g(ILU)g(kernel)h(to)f(create)h(a)g(passport)e(containing)g(a)i(GSS)g (identity.)31 b(The)19 b(client)f(passes)f(the)0 1924 y(passport)12 b(in)h(a)g(language)g(specific)g(way,)h(when)f(making)f (the)h(call.)18 b(For)c(the)e(ILU)i(C)f(bindings,)f(the)h(client)g (should)e(call)0 1986 y Ft(ILU_C_SetPassportContext)p Fs(,)g(before)h(making)g(the)g(call.)j(If)e(the)f(object)f(has)h(been)h (exported)e(via)h(a)h(secure)f(port,)0 2049 y(the)h(first)g(call)g(on)g (the)g(object)g(will)f(result)h(in)g(the)g(client)g(address)g(space)g (negotiating)e(a)j(secure)g(channel)f(to)g(the)g(server)0 2111 y(address)f(space,)h(using)e(the)h(identities)f(passed)g(in)h(by)g (the)g(client,)h(and)f(provided)f(at)h(port)g(creation)g(time)g(by)g (the)h(server.)0 2173 y(Subsequent)d(calls)h(on)f(that)h(object)f(will) h(use)f(the)h(same)h(security)e(context)h(and)g(identities.)62 2296 y(In)25 b(the)f(true)g(method)g(code)g(for)g(an)h(object)e (exported)h(via)g(a)h(secure)f(channel,)k(the)c(GSS)h(identity)d(of)i (the)0 2359 y(caller)h(will)e(be)i(available)f(in)g(the)g Ft(callerPassport)f Fs(field)i(of)f(the)g Ft(ILU_C_ENVIRONMENT)g Fs(parameter)h(for)0 2421 y(the)j(call;)37 b(in)28 b(C,)h(use)f(the)h (function)e Ft(ILU_C_CallerIdentity)g Fs(call)h(to)g(retrieve)g(the)h (caller's)f(passport,)0 2483 y(then)23 b(use)g(the)h Ft(ILU_C_FindIdentity)e Fs(function)g(to)h(obtain)g(a)h(GSS)g(identity) e(from)i(the)f(passport,)j(and)d(the)0 2545 y Ft (ILU_C_DecodeGSSIdentity)14 b Fs(function)g(or)i(the)f Ft(ILU_C_DisplayIdentity)f Fs(function)g(to)h(display)f(it.)25 b(\(Note)0 2608 y(that)17 b(the)h Ft(ILU_C_GSSNameToString)e Fs(function)g(is)h(provided)g(as)h(a)g(convenience.\))31 b(The)17 b(true)h(method)f(can)h(use)0 2670 y(this)i(identity)e(to)j (do)f(authorization,)i(accounting,)g(and)e(other)h (application-specific)d(security)i(functions.)38 b(If)21 b(the)p eop %%Page: 219 220 219 219 bop 0 -58 a Fs(Chapter)11 b(14:)g(Security)1505 b(219)0 183 y(security)15 b(mechanism)i(doesn't)e(require)i(an)f (identity)e(from)j(the)f(caller,)i(the)e(special)g(GSS)h(identity)d(of) j Ft(anonymous)0 246 y Fs(\()p Ft("2.16.840.1.113687.1.2.1:<*)9 b(anonymous)i(*>")p Fs(\))g(will)f(be)h(passed)g(as)g(the)g(GSS)g (identity)f(for)h(the)g(caller.)0 370 y Fo(14.3.1)25 b(GSS)15 b(Namespace)h(Schemes)62 474 y Fs(The)23 b(GSS)g(system)f (allows)f(many)i(different)f(namespace)h(schemes)g(to)f(co-exist,)j (though)c(specific)h(security)0 536 y(mechanisms)14 b(may)g(require)f (the)h(use)f(of)h(specific)f(namespace)h(schemes.)19 b(As)14 b(of)f(release)h(2.0alpha13,)g(the)f(following)0 598 y(namespace)f(schemes)f(are)h(supported)e(in)g(ILU:)37 686 y Fr(\017)30 b Ft(ANONYMOUS)12 b Fs(--)i(required)f(by)g(the)f(GSS) i(specification,)e(this)g(namespace)i(scheme)g(allows)e(only)g(a)h (single)f(name,)90 748 y(for)f(the)g(anonymous)f(identity.)g(The)h(OID) g(for)g(this)f(scheme)i(is)f(2.16.840.1.113687.1.2.1.)37 823 y Fr(\017)30 b Ft(RFC822)11 b Fs(--)h(allows)f(names)h(specified)e (in)h(simplified)g(RFC)h(822)f(notation:)f Ft(account@host)p Fs(.)i(The)f(OID)h(for)f(this)90 885 y(namespace)h(scheme)g(is)f (1.2.840.113550.9.1.4.)f(The)i(ILU)f(GSS)h(tranport)e(filter)h(also)g (supports)e(an)j(alias)f(for)g(this)90 947 y(namespace,)h Ft(Xerox.ILU.GSS.RFC822)p Fs(.)37 1022 y Fr(\017)30 b Ft(X509)17 b Fs(--)h(Uses)g(X.509)f(identifiers)f(as)h(names.)32 b(The)17 b(OID)h(for)f(this)g(scheme)h(is)f(1.2.840.113550.9.1.2.)29 b(The)90 1084 y(ILU)17 b(GSS)i(transport)d(filter)h(also)g(supports)f (an)i(alias)f(for)g(this)g(namespace,)j Ft(Xerox.ILU.GSS.X509)p Fs(.)29 b Fp(This)90 1146 y(mechanism)12 b(is)f(not)g(available)g(in)h (the)f(freeware)i(version)e(of)h(ILU,)g(due)f(to)h(U.)g(S.)g(export)f (control)g(considerations.)90 1209 y(Xerox)g(users)g(of)g(ILU)g(may)h (apply)e(to)h Ft(ilu-core@parc.xerox.com)e Fp(for)i(a)h(copy.)0 1333 y Fo(14.3.2)25 b(GSS)15 b(Security)f(Schemes)62 1437 y Fs(The)k(GSS)g(system)e(allows)h(many)g(different)g(security)g (schemes)h(to)e(co-exist.)30 b(As)17 b(of)g(release)h(2.0alpha13,)g (the)0 1499 y(following)9 b(security)h(schemes)i(are)g(supported)d(in)i (ILU:)37 1586 y Fr(\017)30 b Ft(NIL)18 b Fs(--)g(the)f(NIL)h(security)f (scheme.)31 b(Though)16 b(it)i(exercises)f(most)g(parts)h(of)f(the)h (GSS)g(implementation,)g(this)90 1649 y(scheme)k(is)e(not)g (authenticated)g(via)h(strong)f(cryptography,)i(so)f(provides)f(no)g (real)i(security.)40 b(However,)24 b(it)90 1711 y(does)15 b(successfully)f(transmit)h(RFC)i(822)e(names)i(through)d(a)i (negotiated)e(context.)25 b(The)15 b(OID)h(for)g(this)f(scheme)90 1773 y(is)k(1.2.840.113550.9.1.3.)34 b(The)19 b(ILU)h(GSS)f(transport)f (filter)h(also)g(supports)e(an)j(alias)f(for)g(this)f(namespace,)90 1835 y Ft(Xerox.ILU.GSS.NIL)p Fs(.)37 1910 y Fr(\017)30 b Ft(SSL)23 b Fs(--)g(negotiates)f(a)h(security)g(context)f(using)f (X.509)i(names)g(and)g(SSL-based)g(security.)47 b(Uses)22 b(strong)90 1972 y(cryptography)h(to)g(secure)h(context.)49 b(Requires)24 b(RSAREF)h(and)f(libdes.)48 b(The)24 b(OID)g(for)g(this)f (scheme)i(is)90 2035 y(1.2.840.113550.9.1.1.)45 b(The)23 b(ILU)g(GSS)g(transport)f(filter)g(also)g(supports)f(an)i(alias)f(for)i (this)d(namespace,)90 2097 y Ft(Xerox.ILU.GSS.SSL)p Fs(.)9 b Fp(This)g(security)f(mechanism)h(is)g(not)f(available)g(in)h(the)g (freeware)h(version)e(of)h(ILU,)h(due)f(to)90 2159 y(U.)k(S.)g(export)e (control)h(considerations.)g(Xerox)h(users)e(of)i(ILU)f(may)h(apply)e (to)h Ft(ilu-core@parc.xerox.com)90 2221 y Fp(for)f(a)h(copy.)p eop %%Page: 220 221 220 220 bop 0 -58 a Fs(Chapter)11 b(15:)g(ILU)g(Customization)1303 b(220)0 183 y Fq(15)36 b(ILU)14 b(Customization)0 428 y Fu(15.1)29 b(Introduction)62 539 y Fs(ILU)11 b(includes)e(a)i(number) g(of)g(internal)e(interfaces)i(that)f(allow)g(various)f(functionality)g (of)h(the)h(ILU)f(kernel)h(library)f(to)0 602 y(be)h(replaced)h(by)e (user)h(functionality.)37 696 y Fr(\017)30 b Fs(In)15 b(a)h(single-threaded)e(application,)g(the)h(entire)g(``main)h(loop'')e (can)i(be)f(replaced;)i(in)e(a)h(threaded)f(application,)90 758 y(features)c(of)g(the)g(thread)g(system)g(can)g(be)h(described)e (to)h(the)g(ILU)g(kernel)g(so)g(that)f(the)h(kernel)g(will)f(use)h (them.)37 840 y Fr(\017)30 b Fs(New)14 b(messaging)e(protocols)g(and)i (inter-address-space)f(transport)f(mechanisms)i(can)f(be)h(registered)f (for)h(use)g(by)90 903 y(an)d(application.)37 985 y Fr(\017)30 b Fs(Object)11 b(incarnation)g(routines)g(can)h(be)g(registered)f(for)h (`kernel)g(servers',)h(so)e(that)h(true)g(instances)e(can)j(be)f (created)90 1047 y(on)f(reference,)i(rather)e(than)g(before)g (reference.)37 1129 y Fr(\017)30 b Fs(URL)14 b(parsing)f(routines)f (can)i(be)g(registered)f(for)h(various)f(URL)h(schemes,)h(so)e(that)g (application-specific)f(object)90 1191 y(URLs)f(can)g(be)h(used.)37 1273 y Fr(\017)30 b Fs(New)16 b(identity)f(schemes)h(can)h(be)f (defined)g(and)g(registered)g(with)f(the)h(kernel)g(to)g(support)f (application-specific)90 1335 y(authorization)9 b(and)i(accounting)f (schemes.)37 1417 y Fr(\017)30 b Fs(Handler)11 b(routines)f(can)h(be)g (registered)g(to)g(deal)g(with)f Ft(malloc\(\))h Fs(failures)f(in)h (application-specific)e(ways.)37 1499 y Fr(\017)30 b Fs(Handler)11 b(routines)f(can)h(be)g(registered)g(to)g(perform)g (application-specific)e(actions)h(when)h(errors)h(are)f(signalled.)37 1581 y Fr(\017)30 b Fs(If)14 b(debugging)d(is)h(enabled)h(at)g (configuration)e(time,)j(specific)f(sets)g(of)g(debugging)e(messages)i (can)g(be)g(selected)g(at)90 1644 y(run)e(time,)h(and)f(an)g (application)e(routine)h(can)i(be)f(defined)g(to)f(intercept)h(and)g (handle)f(debugging)g(messages.)0 1770 y(Most)h(of)g(these)g (interfaces)g(are)h(defined)f(in)g(two)g(ILU)g(source)g(files,)g(`)p Fp(ILUSRC)t Ft(/runtime/kernel/iluxport.h)p Fs(')0 1832 y(and)16 b(`)p Fp(ILUSRC)t Ft(/runtime/kernel/iluntrnl.h)p Fs('.)26 b(We)17 b(will)f(not)f(attempt)h(to)h(duplicate)e(that)h (documentation)0 1895 y(here,)j(to)d(avoid)g(the)h(inevitable)e(errors) i(when)g(documentation)e(is)h(provided)g(in)g(two)g(different)h(forms;) j(rather,)e(this)0 1957 y(section)11 b(of)h(the)g(manual)g(will)f (provide)g(sketches)h(of)g(the)g(interfaces,)g(and)g(refer)h(the)f (reader)h(to)f(the)g(appropriate)f(header)0 2019 y(files.)g(For)g(any)g (discrepancies)f(noted)h(between)f(the)h(material)g(here,)h(and)f(the)g (material)g(in)g(the)g(header)g(files,)g(the)g(header)0 2082 y(files)g(should)e(be)i(assumed)g(to)g(the)g(`truth'.)0 2248 y Fu(15.2)29 b(Event)15 b(Loops)g(and)h(Threads)62 2359 y Fs(Every)g(ILU)f(address)h(space)f(uses)h(either)f(real)h (threads,)h(or)e(some)h(sort)f(of)h(event)f(dispatching)f(loop)h(to)g (simulate)0 2421 y(threads.)34 b(ILU)19 b(is)g(thread-safe)g (internally,)h(and)e(by)h(default)f(will)g(continue)g(to)g(check)i(its) e(usage)g(for)i(even)f(when)0 2483 y(event)e(dispatching)e(is)h(used.) 29 b(Since)18 b(many)f(different)g(thread)g(systems)f(and)h(event)g (dispatching)d(loops)i(exist,)i(ILU)0 2545 y(provides)d(interfaces)h (to)g(allow)f(the)h(user)h(to)f(describe)f(the)h(particular)g(one)g (that)g(they're)g(using)f(to)h(the)g(ILU)g(kernel.)0 2608 y(See)g(section)e(Chapter)h(12)g([Threads)g(and)g(Event)f(Loops],) h(page)g(186)g(for)g(more)h(information)e(on)h(these)f(topics.)22 b(See)0 2670 y(`)p Fp(ILUSRC)t Ft(/runtime/kernel/iluxport.h)p Fs(')9 b(for)j(documentation)d(of)j(the)e(interfaces.)p eop %%Page: 221 222 221 221 bop 0 -58 a Fs(Chapter)11 b(15:)g(ILU)g(Customization)1303 b(221)0 183 y Fu(15.3)29 b(RPC)15 b(Protocols)f(and)h(Data)g(Transport) g(Mechanisms)62 292 y Fs(The)c(ILU)g(remote)h(procedure)f(call)g (mechanism)g(operates)g(in)g(layers.)37 384 y Fr(\017)30 b Fs(The)14 b(application,)g(at)h(the)f(highest)f(layer,)j(calls)e (down)f(into)h(language-specific,)g(interface-specific)g(stub)g(code,) 90 446 y(passing)c(language-specific,)g(method-specific)g(values;)37 525 y Fr(\017)30 b Fs(that)20 b(stub)g(code)h(calls)g(down)f(into)g(an) h(interface-independent)e(language-specific)h(runtime)h(layer,)j (passing)90 588 y(method-independent,)9 b(but)i(language-specific)f (values;)37 667 y Fr(\017)30 b Fs(that)18 b(LSR)h(calls)f(down)g(into)f (language-independent,)i(interface-independent)e(ILU)h(`kernel')h (code,)i(passing)90 729 y(simple)11 b(C)g(values;)37 809 y Fr(\017)30 b Fs(the)11 b(kernel)g(calls)g(into)f(the)h(code)g (for)g(a)h(specific)e(RPC)j(protocol,)d(such)h(as)g(ONC)g(RPC,)i (passing)c(C)j(values;)37 888 y Fr(\017)30 b Fs(the)20 b(protocol)f(code)h(calls)f(down)h(into)f(transport-mechanism)g(code,)j (passing)d(`messages')h(as)g(opaque)g(byte)90 951 y(sequences;)37 1030 y Fr(\017)30 b Fs(the)14 b(transport)e(code,)j(which)e(may)i (consist)d(of)i(several)g(layers,)h(may)f(perform)h(various)d (transformations)h(on)g(the)90 1092 y(messages,)e(and)g(finally)f (conveys)h(them)g(to)g(the)g(peer)g(transport)f(layers.)0 1214 y(ILU)j(includes)f(registration)f(mechanisms)i(to)f(allow)g (applications)f(to)i(add)f(to)h(the)f(kinds)g(of)h(RPC)h(protocols)d (and)i(data)0 1276 y(transport)d(mechanisms)h(that)g(can)g(be)g(used.)0 1415 y Fo(15.3.1)25 b(RPC)16 b(Protocols)62 1523 y Fs(Each)i Ft(ilu_Protocol)f Fs(object)g(reflects)h(a)g(particular)f(mapping)g(of) g(the)h(abstract)f(ILU)h(RPC)h(protocol)d(onto)h(a)0 1586 y(specific)d(externally-defined)f(RPC)i(protocol.)20 b(\(See)15 b(Section)f(13.2.5)g([Protocols)f(and)h(Transports],)g(page) h(211)e(for)i(a)0 1648 y(discussion)c(of)j(the)f(abstract)g(ILU)g (protocol,)g(and)h(how)f(it)f(is)h(mapped)h(to)f(the)g(ONC)h(RPC)g (protocol,)g(and)f(to)g(the)g(XNS)0 1710 y(Courier)e(protocol.\))62 1802 y(New)d(RPC)h(message)f(protocols)f(can)h(be)g(added)f(to)h(the)g (ILU)f(kernel)h(by)g(writing)e(a)i(new)g Ft(ilu_Protocol)f Fs(object,)h(and)0 1864 y(calling)h(the)h(ILU)g(kernel)h(function)e Ft(ilu_RegisterProtocol\(\))p Fs(.)g(register)h(it.)g(The)h(structure)e (and)h(requirements)g(of)0 1927 y(an)28 b Ft(ilu_Protocol)f Fs(object)g(are)h(defined)f(in)h(the)f(file)h(`)p Fp(ILUSRC)t Ft(/runtime/kernel/iluprotocol.h)p Fs(';)0 1989 y(the)h(methods)g(of)h (the)f(protocol)g(are)h(considered)f(to)g(be)g(`inside')g(the)g(ILU)h (kernel,)k(and)c(must)f(therefore)0 2051 y(conform)h(to)f(all)h(ILU)f (locking)g(and)g(error)h(conventions.)66 b(The)29 b(locking)f (conventions)g(are)i(discussed)f(in)0 2113 y(`)p Fp(ILUSRC)t Ft(/runtime/kernel/iluxport.h)p Fs(';)9 b(the)i(error)h(conventions)d (are)j(documented)e(in)0 2176 y(`)p Fp(ILUSRC)t Ft (/runtime/kernel/iluerror.h)p Fs(',)g(and)h(pre-defined)g(errors)g(are) h(documented)e(in)0 2238 y(`)p Fp(ILUSRC)t Ft (/runtime/kernel/iluerrs.h)p Fs('.)62 2330 y(Various)h(examples)g(of)g (ILU)g(protocols)e(are)j(available)f(for)g(study:)37 2422 y Fr(\017)30 b Fs(the)11 b(ONC)g(RPC)i(mapping)d(\(`)p Fp(ILUSRC)t Ft(/runtime/kernel/sunrpc.c)p Fs(')37 2501 y Fr(\017)30 b Fs(the)11 b(XNS)g(Courier)g(protocol)f(\(`)p Fp(ILUSRC)t Ft(/runtime/kernel/courier.c)p Fs('\))37 2581 y Fr(\017)30 b Fs(the)11 b(OMG)g(Internet)g(Inter-Orb)g(Protocol)f (\(`)p Fp(ILUSRC)t Ft(/runtime/kernel/iiop.c)p Fs('\))37 2660 y Fr(\017)30 b Fs(the)11 b(World)f(Wide)h(Web)g(Hyper-Text)g (Transport)f(Protocol)g(\(`)p Fp(ILUSRC)t Ft(/runtime/kernel/http.c)p Fs('\))p eop %%Page: 222 223 222 222 bop 0 -58 a Fs(Chapter)11 b(15:)g(ILU)g(Customization)1303 b(222)0 183 y Fo(15.3.2)25 b(Transport)15 b(Filters)62 290 y Fs(In)10 b(general,)h(ILU)e(protocols)g(form)h(`messages')g (consisting)d(of)j(sequences)f(of)h(bytes,)g(which)f(are)i(then)e (passed)g(to)g(the)0 352 y(ILU)h(transport)e(layer)i(to)f(be)h (conveyed)f(to)g(another)g(address)h(space.)h(The)e(transport)g(layer)h (itself)e(is)i(composed)f(of)h(one)f(or)0 414 y(more)g(ILU)g Fp(transport)e(filter)t Fs(s,)h(each)h(of)g(which)e(handles)h(the)g (message)h(in)f(turn.)i(These)e(filters)g(are)h(either)f(communication) 0 477 y(filters,)k(such)f(as)i(the)e(filters)h(which)f(actually)g (convey)h(messages)g(via)f(TCP/IP)i(or)f(UDP/IP,)h(or)f(transformation) f(filters,)0 539 y(which)g(alter)h(the)g(message)g(and)f(pass)h(it)f (to)h(another)f(transport)g(filter,)h(such)f(as)h(the)f(ONC)h(RPC)h (record-marking)f(filter,)0 601 y(or)f(the)g(secure)h(transport)e (filter.)62 691 y(Each)g(transport)e(filter)g(is)h(either)g Fp(reliable)i Fs(or)e Fp(unreliable)p Fs(.)h(All)f(transformation)f (filters)g(are)i(reliable;)f(communication)0 753 y(filters)15 b(may)h(or)g(may)g(not)f(be)g(reliable.)25 b(A)15 b(communication)g (filter)g(is)g(reliable)g(if)h(it)f(guarantees)g(that)g(any)g(messages) 0 816 y(handed)9 b(to)f(it)h(for)g(transport)f(will)g(be)h(reliably)f (delivered)h(to)f(the)h(other)g(end)g(of)g(the)g(communication)f (connection.)i(This)e(in)0 878 y(turn)i(means)h(that)f(the)g (communication)g(mechanism)h(used)f(by)g(the)g(transport)g(will)f(take) i(care)g(of)g(timeouts,)e(retries,)i(etc.,)0 940 y(internally,)i(so)f (that)h(the)g(ILU)g(application)f(need)h(not)f(worry)h(about)g(these)g (itself.)j(Unreliable)d(communication)f(filters)0 1002 y(are)k(those)f(which)g(may)h(require)g(ILU)g(participation)d(in)i (timeout)g(and)h(resending)e(of)i(messages)g(to)f(achieve)h(reliable)0 1065 y(delivery.)62 1155 y(Each)22 b(filter)g(is)g(also)f(either)h Fp(boundaried)j Fs(or)e Fp(non-boundaried)p Fs(.)42 b(Boundaried)21 b(filters)h(are)g(those)g(which)f(can)0 1217 y(comprehend)d(and)h (preserve)f(message)h(boundaries.)32 b(Non-boundaried)17 b(filters)h(simply)f(deal)i(in)f(chunks)f(of)i(bytes)0 1279 y(and)k(have)g(no)f(way)h(to)f(recognize)h(or)g(preserve)g (message)g(boundaries.)45 b(Various)22 b(protocols)f(and)i(filters)f (may)0 1342 y(have)d(requirements)g(as)g(to)g(whether)f(the)h(next)g (filter)f(below)h(it)f(in)h(the)g(communication)f(stack)h(is)f (boundaried)g(or)0 1404 y(non-boundaried.)62 1494 y(New)30 b(transport)e(filters)h(may)i(be)e(registered)g(with)g(the)h(ILU)f (kernel)h(by)f(calling)g(the)g(kernel)h(function)0 1556 y Ft(ilu_RegisterTransport\(\))p Fs(,)c(described)d(in)h(`)p Fp(ILU)t Ft(/runtime/kernel/iluxport.h)p Fs(',)i(with)d(the)h(name)0 1618 y(of)13 b(a)g(new)g(transport)f(filter)h(and)g(the)f(address)h(of) g(a)g(routine)f(which)h(returns)f(an)h(instance)f(of)h(the)g(new)g (transport)f(object)0 1681 y(type.)25 b(Implementing)15 b(a)h(new)g(transport)e(object)h(type)g(actually)g(consists)f(of)i (implementing)f(several)g(related)h(object)0 1743 y(types,)h(including) e Ft(ilu_TransportCreator)p Fs(,)h Ft(ilu_TransportClass)p Fs(,)h(and)f Ft(ilu_Mooring)p Fs(.)27 b(These)16 b(object)0 1805 y(types)10 b(are)i(defined)f(in)g(the)f(file)h(`)p Fp(ILUSRC)t Ft(/runtime/kernel/ilutransport.h)p Fs('.)62 1895 y(As)21 b(with)g(protocols,)i(the)e(methods)g(of)g(the)g (transport)f(filter)h(are)i(considered)d(to)h(be)h(`inside')e(the)h (ILU)h(ker-)0 1957 y(nel,)28 b(and)d(must)f(therefore)h(conform)g(to)f (all)h(ILU)f(locking)g(and)g(error)i(conventions.)50 b(The)24 b(locking)g(conven-)0 2020 y(tions)g(are)j(discussed)d(in)h(`) p Fp(ILUSRC)t Ft(/runtime/kernel/iluxport.h)p Fs(';)31 b(the)26 b(error)g(conventions)e(are)i(doc-)0 2082 y(umented)f(in)g(`)p Fp(ILUSRC)t Ft(/runtime/kernel/iluerror.h)p Fs(',)j(and)e(pre-defined)f (errors)g(are)i(documented)e(in)0 2144 y(`)p Fp(ILUSRC)t Ft(/runtime/kernel/iluerrs.h)p Fs('.)62 2234 y(Examples)8 b(of)g(transformation)g(fi)o(lters)f(may)h(be)g(fo)o(und)f(in)g(`)p Fp(ILUSRC)t Ft(/runtime/ke)o(rnel/sunrpc)o(rm.c)p Fs(',)f(which)0 2296 y(is)h(a)g(boundaried)g(filt)o(er)g(implementin)o(g)g(ONC)g(RPC's) g(TCP/IP)g(record)g(marking)g(s)o(cheme,)f(and)h(`)p Fp(ILUSRC)t Ft(/runtime/kernel/security.c)p Fs(',)0 2359 y(which)g(is)g(a)g(non-bound)o(aried)g(filt)o(er)g(implementin)o(g)g (message)g(in)o(tegrit)o(y,)e(sender)i(authentication,)f(and)h(message) g(privacy.)0 2421 y(Examples)j(of)g(communication)f(filters)h(may)h(be) f(found)f(in)h(`)p Fp(ILUSRC)t Ft(/runtime/kernel/newtcp.c)p Fs(',)f(which)h(is)g(a)0 2483 y(non-boundaried)d(reliable)g(fil)o(ter)g (impl)o(ementing)f(data)h(communicati)o(on)f(via)h(TCP/IP,)g(`)p Fp(ILUSRC)t Ft(/runtime/kernel)o(/udp.c)p Fs(',)0 2545 y(which)30 b(is)h(a)g(non-boundaried)e(unreliable)h(filter)h (implementing)e(data)i(communication)f(via)h(UDP/IP,)g(and)0 2608 y(`)p Fp(ILUSRC)t Ft(/runtime/kernel/inmem.c)p Fs(',)g(which)c(is) g(a)i(boundaried)d(reliable)i(filter)f(implementing)g(intra-)0 2670 y(address-space)11 b(communication)f(via)h(memory)h(buffers.)p eop %%Page: 223 224 223 223 bop 0 -58 a Fs(Chapter)11 b(15:)g(ILU)g(Customization)1303 b(223)0 183 y Fu(15.4)29 b(Object)14 b(Incarnation)h(Procedures)62 295 y Fs(ILU)h(true)f(objects)f(live)h(in)g Fp(kernel)g(server)t Fs(s,)h(a)g(kernel)f(data)g(structure)g(that)g(handles)f(communication) g(and)i(other)0 357 y(aspects)11 b(of)g(the)g(object)g(implementation.) f(When)h(an)h(object)e(reference)j(is)e(received)g(from)h(another)f (address)g(space,)g(the)0 419 y(kernel)d(server)h(is)f(responsible)f (for)i(mapping)f(this)f(reference)j(to)e(an)h(actual)f(object.)i (Normally,)f(the)f(kernel)g(server)h(simply)0 482 y(consults)14 b(an)h(internal)g(hash)f(table)h(for)h(an)g(object)e(corresponding)g (to)h(a)h(specified)e(`instance)h(handle';)i(however,)f(an)0 544 y(application)9 b(may)j(register)e(an)h(application-specific)e (callback)i(function)f(to)g(be)h(used)g(instead.)f(This)g(allows)g (on-the-fly)0 606 y(creation)i(of)g(objects,)g(which)f(is)h(often)g (vital)f(when)h(handling)e(many)i(objects.)i(Actual)d(in-memory)i (representations)d(of)0 668 y(the)h(objects)f(can)h(be)h (garbage-collected,)f(then)f(dynamically)g(re-incarnated)h(when)g (needed)g(by)g(a)h(client.)62 763 y(The)17 b(application)e(registers)h (this)g(functionality)f(by)h(creating)h(an)g(implementation)e(of)i(an)g Ft(ilu_ObjectTable)0 825 y Fs(object,)25 b(and)e(passing)e(that)h (implementation)f(as)i(a)g(parameter)g(to)f Ft(ilu_CreateTrueServer)f Fs(when)i(creating)0 888 y(the)c(kernel)g(server.)35 b(Typically,)20 b Ft(ilu_CreateTrueServer)e Fs(is)g(called)h(directly)f (only)g(by)h(a)g(language-specific)0 950 y(runtime;)i(the)d(actual)g (application)e(would)h(work)h(with)f(object)h(tables)f(via)h(whatever)g (mechanism)g(is)g(exported)g(by)0 1012 y(the)f(language-specific)e (runtime.)29 b(Check)17 b(the)g(documentation)e(for)i(your)f (particular)h(language)f(runtime)g(for)i(more)0 1074 y(information.)0 1242 y Fu(15.5)29 b(Object)14 b(URLs)62 1354 y Fs(ILU)i(regards)g(string)f(binding)f(handles)h(generically)g (as)h(a)g(way)g(of)g(encoding)f(four)h(pieces)f(of)h(information:)j (the)0 1416 y(instance)11 b(handle)g(for)g(an)h(object,)f(the)h(server) g(ID)f(for)h(an)g(object,)f(the)g(most-specific)g(type)g(ID)h (\(MSTID\))g(for)g(an)g(object,)0 1478 y(and)j(communication)e (information)h(about)g(how)g(to)g(communicate)h(with)f(that)g(object,)h (which)f(we)h(call)g Fp(contact-info)p Fs(.)0 1540 y(It)f(further)f (restricts)g(them)h(to)g(conform)g(to)f(the)h(URL)g(syntax)e(specified) h(in)h(the)f(World)g(Wide)h(Web)g(Consortium)e(and)0 1603 y(IETF)i(standard)e(RFC)j(1738)d(\()p Ft (http://www.w3.org/pub/WWW/Addressing/rfc173)o(8.txt)p Fs(\).)k(But)d(thisstill)0 1665 y(allows)e(ILU)h(to)g(support)f(any)h (number)g(of)h(URL)f(schemes,)h(which)f(we)g(define)g(as)g(some)h(way)f (of)g(encoding)f(these)h(four)0 1727 y(pieces)f(of)g(information)f (which)h(conforms)g(to)f(the)h(URL)h(syntax)e(rules.)62 1822 y(The)h(default)g(URL)g(scheme)h(is)f(called)f Ft(ilu:)p Fs(,)i(and)f(encodes)g(the)f(information)g(as)62 1917 y Ft(ilu:<)p Fp(server-id)p Ft(>/<)p Fp(instance-handle)p Ft(>;<)p Fp(MSTID)p Ft(>;<)p Fp(cont)o(act-info)p Ft(>)0 2012 y Fs(Most)16 b(of)f(these)h(elements)g(consist)e(of)i(US-ASCII)h (strings)d(with)h(various)g(additional)f(constraints.)23 b(The)16 b(strings)f(are)0 2074 y(encoded)g(in)f(what)h(is)f(called)h (the)g Fp(SBH)h(element)f(encoded)f(form)s Fs(:)20 b(the)15 b(set)f(of)h(alphanumeric)g(characters)h(plus)e(the)g(4)0 2136 y(characters)d(DOLLAR)f(\(`)p Ft($)p Fs('\),)h(HYPHEN)f(\(`)p Ft(-)p Fs('\),)h(PERIOD)g(\(`)p Ft(.)p Fs('\),)h(and)e(PLUS)g(\(`)p Ft(+)p Fs('\))h(are)g(represented)f(by)g(the)g(character)0 2199 y(itself;)15 b(other)e(characters)i(are)g(escaped)f(via)g(the)g (mechanism)h(specified)e(in)h(RFC)i(1738:)g(each)e(is)g(represented)g (with)f(3)0 2261 y(characters,)f(a)f(PERCENT)g(\(`)p Ft(\045)p Fs('\))h(character)f(followed)f(by)g(two)h(hexadecimal)f (digits)g(giving)f(the)h(US-ASCII)i(character)0 2323 y(code)f(for)h(the)e(escaped)i(character.)62 2418 y(The)19 b(non-encoded)e(form)i(of)f(the)g Ft(<)p Fp(server-id)p Ft(>)g Fs(and)h Ft(<)p Fp(instance-handle)p Ft(>)d Fs(strings)h(may)i (contain)e(any)h(character)0 2480 y(except)11 b(for)g(US-ASCII)i(NUL.) 62 2575 y(The)e(non-encoded)f(form)i(of)f(the)g Ft(<)p Fp(MSTID)p Ft(>)h Fs(consists)d(of)i(the)g(following)62 2670 y Ft(<)p Fp(type-id-scheme)p Ft(>:<)p Fp(type-id)p Ft(>)p eop %%Page: 224 225 224 224 bop 0 -58 a Fs(Chapter)11 b(15:)g(ILU)g(Customization)1303 b(224)0 183 y(where)24 b(the)f Ft(<)p Fp(type-id-scheme)p Ft(>)g Fs(consists)e(of)j(US-ASCII)g(alphanumeric)f(characters,)k(and)d (any)f(constraints)f(on)0 246 y Ft(<)p Fp(type-id)p Ft(>)10 b Fs(are)i(specified)e(by)h(the)g Ft(<)p Fp(type-id-scheme)p Ft(>)p Fs(.)62 334 y(The)i Ft(<)p Fp(contact-info)p Ft(>)e Fs(is)h(not)g(encoded)g(in)h(the)f(same)h(way)g(as)g(the)f(other)g (fields.)j(Rather,)f(it)e(consists)f(of)i(a)g(series)f(of)0 396 y(communication)i(info)g(fields,)h(separated)f(by)g(SEMICOLON)h (\(`)p Ft(;)p Fs('\))g(characters.)23 b(Each)14 b(communications)g (info)g(field)0 458 y(has)d(the)g(form)62 546 y Ft(<)p Fp(protocol-info)p Ft(>@<)p Fp(transport)o(-layer)p Ft(>[=<)p Fp(trans)o(port-l)o(ayer)p Ft(>...])0 635 y Fs(where)k(each)g(of)g(the) f Ft(<)p Fp(protocol-info)p Ft(>)e Fs(and)j Ft(<)p Fp(transport-layer)p Ft(>)e Fs(elements)h(contain)g(SBH)h(element-encoded)f(strings.)0 697 y(The)j(non-encoded)f(form)h(of)g(these)g(strings)f(has)g(an)h (additional)e(constraint:)21 b(each)d(must)f(begin)f(with)g(the)g(name) i(or)0 759 y(identifier)c(for)h(the)g(protocol)f(or)h(transport)f (layer)h(it)f(specifies,)i(optionally)d(followed)g(by)i(an)g (UNDERSCORE)h(\(`)p Ft(_)p Fs('\))0 821 y(character)e(and)f(any)g (parameters)h(for)f(the)g(protocol)f(or)h(transport.)k(The)c(name)h(of) f(the)g(protocol)f(or)h(transport)f(may)i(not)0 884 y(contain)e(any)g (UNDERSCORE)h(\(`)p Ft(_)p Fs('\))g(characters.)j(There)d(are)g(no)g (additional)d(ILU)j(constraints)d(on)j(the)f(formats)h(used)0 946 y(to)e(represent)g(parameters)g(for)h(the)f(protocol)f(or)h (transport.)62 1034 y(An)k(application)d(can)j(register)f(a)h(parser)g (for)g(one)f(or)h(more)g(application-specific)d(URL)j(schemes)g(by)f (calling)f(the)0 1096 y(function)f Ft(ilu_RegisterSBHParser)p Fs(.)17 b(It)c(takes)g(as)g(an)h(argument)f(a)h(function)e(which)h (will)f(accept)i(a)g(URL)f(string,)0 1159 y(and)d(return)h(the)f(four)g (components)f(required)i(by)f(ILU.)g(For)h(instance,)f(you)g(might)g (want)g(to)g(use)g(a)h(URL)g(scheme)g(for)f(the)0 1221 y(OMG)h(CORBA)h Ft(IIOP)f Fs(something)f(like)62 1309 y Ft(iiop_1_0://<)p Fp(hostname)p Ft(>:<)p Fp(port)p Ft(>/<)p Fp(server-id)p Ft(>)o(/<)p Fp(ih)p Ft(>)0 1397 y Fs(which)f(can)i(be)f(considered)f(to)g(contain)g(an)i(instance)e (handle)g(of)h Ft(<)p Fp(ih)p Ft(>)p Fs(,)g(a)h(server)f(ID)g(of)g Ft(<)p Fp(server-id)p Ft(>)p Fs(,)g(an)g(implicit)f(object)0 1459 y(type)i(of)g Ft(IDL:omg.org/CORBA/Object:1.0)p Fs(,)e(and)i(contact-info)f(of)0 1522 y Ft(iiop_1_0_1@tcp_<)p Fp(hostname)p Ft(>_<)p Fp(port)p Ft(>)p Fs(.)62 1610 y(Or,)h(you)e(might)h(want)f(to)h(use)g(an)g Ft(HTTP)f Fs(URL)i(for)f(an)g(ILU)g(object)f(which)g(is)h(exported)f(via)h(the)f Ft(HTTP)h Fs(ILU)g(protocol.)0 1672 y(Suppose)g(that)h(the)g(normal)g (ILU)g(string)f(binding)f(handle)i(for)g(the)g(object)g(was)62 1760 y Ft(ilu:tcp_1.2.3.4_20000//http_obj0;ilu:Ilu_)o(Http_Type;h)o (ttp_1_0@tc)o(p_1.2.3.4_2)o(0000)0 1848 y Fs(An)g(alternate)g(form)g (which)g(would)f(be)h(compatible)g(with)f(Web)h(browsers)f(would)g(be) 62 1937 y Ft(http://1.2.3.4:20000//http_obj0)0 2025 y Fs(with)16 b(an)i(implicit)d(server)j(ID)f(of)g Ft(tcp_1.2.3.4_20000)p Fs(,)h(an)f(implicit)f(MSTID)i(of)f Ft(ilu:Ilu_Http_Type)p Fs(,)h(an)0 2087 y(instance)10 b(handle)h(of)g Ft(/http_obj0)p Fs(,)g(and)g(contact-info)f(of)h Ft(http_1_0@tcp_1.2.3.4_20000)p Fs(.)62 2175 y(See)h(the)f(`)p Fp(ILUSRC)t Ft (/runtime/kernel/iluxport.h)p Fs(')f(for)h(details)f(on)h(how)f(to)h (use)0 2237 y Ft(ilu_RegisterSBHParser)p Fs(.)0 2378 y Fu(15.6)29 b(Identity)15 b(Types)62 2483 y Fs(As)d(discussed)e(in)i (Section)f(14.1)h([Identities],)f(page)g(212,)h(application-specific)e (identity)g(types)h(can)h(be)g(registered)0 2545 y(with)k(the)g(ILU)h (kernel)f(for)h(use)g(with)e(various)h(authorization)f(and)h (accounting)g(schemes,)i(and)f(to)f(support)f(various)0 2608 y(forms)d(of)f(security)g(in)g(wire)h(protocols)d(and)j (transports.)f(An)g(application)f(does)h(this)f(by)h(creating)h(a)g (new)f(value)g(of)h(type)0 2670 y Ft(ilu_IdentityType)p Fs(,)e(as)h(specified)g(in)f(`)p Fp(ILUSRC)t Ft (/runtime/kernel/iluxport.h)p Fs(',)g(and)h(calling)f(the)g(kernel)p eop %%Page: 225 226 225 225 bop 0 -58 a Fs(Chapter)11 b(15:)g(ILU)g(Customization)1303 b(225)0 183 y(function)10 b Ft(ilu_RegisterIdentityType)p Fs(.)g(After)h(this)g(is)f(done,)i(values)e(of)i(the)f(new)g(identity)f (types)g(may)i(be)f(used.)0 246 y(The)17 b(major)f(use)h(for)g(these)f (identity)f(types)h(is)g(to)g(work)h(together)e(with)h(new)h (application-specific)d(RPC)k(protocols)0 308 y(and)11 b(message)g(transports)f(\(described)h(above\),)g(to)g(implement)g (various)f(security)h(and)g(access)g(policies)f(for)i(distributed)0 370 y(systems.)62 469 y(Note)i(that)g(the)g(mere)i(act)e(of)h (registering)e(a)h(new)h(identity)d(type)i(with)f(the)h(ILU)h(kernel)f (will)f(not)h(cause)g(values)g(of)0 531 y(that)g(identity)g(type)g(to)h (be)g(automatically)f(transmitted)f(in)i(ILU)g(calls.)23 b(This)14 b(will)g(only)g(happen)g(if)h(an)h(appropriately)0 593 y(designed)9 b(transport)h(or)h(protocol,)f(which)g(knows)f(to)h (do)h(this,)f(is)g(also)g(used.)h(For)g(experimental)f(purposes,)g(we)h (provide)0 656 y(a)17 b(switch)e(will)g(will)g(cause)h(the)g(various)f (flavors)h(of)g Ft(Sun)11 b(RPC)16 b Fs(implemented)g(for)g(ILU)g(to)g (automatically)f(pass)g Fp(one)0 718 y Fs(specific)d(identity)f(type.)j (To)f(enable)f(this,)g(set)g(the)g(environment)g(variable)g Ft(ILU_SUNRPC_PREFERRED_IDENTITY)0 780 y Fs(to)f(the)g(name)g(of)h(the) f(identity)e(type)h(to)h(be)g(passed)g(automatically)f(before)h (running)f(any)h(of)g(your)g(ILU)g(programs.)62 879 y(By)g(default,)g (the)f Ft(Sun)h(RPC)g Fs(protocols)e(will)g(automatically)h(pass)g(the) g(UNIX)h(identification)d(of)j(the)f(caller)h(\(the)f(user)0 941 y(id,)17 b(group)f(id,)h(host)f(IP)g(address,)i(and)e(list)f(of)h (groups)f(to)h(which)g(the)g(caller)g(belongs\).)26 b(The)16 b(identity)e(type)i(for)g(this)0 1003 y(information)d(is)i(called)f Ft("SunRPCAuthUnixIdentity")p Fs(.)20 b(To)14 b(prevent)g(its)g(being)g (passed)g(automatically,)g(set)g(the)0 1066 y(environment)c(variable)h Ft(ILU_NO_SUNRPC_UNIX_AUTH)e Fs(to)i(any)g(value)g(before)g(running)f (your)h(ILU)g(programs.)0 1249 y Fu(15.7)29 b(Malloc)15 b(Failure)e(Recovery)62 1364 y Fs(ILU)22 b(uses)g(a)g(number)g(of)g (internal)f(interfaces)h(to)g(allocate)g(and)f(free)i(memory,)j(such)c (as)g Ft(ilu_malloc\(\))p Fs(,)0 1427 y Ft(ilu_free\(\))p Fs(,)g(and)e Ft(ilu_realloc\(\))p Fs(.)38 b(These)20 b(functions)f(wrap)h(calls)g(to)f(the)h(standard)g Ft(malloc\(\))p Fs(,)i(etc.,)i(in)0 1489 y(wrappers)11 b(that)f(allow)h(for)g(better)g (error)h(handling.)e(They)g(are)i(documented)f(in)62 1588 y(`)p Fp(ILUSRC)t Ft(/runtime/kernel/iluxport.h)p Fs('.)0 1686 y(Applications)g(can)j(register)f(callback)h(functions)e (to)h(handle)g Ft(malloc)g Fs(failures,)i(in)e(two)g(ways.)18 b(The)c(kernel)f(function)0 1749 y Ft(ilu_AddFreer\(\))8 b Fs(allows)f(registration)h(of)g(routines)g(which)g(can)h(be)g(called) g(to)f(free)i(up)e(memory,)j(to)d(allow)g(a)i Ft(malloc)0 1811 y Fs(call)f(to)h(succeed.)h(The)e(kernel)g(functions)f Ft(ilu_SetMemFaultAction\(\))g Fs(and)h Ft(ilu_SetMemFaultConsumer\(\)) 0 1873 y Fs(allow)h(applications)f(to)i(determine)g(what)g(action)f (should)g(be)h(taken)g(if)g(a)h Ft(malloc)f Fs(failure)g(occurs.)0 2057 y Fu(15.8)29 b(Error)14 b(Reporting)62 2172 y Fs(ILU)21 b(includes)f(a)h(comprehensive)f(error-signalling)f(system)h(in)h(the)f (kernel)h(library,)i(which)d(is)h(documented)0 2234 y(in)i(`)p Fp(ILUSRC)t Ft(/runtime/kernel/iluerror.h)p Fs('.)45 b(In)23 b(addition,)i(the)d(kernel)h(library)g(contains)e(many)j(calls) 0 2296 y(to)e Ft(_ilu_Assert)p Fs(,)k(which)c(check)h(that)f(various)g (kernel)g(invariants)g(are)h(maintained.)46 b(When)22 b(a)i(runtime)e(as-)0 2359 y(sertion)k(fails,)k(the)d(kernel)f(may)i (either)e(call)h(an)g(application-specified)d(failure)i(handler,)31 b(set)26 b(by)h(a)g(call)g(to)0 2421 y Ft (ilu_SetAssertionFailureConsumer\(\))p Fs(,)19 b(or)g(take)h(one)f(of)g (three)h(default)f(actions,)i(chosen)d(by)i(a)f(call)h(on)0 2483 y Ft(ilu_SetAssertionFailureAction\(\))p Fs(.)c(The)e(three)f (default)g(actions)g(are)h(\(1\))g(to)f(generate)h(an)g(illegal)e (instruc-)0 2545 y(tion)i(trap,)j(and)e(thus)g(coredump;)i(\(2\))f(to)f (exit)g(with)f(some)i(error)g(code;)h(and)e(\(3\))h(to)f(enter)g(an)h (endless)e(loop,)i(calling)0 2608 y Ft(sleep\(\))11 b Fs(repeatedly.)h(The)f(third)f(action)h(is)g(the)g(default)g(action;)f (the)h(intent)f(is)h(to)g(stop)g(the)g(program)g(with)g(all)g(invalid)0 2670 y(data)g(intact)f(on)h(the)g(stack,)g(and)f(network)h(connections) e(intact,)h(so)h(that)f(a)i(debugger)e(may)i(attach)e(to)h(the)g (`live')f(process.)p eop %%Page: 226 227 226 226 bop 0 -58 a Fs(Chapter)11 b(15:)g(ILU)g(Customization)1303 b(226)0 183 y Fu(15.9)29 b(Debugging)15 b(Interfaces)62 287 y Fs(The)22 b(ILU)f(kernel)g(contains)f(a)i(large)f(number)h(of)f (debugging)f(print)g(statements,)k(which)c(document)h(various)0 349 y(things)g(going)h(on)h(inside)e(the)i(kernel.)47 b(The)22 b(specific)h(things)e(printed)h(may)i(be)f(controlled)e(by)i (calling)f(either)0 412 y Ft(ilu_SetDebugLevel\(\))6 b Fs(or)h Ft(ilu_SetDebugLevelViaString\(\))p Fs(.)h(The)g(specific)f (bits)f(which)h(can)g(be)h(specified)0 474 y(to)16 b Ft(ilu_SetDebugLevel\(\))p Fs(,)g(or)h(names)g(which)e(can)i(be)g (specified)e(to)h Ft(ilu_SetDebugLevelViaString\(\))p Fs(,)0 536 y(are)c(documented)e(`)p Fp(ILUSRC)t Ft (/runtime/kernel/iludebug.h)p Fs('.)62 623 y(All)27 b(debugging)f (messages)i(are)g(displayed)e(via)i(calls)f(to)g(the)g(kernel)h (function)e Ft(ilu_DebugPrintf\(\))p Fs(.)0 686 y(Normally,)35 b(this)29 b(routine)g(simply)g(calls)g Ft(vfprintf)11 b(\(stderr,)g(...\))30 b Fs(to)f(actually)h(output)e(the)i(messages.)0 748 y(However,)i(this)27 b(can)i(be)f(changed)f(to)h(call)g(some)g (application-specific)e(message)i(output)e(system)i(by)f(call-)0 810 y(ing)17 b Ft(ilu_SetDebugMessageHandler\(\))p Fs(,)f(documented)h (in)g(`)p Fp(ILUSRC)t Ft(/runtime/kernel/iluxport.h)p Fs('.)0 872 y(Two)i(special)g(values)f(are)i(defined)f(for,)j(and)d (accepted)h(by,)h Ft(ilu_SetDebugMessageHandler\(\))p Fs(;)f(the)g(value)0 935 y Ft(ILU_DEFAULT_DEBUG_MESSAGE_HANDLER)g Fs(causes)i(the)g(debug)g(system)g(to)g(revert)g(to)h(the)f(original)f (output)0 997 y(handler;)15 b(the)e(value)h Ft (ILU_NIL_DEBUG_MESSAGE_HANDLER)d Fs(causes)j(the)g(debug)f(system)g(to) h(simply)f(discard)g(any)0 1059 y(debugging)c(messages.)62 1146 y(Debugging)19 b(output)f(can)j(be)f(directed)g(to)g(a)g(file,)j (by)d(calling)f Ft(ilu_SendDebugOutputToFile\(\))f Fs(with)h(a)0 1209 y(filename)11 b(as)h(an)f(argument.)g(The)g(file)g(will)f(be)i (created,)g(and)f(debugging)e(messages)i(will)f(be)h(written)f(to)h (it.)p eop %%Page: 227 228 227 227 bop 0 -58 a Fs(Chapter)11 b(16:)g(Debugging)e(ILU)i(Programs) 1183 b(227)0 183 y Fq(16)36 b(Debugging)14 b(ILU)g(Programs)62 351 y Fs(This)8 b(document)h(describes)f(some)h(of)g(the)g(common)h (errors)f(that)f(occur)h(with)f(the)h(use)g(of)g(ILU,)h(and)e(some)i (techniques)0 414 y(for)h(dealing)g(with)f(them.)0 576 y Fu(16.1)29 b(C)p Fh(++)16 b Fu(static)e(instance)g(initialization)62 686 y Fs(Our)j(support)e(for)h(C)p Ft(++)h Fs(currently)f(depends)f(on) i(having)e(the)h(constructors)f(for)i(all)f(static)f(instances)h(run)g (before)0 748 y Ft(main\(\))e Fs(is)g(called.)20 b(If)15 b(your)f(compiler)g(or)g(interpreter)g(doesn't)f(support)g(that,)i(you) e(will)h(experience)g(odd)g(behavior.)0 810 y(The)g(C)p Ft(++)g Fs(language)f(does)g(not)g(strictly)f(mandate)i(that)f(this)g (initialization)e(will)h(be)i(performed,)h(but)e(most)h(compilers)0 872 y(seem)h(to)f(arrange)h(things)e(that)h(way.)21 b(We'd)15 b(like)f(to)g(see)h(how)f(many)h(compilers)f Fp(do)g(not)t Fs(;)h(if)g(your's)f(doesn't,)g(please)0 935 y(send)d(a)g(note)g(to)g Ft(ilu-bugs@parc.xerox.com)e Fs(telling)g(us)i(what)g(the)g(compiler)g (is.)62 1028 y(ILU)j(uses)f(the)h(static-object-with-cons)o(tructor)d (trick)i(to)g(effect)i(per-compilation-unit)c(startup)i(code.)19 b(In)14 b(certain)0 1090 y(cases)h(you'll)g(want)g(to)g(ensure)g(that)f (a)i(certain)f(compilation)f(unit's)g(initialization)f(is)i(run)g (before)g(another's.)24 b(While)0 1153 y(C)p Ft(++)16 b Fs(defines)f(no)g(standard)f(way)i(to)f(do)g(this,)g(most)g (compilers)g(work)g(like)g(this:)j(compilation)c(units)g(are)i (initialized)0 1215 y(\(static)23 b(object)g(construtors)f(run\))i(in)f (the)h(order)g(in)f(which)h(they)f(are)h(given)f(to)h(the)f (link-editor.)48 b(We)24 b(\()p Ft(ilu-)0 1277 y(bugs@parc.xerox.com)p Fs(\))10 b(want)g(to)h(hear)h(about)e(any)h(exceptions)f(to)h(this)f (rule.)0 1439 y Fu(16.2)29 b(ILU)16 b(trace)d(debugging)62 1549 y Fs(Note)f(for)g(Windows)f(users:)i(Please)f(refer)h(to)f(the)g (chapter)g Ft(")p Fs(Using)f(ILU)h(with)f(Microsoft)h(Windows)p Ft(")f Fs(to)g(see)i(how)0 1611 y(ILU)e(trace)h(debugging)d(is)i (handled)f(for)h(Windows)f(applications.)62 1705 y(ILU)j(contains)f(a)h (number)g(of)g(trace)g(statements)f(that)g(allow)g(you)h(to)f(observe)g (the)h(progress)f(of)h(certain)g(operations)0 1767 y(within)19 b(the)h(ILU)g(kernel.)39 b(To)20 b(enable)h(these,)h(you)e(can)h(set)f (the)g(environment)f(variable)h Ft(ILU_DEBUG)g Fs(with)f(the)0 1829 y(command)d Ft(setenv)11 b(ILU_DEBUG)f(")p Fp(xxx)r Ft(:)p Fp(yyy)r Ft(:)p Fp(zzz)r Ft(:...")15 b Fs(where)h Fp(xxx)p Fs(,)g Fp(yyy)p Fs(,)g(and)f Fp(zzz)k Fs(are)d(the)f(names)h (of)f(various)0 1892 y(trace)22 b(classes.)44 b(The)22 b(classes)f(are)i(\(as)f(of)g(December)h(1997\))e Ft(packet)p Fs(,)j Ft(connection)p Fs(,)h Ft(incoming)p Fs(,)f Ft(export)p Fs(,)0 1954 y Ft(authentication)p Fs(,)12 b Ft(object)p Fs(,)h Ft(sunrpc)p Fs(,)g Ft(courier)p Fs(,)g Ft(dcerpc)p Fs(,)g Ft(call)p Fs(,)g Ft(tcp)p Fs(,)g Ft(udp)p Fs(,)h Ft(xnsspp)p Fs(,)f Ft(gc)p Fs(,)g Ft(lock)p Fs(,)g Ft(server)p Fs(,)0 2016 y Ft(malloc)p Fs(,)24 b Ft(mainloop)p Fs(,)g Ft(iiop)p Fs(,)g Ft(http)p Fs(,)h Ft(error)p Fs(,)f Ft(sunrpcrm)p Fs(,)g Ft(inmem)p Fs(,)g Ft(security)d(thread)p Fs(,)k Ft(lsr)p Fs(,)f Ft(type)d Fs(and)0 2078 y Ft(binding)p Fs(.)h(The)14 b(special)h(class)f Ft(ALL)h Fs(will)e(enable)i(all)f (trace)i(statements:)h Ft(setenv)10 b(ILU_DEBUG)h(ALL)p Fs(.)22 b(The)15 b(special)0 2141 y(class)h Ft(MOST)g Fs(will)f(enable)h(all)f(trace)i(statements)e(except)h Ft(lock)p Fs(,)i(and)e Ft(malloc)p Fs(:)k Ft(setenv)11 b(ILU_DEBUG)f(MOST)p Fs(.)26 b(The)0 2203 y(environment)14 b(variable)h Ft(ILU_DEBUG_FILE)f Fs(may)i(be)f(used)g(to)g(direct)g (debugging)e(output)h(to)g(a)i(file.)23 b(The)16 b(function)0 2265 y Ft(ilu_SetDebugLevelViaString\(char)8 b(*trace_classes\))21 b Fs(may)i(also)f(be)g(called)g(from)h(an)f(application)0 2328 y(program)10 b(or)f(debugger,)h(to)f(enable)h(tracing.)g(The)f (argument)h Fp(trace)p 1077 2328 14 3 v 17 w(classes)g Fs(should)e(be)i(formatted)f(as)h(described)f(above.)62 2421 y Ft(ILU_DEBUG)14 b Fs(may)h(also)g(be)f(set)h(to)f(an)h(unsigned) e(integer)h(value,)h(where)g(each)h(bit)d(set)i(in)f(the)g(binary)g (version)g(of)0 2483 y(the)g(number)g(corresponds)f(to)g(one)h(of)g (the)g(above)g(trace)g(classes.)20 b(For)14 b(a)h(list)e(of)h(the)g (various)f(bit)g(values,)h(see)h(the)e(file)0 2545 y(`)p Fp(ILUHOME)t Ft(/include/iludebug.h)p Fs('.)k(Again,)d(you)f(can)h (also)f(enable)h(the)f(tracing)g(from)h(a)g(program)g(or)g(from)g(a)0 2608 y(debugger,)c(by)g(calling)f(the)h(routine)g Ft (ilu_SetDebugLevel\(unsigned)f(long)i(trace_bits\))e Fs(with)g(an)i(unsigned)0 2670 y(integer)g(argument.)p eop %%Page: 228 229 228 228 bop 0 -58 a Fs(Chapter)11 b(16:)g(Debugging)e(ILU)i(Programs) 1183 b(228)62 183 y(The)13 b(routine)f Ft(ilu_SetDebugMessageHandler)f Fs(allows)h(an)i(application)d(to)i(specify)f(an)i(alternate)f(routine) f(to)0 246 y(be)f(called)g(when)g(an)g(error)h(or)f(debugging)e (message)j(is)e(to)h(be)g(printed.)1669 356 y([ILU)g(kernel])-1900 b Ft(void)12 b Fo(ilu)p 171 356 15 3 v 17 w(SetDebugMessageHandler)22 b Fk(\()p Ft(void)11 b Fk(\()p Ft(*)p Fp(handler)t Fk(\))f(\()p Ft(char)208 418 y(*formatSpec,)g(va_list)h(args)p Fk(\)\))120 480 y Fs(Locking:)e(unconstrained)120 567 y(Registers)15 b Fp(handler)j Fs(with)d(the)g(ILU)h(kernel)f(to)g(be)g(called)h (whenever)f(a)h(debugging)d(or)j(error)g(message)120 630 y(is)i(output)g(via)g Ft(ilu_DebugPrintf)p Fs(,)i(instead)e(of)h (the)g(default)f(handler,)j(which)d(simply)g(prints)f(the)120 692 y(message)d(to)g Ft(stderr)p Fs(,)h(using)d Ft(vfprintf)p Fs(.)20 b(Two)14 b(special)f(constant)g(values)g(for)h Fp(handler)k Fs(are)c(defined,)120 754 y Ft (ILU_DEFAULT_DEBUG_MESSAGE_HANDLER)p Fs(,)21 b(which)g(will)f(cause)i (the)f(default)g(behavior)f(to)h(be)120 816 y(resumed,)16 b(and)e Ft(ILU_NIL_DEBUG_MESSAGE_HANDLER)p Fs(,)e(which)i(will)f(cause) h(debugging)f(and)h(error)120 879 y(messages)d(to)g(be)g(simply,)g (silently,)e(discarded.)0 1014 y Fu(16.3)29 b(Debugging)15 b(ISL)0 1153 y Fo(16.3.1)25 b(Use)16 b(of)f Fl(islscan)62 1256 y Fs(The)j Ft(islscan)f Fs(program)i(is)e(supplied)f(as)i(part)g (of)g(the)f(ILU)h(release.)32 b(It)18 b(runs)f(the)h(ISL)g(parser)g (against)f(a)h(file)0 1319 y(containing)10 b(an)i(interface,)h(and)f (prints)f(a)i Ft(")p Fs(report)p Ft(")e Fs(on)h(the)g(interface)g(to)g (standard)f(output.)i(It)f(can)h(therefor)f(be)g(used)g(to)0 1381 y(check)f(the)g(syntax)f(of)i(an)f(interface)g(before)h(running)d (any)i(language)g(stubbers.)0 1503 y Fo(16.3.2)25 b(The)16 b(ISLDEBUG)f(environment)g(variable)62 1607 y Fs(Setting)c(the)h (environment)f(variable)g Ft(ISLDEBUG)h Fs(to)f(any)h(value)f(\(say,)i Ft(")p Fs(t)p Ft(")p Fs(\),)f(before)g(running)f(any)g(ILU)h(stubber)f (or)0 1670 y(the)i(program)h Ft(islscan)p Fs(,)g(will)e(cause)i(ILU's)f (parser)h(to)f(print)g(out)g(its)f(state)h(transitions)e(as)j(it)f (parses)g(the)g(ISL)h(file.)19 b(If)0 1732 y(you're)11 b(having)f(a)i(serious)e(problem)h(finding)e(a)j(bug)e(in)h(your)g(ISL) g(file,)h(this)e(might)g(help.)0 1867 y Fu(16.4)29 b(Bug)16 b(Reporting)e(and)h(Comments)62 1970 y Fs(Report)c(bugs)f(\(nah!)h(--)g (couldn't)f(be!\))h(to)g(the)f(Internet)h(address)f Ft (ilu-bugs.parc@xerox.com)p Fs(,)f(or)i(to)g(the)f(XNS)0 2033 y(address)i Ft(ILU-bugs:PARC:Xerox)p Fs(.)i(Bug)e(reports)g(are)h (more)g(helpful)e(with)h(some)g(information)g(about)f(the)h(activity.)0 2095 y(General)f(comments)g(and)g(suggestions)e(can)i(be)h(sent)e(to)h (either)g Ft(ILU@parc.xerox.com)f Fs(or)h Ft(ILU-bugs)p Fs(.)62 2182 y(Often)f(the)g(our)g(first)g(reply)f(to)h(a)h(bug)e (report)h(is)g(a)g(request)g(for)g(a)h(typescript)d(that)i(shows)f(the) h(bug)f(occurring,)h(with)g(all)0 2244 y(trace)i(debugging)e(turned)g (on.)j(If)e(that)g(doesn't)g(make)h(it)f(clear)h(to)f(us,)g(our)h (second)f(reply)g(may)h(be)f(a)h(request)f(for)h(a)g(stack)0 2307 y(trace,)h(with)e(printouts)f(of)i(relevant)g(variables)f(and)h (data)g(strutures.)h(Including)d(these)i(things)e(in)i(your)g(bug)f (report)h(may)0 2369 y(speed)f(the)g(cycle)g(of)g(interactions.)0 2504 y Fu(16.5)29 b(Use)16 b(of)f Fh(gdb)62 2608 y Fs(When)e(using)f (ILU)h(with)g(C)p Ft(++)g Fs(or)g(C)h(or)f(even)h(Common)f(Lisp,)g (running)f(under)h(the)g(GNU)g(debugger)f Ft(gdb)i Fs(can)f(be)0 2670 y(helpful)d(for)h(finding)f(segmentation)g(violations)f(and)i (other)f(system)h(errors.)p eop %%Page: 229 230 229 229 bop 0 -58 a Fs(Chapter)11 b(16:)g(Debugging)e(ILU)i(Programs) 1183 b(229)62 183 y(ILU)11 b(provides)f(a)i(debugging)d(trace)j (feature)f(which)g(can)g(be)g(set)g(from)h Ft(gdb)f Fs(with)f(the)h (following)e(command:)120 275 y Ft(\(gdb\))24 b Fj(p)h (ilu_SetDebugLevel\(0x)p Fp(XXX)t Fj(\))120 325 y Ft (ilu_SetDebugLevel:)48 b(setting)24 b(debug)h(mask)f(from)h(0x0)g(to)f (0x)p Fp(XXX)120 374 y Ft($1)h(=)g(void)120 424 y(\(gdb\))0 545 y Fs(The)11 b(value)g Fp(XXX)k Fs(is)c(an)g(unsigned)e(integer)i (as)g(discussed)f(in)g(section)h(3.)g(The)g(debugger)g Ft(dbx)g Fs(should)e(also)i(work.)62 637 y(We)22 b(are)g(in)e(the)h (midst)f(of)i(installing)c(a)k(consistent)d(new)i(way)g(of)g(handling)f (rutime)h(failures)f(into)g(the)h(ILU)0 699 y(runtime)14 b(kernel.)20 b(This)13 b(new)h(way)h(involves)d(the)i(kernel)g (reporting)f(the)h(failure)g(to)g(its)f(caller;)i(the)f(old)g(way)g (involves)0 761 y(combinations)g(of)i(panicking,)f(reporting)g(to)g (the)h(user)f(\(not)g(the)h(caller\))g(via)f(a)h(printed)f(message,)i (and)f(fragmentary)0 823 y(reporting)10 b(to)g(the)g(caller.)i(Every)e (time)h(a)g(runtime)f(failure)h(is)f(noted)g(the)g(new)h(way,)g(the)g (procedure)f Ft(_ilu_NoteRaise)0 886 y Fs(in)18 b(`)p Fp(ILUSRC)t Ft(/runtime/kernel/error.c)p Fs(')e(is)i(called;)j(this)c (procedure)h(thus)g(makes)g(a)h(good)e(place)h(to)g(set)g(a)0 948 y(breakpoint)e(when)g(debugging.)28 b(Most)17 b(runtime)f(failures) h(occur)g(due)g(to)g(genuine)f(problems;)j(some)e(occur)g(during)0 1010 y(normal)11 b(processing)f(\(e.g.,)i(end-of-file)f(detection\).)0 1165 y Fu(16.6)29 b(Error)14 b(handling)62 1273 y Fs(Ideally,)e(the)f (ILU)g(runtime)g(would)g(report)g(all)g(failures)g(to)g(the)g (application,)f(in)h(the)h(way)f(most)g(appropriate)g(for)g(the)0 1335 y(application's)e(programming)i(language.)g(Sadly,)g(this)f(is)h (not)f(yet)h(the)g(case.)62 1427 y(The)g(ILU)g(runtime)g(kernel)g(has)g (three)g(kinds)f(of)h(runtime)g(failures:)26 1518 y(1.)30 b(memory)12 b(allocation)e(failures)g(from)i(which)e(the)h(kernel)g (cannot)g(proceed;)26 1597 y(2.)30 b(internal)10 b(consistency)g(check) h(failures,)g(from)h(which)e(the)h(kernel)g(cannot)g(proceed;)g(and)26 1676 y(3.)30 b(internal)10 b(consistency)f(check)i(failures,)g(which)f (the)h(kernel)f(is)h(prepared)g(to)f(report)h(to)f(the)h(ILU)f (language-specific)90 1738 y(runtime)h(veneer)g(\(which,)g(hopefully,)f (would)g(in)h(turn)f(report)h(the)g(failure)g(to)g(the)g (applicaiton\).)62 1859 y(The)g(second)g(kind)f(is)h(being)f (eliminated.)h(The)g(first)f(kind)h(is)f(being)h(reduced,)g(and)g (might)g(also)f(be)i(eliminated.)62 1951 y(The)k(application)f(can)h (specify)g(how)f(each)i(of)f(these)g(three)g(kinds)f(of)h(runtime)g (failures)g(is)g(to)f(be)i(handled.)25 b(The)0 2013 y(choices)11 b(are:)26 2105 y(1.)30 b(Print)19 b(an)g(explanatory)f(message)h(and)g (then)g(explicitly)e(trigger)i(a)g Ft(SEGV)g Fs(signal)f(by)h (attempting)f(to)h(write)g(to)90 2167 y(protected)11 b(memory.)h(This)e(is)h(useful)f(for)h(generating)g(core)g(dumps)g(for) g(later)g(study)f(of)h(the)g(error.)26 2246 y(2.)30 b(Print)11 b(an)g(explanatory)f(message)h(and)g(then)g(exit)g(the)f(program)i (with)e(an)h(application-specified)e(exit)h(code.)26 2325 y(3.)30 b(Print)12 b(an)h(explanatory)e(message)i(and)f(then)g (enter)h(an)f(endless)g(loop,)g(which)g(calls)g Ft(sleep\(3\))g Fs(repeatedly.)j(This)90 2387 y(option)g(is)i(useful)f(for)h(keeping)f (the)g(process)h(alive)f(but)g(dormant,)j(so)d(that)g(a)i(debugger)e (can)h(attach)g(to)f(it)g(and)90 2450 y(examine)11 b(its)g(``live'')g (state.)g(This)f(is)h(the)g(default)f(action)h(for)g(all)g(three)g (kinds)f(of)h(failures.)26 2529 y(4.)30 b(Invoke)11 b(an)g (application-suppl)o(ied)d(procedure)j(\(without)f(printing)f(anything) h(first\).)26 2608 y(5.)30 b(Report)11 b(the)g(failure)f(out)h(of)g (the)f(kernel,)h(without)f(printing)f(anything)g(first)h(\(this)g (option)g(is)g(available)g(only)g(for)h(the)90 2670 y(third)f(kind)g (of)i(failure\).)p eop %%Page: 230 231 230 230 bop 0 -58 a Fs(Chapter)11 b(16:)g(Debugging)e(ILU)i(Programs) 1183 b(230)62 183 y(An)8 b(application)e(can)i(change)g(the)g(action)f (taken)h(on)f(memory)i(failures)f(by)f(calling)g Ft (ilu_SetMemFailureAction)0 246 y Fs(or)k Ft(ilu_SetMemFailureConsumer)p Fs(.)1669 359 y([ILU)g(kernel])-1900 b Ft(void)12 b Fo(ilu)p 171 359 15 3 v 17 w(SetMemFailureAction)22 b Fk(\()12 b Ft(int)f Fp(mfa)k Fk(\))120 421 y Fs(Locking:)9 b(unconstrained)120 508 y(Calling)e(this)g(tell)o(s)g(t)o(he)g(ILU)g(k)o(ernel)g(whi)o(ch)g (drast)o(ic)g(actio)o(n)g(is)f(to)g(be)h(performed)g(when)f Ft(ilu_must_m)o(alloc)120 571 y Fs(fails.)26 b(-2)16 b(means)g(to)g(print)f(an)i(explanatory)d(message)j(on)e(stderr)h(and)g (then)g(coredump;)i(-1)e(means)h(to)120 633 y(print)12 b(an)i(explanatory)e(message)h(on)g(stderr)g(and)g(then)g(loop)f (forever)h(in)g(repeated)h(calls)e(to)h Ft(sleep\(3\))p Fs(;)120 695 y(positive)e(numbers)j(mean)f(to)g(print)g(an)g (explanatory)f(message)i(on)f(stderr)g(and)g(then)g Ft(exit\()p Fp(mfa)s Ft(\))p Fs(.)18 b(The)120 758 y(default)11 b(is)f(-1.)1669 871 y([ILU)h(kernel])-1900 b Ft(typedef)11 b(void)g(\(*\))g(\(const)g (char)g(*file,)f(int)h(line\))208 933 y Fo(ilu)p 267 933 V 17 w(FailureConsumer)120 995 y Fs(A)g(procedure)g(that)g(is)f (called)h(when)g(the)g(ILU)g(kernel)g(can't)g(proceed.)h(This)e (procedure)h(must)g(not)f(return.)1669 1108 y([ILU)h(kernel])-1900 b Ft(void)12 b Fo(ilu)p 171 1108 V 17 w(SetMemFailureConsumer)24 b Fk(\()11 b Ft(ilu_FailureConsumer)f Fp(mfc)k Fk(\))120 1171 y Fs(Locking:)9 b(unconstrained)120 1258 y(An)28 b(alternative)f(to)h Ft(ilu_SetMemFailureAction)p Fs(:)42 b(this)27 b(causes)h Fp(mfc)j Fs(to)d(be)g(called)g(when)120 1320 y Ft(ilu_must_malloc)10 b(fails)p Fs(.)62 1434 y(Similarly,)22 b(an)d(application)f(specifies)g(how)h(unrecoverable)h(runtime)f (consistency)e(check)j(failures)f(are)h(to)f(be)0 1496 y(handled)8 b(by)h(calling)f Ft(ilu_SetAssertionFailureAction)f Fs(or)i Ft(ilu_SetAssertionFailConsumer)p Fs(,)f(which)0 1558 y(are)15 b(exactly)g(analogous)e(to)h(the)h(procedures)f(for)h (memory)h(failure)e(handling.)21 b(For)15 b(recoverable)g(consistency)e (check)0 1620 y(failures,)e(an)g(application)f(can)h(call)g Ft(ilu_SetCheckFailureAction)e Fs(or)i Ft(ilu_SetCheckFailureConsumer)p Fs(.)1669 1734 y([ILU)g(kernel])-1900 b Ft(void)12 b Fo(ilu)p 171 1734 V 17 w(SetCheckFailureAction)21 b Fk(\()12 b Ft(int)f Fp(cfa)k Fk(\))120 1796 y Fs(Locking:)9 b(unconstrained)120 1883 y(Calling)15 b(this)g(tells)g(the)g(runtime)h(which)f(action)g(is) h(to)f(be)h(performed)g(when)g(an)g(internal)f(consistency)120 1946 y(check)d(fails.)f(-3)h(means)g(to)f(raise)g(an)h(error)g(from)g (the)f(kernel)g(\(without)f(necessarily)h(printing)e(anything\);)120 2008 y(-2)k(means)g(to)f(print)f(an)i(explanatory)e(message)i(to)f (stderr)h(and)f(then)g(coredump;)h(-1)g(means)g(to)f(print)f(and)120 2070 y(then)j(loop)f(forever;)j(non-negative)d(numbers)i(mean)g(to)f (print)f(and)h(then)g Ft(exit\()p Fp(cfa)s Ft(\))p Fs(;)i(others)e (number)120 2132 y(reserved.)e(The)f(default)f(is)h(-1.)1669 2246 y([ILU)g(kernel])-1900 b Ft(typedef)11 b(void)g(\(*\))g(\(const)g (char)g(*file,)f(int)h(line\))208 2308 y Fo(ilu)p 267 2308 V 17 w(CheckFailureConsumer)120 2370 y Fs(A)i(procedure)h(for)g (handling)d(an)j(internal)e(consistency)g(check)i(failure.)k(If)c(this) e(procedure)i(returns,)f(the)120 2432 y(consistency)c(check)j(failure)f (will)f(be)h(raised)g(as)g(an)h(error)f(from)h(the)f(kernel.)1669 2545 y([ILU)g(kernel])-1900 b Ft(void)12 b Fo(ilu)p 171 2545 V 17 w(SetCheckFailureConsumer)22 b Fk(\()12 b Ft (ilu_CheckFailureConsumer)208 2608 y Fp(cfc)h Fk(\))120 2670 y Fs(Locking:)c(unconstrained)p eop %%Page: 231 232 231 231 bop 0 -58 a Fs(Chapter)11 b(16:)g(Debugging)e(ILU)i(Programs) 1183 b(231)120 183 y(An)20 b(alternative)g(to)g Ft (ilu_SetCheckFailureAction)p Fs(:)27 b(this)20 b(causes)g Fp(cfc)j Fs(to)d(be)h(called)f(\(and)h(no)120 246 y(printing\);)9 b(if)i Fp(cfc)j Fs(returns,)d(an)g(error)h(will)e(be)h(raised)g(from)h (the)f(kernel.)0 372 y Fo(16.6.1)25 b(Decoding)15 b(reportable)f (consistency)h(check)g(failures)62 476 y Fs(For)g(language)e(mappings)g (consistent)f(with)h(CORBA,)i(the)f(third)f(kind)g(of)h(failure)f(is)h (reported)g(as)g(an)g(occurrence)0 539 y(of)e(the)f(CORBA)h(system)g (exception)e Ft(internal)p Fs(,)i(with)e(a)i(minor)g(code)f(that)g (encodes)g(the)h(filename)g(and)f(line)g(number)0 601 y(where)h(the)g(consistency)e(check)j(occurs.)h(The)e(coding)f(is)g (this:)h(10,000*hash\(filename,)f(32771\))g Ft(+)h Fs(linenum)f Ft(+)h Fs(1,000.)0 663 y(The)j(directory)f(part,)j(if)e(any,)h(is)f (stripped)e(from)j(the)f(filename)g(before)h(hashing.)21 b(To)15 b(aid)g(in)g(decoding)f(these)g(minor)0 725 y(codes,)d(ILU)g (includes)f(the)h(program)g Ft(decoderr)p Fs(,)g(which)g(is)g(used)f (like)h(this:)120 813 y Ft(\045)25 b(decoderr)f(269211234)120 863 y(269211234)g(=)h(line)f(234,)h(file)f ($ILUSRC/runtime/kernel/call.c)62 976 y Fs(If)11 b(a)f(reportable)f (consistency)f(check)i(failure)g(occurs)f(in)h(a)g(file)f(not)g (anticipated)g(in)g(the)h(construction)e(of)h Ft(decoderr)p Fs(,)0 1039 y(you'll)h(see)h(something)f(like)h(this:)120 1126 y Ft(\045)25 b(decoderr)f(60612345)120 1176 y(60612345)g(=)h(line) g(1345)f(in)h(unknown)f(file)h(\(that)f(hashes)g(to)h(6061\))62 1290 y Fs(The)12 b(program)h Ft(iluhashm)f Fs(can)g(be)h(used)f(to)f (hash)h(given)g(filenames,)h(so)f(you)f(can)i(search)g(a)f(set)g(of)h (candidates)e(for)0 1352 y(the)g(mysterious)f(hash)g(code:)120 1440 y Ft(\045)25 b(iluhashm)f(32771)g(../cpp/foobar.cpp)g (../cpp/barfoo.cpp)120 1490 y(/*)h(Generated)f(at)h(Mon)f(Dec)h(11)f (22:44:47)h(1995)195 1539 y(with)f(modulus)h(32771)f(*/)120 1589 y({)149 b(6061,)25 b("../cpp/foobar.cpp"},)120 1639 y({)124 b(13273,)25 b("../cpp/barfoo.cpp"},)0 1778 y Fu(16.7)k(Common)15 b(Problems)f(-)h(Questions)62 1883 y Fs(Users)c(often)g(run)g(into)f(the)h(same)h(difficulties)e(other)g (users)h(have)h(had.)f(This)f(section)h(lists)e(some)j(of)f(these)g (common)0 1945 y(problems,)g(and)g(describes)f(the)h(possible)f(cures.) 62 2033 y(Problem:)h(A)g(server)h(cannot)e(publish)g(an)h(object)f(or)i (a)f(client)g(cannot)f(lookup)g(an)h(object.)62 2121 y(Discussion:)i(When)g(using)e(the)i(shared)g(file)g(approach)g(for)g (simple)g(binding,)f(the)h(machines)g(on)g(which)f(the)h(client)0 2183 y(and)e(server)h(programs)f(run)h(must)f(have)g(some)h(shared)f (filesystem.)h(Each)g(program)f(must)h(also)e(have)i(the)f(environment) 0 2245 y(variable)f(ILU)p 236 2245 14 3 v 16 w(BINDING)p 444 2245 V 17 w(DIRECTORY)h(set)f(to)g(a)i(directory)e(within)f(that)h (file)g(system)h(where)g(the)f(publications)e(will)0 2308 y(be)j(written)f(and)h(read.)62 2395 y(Problem:)17 b(It)d(seems)g(that)g(ILU)g(is)f(contacting)g(the)h(wrong)f(server,)i (or)f(if)h(I)f(look)f(at)h(the)g(SBH's)g(for)g(objects)f(that)h(I)0 2458 y(know)c(are)i(coming)f(from)h(one)f(source,)g(ILU)g(thinks)f (they're)h(from)g(someplace)h(else.)62 2545 y(Discussion:)i(This)f(is)h (usually)e(caused)i(by)f(creating)h(multiple)f(ilu)p 1152 2545 V 15 w(Server's)h(\(e.g.)21 b(in)13 b(C,)i(the)f(thing)e(you) i(get)f(back)0 2608 y(from)19 b(ILU)p 186 2608 V 16 w(C)p 232 2608 V 17 w(InitializeServer)f(\(...\)\))35 b(that)18 b(have)g(the)h(same)g(server)f(ID.)h(The)g(server)g(ID)f(should)f(be)i (unique.)33 b(To)0 2670 y(understand)14 b(why,)i(consider)e(what)g(ILU) h(does)g(when)g(an)g(non-local)f(object)g(reference)i(\(an)f(SBH\))h (comes)g(in)e(off)h(the)p eop %%Page: 232 233 232 232 bop 0 -58 a Fs(Chapter)11 b(16:)g(Debugging)e(ILU)i(Programs) 1183 b(232)0 183 y(wire.)20 b(ILU)15 b(looks)d(at)j(the)e(reference)j (and)e(checks)g(to)g(see)g(if)g(it)g(has)g(a)g(surrogate)g(ilu)p 1383 183 14 3 v 15 w(Server)h(with)e(that)h(name.)21 b(If)15 b(not,)0 246 y(ILU)d(creates)g(one,)h(and)e(\(important)h (point\))e(stores)i(away)g(the)f(contact)h(information)f(for)h(that)f (ilu)p 1580 246 V 16 w(Server.)j(If)f(it)e(already)0 308 y(has)g(one)g(with)g(that)g(name,)h(ILU)g(assumes)f(that)g(that)f (is)h(the)g(ilu)p 1014 308 V 16 w(Server)h(for)g(the)f(object)g(-)g(it) g(doesn't)g(check)g(to)g(see)h(if)f(the)0 370 y(contact)j(info)f(is)h (different.)21 b(Thus,)14 b(operations)f(directed)h(at)h(objects)e(who) h(are)h(served)f(by)g(that)f(particular)h(ilu)p 1819 370 V 15 w(Server)0 432 y(will)f(always)g(be)g(directed)h(at)f(the)h (ilu)p 610 432 V 15 w(Server)h(that)e(ILU)g(saw)h(first.)k([ILU)c (could)f(potentially)e(keep)j(track)g(of)f(multiple)0 495 y(contact)d(infos,)g(but)g(that)h(still)e(wouldn't)g(help)h(to)g (disambiguate)f(where)i(operations)f(should)f(be)i(directed.])g(This)f (is)g(why)0 557 y(in)15 b(many)g(of)g(the)g(example)g(programs,)h(you)f (see)g(server)g(ID's)g(being)f(created)i(using)d(some)j(combination)d (of)i(a)h(fixed)0 619 y(string,)f(and)f(a)h(the)f(name)i(of)e(the)h (host)e(the)i(process)f(is)g(running.)20 b(Of)15 b(course,)h(if)f(you)f (run)g(multiple)f(instances)h(of)g(the)0 681 y(example)c(on)g(the)f (same)i(machine,)f(you)g(would)e(want)i(to)f(also)h(incorporate)f(some) h(process)f(or)h(thread)g(information.)g(You)0 744 y(can)h(also)g (simple)g(let)f(ILU)i(generate)f(a)g(server)h(ID)f(for)g(you,)g(that)g (is)g(unique)f(with)g(a)h(high)g(degree)g(of)g(probability.)62 837 y(Problem:)i(My)f(process)f('A')h(has)g(an)g(object)f(reference)i (to)e(an)h(object)f('O')h(in)f(process)h('B'.)h(Process)e('B')i(exits,) e(and)0 899 y(then)f(restarts.)g(Even)g(though)e(the)i(server)g(name)h (and)f(object)f(identifier)g(for)h('O')h(are)g(the)e(same)i(as)f(the)g (first)f(time)h(around,)0 961 y(process)h(A)g(is)g(unable)f(to)h (perform)h(operations)d(on)i('O'.)62 1054 y(Discussion:)h(The)g(answer) h(here)g(is)f(similar)g(to)g(the)g(answer)h(to)f(the)g Ft(")p Fs(It)h(seems)g(that)f(ILU)g(is)g(contacting)g(the)g(wrong)0 1116 y(server...)j Ft(")d Fs(problem.)h(You're)f(probably)e(letting)h (ILU)g(choose)h(the)f(server's)h(port)f(number)h(by)g(either)f(letting) g(ILU)g(use)0 1179 y(it's)f(defaults,)g(or)h(by)f(specifying)f(a)i(0)f (in)h(the)f(port)g(field)g(in)g(the)g(transport)g(specification)f(when) h(creating)g(the)h(ilu)p 1808 1179 V 15 w(Server.)0 1241 y(ILU)g(in)f(process)g('A')h(caches)g(the)f(contact)g(information)g (from)h(the)f(first)g(process)g('B'.)i(When)f(process)f('B')h(comes)g (back)0 1303 y(up,)j(the)e(port)h(number)g(is)g(different.)k(You)12 b(can)h(specify)g(what)g(port)f(should)g(be)h(used)f(in)h(the)g (transport)f(information)g(to)0 1366 y(prevent)f(this)f(from)h (happening.)g(For)g(example,)h(to)e(always)h(come)h(up)f(at)g(port)f (1234,)h(use)g Ft(")p Fs(tcp)p 1537 1366 V 16 w(0)p 1576 1366 V 16 w(1234)p Ft(")p Fs(.)62 1459 y(Problem:)g(How)g(come)h(a)f (lot)g(of)g(things)e(seem)j(broken)f(in)g(the)f(C)p Ft(++)i Fs(support!)62 1552 y(Discussion:)20 b(Yes,)e(we)f(know!)26 b(The)17 b(C)p Ft(++)g Fs(support)e(is)h(in)g(the)h(process)f(of)g (being)g(completely)g(redone)g(for)h(ILU)0 1614 y(release)12 b(2.0.)g(As)g(such,)f(we)h(allowed)e(the)i(current)f(support)f(to)h (remain)h(in)f(disrepair,)g(and)h(don't)e(bother)h(to)g(fix)g(much)h (of)0 1676 y(anything)d(in)i(it.)g(Use)g(the)g(current)g(C)p Ft(++)h Fs(support)d(at)j(your)e(own)h(risk!)62 1769 y(Problem:)g(I'm)h(having)e(problems)h(importing)f(ILU)h(into)f (Python.)62 1862 y(Discussion:)d(\(Where)i(ILUHOME)f(represents)f (where)i(you)e(installed)g(ILU\))h(You)g(need)g(to)g(have)g(the)g (ILUHOME/lib)0 1924 y(directory)k(on)g(your)g(PYTHONPATH)g(environment) g(variable.)j(Also,)e(ensure)f(that)g(ILUHOME/bin)f(is)h(also)g(on)h (your)0 1987 y(PATH)e(environment)f(variable.)62 2080 y(Problem:)i(I'm)g(in)f(Windows,)f(and)h(trying)f(to)h(build)f(some)h (of)h(the)f(examples)g(and)g(I)h(get)f(complaints)f(that)g(it)h (doesn't)0 2142 y(know)f(how)h(to)g(make)h(some)f(of)g(the)g(files.)62 2235 y(Discussion:)18 b(The)d(Windows)f(make)j(files)e(are)h(not)f(set) h(up)f(to)g(run)h(the)f(language)g(stubbers.)24 b(You)15 b(must)g(run)g(the)0 2297 y(stubbers)10 b(manually)g(before)i(doing)e (the)h(make.)h(e.g.)g(c-stubber)e(Test1.isl)62 2390 y(Problem:)h(I'm)h (on)f(Unix)f(\(most)h(probably)f(Digital's\),)g(and)h(my)h(program)f (sometimes)g(exits)f(unexpectedly.)62 2483 y(Discussion:)e(You)i(may)g (be)g(running)f(into)g(a)h(problem)g(where)g(a)g(PIPE)h(signal)e(is)g (generated)h(and)g(the)f(established)f(ac-)0 2545 y(tion)h(is)g(to)g (exit)g(the)g(program.)i(In)f(the)f(ILU)h(source)f(file)h (runtime/kernel/bsdut)o(ils)o(.c,)e(the)i(function)p 1587 2545 V 24 w(ilu)p 1652 2545 V 16 w(HandleSigPIPE)0 2608 y(tries)17 b(to)g(set)h(up)f(the)h(process)f(to)g(ignore)g (SIGPIPE.)i(However,)g(it)f(only)e(does)i(this)e(if)i(the)f(initial)f (SIGPIPE)j(is)e(not)0 2670 y(SIG)p 76 2670 V 17 w(DFL.)9 b(\(You)g(should)e(see)j(an)f(error)h(message)f(if)p 850 2670 V 25 w(ilu)p 915 2670 V 16 w(HandleSigPIPE)f(can't)i(setup)e (to)h(ignore)f(SIGPIPE\))i(On)f(some)p eop %%Page: 233 234 233 233 bop 0 -58 a Fs(Chapter)11 b(16:)g(Debugging)e(ILU)i(Programs) 1183 b(233)0 183 y(systems)9 b(it)h(has)g(been)h(noticed)e(that)h(even) g(though)f(the)h(application)e(did)i(not)f(explicitly)f(set)i(up)g(a)h (SIGPIPE)g(handler,)f(the)0 246 y(initial)i(SIGPIPE)j(is)f(not)f(SIG)p 494 246 14 3 v 17 w(DFL,)h(and)g(the)g(handler)g(that)f(runs)h (terminates)f(the)h(program.)21 b(A)14 b(workaround)f(to)g(this)0 308 y(problem)f(is)f(to)h(either)g(set)f(the)h(SIGPIPE)h(handler)f(to)f (SIG)p 951 308 V 17 w(DFL)h(yourself)f(before)h(the)p 1423 308 V 29 w(ilu)p 1489 308 V 15 w(HandleSigPIPE)g(function)0 370 y(runs,)f(or)g(set)g(it)g(to)f(a)i(handler)f(that)f(does)h(nothing) e(with)h(the)h(signal.)p eop %%Page: 234 235 234 234 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(234)0 183 y Fq(17)36 b(Installation)14 b(of)g(ILU)62 314 y Fs(This)d(document)g(describes)g(the)g(installation)e(of)j (version)f(2.0alpha13)f(of)i(the)f(Inter-Language)g(Unification)f (\(ILU\))0 376 y(system.)62 463 y Fp(If)j(you)f(succeed)g(in)g (installing)e(ILU)j(on)f(a)h(particular)e(platform,)i(we'd)g (appreciate)f(it)g(if)h(you)e(could)h(send)g(a)h(note)f(to)0 525 y Ft(ilu-core@parc.xerox.com)e Fp(telling)g(us)i(\(1\))g(what)g (operating)f(system)g(you)g(succeeded)h(with,)g(and)g(what)f(version)0 588 y(of)h(that)g(OS,)h(\(2\))f(which)f(versions)g(of)h(what)g (compilers)g(you)f(used,)i(and)f(\(3\))g(which)f(version)h(of)g(ILU)g (you)f(used.)j(We're)0 650 y(accumulating)c(a)g(list)g(of)g(operating)f (systems)h(and)g(compilers)g(that)g(work)g(with)f(ILU.)i(If)g(you)f (had)g(to)g(make)h(any)g(changes)0 712 y(to)g(make)h(it)e(work)h(on)g (your)f(system,)h(please)g(send)g(them)g(along,)g(and)g(we'll)g (incorporate)f(them)h(into)g(the)f(next)h(release.)0 846 y Fu(17.1)29 b(Installing)15 b(on)g(a)g(Windows)h(NT)f(or)g(95)f (System)62 950 y Fs(For)j(information)e(on)h(Windows)e(systems,)j(see)g (the)f Ft(")p Fs(Using)f(ILU)h(with)f(Microsoft)h(Windows)p Ft(")e Fs(section)h(of)h(the)0 1012 y(manual.)0 1146 y Fu(17.2)29 b(Installing)15 b(on)g(a)g(UNIX)h(System)0 1284 y Fo(17.2.1)25 b(Prerequisites)62 1387 y Fs(You)10 b(will)e(need)i(an)g(ANSI)g(C)g(compiler)g(to)f(build)g(and)h(install)e (ILU,)i(along)f(with)g(an)h(ANSI)g(C-compliant)f(`)p Ft(libc.a)p Fs('.)0 1450 y(Note)16 b(that)g(GNU)f Ft(gcc)i Fs(doesn't)e(always)h(work)g(as)g(an)g(ANSI)h(C)g(compiler.)27 b(The)16 b(simple)f(test)h(we)h(use)f(to)g(qualify)f(a)0 1512 y(compiler)c(is)g(whether)f(it)h(can)g(compile)g(and)g(link)f(the) h(following)e(program)j(without)d(warnings)h(or)h(errors:)120 1599 y Ft(#include)24 b()120 1649 y(#include)g()120 1699 y(#include)g()120 1748 y(#include)g()120 1798 y(int)h(main\(int)f(ac,)g(char)h(**av\))f({)145 1848 y(int)h(i)f(=)h(INT_MAX;)145 1898 y(char)f(*p)h(=)g(\(char)f(*\))h (malloc\(1048\);)145 1948 y(memmove\(p,)f(*av,)g(strlen\(*av\)+1\);)145 1998 y(printf\("\045s)g(\045d\\n",)g(p,)h(i\);)145 2047 y(return)f(0;)120 2097 y(})62 2209 y Fs(ILU)c(requires)g(the)f Ft(imake)h Fs(program)g(from)h(the)f(MIT)g(X)g(Consortium)f(release)h (of)g(the)g(X)g(Window)f(System,)0 2271 y(version)g(4)g(or)h(later.)37 b(This)18 b(is)h(available)g(via)g(FTP)i(from)f(the)f(ftp)g(servers)h Ft(ftp.x.org)f Fs(on)g(the)g(East)g(Coast,)j(or)0 2334 y Ft(gatekeeper.dec.com)10 b Fs(on)h(the)f(West)h(Coast.)g(You)g(can)h (also)e(get)h(it)g(from)0 2396 y Ft (ftp://ftp.parc.xerox.com/pub/ilu/imake)o(/imake.tar.)o(gz)p Fs(.)62 2483 y(ILU)j(normally)f(provides)f(support)h(for)g(a)h(number)g (of)g(languages,)g(currently)f(ANSI)g(C,)i(C)p Ft(++)p Fs(,)g(Java,)g(Python,)e(and)0 2545 y(Common)g(Lisp)f(\(Franz)i (Allegro)d(4.3,)j(and)f(Harlequin)e(LispWorks\),)h(but)g(the)h (2.0alpha)f(release)h(only)f(contains)g(solid)0 2608 y(support)g(for)i(ANSI)g(C,)h(Java,)g(and)e(Python.)18 b(C)p Ft(++)c Fs(support)f(\(sans)g(nested)g(modules)g(and)h (any/pickles\))e(that)h(complies)0 2670 y(with)i(the)g(CORBA)i(2.0)f (spec)f(is)g(available)h(for)f(Visual)g(C)p Ft(++)h Fs(users)g(-)g(it)f (has)g(received)h(very)g(limited)f(testing)f(.)25 b(The)p eop %%Page: 235 236 235 235 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(235)0 183 y(old,)16 b(flakey)f(minimal)g(C)p Ft(++)h Fs(support)e(is)h(still)f(provided.)23 b(There)15 b(is)g(good)g (support)f(for)h(Common)h(Lisp)e(in)h(2.0alpha,)0 246 y(but)j(it)g(lacks)g(some)h(of)f(the)g(features)h(provided)e(for)i(C,)g (Java,)i(and)d(Python.)33 b(There)18 b(is)h(rough)e(support)g(for)i (Guile)0 308 y(Scheme,)13 b(contributed)d(by)h(Siemens)h(Corporate)f (Research,)i(Inc.)g(ILU)f(support)e(for)h(the)h(Perl)g(programming)f (language)0 370 y(is)g(available)f(from)i(Owen)f(Taylor;)f(see)h Ft(http://www.msc.cornell.edu/~otaylor/ilu/)d Fs(fordetails.)37 466 y Fr(\017)30 b Fs(If)14 b(you)f(wish)g(to)g(build)f(the)i(support)e (for)i(ANSI)g(C,)g(you)g(will)e(need)i(a)g(C)g(compiler,)h(and)e(an)h (ANSI)g(C-compliant)90 528 y(libc.)d(But)g(you)g(already)g(need)g(that) f(to)h(build)f(ILU.)37 612 y Fr(\017)30 b Fs(This)18 b(release)h(contains)e(the)h(old)g(C)p Ft(++)h Fs(support)e(in)h(`)p Fp(ILUSRC)t Ft(/{stubbers,runtime}/cpp/)p Fs('.)32 b(The)19 b(old)90 674 y(version)11 b(of)h(ILU)g(C)p Ft(++)g Fs(support)e(has)i (a)g(number)g(of)g(problems.)h(There)f(are)h(known)e(leaks)g(in)h(the)f (generated)h(stubs,)90 736 y(and)g(in)g(the)g(runtime)g(itself.)i(We)e (do)g(not)g(recommend)h(serious)e(use)h(of)h(the)f(old)f(C)p Ft(++)i Fs(support,)e(but)h(it)g(is)f(included)90 799 y(for)i(use)g(in)g(testing)e(other)i(parts)f(of)i(the)e(system.)17 b(If)d(you)e(wish)g(to)h(build)e(the)i(support)f(for)h(C)p Ft(++)p Fs(,)h(you)f(will)f(need)h(a)90 861 y(C)p Ft(++)g Fs(compiler)g(that)g(conforms)g(to)g(at)g(least)g(version)f(2.0)h(of)g (the)g(C)p Ft(++)g Fs(specification.)j(ILU's)d(old)g(C)p Ft(++)g Fs(does)g(not)90 923 y(use)e(either)g(C)p Ft(++)h Fs(templates)e(or)i(exceptions.)e(The)h(GNU)g(C/C)p Ft(++)h Fs(compiler)f Ft(g++)g Fs(seems)g(to)g(work)g(well)g(with)f(ILU.)90 986 y(It)j(has)g(also)f(been)h(tested)f(with)g(Lucid's)g(Energize)h Ft(lcc)g Fs(compiler,)h(CenterLine's)e Ft(CC)h Fs(compiler,)h(and)e (Sun's)h Ft(CC)90 1048 y Fs(compiler.)37 1131 y Fr(\017)30 b Fs(If)15 b(you)e(wish)g(to)h(build)f(the)g(support)g(for)h(Common)h (Lisp,)f(you)f(will)g(need)i(a)f(copy)g(of)g(Franz)h(Allegro)e(Common) 90 1194 y(Lisp,)e(version)f(4.1)h(or)g(later)g(on)g(Unix,)g(or)g(3.0)g (or)g(later)g(on)g(Windows.)37 1277 y Fr(\017)30 b Fs(If)14 b(you)f(wish)f(to)h(build)f(support)g(for)h(Python,)h(you)f(will)f (need)h(the)g(Python)g(1.3)g(\(or)h(later\))f(release,)i(available)d (via)90 1339 y(FTP)g(from)g(`)p Ft(ftp://ftp.cwi.nl/pub/python/)p Fs('.)e(When)h(installing)e(Python)h(on)h(your)g(system,)g(be)g(sure)h (to)90 1402 y(do)h(a)h Ft(")p Fs(make)g(inclinstall)p Ft(")p Fs(,)e(so)h(that)f(the)h(include)g(files)g(are)h(installed)e (for)h(ILU's)g(use.)18 b(It's)13 b(also)g(advisable)g(to)g(do)90 1464 y Ft(")p Fs(make)f(libainstall)p Ft(")p Fs(,)d(if)i(you)f(wish)h (to)f(try)h(the)g(`multiple)f(languages)g(in)h(the)g(same)h(address)e (space')i(example.)37 1548 y Fr(\017)30 b Fs(If)20 b(you)e(wish)h(to)f (build)g(support)g(for)h(Java,)j(our)d(current)g(release)g(works)g (against)f(Sun)h(JDK)g(1.1,)j(Sun)d(JDK)90 1610 y(1.2beta**)h(and)g (Microsoft)g(Java)g(SDK)g(2.0.)40 b(Support)19 b(for)i(applets)e(or)h (Netscape)g(is)g(not)g(yet)g(ready.)39 b(See)90 1672 y Ft(http://java.sun.com/products/JDK/)8 b Fs(for)j(instructions)d(on)j (obtaining)e(and)i(installing)d(the)i(Sun)h(JDK.)90 1734 y(If)17 b(you)f(are)h(building)d(for)i(Linux,)h(you)f(should)f(give)h (the)g(command)h(line)f(switch)f Fn(--with-java-nopoll)g Fs(to)h(the)90 1797 y(configure)e(script,)i(to)e(ensure)h(the)g(Java)g (runtime)f(uses)h(the)g Ft(select)f Fs(system)h(call)f(instead)g(of)h Ft(poll)g Fs(\(which)g(is)90 1859 y(present)d(but)f(decidecly)h (inferior)f(on)h(Linux\).**See)g(the)f(ILU)i(for)f(Java)g(chapter)g(in) g(the)g(ILU)g(manual)g(for)g(details)90 1921 y(how)f(to)f(install)g (ILU)h(for)g(Suns)g(JDK)g(1.2beta2)f(or)i(1.2beta4)e(releases)37 2005 y Fr(\017)30 b Fs(If)7 b(you)g(wish)g(to)g(bu)o(ild)f(sup)o(port)g (for)h(Gui)o(le)g(Scheme,)f(you)h(will)g(need)g(to)f(have)h(bo)o(th)g (G)o(uil)o(e)g(1.2)g(\(`)p Ft(ftp://prep)o(.ai.mit.edu)o(/pub/gnu/gu)o (ile-)90 2067 y(1.2.tar.gz)p Fs('\))15 b(and)g(SLIB)h(2b1)e(`)p Ft(http://www-swiss.ai.mit.edu/~jaffer/SLIB.)o(html)p Fs('.)21 b(Guile)90 2129 y(must)8 b(be)h(installed)e(so)i(that)f(SLIB)i (support)d(works;)i(try)f(using)g Ft(guile)j(-c)g('\(use-module)f ('\(ice-9)h(slib\)\)')90 2192 y Fs(to)g(see)g(if)g(yours)g(is)f (configured)h(properly.)37 2275 y Fr(\017)30 b Fs(If)11 b(you)g(wish)f(to)g(build)g(support)g(for)h(Perl,)h(you)e(will)g(need)h (Perl)g(5.004)g(or)g(later.)g(See)h Ft(http://www.perl.com/)90 2337 y Fs(for)e(details)g(on)f(acquiring)h(and)g(installing)d(Perl.You) k(will)e(also)g(have)i(to)e(download)g(and)h(unpack)g(the)g(Perl)h (support)90 2400 y(tar)g(file)g(from)h Ft (http://www.msc.cornell.edu/~otaylor/il)o(u/)p Fs(.)37 2483 y Fr(\017)30 b Fs(If)21 b(you)g(wish)f(to)g(build)g(support)f(for) i(the)g(zlib)f(compression)g(transport)g(filter,)j(you)d(will)g(need)h (to)g(get)f(and)90 2545 y(install)14 b(a)j(copy)e(of)h(the)g(zlib)f (library,)i(version)e(1.1.3,)j(and)d(specify)h(its)f(location)g(to)g (the)h(configure)f(script)g(with)90 2608 y(the)i Fn(--with-zlib=)h Fs(command-line)f(switch.)30 b(See)18 b Ft (http://www.cdrom.com/pub/infozip/zli)o(b/)d Fs(for)90 2670 y(details)10 b(on)h(acquiring)f(and)h(installing)d(zlib.)p eop %%Page: 236 237 236 236 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(236)37 183 y Fr(\017)30 b Fs(If)18 b(you)f(wish)g(to)g(build)f(the)i (SSL)g(mechanism)g(for)f(GSS,)i(you)e(will)g(need)g(to)g(first)g(get)h (and)f(install)f(copies)h(of)90 246 y(the)i(RSAREF-2.0)i(and)e(libdes)f (3.0)i(libraries,)h(and)e(specify)g(their)g(locations)f(to)h(the)h (configure)e(script)h(with)90 308 y(two)g(command-line)h(switches.)36 b(For)20 b(RSAREF,)h(use)e Fn(--with-rsaref=)p Fp(LIB)r Fn(:)p Fp(INSTALLDIR)25 b Fs(to)19 b(specify)g(the)90 370 y(absolute)12 b(filename)i(of)g(the)f(library)g(file)g(\()p Fp(LIB)r Fs(\))h(and)f(installation)e(directory)i(\()p Fp(INSTALLDIR)5 b Fs(\);)13 b(the)g(installation)90 432 y(directory)24 b(is)g(the)g(one)h(that)f(includes)f(the)h Ft(")p Fs(source)p Ft(")g Fs(directory)g(as)h(a)g(child.)50 b(For)25 b(libdes,)i(use)e Fn(--with-)90 495 y(libdes=)p Fp(LIB)r Fn(:)p Fp(INCLUDEDIR)f Fs(to)19 b(specify)g(the)g(location)f (of)h(the)g(library)g(file)g(\()p Fp(LIB)r Fs(\))h(and)f(include)g (directory)90 557 y(\()p Fp(INCLUDEDIR)5 b Fs(\);)10 b(actually,)g(it)g(appears)g(there)h(is)e(no)h(directory)g(structure)g (in)g(the)g(libdes)f(3.0)h(distribution)d(---)k(the)90 619 y(include)h(files)h(are)h(found)f(in)g(the)g(source)g(directory.)18 b(Note)13 b(that)f(SSL)i(support)e(is)h(not)g(included)f(in)h(the)g (freeware)90 681 y(version)d(of)h(ILU.)0 818 y Fo(17.2.2)25 b(Unpacking)14 b(the)h(Distribution)62 926 y Fs(Begin)7 b(by)g(creating)g(two)g(directories:)f(one,)i Fp(ILUHOME)p Fs(,)f(to)g(install)g(the)g(ILU)g(in,)f(and)h(the)g(other,)g Fp(ILUSRC)p Fs(,)g(to)g(unpack)0 989 y(the)12 b(sources)g(in,)g(and)h (build)e(the)h(system)g(in.)i(It)e(is)g(often)g(convenient)f(if)h Fp(ILUSRC)17 b Fs(is)12 b(a)h(sub-directory)e(of)h Fp(ILUHOME)p Fs(,)0 1051 y(but)h(it)g(is)h(not)f(necessary.)19 b(At)13 b(PARC,)i(we)f(use)g(`)p Ft(/import/ilu)p Fs(')f(for)h Fp(ILUHOME)p Fs(,)g(and)f(`)p Ft(/import/ilu/src)p Fs(')g(for)0 1113 y Fp(ILUSRC)p Fs(.)62 1204 y(Copy)c(the)g(compressed)f(tar)i(file) e(`)p Ft(ilu-2.0alpha13.tar.Z)p Fs(')g(or)h(`)p Ft (ilu-2.0alpha13.tar.gz)p Fs(')e(to)i Fp(ILUSRC)p Fs(.)0 1267 y(Uncompress)i(it)f(if)h(necessary)g(with)g(the)f Ft(uncompress)h Fs(or)g Ft(gunzip)g Fs(program:)120 1358 y Ft(\045)25 b Fj(uncompress)f(ilu-2.0alpha13.tar.Z)62 1478 y Fs(or)120 1570 y Ft(\045)h Fj(gunzip)f(ilu-2.0alpha13.tar.gz)62 1690 y Fs(Then)11 b(unpack)g(the)g(tar)g(file:)120 1782 y Ft(\045)25 b Fj(tar)f(xf)h(ilu-2.0alpha13.tar)62 1902 y Fs(We)7 b(suggest)g(you)g(then)f(look)g(at)h(t)o(he)g(ILU)g(h)o(ome)g (page,)e Ft(ftp://ftp.parc.xerox.com/pub/ilu/ilu.html)p Fs(,to)0 1964 y(see)10 b(whether)g(a)h(patch)f(file)g(for)g(release)h (2.0alpha13)e(exists.)h(If)h(so,)f(fetch)g(that)g(patch)g(file)g(and)g (apply)f(it)h(according)g(to)f(the)0 2026 y(instructions)e(at)j(the)g (top)g(of)g(the)g(file.)h(It's)e(best)h(to)f(fetch)i(the)e(patch)h (file)g(using)f(FTP)h(instead)f(of)h(the)g(Web;)g(the)g(additional)0 2089 y(line-ending)h(transformations)h(that)g(Web)h(browsers)f (\(particularly)g(Netscape\))g(apply)h(can)g(render)g(the)g(patches)f (in)g(the)0 2151 y(file)f(worthless.)0 2288 y Fo(17.2.3)25 b(For)16 b(the)f(Impatient)62 2396 y Fs(You)c(can)g(try)g(just)f (unpacking)g(it,)h(and)g(then)g(typing)120 2487 y Ft(\045)25 b Fj(make)62 2608 y Fs(at)12 b(the)g(top)g(of)g(the)g(source)g(tree.)j (A)d(minimal)g(configuration)e(using)h(defaults)g(will)g(be)i(built,)e (sufficient)g(for)h(testing.)0 2670 y(This)e(takes)h(you)f(up)h (through)f(step)h(2)g(of)g(the)g Ft(")p Fs(Building)p Ft(")e Fs(section)h(below.)p eop %%Page: 237 238 237 237 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(237)0 183 y Fo(17.2.4)25 b(Real)15 b(Configuration)62 290 y Fs(ILU)d(uses)g(the)g(GNU)f(autoconf)h(system)f(to)h(configure)f (the)h(release,)h(before)g(building.)f(The)g(very)g(simplest)f(way)h (to)0 352 y(configure)f(your)f(system)h(is)g(type)f(type)120 442 y Ft(\045)25 b Fj(./configure)0 559 y Fs(at)11 b(the)g(top)g(of)g (the)g(source)g(tree.)62 649 y(What)k(will)f(happen)g(is)h(that)f Fp(ILUSRC)t Ft(/imake/configure)g Fs(will)g(go)h(out)f(and)h(look)f (along)g(the)h(value)g(of)g(your)0 711 y(PATH)c(environment)f(variable) h(for)g(various)g(executable)f(programs.)i(If)f(it)g(finds)f Ft(cc)p Fs(,)i(it)e(will)h(assume)g(that)f(you)h(want)g(to)0 774 y(build)f(ANSI)i(C)g(support)e(for)i(ILU.)f(If)h(it)f(finds)g Ft(java)p Fs(,)h(it)f(will)f(assume)i(that)f(you)f(want)h(to)h(build)e (Java)h(support)f(for)i(ILU.)0 836 y(If)f(it)e(finds)g Ft(cl)h Fs(or)g Ft(franz)p Fs(,)h(it)e(will)g(assume)h(that)g(you)f (want)h(to)f(build)g(Lisp)g(support)g(for)h(ILU.)g(If)h(it)e(finds)g Ft(python)p Fs(,)i(it)e(will)0 898 y(assume)j(that)e(you)h(want)h(to)f (build)f(Python)g(support)g(for)i(ILU.)g(If)g(it)f(finds)g Ft(CC)g Fs(or)h Ft(cxx)f Fs(or)h Ft(c++)p Fs(,)g(it)f(will)f(assume)i (that)f(you)0 960 y(want)g(to)g(build)f(C)p Ft(++)i Fs(support)e(for)h (ILU.)h(It)f(will)f(also)h(assume)h(that)e(the)h(first)g(executable)g (with)g(an)g(appropriate)g(name)h(is)0 1023 y(the)g(one)h(you)f(wish)g (to)g(use)g(for)h(compiling)f(programs)g(in)g(that)g(language.)k(By)d (default,)g(it)f(will)f(assume)i(that)f(you)g(wish)0 1085 y(to)f(include)g(support)f(only)h(for)h(using)f Ft(ONC)g(RPC)g Fs(over)h Ft(TCP/IP)p Fs(.)h(By)f(default,)g(it)f(will)f (assume)i(that)f(you)g(do)h(not)f(wish)g(to)0 1147 y(provide)f(support) g(for)h(OMG)h(IDL.)62 1237 y Ft(imake)f Fs(must)g(be)g(on)g(your)g (path,)g(or)g(in)g(`)p Ft(/usr/bin/X11/)p Fs(',)f(for)i(the)f(build)f (to)g(work)h(properly.)0 1370 y Fn(17.2.4.1)22 b(Configuration)15 b(Options)62 1476 y Fs(The)h(program)g Ft(configure)f Fs(can)h(be)g(invoked)e(with)h(a)h(number)g(of)g(command)g(line)f (options,)h(to)f(customize)g(the)0 1538 y(build)e(for)h(your)f(site.)19 b(It)14 b(actually)f(supports)g(more)h(options)e(than)i(shown)e(here,)k (but)d(these)h(are)g(the)g(only)f(options)f(that)0 1601 y(will)e(work)h(at)g(this)f(point)g(in)h(the)g(release)g(process.)37 1691 y Fr(\017)30 b Ft(--with-destdir=PATH)10 b Fs(--)i(this)f(should)f (be)h(the)h(name)g(of)g(the)f(directory)g(you)g(would)f(like)h(the)h (files)f(installed)90 1753 y(into,)17 b(in)g(the)f Fj(make)25 b(Install)16 b Fs(step.)28 b(The)17 b(default)f(is)g(`)p Ft(/usr/local/ilu)p Fs(',)i(which)e(may)h(be)g(OK)g(for)g(your)90 1815 y(system.)37 1893 y Fr(\017)30 b Ft(--with-iluhome=PATH)17 b Fs(--)i(this)e(should)g(be)h(the)g(name)h(of)g(the)f(directory)f (users)h(will)g(expect)g(ILU)g(to)g(be)90 1955 y(installed)11 b(under,)i(the)g(value)f(of)h Fp(ILUHOME)p Fs(.)g(The)f(two)g(options)f Ft(--with-destdir)h Fs(and)g Ft(--with-iluhome)90 2017 y Fs(are)h(provided)d(separately)i(because)g(a)g(directory)f(may)i (have)f(two)f(different)h(names)g(that)f(are)i(used)e(to)h(access)g(it) g(in)90 2079 y(different)g(ways.)h(At)f(PARC,)h(for)f(instance,)g (installation)d(directories)i(are)i(often)e(write-protected)g(if)h (named)g(with)90 2142 y(their)i(ordinary)f(names,)j(and)e(a)h(special)e (name)i(has)f(to)g(be)g(given)g(to)g(enable)g(writing)e(in)i(that)g (directory.)20 b(If)15 b(your)90 2204 y(site)d(does)g(not)f(have)i (this)e(type)h(of)g(restriction,)g(the)g(switches)f(for)i Ft(--with-destdir)e Fs(and)h Ft(--with-iluhome)90 2266 y Fs(should)d(probably)g(have)h(the)g(same)h(values.)g(Note)e(that)h (the)g(default)g(is)g(`)p Ft(/usr/local/ilu)p Fs(',)g(which)f(may)i(be) f(OK)90 2328 y(for)h(your)g(system.)37 2406 y Fr(\017)30 b Ft(--prefix=PATH)13 b Fs(--)h(if)g(specified,)h(this)d(becomes)j(the) e(default)h(for)g Fp(ILUHOME)k Fs(and)c Fp(DESTDIR)p Fs(,)g(if)g(they)f(are)90 2468 y(not)d(specified)h(explicitly.)37 2545 y Fr(\017)30 b Ft(--with-binding-dir=PATH)8 b Fs(--)j(a)g (world-writable)e(directory)g(in)h(a)h(shared)f(file)g(system,)h(for)f (supporting)e(the)90 2608 y Ft(")p Fs(simple)i(binding)p Ft(")e Fs(service)i(described)g(in)f(Chapter)i(1.)g(This)e(option)g (and)h(the)g(use)g(of)g(a)h(binding)d(service)i(\(see)h(next)90 2670 y(item\))g(are)h(mutually)e(exclusive.)p eop %%Page: 238 239 238 238 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(238)37 183 y Fr(\017)30 b Ft(--with-binding-server=REALM:HOST:PORT)9 b Fs(--)k(an)f(alternative)g(to)g(using)f(the)h(shared)g(file)g(system) g(for)90 246 y(simple)h(binding,)f(this)h(says)g(that)g(a)h(binding)d (registration)h(server)i(for)f(the)h(binding)d(realm)j(called)g Fp(REALM)j Fs(will)90 308 y(be)12 b(available)f(on)h(port)f Fp(PORT)17 b Fs(of)12 b(host)f Fp(HOST)p Fs(.)h(The)g(binding)e(server) i(will)f(be)h(built)f(and)g(installed)g(as)h(part)f(of)h(the)90 370 y(build)g(process,)j(but)e(still)f(has)h(to)h(be)g(started)f (manually.)18 b(This)13 b(option)f(and)i(the)f(use)h(of)g(a)g(binding)d (directory)i(are)90 432 y(mutually)d(exclusive.)37 504 y Fr(\017)30 b Ft(--with-zlib=)p Fp(LIB)r Ft(:)p Fp(INCLUDE)p 693 504 14 3 v 14 w(DIR)16 b Fs(--)10 b(specifies)g(the)g(location)e (of)j(the)e(zlib)h(library)f(and)h(include)g(directory.)90 566 y(This)h(is)g(only)g(needed)h(if)g(you)g(are)g(including)e(support) h(for)h(the)g(zlib)f(compression)g(transport,)g(which)g(is)h(normally) 90 628 y(disabled.)37 700 y Fr(\017)30 b Ft(--with-rsaref=)p Fp(LIB)r Ft(:)p Fp(INSTALLDIR)19 b Fs(--)e(specifies)e(the)h(location)f (of)h(the)g(RSAREF-2.0)h(library)e(file)h(and)90 762 y(installation)11 b(directory.)19 b(The)13 b(installation)e(directory)i (is)h(the)f(parent)h(of)f(the)h(`)p Ft(source)p Fs(')g(directory.)k (This)13 b(is)g(only)90 824 y(needed)d(if)g(you)f(are)h(building)e(the) i(SSL)g(mechanism)g(for)g(the)g(GSS)g(shell)f(\(the)h(SSL)g(mechanism)g (is)f(not)h(distributed)90 887 y(publicly)f(due)i(to)g(our)g(inability) e(to)i(implement)f(export)h(controls\).)37 958 y Fr(\017)30 b Ft(--with-libdes=)p Fp(LIB)r Ft(:)p Fp(INCLUDEDIR)24 b Fs(--)d(specifies)f(the)h(location)e(of)i(the)g(libdes)f(3.0)g (library)h(file)f(and)90 1021 y(include)13 b(directory.)k(This)c(is)g (only)f(needed)i(if)f(you)g(are)h(building)e(the)h(SSL)h(mechanism)g (for)f(the)h(GSS)g(shell)e(\(the)90 1083 y(SSL)g(mechanism)f(is)g(not)f (distributed)f(publicly)g(due)i(to)g(our)g(inability)e(to)i(implement)g (export)f(controls\).)37 1154 y Fr(\017)30 b Ft(--with-java-nopoll)9 b Fs(--)h(specifies)g(that)g(the)g(Java)g(runtime)g(must)g(use)g(the)g Ft(select)f Fs(system)h(call)g(rather)h(than)90 1217 y Ft(poll)p Fs(.)g(This)f(is)g(needed)g(only)f(on)i(Linux,)e(where)i (we)g(haven't)f(yet)g(figured)g(out)g(how)f(to)i(make)g(autoconf)e (make)i(the)90 1279 y(right)f(decision)g(automatically.)37 1350 y Fr(\017)30 b Ft(--enable-debugging)10 b Fs(--)i(compiles)e(in)h (debugging)f(printfs)g(and)h(a)h(small)f(amount)g(of)h(additional)d (debugging)90 1413 y(code.)j(Recommend)g(enable.)f(Enabled)f(by)h (default.)37 1484 y Fr(\017)30 b Ft(--enable-os-threads[=TYPE])19 b Fs(--)j(compiles)e(in)h(support)f(for)h(using)f(either)h Ft(")p Fs(solaris2)p Ft(")e Fs(or)j Ft(")p Fs(posix)p Ft(")90 1547 y Fs(threads)12 b(with)g(the)h(C)g(support.)i(If)e(the)f (TYPE)h(isn't)f(specified,)h(it)f(will)g(attempt)g(to)g(guess)g(the)h (right)f(default.)j(The)90 1609 y(default)10 b(is)g(to)g(enable)g (thread)g(support)f(for)h(platforms)g(where)h(the)f(configure)g(script) f(knows)g(thread)i(support)d(exists)90 1671 y(\(currently)13 b(only)f(Solaris)g(2)h(\(Solaris)g(2)g(threads\))g(and)g(OSF)g(1.3)h (\(POSIX)f(threads\).)k(See)d(the)f(following)e(section)90 1733 y(on)g(``Manual)g(Fixups)f(for)i(Threading'',)f(as)g(well.)37 1805 y Fr(\017)30 b Ft(--enable-sunrpc-protocol)18 b Fs(--)j(compiles)e(in)h(support)f(for)h(using)f Ft(ONC)11 b(RPC)20 b Fs(across)g(address)g(spaces.)90 1867 y(\(Enabled)10 b(by)h(default.\))37 1939 y Fr(\017)30 b Ft(--enable-courier-protocol) 11 b Fs(--)j(compiles)f(in)g(support)f(for)i(using)e Ft(XNS)f(Courier)g(RPC)i Fs(across)h(address)90 2001 y(spaces.)d(\(Disabled)f(by)h(default\))37 2072 y Fr(\017)30 b Ft(--disable-corba-iiop)9 b Fs(--)j(prevents)e(inclusion)f(of)i (support)f(for)h(using)f(the)h(CORBA)h Ft(Internet)f(Inter-)90 2135 y(Orb)g(Protocol)g Fs(across)g(address)f(spaces.)i(\(Enabled)e(by) h(default\))37 2206 y Fr(\017)30 b Ft(--enable-http-protocol)6 b Fs(--)j(compiles)f(in)f(support)g(for)i(using)e(the)h(World)f(Wide)h (Web)g Ft(HTTP)j(1.0)e Fs(between)90 2269 y(address)i(spaces.)g (\(Disabled)f(by)h(default\))37 2340 y Fr(\017)30 b Ft (--enable-w3ng-protocol)17 b Fs(--)j(compiles)e(in)h(support)f(for)h (using)f(a)h(prototype)f(of)h(the)g(HTTP-NG)f(wire)90 2402 y(protocol)10 b(between)h(address)f(spaces.)i(\(Disabled)e(by)h (default\))37 2474 y Fr(\017)30 b Ft(--enable-tcp-transport)7 b Fs(--)i(compiles)f(in)h(support)e(for)i(using)f Ft(TCP/IP)g Fs(to)h(transport)e(messages.)k(\(Enabled)90 2536 y(by)g(default.\))37 2608 y Fr(\017)30 b Ft(--enable-w3mux-transport)22 b Fs(--)i(compiles)f(in)g(support)f(for)i(using)e(a)i(prototype)e(of)i (the)g(HTTP-NG)90 2670 y(multiplexing)9 b(transport)h(filter.)h (\(Disabled)f(by)h(default.\))p eop %%Page: 239 240 239 239 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(239)37 183 y Fr(\017)30 b Ft(--enable-zlib-transport)22 b Fs(--)i(compiles)f(in)h(support)e(for)i(using)f Ft(zlib)h Fs(message)g(compression)f(on)90 246 y(messages.)11 b(You)g(will)f (also)h(need)g(to)g(specify)f Fn(--with-zlib=FOO)i Fs(for)f(this)f (transport.)h(\(Disabled)f(by)h(default.\))37 317 y Fr(\017)30 b Ft(--enable-new-keywords-plain)15 b Fs(--)i(normally,)h(keywords)e (added)g(to)h(ISL)g(subsequent)e(to)h(2.0alpha11)90 379 y(begin)9 b(with)f Ft(")p Fs(ILU)p Ft(")p Fs(,)i(to)f(avoid)f (conflicts)h(with)f(user)h(interfaces.)i(However,)f(by)f(throwing)f (this)g(switch,)h(this)f(prefix)90 442 y(will)i(be)h(omitted,)g(and)g (new)f(keywords)g(such)h(as)g Ft(")p Fs(string)p Ft(")f Fs(and)h Ft(")p Fs(state)p Ft(")f Fs(will)g(be)h(recogized)g(directly,) f(rather)i(than)90 504 y(as)f Ft(")p Fs(ilustring)p Ft(")e Fs(and)i Ft(")p Fs(ilustate)p Ft(")p Fs(.)37 575 y Fr(\017)30 b Ft(--disable-omg-idl-support)10 b Fs(--)i(excludes)f(support)g(for)h (parsing)f(interface)h(description)e(files)i(written)f(in)90 638 y(OMG)g(IDL.)h(\(Enabled)e(by)h(default.\))37 709 y Fr(\017)30 b Ft(--enable-idl2isl-support)10 b Fs(--)j(builds)e(old)h (ILU)g(OMG)h(IDL)g(support)e(program)h(called)h Ft(idl2isl)p Fs(.)i(You)90 771 y(will)7 b(need)h(to)g(have)g(a)h(C)p Ft(++)f Fs(compiler)g(\(CFRONT)h(3.0)f(or)g(later\))h(on)f(your)f (path.)j Ft(g++)e Fs(seems)h(to)e(work)h(fine.)j(You)c(will)90 834 y(need)g(to)g(have)g(fetched)g(the)g(source)g(t)o(ar)g(file)g(from) g(`)p Ft(ftp://ftp.)o(parc.xerox)o(.com/pub/il)o(u/misc/idl2)o (isl.tar.gz)p Fs(',)90 896 y(and)17 b(to)g(have)h(unpacked)f(it)f(in)h (the)h Fp(ILUSRC)j Fs(directory,)e(before)f(configuring.)28 b(The)18 b(version)e(of)i(OMG)f(IDL)90 958 y(recognized)11 b(by)g(this)f(parser)h(is)g(no)g(longer)f(current)h(valid)f(OMG)i(IDL.) f(\(Disabled)f(by)h(default.\))37 1030 y Fr(\017)30 b Ft(--enable-xview-support)15 b Fs(--)i(builds)d(the)i(libraries)g(to)g (interface)h(the)f(XView)g(GUI)g(library)g(to)g(the)g(ILU)90 1092 y(main)11 b(loop.)g(\(Disabled)f(by)h(default\))37 1164 y Fr(\017)30 b Ft(--enable-xt-support)13 b Fs(--)j(builds)d(the)h (libraries)g(to)h(interface)g(Xt-based)f(GUI)g(libraries)g(to)h(the)f (ILU)h(main)90 1226 y(loop.)c(\(Disabled)f(by)g(default\))37 1297 y Fr(\017)30 b Ft(--enable-tk-support)13 b Fs(--)i(builds)e(the)h (libraries)f(to)h(interface)h(Tk-based)f(GUI)g(libraries)g(to)g(the)g (ILU)g(main)90 1360 y(loop.)d(\(Disabled)f(by)g(default\))37 1431 y Fr(\017)30 b Ft(--disable-pickle-support)7 b Fs(--)i(prevents)e (including)g(support)g(for)i(a)g(dynamically)e(typed)h(data)h(type,)f (called)90 1494 y Ft(pickle)16 b Fs(in)f(ILU)h(and)g Ft(any)g Fs(in)g(CORBA.)h(This)e(also)g(provides)g(support)g(for)h (associated)f(machinery,)j(such)d(as)90 1556 y(CORBA)d Ft(TypeCode)f Fs(support.)f(\(Enabled)g(by)h(default\))37 1627 y Fr(\017)30 b Ft(--disable-c-support)10 b Fs(--)h(disables)f(C)i (support.)e(\(Enabled)g(by)h(default.\))37 1699 y Fr(\017)30 b Ft(--enable-old-cplusplus-support{=)p Fp(PROG)5 b Ft(})17 b Fs(--)j(enables)g(old)f(original)g(ILU-style)g(C)p Ft(++)h Fs(support.)90 1761 y(This)11 b(support)g(is)h(not)f (compatible)h(with)f(the)h(CORBA)h(2.0)f(style)g(of)g(mapping)f(for)i (C)p Ft(++)p Fs(.)i(If)e Fp(PROG)k Fs(is)12 b(specified,)90 1823 y(treats)f Fp(PROG)17 b Fs(as)12 b(the)f(command)i(to)e(use)g(for) h(C)p Ft(++)g Fs(compilation;)e Fp(PROG)17 b Fs(must)11 b(be)h(the)g(full)f(path)g(name.)j(Default)90 1886 y(is)e(to)g(enable)h (C)p Ft(++)g Fs(support)e(iff)h(the)h(environment)e(variable)h Fp(CXX)17 b Fs(is)12 b(defined,)h(in)f(which)g(case)h Fp(CXX)k Fs(should)11 b(be)90 1948 y(the)g(full)f(path)h(name)h(of)f (the)g(compilation)f(command.)37 2019 y Fr(\017)30 b Ft(--enable-python-support{=)p Fp(PYTHON-HOME)t Ft(})9 b Fs(--)i(enables)g(Python)f(support.)g(If)i Fp(PYTHON-HOME)90 2082 y Fs(is)f(specified,)h(treats)g Fp(PYTHON-HOME)k Fs(as)c(the)f(directory)g(in)h(which)f(the)h(Python)f(system)g(is)h (installed.)g(Default)90 2144 y(is)f(enabled.)37 2216 y Fr(\017)30 b Ft(--enable-perl-support{=)p Fp(PERL-HOME)t Ft(})11 b Fs(--)j(enables)f(Perl)g(support.)j(If)d Fp(PERL-HOME)18 b Fs(is)13 b(specified,)90 2278 y(treats)i Fp(PERL-HOME)20 b Fs(as)15 b(the)g(directory)g(in)g(which)f(the)h(Perl)h(system)f(is)g (installed.)22 b(Default)15 b(is)f(to)h(enable)g(this)90 2340 y(iff)e(the)f(PERL)i(environment)d(variable)i(is)f(defined)g (\(and)h(in)g(that)f(case)h(it)f(should)f(be)i(defined)g(to)f(be)h(the) f(absolute)90 2402 y(filename)f(of)h(the)f(Perl)g(interpreter\).)37 2474 y Fr(\017)30 b Ft(--enable-guile-support)9 b Fs(--)j(enables)f (Guile)f(Scheme)i(support.)e(Default)h(is)g(disabled.)37 2545 y Fr(\017)30 b Ft(--enable-old-python-gc-behavior)5 b Fs(--)k(Prevents)f(Python)f(true)h(objects)g(from)g(being)g(garbage)g (collected)90 2608 y(by)14 b(the)h(Python)e(runtime,)j(even)e(if)h (there)g(are)g(no)f(Python)g(references)h(to)g(the)f(object.)21 b(This)14 b(was)g(the)h(default)f(in)90 2670 y(versions)c(of)h(ILU)g (previous)f(to)h(2.0alpha10.)f(Default)h(is)g(now)f(to)h(not)f(enable)h (this.)p eop %%Page: 240 241 240 240 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(240)37 183 y Fr(\017)30 b Ft(--enable-java-support)9 b Fs(--)j(enables)f(Java)g(support.)f(Default)h(is)f(enabled.)37 258 y Fr(\017)30 b Ft(--enable-security)12 b Fs(--)h(causes)g(the)g (GSS-based)g(security)f(transport)g(filter)g(to)h(be)g(built,)g(and)f (also)h(the)g(GSS)90 321 y(implementation.)d(Default)h(is)f(disabled.) 37 396 y Fr(\017)30 b Ft(--enable-ssl-security)9 b Fs(--)j(causes)f (the)g(SSL)h(mechanism)f(for)h(GSS)g(to)f(be)g(built.)f(Not)h(for)g (public)f(use)h(\(the)90 458 y(public)e(distribution)e(of)j(ILU)g(does) f(not)h(contain)f(the)g(SSL)i(mechanism)f(in)g(either)f(source)h(or)g (binary)g(form)g(because)90 520 y(of)h(our)f(inability)f(to)h(enforce)h (export)f(controls\).)g(Requires)h Fn(--with-rsaref=...)h Fs(and)f Fn(--with-libdes=...)p Fs(.)h(Default)f(is)90 582 y(disabled.)62 695 y(Features)k(that)f(are)h(enabled)f(by)h Ft(--enable-FEATURE)e Fs(may)i(also)f(be)h(explicitly)d(disabled)h (with)h Ft(--disable-)0 757 y(FEATURE)p Fs(.)62 845 y(The)f(particular) g(ANSI)g(C)g(compiler)g(to)g(use)g(may)g(be)g(specified)f(by)h(setting) f(the)g(environment)g(variable)h Ft(CC)g Fs(to)f(the)0 907 y(full)h(path)h(name)h(of)f(the)g(C)g(compilation)f(command)h (before)h(running)d Ft(configure)p Fs(.)20 b(Similarly,)15 b(the)e(particular)h(C)p Ft(++)0 969 y Fs(compiler)e(to)f(use)h(may)g (be)g(specified)f(by)h(setting)e(the)i(environment)f(variable)g Ft(CXX)h Fs(to)g(the)f(full)g(path)h(name)g(of)g(the)g(C)p Ft(++)0 1032 y Fs(compilation)e(command)h(to)g(use.)62 1119 y(Once)j(you've)g(run)f(the)h(configure)f(script,)i(the)e(output)g (is)g(stored)g(in)h(several)g(files.)19 b(The)14 b(file)g(which)f (contains)f(the)0 1182 y(symbols)f(which)g(control)h(all)f(of)i(the)f (Makefiles)g(in)g(the)f(system)h(is)g(in)g Fp(ILUSRC)t Fs(/imake/ilu.defs.new.)h(If)g(you)e(wish)h(to)0 1244 y(fiddle)e(with)h(compiler)g(options)e(or)i(things)e(of)j(that)e(sort,) h(that's)g(the)f(file)h(to)g(hack,)h(before)f(doing)f(the)h(make.)0 1369 y Fn(17.2.4.2)22 b(Manual)15 b(Fixups)g(for)g(Threading)62 1473 y Fs(Sadly,)d(our)f(autoconf)g(stuff)g(is)g(not)g(yet)g(fully)g (up)g(to)g(the)g(task)g(of)h(configuring)d(for)j(use)f(of)h(threads;)f (you)g(sometimes)0 1536 y(have)16 b(to)f(do)g(a)h(manual)f(step)g(or)h (two,)g(before)g(and/or)f(after)h(running)e Ft(configure)p Fs(.)25 b(This)14 b(is)h(better)g(than)h(it)f(used)g(to)0 1598 y(be;)f(manual)f(fixups)f(should)f(no)i(longer)f(be)i(required)e (for)i(Solaris)e(2,)i(OSF)g(3--4,)g(IRIX)f(6.2--6.7,)h(Linux)e(2.0,)i (or)f(AIX)0 1660 y(4.1.4--4.4.)62 1748 y(On)19 b(some)g(operating)f (systems,)j(linking)c(POSIX)j(threads)e(programs)h(requires)g(a)h (special)e(flag,)j Ft(-lpthread)p Fs(,)0 1810 y(to)g(appear)g(at)g(the) g(end)g(of)g(the)g(linkage)f(command)i(line.)40 b(On)21 b(others,)i(the)e(special)g(flag)g(is)f Ft(-lthreads)h Fs(or)g Ft(-)0 1872 y(lpthreads)p Fs(.)43 b(If)23 b(you)e(operating)g (system)g(is)h(not)f(one)h(of)g(those)f(listed)f(above)i(and)g(you've)f (configured)g(with)0 1935 y Ft(--enable-os-threads)p Fs(,)d(you)g(should)e(find)i(out)f(out)g(what)h(the)f(appropriate)g (library)h(for)g(your)f(system)h(is)f(and)0 1997 y(then)f(edit)g(`)p Fp(ILUSRC)t Ft(/imake/ilu.defs.new)p Fs(')g(after)h(running)f Ft(configure)g Fs(but)g(before)h(running)f Ft(make)p Fs(.)28 b(You)0 2059 y(should)10 b(find)i(a)g(definition)e(of)i(the)g Ft(make)g Fs(variable)f Ft(SYSAUX_LIBRARIES)g Fs(and)h(fix)g(it)f(\(if) h(necessary\))g(to)g(end)f(with)g(the)0 2121 y(appropriate)f Ft(-l)p Fp(whatever)15 b Fs(for)c(your)g(system's)f(threads.)62 2209 y(On)f(some)f(operating)g(systems)f(the)i(C)g(and)f(C)p Ft(++)h Fs(compilers)f(require)g(a)h(certain)g(preprocessor)f(symbol)f (be)i Ft(#define)p Fs(d)0 2271 y(when)k(compiling)f(sources)h(to)h(be)f (included)g(in)g(threaded)g(programs)g(\(and)h(it's)f(OK)g(to)g Ft(#define)h Fs(these)f(symbols)f(for)0 2333 y(single-threaded)d (programs)h(too\).)h(If)g(configuring)d(to)i(include)g(OS-supplied)f (thread)h(support)f(on)h(an)g(operating)g(system)0 2396 y(not)e(listed)g(above)h(but)f(requiring)g(such)h(a)g(symbol)g (definition,)e(make)j(sure)f(you)g(also)f(explicitly)f(supply)h(a)h(C)h (compilation)0 2458 y(command,)i(and)f(that)g(it)f(includes)g Ft(-D)p Fp(whatever)k Fs(to)d Ft(#define)g Fs(this)f(symbol.)62 2545 y(On)i(Linux,)e(when)i(using)e(Provenzano's)h(pthreads)g(\(POSIX)h (threads\))f(library,)h(you)f(use)g(special)g(scripts)f(provided)0 2608 y(instead)h(of)h Ft(gcc)g Fs(and)g Ft(g++)p Fs(.)j(Those)c (scripts)g(are)i(normally)f(located)f(at)h(`)p Ft (/usr/local/pthreads/bin/pgcc)p Fs(')e(and)0 2670 y(`)p Ft(/usr/local/pthreads/bin/pg++)p Fs('.)f(Use)g(the)f(facilities)g (described)g(above)h(to)g(configure)f(these)h(scripts)f(as)h(your)p eop %%Page: 241 242 241 241 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(241)0 183 y(C)14 b(and)f(C)p Ft(++)h Fs(\(if)g(you're)f(doing)g(C)p Ft(++)p Fs(\))h(compilers.)k(It's)13 b(OK)g(to)g(compile)h(even)f (single-threaded)f(programs)h(this)g(way.)0 246 y(On)e(our)g(Linux)f (systems,)g(these)h(scripts)f(produce)h(the)g(following)e(warning)h (messages)h(when)g(linking)e(executables:)120 333 y Ft(bfd)25 b(assertion)f(fail)g(/opt/release/pub/bin/binutils/bfd/elf32-)o (i386.c:624)120 382 y(bfd)h(assertion)f(fail)g (/opt/release/pub/bin/binutils/bfd/elfcod)o(e.h:4716)62 495 y Fs(Despite)18 b(the)g(dire-sounding)e(warnings,)j(the)f(linker)f (seems)i(to)f(produce)f(working)g(executables.)32 b(Provenzano)0 557 y(knows)10 b(about)g(this,)g(but)h(hasn't)f(tracked)h(it)g(down)f (yet.)h(Sadly,)g(the)g(warning)f(messages)h(trick)g(our)g(autoconf)f (script)g(into)0 619 y(thinking)h(this)h(compilation)g(failed,)i(and)f (thus)g(that)f(the)i(requested)e(compilers)h(aren't)h(ANSI-C)g (compliant.)j(To)c(cope)0 681 y(with)c(this,)g(we)h(configure)g(to)f (compile)g(with)g(scripts)g(that)g(call)h(the)g(Provenzano)f(scripts)g (and)h(filter)f(out)g(these)h(messages;)0 744 y(here's)h(the)g(one)g (for)h(C:)120 831 y Ft(#!/bin/sh)24 b(-f)120 881 y (/usr/local/pthreads/bin/pgcc)e($*)j(2>/tmp/$$-cctmp)120 930 y(ccstatus=$?)120 980 y(fgrep)f(-v)h("bfd)g(assertion)f(fail)g (/opt/release/pub/bin/binutils/bfd/elf32-i)o(386.c:624")120 1030 y(&2)120 1130 y(rm)g(-f)f(/tmp/$$-cctmp)120 1180 y(exit)h($ccstatus)0 1302 y Fo(17.2.5)g(Building)62 1406 y Fs(Now)d(that)f(you)g(have)h(configured)f(the)g(release,)k(do)d(the)f (following)f(to)h(build)g(the)g(system.)43 b(Note)21 b(that)g(the)0 1468 y(capitalization)9 b(of)i(the)g(arguments)g(to)g Ft(make)g Fs(is)g(important.)26 1555 y(1.)30 b(Set)11 b(your)g(working)f(directory)g(to)h Fp(ILUSRC)t Fs(:)210 1629 y Ft(\045)25 b Fj(cd)g Fp(ILUSRC)26 1702 y Fs(2.)30 b(Build)10 b(the)h(system)g(with)f(the)h(command:)210 1776 y Ft(\045)25 b Fj(make)26 1849 y Fs(3.)30 b(You)11 b(can)g(then)g(try)g(a)g(simple)g(test)f(with:)210 1923 y Ft(\045)25 b Fj(cd)g Fp(ILUSRC)t Fj(/examples/test1)210 1973 y Ft(\045)g Fj(make)f(test)210 2022 y Ft (../../stubbers/c/c-stubber)47 b(Test1.isl)210 2072 y(header)24 b(file)h(for)g(interface)f(Test1)g(to)h(./Test1.h...)210 2122 y(common)f(code)h(for)g(interface)f(Test1)g(to)h (./Test1-common.c...)210 2172 y(code)g(for)f(surrogate)g(stubs)h(of)f (interface)g(Test1)h(to)g(./Test1-surrogate.c...)210 2222 y(code)g(for)f(true)h(stubs)f(of)h(interface)f(Test1)g(to)h (./Test1-true.c...)210 2271 y(../../stubbers/c/c-stubber)47 b(Test2.isl)210 2321 y(header)24 b(file)h(for)g(interface)f(Test2)g(to) h(./Test2.h...)210 2371 y(common)f(code)h(for)g(interface)f(Test2)g(to) h(./Test2-common.c...)210 2421 y(code)g(for)f(surrogate)g(stubs)h(of)f (interface)g(Test2)h(to)g(./Test2-surrogate.c...)210 2471 y(code)g(for)f(true)h(stubs)f(of)h(interface)f(Test2)g(to)h (./Test2-true.c...)210 2521 y(../../stubbers/c/c-stubber)47 b(Test3.isl)210 2570 y(header)24 b(file)h(for)g(interface)f(Test3)g(to) h(./Test3.h...)210 2620 y(common)f(code)h(for)g(interface)f(Test3)g(to) h(./Test3-common.c...)210 2670 y(code)g(for)f(surrogate)g(stubs)h(of)f (interface)g(Test3)h(to)g(./Test3-surrogate.c...)p eop %%Page: 242 243 242 242 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(242)210 183 y Ft(code)25 b(for)f(true)h(stubs)f(of)h(interface)f (Test3)g(to)h(./Test3-true.c...)210 233 y(rm)g(-f)f(clnt.o)210 283 y(cc)h(-c)49 b(-g)25 b(-I.)g(-I../../runtime/c)e (-I../../runtime/kernel)g(clnt.c)210 333 y(rm)i(-f)f(Test1-surrogate.o) 210 382 y(cc)h(-c)49 b(-g)25 b(-I.)g(-I../../runtime/c)e (-I../../runtime/kernel)g(Test1-surrogate.c)210 432 y(rm)i(-f)f (Test1-common.o)210 482 y(cc)h(-c)49 b(-g)25 b(-I.)g(-I../../runtime/c) e(-I../../runtime/kernel)g(Test1-common.c)210 532 y(rm)i(-f)f (Test2-surrogate.o)210 582 y(cc)h(-c)49 b(-g)25 b(-I.)g (-I../../runtime/c)e(-I../../runtime/kernel)g(Test2-surrogate.c)210 632 y(rm)i(-f)f(Test2-common.o)210 681 y(cc)h(-c)49 b(-g)25 b(-I.)g(-I../../runtime/c)e(-I../../runtime/kernel)g(Test2-common.c)210 731 y(rm)i(-f)f(Test3-surrogate.o)210 781 y(cc)h(-c)49 b(-g)25 b(-I.)g(-I../../runtime/c)e(-I../../runtime/kernel)g (Test3-surrogate.c)210 831 y(rm)i(-f)f(Test3-common.o)210 881 y(cc)h(-c)49 b(-g)25 b(-I.)g(-I../../runtime/c)e (-I../../runtime/kernel)g(Test3-common.c)210 930 y(rm)i(-f)f(client)210 980 y(cc)50 b(-g)24 b(-I.)h(-o)g(client)49 b(clnt.o)24 b(Test1-surrogate.o)g(Test1-common.o)f(\\)260 1030 y(Test2-surrogate.o) g(Test2-common.o)h(Test3-surrogate.o)f(Test3-common.o)h(\\)260 1080 y(../../runtime/c/libilu-c.a)e(../../runtime/kernel/libilu.a)210 1130 y(rm)j(-f)f(srvr.o)210 1180 y(cc)h(-c)49 b(-g)25 b(-I.)g(-I../../runtime/c)e(-I../../runtime/kernel)g(srvr.c)210 1229 y(rm)i(-f)f(Test1-true.o)210 1279 y(cc)h(-c)49 b(-g)25 b(-I.)g(-I../../runtime/c)e(-I../../runtime/kernel)g(Test1-true.c)210 1329 y(rm)i(-f)f(Test3-true.o)210 1379 y(cc)h(-c)49 b(-g)25 b(-I.)g(-I../../runtime/c)e(-I../../runtime/kernel)g(Test3-true.c)210 1429 y(rm)i(-f)f(server)210 1478 y(cc)50 b(-g)24 b(-I.)h(-o)g(server)49 b(srvr.o)24 b(Test1-common.o)g(Test1-true.o)g(\\)260 1528 y(Test2-common.o)f(Test3-common.o)h(Test3-true.o)g(\\)260 1578 y(../../runtime/c/libilu-c.a)e(../../runtime/kernel/libilu.a)210 1628 y(./testserver)210 1678 y(Starting)i(server...)210 1727 y(Running)g(client)h(against)f(server...)210 1777 y(Client)g(run)h(successful.)210 1827 y(Killing)f(server...)210 1877 y(./testserver:)g(27469)g(Terminated)210 1927 y(Exiting)g(with)h (status)f(0.)210 1977 y(\045)26 2058 y Fs(4.)30 b(If)12 b(the)f(build)e(goes)i(well,)g(install)f(the)g(system)h(with)f(the)h (command)210 2140 y Ft(\045)25 b Fj(cd)g Fp(ILUSRC)210 2190 y Ft(\045)g Fj(make)f(Install)26 2271 y Fs(5.)30 b(After)11 b(the)g(installation)e(is)h(complete,)i(you)e(may)i(remove)f (extra)h(files)e(in)h Fp(ILUSRC)16 b Fs(with)10 b(the)h(command)210 2353 y Ft(\045)25 b Fj(make)f(Clean)90 2454 y Fs(You)11 b(may)g(wish)g(to)f(use)h Ft(make)g(Clean)g Fs(at)g(any)g(time,)h(to)f (get)f(your)h(system)g(into)f(a)h(consistent)f(state.)26 2536 y(6.)30 b(If)13 b(you)g(change)f(the)h(configuration)e(files,)i (you)f(should)f(clean)i(the)g(system)f(with)g(the)h(command)g(`)p Ft(make)e(Clean)p Fs(',)90 2598 y(and)g(redo)g(the)g(installation)e (starting)h(at)h(step)g(2.)h(If)g(you)e(run)h(into)g(problems)f(that)h (can)h(be)f(fixed)g(without)e(changing)90 2660 y(the)i(configuration)e (files,)i(you)g(can)g(re-build)f(the)h(system)g(by)g(starting)f(at)h (step)f(3.)p eop %%Page: 243 244 243 243 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(243)0 183 y Fo(17.2.6)25 b(Environment)15 b(Variables)62 293 y Fs(ILU)g(tools)f(use)h(a)g(number)g(of)g(UNIX)g(environment)f (variables)g(under)h(the)f(covers.)23 b(Note)15 b(three)g(distinct)e (phases)0 355 y(when)g(these)g(variables)g(might)f(have)h (significance:)h(\(1\))g(when)f(building)e(and)i(installing)e(ILU,)j (\(2\))f(when)g(developing)0 418 y(an)e(ILU)g(application,)f(and)h (\(3\))g(when)g(running)f(an)h(ILU)g(applicaiton.)37 511 y Fr(\017)30 b Ft(ILUHOME)p Fs(:)10 b(there)i(are)g(C)f (preprocessor)g(and)g(make)h(variables)e(of)h(this)g(name,)h(holding)d (the)i(value)g(of)g Fp(ILUHOME)p Fs(.)90 573 y(The)f(environment)f (variable)h(of)g(this)f(name)i(is)f(rarely,)g(if)h(ever,)g (significant.)e(The)h(only)f(possibilities)e(are)k(in:)e(phase)90 635 y(2)i(use)g(of)g(the)g(LISP)h(stubber,)f(phase)f(3)h(use)g(of)h (LISP,)g(and)f(phase)g(3)g(use)g(of)g(Scheme.)37 716 y Fr(\017)30 b Fs(The)13 b(environment)g(variables)g Ft(ILUPATH)g Fs(and)g Ft(ILUPATH_NO_ILUHOME)g Fs(are)h(significant)e (to)h(the)g(stubbers)f(and)90 778 y(other)c(interface-processing)g (tools,)g(normally)g(used)h(in)f(phase)h(\(2\).)h(They)f(collectively)e (define)i(a)g(set)f(of)h(directories)90 841 y(to)f(be)h(appended)f(to)g (the)g(interface)h(search)g(path)f(given)g(on)g(the)g(relevant)g (tool's)g(command)h(line.)h(If)f Ft(ILUPATH)f Fs(is)g(not)90 903 y(defined,)j(`)p Ft(.)p Fs(')h(and)f(`)p Fp(ILUHOME)t Ft(/interfaces)p Fs(')g(are)g(appended.)h(If)f Ft(ILUPATH)g Fs(is)g(defined,)g(it)g(should)f(contain)g(a)90 965 y(colon-separated)g (list)f(of)i(directories,)g(and)f(they)h(are)g(appended,)g(followed)f (---)h(unless)f Ft(ILUPATH_NO_ILUHOME)90 1027 y Fs(is)h(defined)f (\(with)h(any)g(value\))g(---)g(by)g(`)p Fp(ILUHOME)t Ft(/interfaces)p Fs('.)37 1108 y Fr(\017)30 b Fs(You)16 b(may)i(want)e(your)g Ft(PATH)h Fs(environment)f(variable)g(to)h (include)f(the)g(directory)g(`)p Fp(ILUHOME)t Ft(/bin)p Fs(')h(during)90 1171 y(phase)g(\(2\).)30 b(This)16 b(makes)h(it)g (possible)e(to)i(invoke)f(ILU)h(development)f(tools)g(\(e.g.,)k (stubbers,)e(TIM)g(tools\))e(by)90 1233 y(short)g(names.)28 b(Most)17 b(of)g(the)f(ILU)h(development)f(tools)f(can)i(be)g(invoked)e (by)i(their)f(full)g(pathnames,)i(without)90 1295 y(`)p Fp(ILUHOME)t Ft(/bin)p Fs(')d(being)g(on)f(your)h Ft(PATH)p Fs(;)i(some)e(of)g(the)g(TIM)h(tools)d(require)i(`)p Fp(ILUHOME)t Ft(/bin)p Fs(')h(to)e(be)i(on)90 1357 y(your)11 b Ft(PATH)p Fs(.)37 1438 y Fr(\017)30 b Fs(After)11 b(phase)g(\(1\),)h (your)f Ft(MANPATH)f Fs(variable)h(can)g(have)h(the)f(directory)f(`)p Fp(ILUHOME)t Ft(/man)p Fs(')h(on)g(it.)37 1519 y Fr(\017)30 b Fs(If)20 b(you)e(are)i(using)e(Common)i(Lisp,)g(the)f(portable)g (DEFSYSTEM)g(included)f(with)g(ILU)i(uses)e(the)h(value)g(of)90 1581 y Ft(SYSDCLPATH)14 b Fs(to)g(find)h(system)f(descriptions.)20 b(It)15 b(should)e(be)i(a)g(colon-separated)f(list)g(of)h(directories.) 21 b(A)15 b(good)90 1643 y(initial)7 b(value)i(might)g(be)g Ft(.:${ILUHOME}/lisp)p Fs(.)h(See)g(Appendix)d(A)i(of)h(the)f (reference)h(manual)f(for)h(more)f(details)90 1706 y(on)i(the)g (portable)f(DEFSYSTEM.)37 1786 y Fr(\017)30 b Fs(If)20 b(you)g(are)g(using)f(Python,)j(in)d(phase)h(\(3\))g(the)f(environment) g(variable)h Ft(PYTHONPATH)f Fs(should)f(include)h(the)90 1849 y(directory)10 b(in)h(which)g(the)g Ft(ilu)g Fs(library)f(for)i (Python)e(has)h(been)g(installed;)e(that's)h(normally)h(`)p Fp(ILUHOME)t Ft(/lib)p Fs('.)37 1930 y Fr(\017)30 b Fs(If)22 b(you)f(are)h(using)e(the)h(language)g(Java,)j(make)e(sure)g(the)f Ft(java)g Fs(interpreter)g(is)g(on)g(your)g Ft(PATH)p Fs(,)k(and)c(that)90 1992 y(`)p Fp(ILUHOME)t Ft(/bin)p Fs(')13 b(is)g(on)f(your)h Ft(PATH)p Fs(.)k(The)c(value)g(of)g(the)g (environment)f(variable)g Ft(CLASSPATH)h Fs(should)e(have)90 2054 y(`)p Fp(ILUHOME)t Ft(/lib/ilu.jar)p Fs(')i(on)g(it,)h(or)f(if)h (on)f(Windows,)g(`)p Fp(ILUHOME)t Ft(/lib/javaclasses)p Fs(')f(on)h(it.)18 b(The)90 2116 y(value)11 b(of)g(the)g(environment)f (variable)h Ft(LD_LIBRARY_PATH)f Fs(should)f(have)j(`)p Fp(ILUHOME)t Ft(/lib)p Fs(')f(on)g(it.)37 2197 y Fr(\017)30 b Fs(If)7 b(you)g(are)g(using)g(Guile)g(Scheme,)g(the)g(value)g(of)g (the)g(environment)g(variabl)o(e)g Ft(LD_LIBRAR)o(Y_PATH)t Fs(should)g(include)90 2259 y(the)k(directory)f(in)g(which)g(the)h Ft(ilu)g Fs(library)f(for)h(Guile)f(has)h(been)g(installed;)e(that's)h (normally)g(`)p Fp(ILUHOME)t Ft(/lib)p Fs('.)90 2322 y(Additionally,)e(the)j(environment)f(variable)g Ft(SCHEME_LOAD_PATH)f Fs(should)h(contain)f(`)p Fp(ILUHOME)t Ft(/guile)p Fs(',)j(so)90 2384 y(that)f(the)f(ILU)i(Guile)e(files)h(can)g(be)g(found.)37 2465 y Fr(\017)30 b Fs(During)13 b(phase)i(\(2\),)h(the)e(variable)g Ft(ISLDEBUG)g Fs(can)h(optionally)d(be)i(set)h(to)f(any)g(value)g(to)g (enable)g(tracing)g(in)g(the)90 2527 y(ISL)e(parser.)37 2608 y Fr(\017)30 b Fs(During)11 b(phase)g(\(2\),)i(the)f(variable)f Ft(ILU_TYPE_UID_VERBOSE)f Fs(can)i(optionally)e(be)i(set)f(to)h(any)f (value)h(to)f(enable)90 2670 y(tracing)g(the)g(calculations)e(of)i (type)g(UIDs)g(in)f(the)h(stubbers.)p eop %%Page: 244 245 244 244 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(244)37 183 y Fr(\017)30 b Fs(During)13 b(phase)h(\(3\),)h(the)f (variable)f Ft(ILU_DEBUG)h Fs(can)g(be)g(optionally)e(be)i(set)g(to)f (a)i(colon-separated)e(list)g(of)h(trace)90 246 y(values)j(to)f(enable) h(tracing)g(in)g(the)g(ILU)g(runtime)g(kernel.)29 b(See)18 b(Section)f(16.7)g([Debugging)e(ILU)i(Programs],)90 308 y(page)11 b(231,)g(for)g(more)h(information.)37 380 y Fr(\017)30 b Fs(If)25 b(you)f(are)h(using)e(the)h(``shared)h (filesystem'')f(approach)g(to)g(ILU)h(simple)f(binding,)i(the)e (default)g(direc-)90 443 y(tory)i(for)g(registration)e(files)i(may)h (be)f(overridden)f(at)h(run-time)g(by)g(setting)f(the)g(environment)h (variable)90 505 y Ft(ILU_BINDING_DIRECTORY)9 b Fs(to)i(the)g(path)g (of)g(a)g(different)g(directory.)37 578 y Fr(\017)30 b Fs(If)21 b(you)f(are)h(using)e(the)h(``ILU)g(service'')h(approach)f (to)g(ILU)g(simple)g(binding,)h(the)f(default)g(values)g(for)g(the)90 640 y Fp(REALM-NAME)p Fs(,)h Fp(HOST)p Fs(,)f(and)g Fp(PORT)k Fs(may)d(be)f(overridden)f(by)h(setting)e(the)i(value)f(of)h(the)g (environment)90 702 y(variable)12 b Ft(ILU_BINDING_SERVICE)e Fs(to)i(a)g(string)f(of)h(the)g(form)g Ft(")p Fp(realm-name)s Ft(:)p Fp(host)t Ft(:)p Fp(port)t Ft(")p Fs(.)i(Any)d(of)h(the)g(three) 90 765 y(fields)i(may)h(be)f(empty,)i(so)e(you)g(could)g(override)g (just)g(the)g(port,)h(for)g(example,)h(by)e(using)g(a)g(value)h(of)f (the)h(form)90 827 y Ft("::2034")p Fs(,)10 b(which)g(would)f(mean)i(to) e(use)h(the)g(default)g(values)f(for)i(REALM-NAME)f(and)g(HOST,)h(and)f (the)g(value)90 889 y(of)h Ft(2034)g Fs(for)h(the)e(port.)0 1010 y Fo(17.2.7)25 b(Testing)15 b(the)g(Build)62 1113 y Fs(There)e(are)h(several)f(ways)f(to)h(test)f(the)h(build.)i(The)e (most)f(straightforward)g(is)g(to)h(build)e(and)i(install)e(it)i (somewhere.)0 1176 y(Set)f(up)g(your)f(environment)g(variables)g(as)h (described)g(above.)h(Then)f(make)g(a)g(scratch)g(directory,)g(which)f (we'll)h(refer)h(to)0 1238 y(as)e Fp(TESTDIR)p Fs(,)h(and)f(do)g(the)g (following:)120 1325 y Ft(\045)25 b Fj(cd)g Fp(TESTDIR)120 1375 y Ft(\045)g Fj(cp)g Fp(ILUHOME)t Fj(/examples/test1/*)e(.)120 1425 y Ft(\045)i Fj(ilumkmf)120 1474 y Ft(\045)g Fj(make)f(client)h (server)120 1524 y Fp(ILUHOME)t Ft(/bin/c-stubber)48 b(Test1.isl)120 1574 y(header)24 b(file)h(for)g(interface)f(Test1)g(to) h(./Test1.h...)120 1624 y(common)f(code)h(for)g(interface)f(Test1)g(to) h(./Test1-common.c...)120 1674 y(code)g(for)f(surrogate)g(stubs)h(of)f (interface)g(Test1)h(to)g(./Test1-surrogate.c...)120 1724 y(code)g(for)f(true)h(stubs)f(of)h(interface)f(Test1)g(to)h (./Test1-true.c...)120 1773 y Fp(ILUHOME)t Ft(/bin/c-stubber)48 b(Test2.isl)120 1823 y(header)24 b(file)h(for)g(interface)f(Test2)g(to) h(./Test2.h...)120 1873 y(common)f(code)h(for)g(interface)f(Test2)g(to) h(./Test2-common.c...)120 1923 y(code)g(for)f(surrogate)g(stubs)h(of)f (interface)g(Test2)h(to)g(./Test2-surrogate.c...)120 1973 y(code)g(for)f(true)h(stubs)f(of)h(interface)f(Test2)g(to)h (./Test2-true.c...)120 2022 y Fp(ILUHOME)t Ft(/bin/c-stubber)48 b(Test3.isl)120 2072 y(header)24 b(file)h(for)g(interface)f(Test3)g(to) h(./Test3.h...)120 2122 y(common)f(code)h(for)g(interface)f(Test3)g(to) h(./Test3-common.c...)120 2172 y(code)g(for)f(surrogate)g(stubs)h(of)f (interface)g(Test3)h(to)g(./Test3-surrogate.c...)120 2222 y(code)g(for)f(true)h(stubs)f(of)h(interface)f(Test3)g(to)h (./Test3-true.c...)120 2271 y(rm)g(-f)f(clnt.o)120 2321 y(cc)h(-c)f(-g)h(-I.)g(-I)p Fp(ILUHOME)t Ft(/include)49 b(clnt.c)120 2371 y(rm)25 b(-f)f(Test1-surrogate.o)120 2421 y(cc)h(-c)f(-g)h(-I.)g(-I)p Fp(ILUHOME)t Ft(/include)49 b(Test1-surrogate.c)120 2471 y(rm)25 b(-f)f(Test1-common.o)120 2521 y(cc)h(-c)f(-g)h(-I.)g(-I)p Fp(ILUHOME)t Ft(/include)49 b(Test1-common.c)120 2570 y(rm)25 b(-f)f(Test2-surrogate.o)120 2620 y(cc)h(-c)f(-g)h(-I.)g(-I)p Fp(ILUHOME)t Ft(/include)49 b(Test2-surrogate.c)120 2670 y(rm)25 b(-f)f(Test2-common.o)p eop %%Page: 245 246 245 245 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(245)120 183 y Ft(cc)25 b(-c)f(-g)h(-I.)g(-I)p Fp(ILUHOME)t Ft(/include)49 b(Test2-common.c)120 233 y(rm)25 b(-f)f (Test3-surrogate.o)120 283 y(cc)h(-c)f(-g)h(-I.)g(-I)p Fp(ILUHOME)t Ft(/include)49 b(Test3-surrogate.c)120 333 y(rm)25 b(-f)f(Test3-common.o)120 382 y(cc)h(-c)f(-g)h(-I.)g(-I)p Fp(ILUHOME)t Ft(/include)49 b(Test3-common.c)120 432 y(rm)25 b(-f)f(client)120 482 y(cc)h(-g)f(-o)h(client)g(clnt.o)f (Test1-surrogate.o)f(Test1-common.o)h(\\)170 532 y(Test2-surrogate.o)f (Test2-common.o)h(Test3-surrogate.o)f(\\)170 582 y(Test3-common.o)48 b Fp(ILUHOME)t Ft(/lib/libilu-c.a)24 b(\\)170 632 y Fp(ILUHOME)t Ft(/lib/libilu.a)120 681 y(rm)h(-f)f(srvr.o)120 731 y(cc)h(-c)f(-g)h (-I.)g(-I)p Fp(ILUHOME)t Ft(/include)49 b(srvr.c)120 781 y(rm)25 b(-f)f(Test1-true.o)120 831 y(cc)h(-c)f(-g)h(-I.)g(-I)p Fp(ILUHOME)t Ft(/include)49 b(Test1-true.c)120 881 y(rm)25 b(-f)f(Test3-true.o)120 930 y(cc)h(-c)f(-g)h(-I.)g(-I)p Fp(ILUHOME)t Ft(/include)49 b(Test3-true.c)120 980 y(rm)25 b(-f)f(server)120 1030 y(cc)h(-g)f(-o)h(server)g(srvr.o)f (Test1-common.o)f(Test1-true.o)h(\\)170 1080 y(Test2-common.o)f (Test3-common.o)h(Test3-true.o)g(\\)170 1130 y Fp(ILUHOME)t Ft(/lib/libilu-c.a)f Fp(ILUHOME)t Ft(/lib/libilu.a)120 1180 y(\045)i Fj(./server)f(&)120 1229 y Ft([1])h(7079)120 1279 y(\045)g(exported)f(ilu:Test1-Server/Test1_Initial_Object;)o (ilu\0453AiX2w)o(6hjR-...)120 1329 y(\045)h Fj(./client)120 1379 y Ft(Test1.O1.U-CSS-to-U)120 1429 y(u._d=5,)f(u._u.boolean)g(=)h (1,)g(u._u.O1)f(=)h(0x1ffee7c)120 1478 y(Test1.O1.f-CSS-to-R0)120 1528 y(ro->i=9)120 1578 y(Test1.O1.R-ScS-to-F)120 1628 y(f=39.700001)120 1678 y(Test1.O1.a-RO)120 1727 y(Test1.O1.get-O2)120 1777 y(got)g(O2,)f(sbh)h(=)g(ilu:Test1-SunRPC-Server/1;ilu\0453AaUt)o (ts57Ywbp2f)o(xe6+-...)120 1827 y(Test1.o2.OO-A0-to-CSS)120 1877 y(Test1.O2.R-I-A1-to-I-A0)120 1927 y(Test1.O1.get-O3)120 1977 y(making)f(O3...)120 2026 y(got)h(O3,)f(sbh)h(=)g (ilu:Test1-Server/2;ilu\0453An+eRrvAZ8J)o(B9v2qoX7sJ)o(GPxdX...)120 2076 y(Test1.O3.RS-R-to-R-IS)120 2126 y(Test1.O3.O1-U-to-U)120 2176 y(u._d=3,)f(u._u.boolean)g(=)h(0,)g(u._u.O1)f(=)h(0xd2b78)120 2226 y(Test1.O1.get-O3)120 2275 y(got)g(O3,)f(sbh)h(=)g (ilu:Test1-Server/3;ilu\0453Ab-mNa9uj0T)o(sJAp7YrlEh)o(0AUfX...)120 2325 y(Test3.O.RS-R-to-R-IS)120 2375 y(Test3.O.O1-U-to-U\(0xd7520,)d ({3}\))120 2425 y(u._d=3,)i(u._u.boolean)g(=)h(0,)g(u._u.O1)f(=)h (0xd2b78)120 2475 y(Test3.O.I-to-Test1U\(397\))120 2524 y(Test3_O_I_to_Test1U:)48 b(u2._d=5,)24 b(u2._u.boolean)g(=)h(1,)f (u2._u.O1)g(=)h(0x10a88d0)120 2574 y(Test1.O1.get-O3)120 2624 y(making)f(O4...)p eop %%Page: 246 247 246 246 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(246)120 183 y Ft(got)25 b(O3,)f(sbh)h(=)g (ilu:Test1-Server/4;ilu\0453Ad8sZGQLLpV)o(sJ2PBL5BoI)o(X45qO...)120 233 y(Test1.O4.R_to_R)f(\(12345.6789000000\))f(=>)h(1020304.0506070800) 120 283 y(doubles:)49 b(r1)25 b(is)g(12345.6789000000,)e(r2)i(is)f (1020304.0506070800)120 333 y(\045)0 450 y Fs(You)12 b(can)g(proceed)h(to)f(test)f(the)h(various)f(other)h(clients)f(and)i (servers)f(in)g(different)g(languages)f(against)g(each)i(other.)h(See)0 512 y(the)d(file)g(`)p Fp(ILUHOME)t Ft(/examples/test1/README)p Fs(')e(for)j(more)g(information.)0 644 y Fo(17.2.8)25 b(Notes)16 b(on)e(Specific)g(Systems)0 793 y Fn(17.2.8.1)22 b(AIX)15 b(4.2)62 899 y Fs(From)e(Yongjun)d(Zhang,)h Ft(zhang@quickturn.com)p Fs(:)f(``When)i(using)e(plain)h(xlc)h(on)f (AIX)h(4.2,)g(when)f(configured)0 962 y(with)e(support)f(for)i(OS)g (threads)g(with)f(--enable-os-threads,)g(my)h(images)g(would)f (SEGFAULT.)h(Switching)e(to)h(the)h(xlc)p 1922 962 14 3 v 16 w(r)0 1024 y(compiler)h(fixed)g(that.'')0 1156 y Fn(17.2.8.2)22 b(HP/UX)62 1262 y Fs(From)d Ft(hassan@db.stanford.edu) p Fs(:)j(``In)d(order)f(to)f(get)h(ILU)g(2.0a)g(to)g(compile)f(on)h (HP/UX,)g(I)g(had)g(to)g(set)0 1324 y(the)f(CC)g(environment)f (variable)h(to)f(the)h(following)e(before)i(running)f(configure:)22 b Ft(setenv)10 b(CC)h("/bin/cc)g(-Aa)g(+z)0 1387 y(-D_HPUX_SOURCE")p Fs(.'')0 1519 y Fn(17.2.8.3)22 b(DEC)16 b(ALPHA)f(with)g(OSF)g(OS)62 1625 y Fs(From)k Ft(hassan@db.stanford.edu)p Fs(:)k(``Use)18 b Ft(cc)g Fs(instead)f(of)h Ft(gcc)g Fs(as)h(the)e(C)i(compiler,)h(and) e(make)h(sure)f(to)0 1687 y(include)10 b(the)h(`-taso')g(switch.'')62 1777 y(From)h Ft(jg@w3.org)p Fs(:)e(``I)h(built)f([ILU)g(2.0)h(alpha)g (on)f(OSF)i(3.2B])f(without)e(the)h(`-taso')h(switch.)f(Is)h(this)f (still)f(needed?)0 1839 y Ft(c-stubber)i Fs(certainly)f(ran)h(without)f (it)g(this)g(release.'')0 1972 y Fn(17.2.8.4)22 b(SunOS)17 b(4.1.x)62 2078 y Fs(Note)c(that)f(the)h(default)f(Sun)h(C)g(compiler)g (is)f(not)g(ANSI)i(C,)f(nor)g(is)f Ft(gcc)h Fs(when)g(installed)e (against)h(the)g(normal)h(Sun)0 2140 y(header)h(files)g(and)g(`)p Ft(/lib/libc.a)p Fs('.)19 b(You)14 b(will)f(have)h(to)g(use)g(either)f Ft(gcc)h Fs(with)f(the)h(GNU)g(C)g(Library)g(glibc,)g(or)g(the)0 2202 y(SunPro)d(ANSI)h(C)f(compiler)g Ft(acc)p Fs(,)h(or)f(Lucid)f (Energize)h Ft(lcc)p Fs(,)h(or)f(some)g(other)g(ANSI)g(compiler.)0 2349 y Fu(17.3)29 b(Examples)62 2456 y Fs(The)i(following)e(example)i (uses)f(of)h(ILU)f(are)i(provided)d(in)i(the)f(installed)f(tree)i(as)g (subdirectories)e(of)0 2518 y(`)p Fp(ILUHOME)t Ft(/examples/)p Fs(')d(\(those)h(of)g(any)f(given)h(language)f(are)h(listed)f(roughly)g (in)g(order)h(of)g(increasing)0 2580 y(complexity/obscurity)o(\):)37 2670 y Fr(\017)j Fs(`)p Ft(timeit)p Fs(')11 b(--)h(a)f(simple,)g(crude) h(timing)e(test.)g(In)i(C,)g(and)f(one)g(of)g(our)g(simplest)f (examples)h(in)g(that)f(language.)p eop %%Page: 247 248 247 247 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(247)37 183 y Fr(\017)30 b Fs(`)p Ft(dialog)p Fs(')15 b(--)g(This)e(simple)h(example)h(pauses)f(for)h(user)g(input)e (everywhere)i(the)f(application)f(gets)h(control.)21 b(By)90 246 y(deliberately)d(breaking)g(network)g(connectivity)e(at)j (one)g(of)g(these)f(pauses,)j(one)d(can)h(test)g(ILU's)f(reaction)h(to) 90 308 y(network)10 b(failures.)h(Available)f(only)h(in)f(C,)i(and)f (another)g(of)g(the)g(simplest)f(examples)h(in)g(that)f(language.)37 384 y Fr(\017)30 b Fs(`)p Ft(cubit)p Fs(')13 b(--)g(our)g(simplest)e (example)i(in)g(Python,)g(using)e(a)i(simple)g(OMG)g(IDL)f(interface)h (designed)f(by)h(Sun)f(and)90 446 y(contributed)d(as)i(part)f(of)h (their)g(free)g(IIOP)g(implementation.)f(If)i(you)e(use)g(the)h(Sun)f (tools)g(to)g(build)f(their)i(clients)e(and)90 509 y(servers,)i(they)g (should)f(interoperate)g(with)g(the)h(ILU-built)f(servers)h(and)g (clients.)37 585 y Fr(\017)30 b Fs(`)p Ft(cpp2foo)p Fs(')12 b(--)h(a)g(very)f(simple)g(example)g(used)g(to)g(demonstrate)g(ILU's)g (CORBA)h(2)f(C)p Ft(++)h Fs(stubber)e(and)h(runtime.)90 647 y(Available)e(for)h(UNIX)g(and)g(Windows.)37 724 y Fr(\017)30 b Fs(`)p Ft(test1)p Fs(')15 b(--)h(this)e(is)h(a)g (rambling,)h(random)g(example,)h(which)d(serves)h(as)g(a)h(basic)f (informal)g(regression)f(test.)23 b(It)90 786 y(uses)13 b(one)h(client)f(program)g(and)h(one)g(server)f(program,)i(and)f(tests) f(a)h(variety)f(of)g(basic)h(features)g(and)f(data)h(types.)90 848 y(The)g(clients)f(and)h(servers)g(are)h(built)e(for:)k(C,)e(C)p Ft(++)p Fs(,)g(Python,)g(Java,)g(Common)g(Lisp,)f(and)g(Guile)f(\(or)i (whichever)90 910 y(of)h(those)e(you)h(have)h(configured)f(ILU)g(to)g (support\);)h(they)g(should)e(interoperate)g(in)i(all)f(combinations.) 23 b(If)16 b(you)90 973 y(are)f(interested)e(in)g(working)g(with)g (Common)i(Lisp,)f(or)g(our)g(old)f(C)p Ft(++)i Fs(support,)f(or)g (Guile)f(Scheme)i(support,)f(we)90 1035 y(recommend)e(starting)e(here.) 37 1111 y Fr(\017)30 b Fs(`)p Ft(javatest1)p Fs(')11 b(--)g(the)g(simplest)f(possible)g(Java)h(example)g(for)g(our)g(new)h (Java)f(support.)37 1188 y Fr(\017)30 b Fs(`)p Ft(tutorial)p Fs(')22 b(--)i(this)d(contains)h(the)g(code)h(for)g(a)g(small)g(ILU)f (tutorial,)j(implemented)d(in)h(Java,)j(ANSI)d(C)90 1250 y(and)c(Python.)34 b(If)19 b(you)g(are)g(interested)f(in)h(using)e (either)i(of)g(these)g(languages)f(with)g(ILU,)h(we)g(suggest)f(start-) 90 1312 y(ing)f(with)h(the)f(code)i(in)e(this)g(directory,)j(and)e(one) g(of)g(the)g(files)f(`)p Fp(ILUHOME)t Ft(/doc/tutorial-Java.ps)p Fs(',)90 1374 y(`)p Fp(ILUHOME)t Ft(/doc/tutorial-C.ps)p Fs(')d(and)h(`)p Fp(ILUHOME)t Ft(/doc/tutorial-Python.ps)p Fs('.)21 b(Even)15 b(if)g(you)90 1437 y(want)g(to)g(use)g(a)g (different)g(programming)g(language,)h(it's)f(probably)f(worth)g(your)h (while)f(reading)h(one)g(of)h(these)90 1499 y(tutorials.)37 1575 y Fr(\017)30 b Fs(`)p Ft(multlang)p Fs(')16 b(--)h(an)g(example)g (of)g(using)e(multiple)g(languages)h(\(ANSI)h(C)g(and)f(Python\))g(in)g (the)g(same)i(address)90 1638 y(space,)12 b(communicating)e(via)h(ILU.) 37 1714 y Fr(\017)30 b Fs(`)p Ft(changeup)p Fs(')11 b(--)g(a)g(test)f (of)h(closing)e(servers)i(and)g(connections,)e(and)i(of)g(recovery)g (from)g(such)g(things;)e(used)h(in)g(our)90 1776 y(informal)h (regression)f(testing.)g(Available)g(only)g(in)h(C.)37 1852 y Fr(\017)30 b Fs(`)p Ft(objtable)p Fs(')11 b(--)g(a)g(C)h (example)f(of)g(the)g(use)f(of)i(an)f(object)f(table,)h(to)f(create)i (true)f(instances)e(on)i(the)g(fly)f(when)h(some)90 1915 y(client)f(uses)h(them.)37 1991 y Fr(\017)30 b Fs(`)p Ft(black-widow-bank)p Fs(')10 b(--)h(a)h(tiny)d(banking)h(example)h(in) g(Python,)f(based)h(on)f(the)h(VisiBroker)f(for)h(Java)g Ft(")p Fs(bank)p Ft(")90 2053 y Fs(example.)h(Should)e(interoperate)g (with)h(the)f(VisiBroker)h(for)g(Java)g Ft(")p Fs(bank)p Ft(")g Fs(example.)37 2130 y Fr(\017)30 b Fs(`)p Ft(orbix-grid)p Fs(')13 b(--)h(a)g(simple)f(example)g(in)g(Python,)h(based)f(on)g(the)g (Orbix)g Ft(")p Fs(grid)p Ft(")g Fs(example.)19 b(Uses)13 b(OMG)g(IDL)90 2192 y(and)e(IIOP.)37 2268 y Fr(\017)30 b Fs(`)p Ft(orbplus-bank3)p Fs(')18 b(--)h(a)g(modest)f(example)h(in)f (Python)g(and)g(LISP,)i(based)e(on)g(the)g(HP)h(OrbPlus)f Ft(")p Fs(bank3)p Ft(")90 2331 y Fs(example.)12 b(Uses)e(OMG)i(IDL)f (and)g(IIOP.)37 2407 y Fr(\017)30 b Fs(`)p Ft(httest)p Fs(')12 b(--)h(three)f(programs)g(that)f(test)h(and)g(demonstrate)f (the)h(use)g(of)g(the)g(HTTP)g(protocol)f(within)f(ILU.)j(They)90 2469 y(show)d(ILU)g(communicating)f(with)h(an)g(existing)f(Web)h (server,)h(an)g(existing)d(Browser)j(communicating)e(with)h(ILU,)90 2531 y(and)h(ILU)g(communicating)f(with)g(ILU)i(over)f(HTTP.)g(All)f (in)h(C.)37 2608 y Fr(\017)30 b Fs(`)p Ft(iiop)p Fs(')19 b(--)h(a)f(simple)f(example)i(that)e(exercises)h(the)g(IIOP)g(support)f (in)g(ILU,)i(according)e(to)h(the)f(test)h(pattern)90 2670 y(originally)9 b(developed)h(by)h(David)g(Brownell)f(for)h(the)g (Sun)g(IIOP)h(example)g(code.)f(All)g(in)f(C.)p eop %%Page: 248 249 248 248 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(248)37 183 y Fr(\017)30 b Fs(`)p Ft(pickle)p Fs(')9 b(--)h(a)g(simple)e(example)i(that)f(exercises)g(the)g(pickle)f (support)g(in)h(the)g(IIOP)h(protocol,)f(mainly)g(via)g(Python.)90 246 y(You)i(must)g(have)g(Python)g(support)e(to)i(use)h(this)e(test,)h (though)f(there)h(is)g(also)g(a)h(C)f(server,)i(which)d(can)i(be)f (used)g(with)90 308 y(Purify)g(to)g(test)f(memory)i(usage)f(of)g (pickle)g(code,)g(and)g(a)h(Java)f(server)h(which)e(is)h(good)f(for)h (nothing)f(except)h(testing)90 370 y(Java.)37 446 y Fr(\017)30 b Fs(`)p Ft(test2)p Fs(')16 b(--)h(a)g(collection)e(of)h(tests)g(of)g (non-basic)g(features,)i(used)e(in)g(our)g(informal)g(regression)g (testing.)25 b(The)90 509 y(collection)16 b(consists)h(of:)24 b(a)19 b(test)e(of)h(concurrent)g(protocols,)g(a)h(test)e(of)h Ft(ASYNCHRONOUS)f Fs(methods,)i(a)g(test)e(of)90 571 y(pipelining,)11 b(and)i(a)g(test)g(of)g(call)g(order)g(preservation)e (\(AKA)i(serialization\),)f(and)h(a)h(test)e(of)h(both)f(pipelining)e (and)90 633 y(call)h(order)g(preservation.)g(All)f(are)i(available)e (only)h(in)f(C.)37 709 y Fr(\017)30 b Fs(`)p Ft(javaserial)p Fs(')12 b(--)g(a)h(simple)f(example)g(that)g(demonstrates)f(support)g (for)h Ft(")p Fs(full)g(custom)p Ft(")f Fs(mapping)h(in)f(ILU.)i(All)90 772 y(in)e(Java.)37 848 y Fr(\017)30 b Fs(`)p Ft(blob)p Fs(')11 b(--)h(a)f(contributed)f(Python)g(example)h(that)g(uses)g(Tk.)0 963 y(Read)h(the)f(`)p Ft(README)p Fs(')g(file)g(in)f(each)i(directory) f(first.)0 1107 y Fu(17.4)29 b(Name)15 b(Servers)62 1212 y Fs(No)22 b(standard)e(``name)j(service'')e(or)h(binding)d(service)j (is)f(provided.)41 b(We)22 b(feel)g(that)f(this)f(is)h(an)h(area)g(to)f (be)0 1274 y(addressed)14 b(independently,)f(and)h(we)h(may)f(include)g (a)g(name)h(service)f(in)g(future)g(releases)h(of)f(ILU.)h(An)f (experimental)0 1337 y(simple)20 b(name)h(service)g(bootstrap)e (interface)h(is)h(available)e(as)i(the)f Fp(simple)g(binding)f(system)p Fs(.)39 b(See)22 b(the)e(ANSI)h(C)0 1399 y Ft(ILU_C_PublishObject)p Fs(,)f Ft(ILU_C_WithdrawObject)p Fs(,)h(and)e Ft(ILU_C_LookupObject)p Fs(,)i(and)e(corresponding)0 1461 y(routines)11 b(in)h(the)g(other)g (languages,)g(for)g(more)h(details.)h(This)e(interface)g(is)g(intended) f(to)h(be)g(only)g(sufficient)f(to)h(find)f(the)0 1523 y(real)g(name)h(service.)62 1612 y(Two)g(implementations)f(of)h(this)f (are)i(available,)g(one)f(using)f(an)h(ILU)h(service)f(to)g(store)g (the)g(information,)g(the)g(other)0 1674 y(using)e(a)h(shared)g (filesystem.)f(They)g(can)i(be)f(selected)f(at)h(configuration)e(time,) i(by)g(specifying)e(either)i Ft(")p Fs(--with-binding-)0 1737 y(dir=DIRECTORYNAME)p Ft(")p Fs(,)g(or)g Ft(")p Fs(--with-binding-servi)o(ce=REALM:HOST:)o(PORT)p Ft(")p Fs(,)e(where)j(REALM)f(may)h(be)f(a)0 1799 y(user-specified)h(string)f (identifier,)h(that)g(is)g(the)g(name)i(of)e(some)h(conceptual)f(space) g(which)g(the)g(simple)g(binding)f(server)0 1861 y(serves.)24 b(These)15 b(values)f(are)i(compiled)f(into)f(the)h(ILU)g(kernel)g (library,)h(but)f(may)g(be)h(overridden)e(with)g(environment)0 1923 y(variables)c(at)i(runtime.)0 2067 y Fu(17.5)29 b(Documentation)62 2172 y Fs(ILU)7 b(documentation)g(is)g(provided)g (in)f(a)h(pre-formatted)g(form,)g(PostScript.)i(The)e(source)g(form)g (of)g(the)g(documentation)0 2234 y(is)13 b(called)f(TIM,)i(and)f(is)g (documented)f(in)h(the)g(ILU)g(reference)h(manual.)j(If)d(for)f(some)g (reason)g(you)g(do)g(need)g(to)f(rebuild)0 2297 y(the)h(documentation,) f(you)g(should)f(have)i(the)g(systems)f(T)924 2307 y(E)946 2297 y(X,)h(Perl,)h(ghostscript,)e Ft(dvips)p Fs(,)h(and)g(pbmplus;)f (if)h(you)f(can't)0 2359 y(find)f(these)f(yourself,)h(please)g(send)g (mail)g(to)g Ft(ilu-core@parc.xerox.com)e Fs(for)i(info)g(on)g(how)f (to)h(find)g(them.)0 2502 y Fu(17.6)29 b(Mailing)15 b(Lists)62 2608 y Fs(To)7 b(be)g(added)g(to,)f(or)h(deleted)g(from,)g(any)g(ILU)g (mailing)g(list,)e(please)i(send)g(mail)g(to)g Ft(ilu-req)o (uest@parc.x)o(erox.com)p Fs(.)0 2670 y Fn(Do)24 b(not)12 b Fs(send)f(mail)g(to)g(the)f(list)g(itself.)p eop %%Page: 249 250 249 249 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(249)62 183 y(The)18 b(general)h(ILU)f(discussion)e(mailing)h(list)g (is)h Ft(ilu@parc.xerox.com)p Fs(.)32 b(People)18 b(post)f(questions,)i (discuss)0 246 y(changes,)e(and)e(help)g(each)i(other)e(out)g(on)g (that)g(list.)24 b(Another)15 b(list,)h(used)f(only)g(for)h (announcements)e(of)i(ILU)g(things,)0 308 y(and)21 b(consequently)e (much)i(lower-volume,)i(is)e Ft(ilu-interest@parc.xerox.com)p Fs(.)38 b(The)21 b Ft(ilu)g Fs(list)f(receives)0 370 y(everything)12 b(that)h(the)g Ft(ilu-interest)g Fs(list)f(receives;)i (there)g(is)f(no)g(need)g(to)g(be)h(on)f(both)g(lists.)j(Again,)e(send) f(mail)h(to)0 432 y Ft(ilu-request@parc.xerox.com)9 b Fs(to)i(be)g(added)g(to)g(or)g(removed)g(from)h(either)f(of)g(these)g (lists.)62 519 y(Archives)g(of)g(these)g(lists)e(can)j(be)f(found)f(at) i Ft(http://www.findmail.com/listsaver/)o(ilu/?archiv)o(e/)p Fs(.)0 654 y Fu(17.7)29 b(Changes)0 794 y Fo(17.7.1)c(Changes)15 b(from)h(2.0alpha12)e(to)g(2.0alpha13)37 897 y Fr(\017)30 b Fn(Clarified)22 b(copyright)p Fs(.)11 b(We)f(have)f(clarified)g(the)g (terms)g(of)g(the)g(ILU)g(copyright)f(to)h(make)h(it)e(clear)i(that)f (it)f(conforms)90 960 y(to)j(the)g(requirements)f(of)i(free)g (software.)37 1033 y Fr(\017)30 b Fn(Java)37 b(support)i(more)f(robust) p Fs(.)51 b(Support)23 b(for)i(different)f(java)g(environments)f(more)i (robust.)50 b(Added)90 1096 y(JDK1.2betaX.)9 b(Added)h(support)f(for)h (native)g(threads)f(on)h(unix.)g(On)g(NT,)g(supports)f(developping)f (ilu)h(applications)90 1158 y(from)j(within)d(a)j(few)f(commercial)h (IDE's.)g(Many)f(bug)f(fixes.)37 1232 y Fr(\017)30 b Fn(GSS)36 b(security)g(transport)p Fs(.)43 b(This)21 b(provides)g(the)g(ability)f(to)h(wrap)h(arbitrary)g(security)e (contexts)h(around)90 1294 y(communication)c(between)g(two)g(address)g (spaces.)30 b(It)17 b(includes)g(the)g(ability)f(to)h(identify)f (callers)h(by)h(arbitrary)90 1356 y(GSS)c(namespaces)g(schemes.)20 b(A)14 b(generic)f(GSS)i Fp(shell)i Fs(\(into)c(which)g(various)f (mechanisms)i(can)g(be)g(plugged\))f(is)90 1418 y(included.)d(See)i (the)f(security)f(chapter)i(of)f(the)g(ILU)g(manual)g(for)g(more)h (information.)37 1492 y Fr(\017)30 b Fn(More)22 b(CORBA-ization)g(of)g (the)g(C)g(runtime)p Fs(.)12 b(The)c(pseudo-ORB)g(initialization)d (functions)i(are)i(now)f(present)90 1554 y(for)j(the)g(C)h(runtime.)37 1628 y Fr(\017)30 b Fn(Conforming)25 b(implementations)g(of)h(the)h (HTTP-NG)g(wire)f(protocol)f(and)h(MUX)g(transport)p Fs(.)15 b(Imple-)90 1690 y(mentations)d(of)h(the)g(HTTP-NG)g(wire)g (protocol)f(and)i(webmux)f(transport)f(now)g(conform)i(to)f(the)g (Internet)g(drafts)90 1753 y(for)e(these)g(protocols.)f(Note)h(that)f (the)h(mux)g(transport)f(only)h(works)f(in)h(threaded)g(mode)g(\(both)f (client)h(and)g(server\).)37 1826 y Fr(\017)30 b Fn(Proper)c(sending)g (of)f(clean)h(shutdown)g(messages)p Fs(.)12 b(It)g(is)f(now)h(possible) e(for)i(RPC)h(and)e(transport)g(protocols)90 1888 y(to)g(send)f(clean)i (shutdown)d(messages.)i(Currently)g(only)f(the)h(HTTP-NG)g(wire)g (protocol,)f Ft(w3ng)p Fs(,)h(does)g(so.)37 1962 y Fr(\017)30 b Fn(Reaping)i(idle)g(incoming)f(connections)i(on)f(multi-threaded)h (servers)p Fs(.)h(It)18 b(used)g(to)g(be)h(the)f(case)h(that)90 2024 y(incoming)c(connections)g(to)g(multi-threaded)g(servers)h(would)f (not)h(be)g(closed)g(when)f(the)h(server)h(was)f(trying)f(to)90 2087 y(reduce)d(its)e(FD)h(\(File)h(Descriptor,)e(an)h(OS-level)g (resource\))h(usage;)e(this)g(has)h(now)g(been)g(fixed.)37 2160 y Fr(\017)30 b Fn(XML)21 b(parser)p Fs(.)11 b(This)c(release)h (includes)e(an)i(early)f(version)g(of)h(a)g(C-based)f(validating)f(XML) i(parser.)i(It)e(is)f(a)h(general-)90 2223 y(purpose)15 b(XML)h(parser)h(that)e(may)i(be)f(used)f(in)h(future)g(releases)g(of)g (ILU)g(for)g(various)f(purposes.)25 b(Information)90 2285 y(on)14 b(the)h(use)f(of)h(the)f(parser)h(and)f(its)g(current)h (\(known\))e(limitations)g(is)h(found)g(in)g(`)p Fp(ILUSRC)t Ft(/stubbers/XML-)90 2347 y(parser/README)p Fs('.)37 2421 y Fr(\017)30 b Fn(Optimized)35 b(marshalling)e(of)h(data)h (structures)g(from)g(C)p Fs(.)21 b(The)f(C)i(marshalling)d(code)i(for)g (ILU)g(now)90 2483 y(matches)g(data)g(structures)g(in)f(memory)i (against)e(their)h(marshalled)g(representation)f(in)h(the)g(particular) f(wire)90 2545 y(protocol)14 b(selected.)23 b(If)16 b(they)f(match,)i (the)e(data)g(structure)g(is)g(written)f(directly)g(to)h(the)g(wire,)i (instead)d(of)h(having)90 2608 y(each)i(element)f(manipulated)f (independently.)24 b(This)16 b(can)g(speed)g(up)g(the)g(I/O)g (processing)e(of)j(a)f(large)g(array)h(of)90 2670 y(floating-point)8 b(values,)j(say,)h(by)e(over)h(2000)g(percent.)p eop %%Page: 250 251 250 250 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(250)37 183 y Fr(\017)30 b Fn(Bug)c(fixes)g(in)g(Python)g(and)g(Java)f (stubbers)i(may)e(cause)h(type)g(UID)g(changes)p Fs(.)15 b(If)e(you)e(stub)g(multiple)90 246 y(files)k(on)g(the)h(same)g (command)g(line)f(with)g(the)g(Java)h(and)f(Python)g(stubbers,)h(past)f (releases)h(of)f(ILU)h(may)g(have)90 308 y(given)c(different)g(type)f (UIDs)h(to)g(the)g(resulting)f(types)g(than)h(if)g(you)g(stubbed)f (each)i(file)f(separately.)i(This)e(bug)f(has)90 370 y(been)g(fixed,)f(and)g(the)h(Python)e(and)h(Java)h(stubbers)e(now)h (always)g(give)g(the)g(same)h(type)f(UID)h(as)f(the)g(other)h(stubbers) 90 432 y(produce.)37 514 y Fr(\017)30 b Fn(Better)e(configuration)e (support)h(for)f(Linux)p Fs(.)17 b(ILU)12 b(should)f(configure)h(`out)h (of)f(the)h(box')f(properly)g(for)h(Red)90 576 y(Hat)h(5.1)g(Linux.)20 b(In)14 b(general,)i(updates)d(to)h(the)g(configuration)e(machinery)i (should)f(make)i(Linux)e(configuration)90 638 y(easier.)0 783 y Fo(17.7.2)25 b(Changes)15 b(from)h(2.0alpha11)e(to)g(2.0alpha12) 37 893 y Fr(\017)30 b Fn(Many)g(bug)g(fixes)p Fs(.)e(This)15 b(release)i(primarily)f(fixes)g(a)h(number)f(of)h(bugs)f(in)g (2.0alpha11,)h(including)d(various)90 955 y(problems)8 b(with)g(the)h(direct)g(IDL)g(support,)f(the)h(Common)h(Lisp)e (support,)g(the)h(`serializer')g(construct)f(in)g(the)h(kernel,)90 1018 y(and)i(the)g(new)g(CosNaming)g(name)g(service.)37 1099 y Fr(\017)30 b Fn(First)22 b(release)g(of)g(IETF)g(Generic)h (Security)g(Service)g(API)e(shell.)10 b Fs(This)e(is)g(an)g (implementation)f(of)i(a)g(`shell')90 1161 y(library)e(providing)g(t)o (he)g(API)g(defin)o(ed)g(by)f(Internet)h(RFC)g(207)o(8)g(\()p Ft(http://i)o(nfo.intern)o(et.isi.edu:)o(80/in-)90 1224 y(notes/rfc/files/rfc2078.txt)p Fs(\),)15 b(whichprovides)e(a)j (generic)f(interface)h(for)f(providing)f(security)g(con-)90 1286 y(texts)h(around)g(communications)g(between)g(parties.)26 b(The)15 b(ILU)h(GSS)h(shell)e(provides)f(a)j(`back-end')f(API,)g(into) 90 1348 y(which)c(specific)h(namespace)g(schemes)g(and)g (authentication)d(mechanisms)j(can)g(be)g(`plugged'.)i(It)e(also)g (includes)90 1410 y(one)d(example)g(of)g(a)h(\(non-secure\))f (namespace)h(scheme)f(\(called)g Ft(rfc822)p Fs(\),)h(and)e(one)h (example)h(of)f(a)g(\(non-secure\))90 1473 y(authentication)15 b(mechanism)j(\(called)f Ft(nil)p Fs(\).)30 b(Due)17 b(to)g(U.S.)h(export)f(controls)f(on)h(cryptographic)f(technology,)90 1535 y(we)i(don't)g(plan)f(to)h(release)g(publicly)f(any)h(`secure')g (namespace)h(or)f(authentication)e(mechanisms,)k(as)e(all)g(of)90 1597 y(those)d(that)h(we're)g(aware)h(of)f(rely)g(on)g(controlled)f (cryptographic)f(algorithms)h(to)h(provide)f(that)g(security.)26 b(We)90 1660 y(expect)21 b(that)f(serious)h(users)f(of)i(the)e(GSS)i (will)e(provide)g(their)h(own)g(namespaces)g(and)g(mechanisms.)41 b(See)90 1722 y(`)p Fp(ILUSRC)t Ft(/GSS/README)p Fs(')18 b(for)g(more)g(information)f(on)g(this)g(GSS)h(shell.)31 b(Note)17 b(that)h(this)e(release)j(does)e Fp(not)90 1784 y Fs(provide)10 b(support)g(for)h(the)g(ILU)g Ft(gss)g Fs(transport)f(filter.)37 1865 y Fr(\017)30 b Fn(Support)c(for)f(the)g (w3ng)f(wire)h(protocol.)11 b Fs(This)f(release)h(includes)f(support)f (for)j(a)f(new)g(wire)g(protocol)e(called)90 1928 y Ft(w3ng)p Fs(.)32 b(This)16 b(is)i(the)g(first)f(wire)h(protocol)e(actually)h (designed)g(for)h(use)g(with)f(ILU.)h(It)g(exhibits)e(a)i(number)g(of) 90 1990 y(efficiency)11 b(improvements)g(over)g(existing)e(wire)i (protocols)f(supported)f(by)i(ILU.)37 2071 y Fr(\017)30 b Fn(Java)c(support)i(now)g(includes)f(`full)h(custom)f(mapping'.)19 b Fs(This)13 b(allows)g(a)h(Java)g(programmer)g(to)g(specify)90 2134 y(non-standard)f(Java)i(classes)f(to)h(be)g(used)f(for)h(any)g (ILU)g(ISL)g(constructed)f(type.)22 b(See)15 b(the)g(Java)g(chapter)g (of)f(the)90 2196 y(manual)d(to)g(find)g(out)f(how)h(to)f(use)h(this.) 37 2277 y Fr(\017)30 b Fn(Server)25 b(relocation)f(supported.)12 b Fs(It)f(is)f(sometimes)g(useful)g(to)g(have)g(a)h(`dummy')g(server,)g (that)f(will)g(redirect)g(any)90 2340 y(requests)i(to)g(it)g(to)g(a)h (real)g(server)f(somewhere)h(else.)i(This)d(can)h(be)f(used)g(for)h (load)f(balancing,)g(automatic)g(start-up)90 2402 y(of)i(services,)h (redirecting)e(name)i(service,)g(code)f(migration,)g(and)g(other)g (various)f(purposes.)19 b(ILU)14 b(supports)e(this)90 2464 y(via)f(a)g(mechanism)g(called)g Fp(server)g(relocation)p Fs(,)f(currently)g(available)g(only)g(in)g(the)h(C,)h(Python,)e(and)h (Java)g(runtimes,)90 2526 y(and)g(only)f(with)g(the)h Ft(w3ng)g Fs(and)g Ft(IIOP)g Fs(protocols.)37 2608 y Fr(\017)30 b Fn(TCP)g(affordances.)f Fs(It)16 b(is)g(now)g(possible)f (to)h(control)g(the)g(size)h(of)f(TCP/IP)h(transport)f(buffers,)i (either)e(as)h(an)90 2670 y(optional)10 b(parameter)j(in)e(the)h(tinfo) f(when)g(creating)h(a)g(Port,)g(or)g(by)g(setting)e(the)i(default)f (buffer)h(size)g(directly)f(from)p eop %%Page: 251 252 251 251 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(251)90 183 y(C)15 b(or)g(Python.)20 b(It)15 b(is)f(also)g(possible)f (to)h(get)g(some)h(elementary)f(statistics)f(about)h(TCP/IP)h(resource) f(usage)h(from)90 246 y(either)c(C)h(or)f(Python.)37 326 y Fr(\017)30 b Fn(Simple)c(use)g(of)g(ISL)h(types)f(in)g(Java.)14 b Fs(ISL)f(types)e(of)i(any)f(kind)g(except)g Ft(PICKLE)g Fs(no)g(longer)g(automatically)90 388 y(interact)j(with)g(the)h(ILU)g (runtime,)h(so)e(the)h(ILU)g(runtime)f(library)h(for)g(Java)g(no)f (longer)g(needs)h(to)f(be)h(loaded)g(to)90 450 y(support)10 b(non-ILU)g(use)h(of)g(these)g(types.)37 531 y Fr(\017)30 b Fn(Mechanism)39 b(for)g(discovering)g(caller)f(identity)h(in)h(C)f (has)f(changed.)56 b Fs(You)25 b(should)e(now)i(call)90 593 y Ft(ILU_C_CallerIdentity\(\))p Fs(,)d(instead)f(of)g Ft(ILU_C_GetPassportContext\(\))p Fs(,)h(in)f(a)h(true)f(method)g(to)90 655 y(determine)11 b(the)g(identity)e(of)j(the)e(caller.)0 797 y Fo(17.7.3)25 b(Changes)15 b(from)h(2.0alpha10)e(to)g(2.0alpha11) 37 906 y Fr(\017)30 b Fp(Documentation)12 b(re-done.)18 b Fs(The)c(documentation)e(for)h(the)h(various)e(language)h(runtimes)g (has)g(been)g(re-done)h(to)f(a)90 968 y(standard)d(template.)37 1049 y Fr(\017)30 b Fp(New)11 b(OMG)h(IDL)g(parser.)g Fs(A)g(very)f(nice)h(parser)f(for)h(OMG)g(IDL)f(has)g(been)h (contributed)d(by)j(Martin)f(von)g(Loewis,)90 1111 y(and)f(has)g(been)f (incorporated.)i(It)e(consists)g(of)h(two)f(C)h(files)g(which)f(are)i (integrated)e(into)f(the)i(parser)g(library,)g(instead)90 1173 y(of)g(the)g(huge)f(and)h(buggy)f(C)p Ft(++)h Fs(idl2isl)e (program)i(previously)e(supplied)g(\(and)i(no)g(longer)f(part)h(of)g (the)g(distribution\).)90 1236 y(Many)h(thanks,)g(Martin!)37 1316 y Fr(\017)30 b Fp(New)11 b(ISL)h(to)e(IDL)i(program.)f Fs(The)g(file)g(`)p Ft(stubbers/pprint/isl2idl)p Fs(')f(converts)g (isl2idl)f(when)i(possible.)37 1396 y Fr(\017)30 b Fp(Guile)13 b(Scheme)h(support.)j Fs(Bill)c(Nell)g(at)g(Siemens)h(Corporate)f (Research,)i(Inc,)g(has)e(contributed)e(the)j(beginnings)90 1459 y(of)d(support)f(for)h(Guile)g(Scheme,)h(including)e(a)h(Scheme)h (stubber,)f(a)h(working)d(ILU)j(LSR)f(for)h(Guile,)e(and)i(working)90 1521 y(versions)e(of)h(the)g(`)p Ft(examples/test1/)p Fs(')f(example)i(client)e(and)h(server)g(programs.)37 1601 y Fr(\017)30 b Fp(Multiple)10 b(ports)h(on)g(server.)h Fs(It)f(is)g(now)g(possible)e(to)i(add)h(multiple)e(ports)g(to)h(an)g (ILU)h(server,)g(so)f(that)f(the)i(same)f(set)90 1664 y(of)h(objects)f(can)h(be)g(exported)f(via)h(multiple)e(protocols.)i (All)g(languges)e(provide)h(hooks)g(to)g(add)h(multiple)f(ports)g(to)90 1726 y(a)h(server.)37 1806 y Fr(\017)30 b Fp(Serialization)15 b(and)h(pipelining)e(on)i(non-concurrent)g(protocols.)25 b Fs(The)16 b(ability)f(to)h(have)g(calls)g(delivered)g(to)f(the)90 1868 y(callee)h(in)f(serial)g(order)h(over)f(a)h(single)f(connection)f (has)h(been)h(added)f(for)h(non-concurrent)f(protocols)e(with)i(an)90 1931 y(abstraction)9 b(called)h Fp(serialization)p Fs(.)f(In)h (addition,)f(the)h(ability)f(to)h(have)g(multiple)f(outstanding)e (calls)j(on)g(connection)90 1993 y(that)h(uses)g(a)h(non-concurrent)e (protocol)h(has)g(been)h(added)f(via)g(an)h(abstraction)e(called)h Fp(pipelining)p Fs(.)g(Access)g(to)g(this)90 2055 y(kernel)g (functionality)e(is)h(currently)h(only)f(provided)g(via)h(the)g(C)g (LSR.)37 2136 y Fr(\017)30 b Fp(Custom)11 b(surrogate)h(support)e (added)i(for)g(all)f(languages.)i Fs(The)e(ability)f(to)i(specify)f(a)h (user-implemented)g(class)f(for)90 2198 y(surrogate)j(instances)f(has)i (been)g(added)f(to)g(all)g(languages.)21 b(This)14 b(allows)g (implementation)f(of)h(custom)h(caching)90 2260 y(strategies)10 b(and)h(similar)g(techniques.)37 2341 y Fr(\017)30 b Fp(Custom)16 b(record)h(support)f(added)g(for)h(all)f(languages.)28 b Fs(The)16 b(ability)f(to)i(override)f(record)h(type)f(marshalling)g (in)90 2403 y(languages)f(where)h(the)g(type)f(system)h(allows)f(it)g (has)h(been)g(added.)25 b(This)15 b(capability)g(is)g(useful)g(for)i (support)d(of)90 2465 y(objects-by-value.)c(Not)g(yet)h(available)g(in) f(Common)i(Lisp)e(or)h(Guile.)37 2545 y Fr(\017)30 b Fp(HTTP)16 b(support)g(improved.)27 b Fs(The)17 b(ILU)f Ft(HTTP)h Fs(support)e(will)h(now)g(properly)g(redirect)g(for)h (responses.)27 b(It)17 b(also)90 2608 y(responds)11 b(to)h(non-1.0)f (versions)g(of)h(the)g Ft(HTTP)g Fs(protocol)f(more)h(kindly,)g(and)g (has)f(the)h(beginnings)e(of)i(support)f(for)90 2670 y Ft(HTTP)g(1.1)p Fs(.)p eop %%Page: 252 253 252 252 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(252)37 183 y Fr(\017)30 b Fp(IIOP)19 b(improved.)35 b Fs(The)18 b(IIOP)i(support)d(will)h(now)h(respond)f(appropriately)f (to)h(relocation)g(replies,)j(common)90 246 y(with)16 b(other)i(ORBs,)h(though)d(not)h(used)g(in)g(ILU.)h(It)f(now)g (supports)f(CORBA)i(2.1)g(character)g(set)f(negotiation.)90 308 y(A)g(non-concurrent)e(version)g(of)i Ft(IIOP)f Fs(is)g(available)g (as)h Ft("siiop")p Fs(;)h(note)e(that)g(since)g(the)g(OMG)h(spec)f (clearly)90 370 y(identifies)c Ft(IIOP)h Fs(as)g(concurrent)g(\(in)g (the)g(ILU)h(sense\),)g Ft("siiop")f Fs(should)e(only)i(be)g(used)g (between)g(ILU)g(clients)90 432 y(and)e(servers.)37 512 y Fr(\017)30 b Fp(World)17 b(Wide)f(Web)i(MUX)f(transport)f(included.) 28 b Fs(This)16 b(release)i(includes)e(an)h(implementation)f(of)h(the)g (MUX)90 574 y(transport)8 b(described)g(i)o(n)g Ft(htt)o(p://www.w3.)o (org/Protoco)o(ls/MUX/WD-)o(mux-961023.)o(html)p Fs(,but)f(wit)o(h)g (the)90 636 y(modifications)g(suggest)o(ed)g(in)f Ft(http://)o (lists.w3.or)o(g/Archives)o(/Member/w3c)o(-mux/msg000)o(39.html)p Fs(.Thi)o(s)90 699 y(transport,)18 b(called)g Ft("w3mux")p Fs(,)h(allows)d(for)i(multiple)e(simultaneous)g(sessions)f(or)j (connections)e(over)h(a)h(single)90 761 y(TCP/IP)j(connection.)39 b(It)21 b(supports)e(message)i(fragmentation)f(and)h(interleaving)e(of) i(streams.)40 b(It)21 b(supports)90 823 y(bi-directional)8 b(connections)h(over)h(the)f(TCP/IP)i(connection,)e(thereby)h (supporting)e(callbacks)h(through)g(firewalls.)37 903 y Fr(\017)30 b Fp(Java)13 b(improvements.)k Fs(Java)c(support)f(for)h (Win32)f(platforms)h(\(using)f(Javasoft)g(JDK)g(1.1.x)i(and)f (Microsoft)f(Java)90 965 y(SDK)c(2.0)g(beta)g(2\))h(is)e(now)h (included.)h(The)f(ILU)g(support)f(no)h(longer)f(works)g(with)h(JDK)f (1.0,)i(but)f(now)f(supports)g(JDK)90 1027 y(1.1.x.)15 b(Lots)c(of)h(minor)g(improvements)f(have)h(been)g(made.)j(The)d (generated)g(stubs)f(are)i(now)f(by)f(default)h(\(mostly\))90 1090 y(compatible)7 b(with)g(the)g(origi)o(nal)g(Java)g(mappi)o(ng)g (do)o(cument)g(\()p Ft(ftp://ftp.)o(omg.org/pu)o(b/docs/orbo)o(s/97-)90 1152 y(03-01.pdf)p Fs(\).)k(The)g(originalILU)f(mapping)g(is)h (available)f(as)h(a)h(stubber)e(option.)37 1232 y Fr(\017)30 b Fp(CORBA)12 b(2.0)f(C)p Ft(++)g Fp(support)f(-)h(limited)k Fs(CORBA)d(2.0)f(C)p Ft(++)h Fs(is)e(currently)h(working)f(for)h (Visual)f(C)p Ft(++)h Fs(\(sans)g(nested)90 1294 y(modules)f(and)h (pickles/anys)e(support\).)i([This)f(is)h(very)g(new)g(software)g(-)g (it)g(has)g(received)g(very)g(limited)g(testing.])37 1374 y Fr(\017)30 b Fp(CosNaming)12 b(service)h(included.)i Fs(The)e(distribution)c(now)k(includes)e(an)i(implementation)f(of)g (the)h(CORBA)h(name)90 1436 y(service,)f(under)f(`)p Fp(ILUSRC)t Ft(/etc/CosNaming/)p Fs('.)i(It)e(is)g(automatically)f (built)g(and)h(installed)e(if)j(OMG)f(IDL)g(and)90 1498 y(IIOP)g(support)d(are)j(configured)f(in.)37 1578 y Fr(\017)30 b Fp(Sun)14 b(RPC)i(portmapper)e(support)f(included.)20 b Fs(A)15 b(C)g(library)f(for)g(use)g(with)g(the)g(Sun)g(RPC)i Ft(portmapper)e Fs(is)g(now)90 1640 y(included,)d(in)g(`)p Fp(ILUSRC)t Ft(/etc/portmapper/)p Fs('.)h(Included)f(is)g(an)h(ILU)f (ISL)h(description)e(of)i(the)f Ft(portmapper)90 1702 y Fs(interface,)h(which)e(can)i(be)f(used)g(directly)f(with)g(other)h (languages.)37 1782 y Fr(\017)30 b Fp(Auto-stubbing)20 b(of)j(modules)f(supported)f(for)i(Python.)46 b Fs(The)23 b Ft(import)f Fs(mechanism)h(in)g(Python)f(can)h(now)90 1844 y(be)c(augmented)g(by)g(calling)f(the)h(function)e Ft(ilu.AutoImport\(\))p Fs(;)22 b(this)c(modifies)g Ft(import)h Fs(so)g(that,)i(when)90 1906 y(attempting)g(to)h(import)g(a)h(module)f (called)h Ft(foo)p Fs(,)i(if)e(it)f(fails)g(to)g(find)g(`)p Ft(foo.py)p Fs(')g(and)h(`)p Ft(foo.pyc)p Fs(')f(on)g(the)90 1969 y Ft(PYTHONPATH)c Fs(environment)g(variable,)i(it)f(will)e(then)i (walk)f(down)g(the)g(directories)g(listed)g(in)g(the)h Ft(ILUPATH)90 2031 y Fs(environment)12 b(variable,)g(looking)f(for)i (either)f(`)p Ft(foo.isl)p Fs(',)h(or,)g(if)g(OMG)g(IDL)f(support)f(is) h(enabled,)h(`)p Ft(foo.idl)p Fs('.)90 2093 y(If)f(either)f(of)g(these) g(are)h(found,)f(it)f(will)h(run)g(the)g(Python)f(stubber)g(on)h(the)g (file,)g(putting)f(the)h(results)f(in)h(a)g(temporary)90 2156 y(directory,)g(and)g(then)f(load)h(the)g(resulting)e (surrogate-side)h(`)p Ft(foo.py)p Fs(')h(file.)37 2235 y Fr(\017)30 b Fp(FUNCTIONAL)11 b(caching)f(is)h(now)g(supported)e(for) j(Python)e(and)h(Lisp.)0 2374 y Fo(17.7.4)25 b(Changes)15 b(from)h(2.0alpha9)e(to)h(2.0alpha10)37 2483 y Fr(\017)30 b Fp(Default)10 b(garbage)h(collection)f(behavior)g(of)h(Python)f(true) h(objects)f(changed.)h Fs(In)g(previous)e(ILU)i(releases,)h(the)e(ILU) 90 2545 y(kernel)k(held)f(an)i(extra)f(reference)h(to)f(each)g(Python)f (true)h(object,)h(so)f(that)f(they)h(were)g(never)g(garbage)h (collected.)90 2608 y(This)8 b(extra)h(reference)h(has)f(been)g (removed)h(in)e(2.0alpha10,)h(so)g(that)f(the)h(application)e(must)i (be)g(careful)g(to)g(maintain)90 2670 y(references)j(to)f(objects)f (which)g(it)h(wishes)f(to)h(preserve.)p eop %%Page: 253 254 253 253 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(253)37 183 y Fr(\017)30 b Fp(Aggressive)10 b(garbage)i(collection)e (of)h(C)h(objects.)g Fs(C)g(objects)f(\()p Ft(ILU_C_Object)f(*)p Fs(\))i(are)g(now)f(reference)i(counted.)90 246 y(An)i(application)e (must)i(be)g(careful)g(to)g(use)g Ft(CORBA_Object_duplicate)e Fs(and)i Ft(CORBA_Object_release)90 308 y Fs(correctly)c(to)g(avoid)f (memory)i(smashes.)37 379 y Fr(\017)30 b Fp(Full)15 b(type)g (information)f(cached.)25 b Fs(If)16 b(both)e Ft (--enable-pickle-support)g Fs(and)h Ft(--enable-corba-iiop)90 441 y Fs(have)f(been)f(selected,)h(full)f(type)g(information)f(on)h (all)h(compiled-in)e(or)h(dynamically-loaded)f(ISL)i(types)f(is)g(now) 90 503 y(cached)18 b(in)e(memory.)31 b(This)16 b(makes)h(it)g (theoretically)f(possible)f(for)i(someone)g(to)g(write)g(a)h(CORBA)g (Interface)90 566 y(Repository)h(service)i(for)g(ILU)g(\(or)g (something)e(more)i(useful\).)40 b(Note)20 b(changes)h(in)f Ft(ilu_DefineMethod)p Fs(,)90 628 y Ft(ilu_DefineException)p Fs(,)10 b(and)h(the)g(new)g(function)f Ft(ilu_DefineMethodArg)p Fs(.)37 699 y Fr(\017)30 b Fp(HTTP)12 b(persistence)f(supported.)i Fs(The)f Ft(HTTP)f Fs(protocol)g(may)i(now)e(be)h(selected)g(with)f (the)h(string)f Ft("http_1_0p")p Fs(,)90 761 y(which)f(causes)g(it)g (to)g(send)g Ft(Connection:)g("Keep-Alive")g Fs(headers,)h(and)f(not)g (close)g(the)g(connection)g(between)90 823 y(calls)18 b(\(assuming)f(of)h(course)g(that)f(the)h(other)g(end)g(of)g(the)f (connection)g(also)h(supports)e(this)h(behavior)g(-)i(fairly)90 886 y(common.\))28 b(The)16 b(programs)h(in)f(examples/httest)f(have)h (been)h(updated)e(accordingly.)27 b(In)16 b(addition,)h(it)f(is)g(now) 90 948 y(possible)9 b(to)i(use)g Ft(HTTP)g Fs(over)g(a)h(boundaried)e (transport.)37 1019 y Fr(\017)30 b Fp(OMG)10 b(IDL)f(exceptions)f(with) g(values)h(handled.)h Fs(The)f Ft(idl2isl)g Fs(compiler)g(now,)h(for)f (an)h(OMG)f(IDL)g(exception)g Ft(E)p Fs(,)90 1081 y(generates)j(an)g (ISL)g(exception)f(called)h Ft(E)p Fs(,)g(and)g(an)g(ISL)g(type)g (called)f Ft(ilu--prefix-idlExceptionType-E)p Fs(.)90 1143 y(The)f(stubbers)e(handle)i(this)e(type)i(variously;)e(the)i(C)g (stubber)f(renames)i(it)e(to)h Ft(E)p Fs(,)g(as)g(required)g(by)f(the)h (CORBA)h(spec;)90 1206 y(the)g(Python)f(stubber)f(renames)j(it)e(to)h Ft(E__omgidl_exctype)p Fs(;)e(the)i(Lisp)f(stubber)f(folds)h(it)h(into) f(the)g(definition)f(of)90 1268 y(the)i Ft(condition)f(E)p Fs(,)i(and)f(doesn't)f(support)g(the)h(type)g(directly)f(at)h(all.)37 1339 y Fr(\017)30 b Fp(Java)17 b(support)f(improved.)30 b Fs(The)17 b(Java)g(support)f(has)h(been)h(improved,)g(and)f(brought)f (closer)h(to)g(the)g(emerging)90 1401 y(CORBA)e(specification)d(for)j (it.)k(Pickles)14 b(are)h(now)e(supported,)h(and)g(work)f(with)h(IIOP;) g(enumerations)f(are)i(now)90 1463 y(mapped)k(according)g(to)g(the)g (CORBA)i(standard;)h(system)d(exceptions)f(are)i(now)f(Java)g(runtime)g (exceptions;)90 1526 y(interfaces)11 b(can)g(be)f(specified)g(in)h(OMG) g(IDL;)f(works)g(with)g(select-based)g(\(BSD\))h(systems)f(as)h(well)f (as)h(poll-based)90 1588 y(\(SVR4\))h(systems;)e(holder)g(classes)h (can)g(be)h(mapped)f(the)g(OMG)g(way;)g(many)g(bug)g(fixes.)37 1659 y Fr(\017)30 b Fp(Common)24 b(Lisp)e(support)g(improved.)48 b Fs(The)24 b(Common)f(Lisp)g(work)g(by)g(Joachim)g(Achtzehnter)g(has)g (been)90 1721 y(incorporated,)17 b(and)g(various)f(other)g(fixes)h (have)f(been)h(added,)h(including)d(PICKLE)i(support.)27 b(Common)17 b(Lisp)90 1783 y(support)10 b(is)g(still)g(missing)g(type)g (registration,)g(but)h(in)f(other)h(respects)g(should)f(be)h(fully)f (working.)37 1854 y Fr(\017)30 b Fp(ilu)p 142 1854 14 3 v 15 w(Server)16 b(leaks)f(fixed.)24 b Fs(In)15 b(previous)f (versions,)h(ILU)g(kernel)g(servers)h(which)e(had)h(become)h(empty)f (were)h(not)90 1916 y(garbage)d(collected.)k(This)12 b(has)h(been)g(fixed.)k(The)c(fix)g(also)f(changes)h(the)g Ft(iluMainLoop)f Fs(class)h(in)g(the)f(old)h(C)p Ft(++)90 1979 y Fs(runtime.)37 2050 y Fr(\017)30 b Fp(Default)19 b(protocol)f(and)i(transport)e(selected)h(dynamically.)35 b Fs(The)20 b(default)f(protocol)f(and)h(transport)g(are)h(now)90 2112 y(selected)11 b(dynamically,)f(so)h(that)g(ILU)g(installations)d (without)h Ft(Sun)i(RPC)g Fs(can)h(be)f(created.)37 2183 y Fr(\017)30 b Fp(idl2isl)9 b(now)i(provided)f(on)g(Win32.)h Fs(The)g Ft(idl2isl)g Fs(is)f(now)h(part)g(of)g(the)g(Windows)f(build.) 37 2254 y Fr(\017)30 b Fp(Python)10 b(1.4)h(now)g(provided)f(on)h (Win32.)f Fs(Python)g(1.4)i(is)e(now)h(the)g(version)f(used)h(on)f (Windows)g(systems.)37 2325 y Fr(\017)30 b Fp(WINIO)15 b(no)g(longer)f(part)h(of)g(release.)24 b Fs(WINIO,)15 b(a)h(subsystem)e(no)g(longer)h(needed)g(by)f(ILU)h(on)g(Windows,)g (but)90 2387 y(included)10 b(in)h(previous)f(releases,)h(has)g(been)g (dropped)g(from)g(the)g(release)h(distribution)o(.)0 2504 y Fo(17.7.5)25 b(Changes)15 b(from)h(2.0alpha8)e(to)h(2.0alpha9)37 2608 y Fr(\017)30 b Fp(PICKLE)14 b(support)f(for)h(dynamic)g(types)f (added.)19 b Fs(This)13 b(allows)g(you)g(to)h(use)g(a)g(new)g(ISL)g (type,)h Ft(PICKLE)p Fs(,)f(to)g(pass)90 2670 y(arbitrary)j(typed)g (values)g(across)g(interfaces.)30 b(Pickle)18 b(support)e(is)h (implemented)g(in)g(such)g(a)h(fashion)e(as)i(to)f(be)p eop %%Page: 254 255 254 254 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(254)90 183 y(interoperable)15 b(with)h(CORBA)h Ft(any)p Fs(,)h(and)e(our)g(OMG)g(IDL)g(to)g(ISL)h(translator)e(in)h(fact)h (maps)f Ft(any)g Fs(directly)g(to)90 246 y Ft(PICKLE)p Fs(.)37 319 y Fr(\017)30 b Fp(Proper)11 b(collection)e(of)i(dead)g (connections.)e Fs(The)i(kernel)f(now)g(properly)g(frees)h(connections) e(after)i(they)g(have)f(been)90 381 y(closed.)37 454 y Fr(\017)30 b Fp(Prototype)10 b(Java)h(support.)f Fs(This)h(release)g (contains)f(a)h(first)g(pass)g(at)g(Java)g(support)f(for)h(ILU.)37 528 y Fr(\017)30 b Fp(Prototype)12 b(Common)i(Lisp)e(support.)17 b Fs(This)12 b(release)i(contains)e(a)i(first)f(pass)f(at)i(Common)f (Lisp)g(support)f(for)h(ILU)90 590 y(2.0.)f(Many)f(thanks)f(to)h (Joachim)g(Achtzehnter)f(for)h(contributing)e(it!)37 663 y Fr(\017)30 b Fp(Prototype)22 b(Guile)f(Scheme)j(support.)44 b Fs(Bill)22 b(Nell)g(and)h(Siemens)f(have)h(been)f(kind)g(enough)g(to) g(contribute)90 726 y(preliminary)12 b(support)g(for)h(Guile,)g(the)g (GNU)f(variant)h(of)g(Scheme.)18 b(This)12 b(contribution)e(is)j (provided)f(``as)h(is'',)h(in)90 788 y(the)d(`)p Fp(ILUSRC)t Ft(/contrib/siemens-guile/)p Fs(')f(subdirectory.)37 861 y Fr(\017)30 b Fp(Support)13 b(for)h(Python)e(1.4.)19 b Fs(A)14 b(number)g(of)f(patches)h(are)g(incorporated)e(to)i(make)g (ILU)f(support)g(for)h(Python)e(with)90 924 y(Python)e(1.4)h(build)f (``out)h(of)g(the)g(box'',)g(on)g(Unix.)g(Python)f(1.3)h(is)g(still)e (the)i(supported)f(system)g(for)i(Windows.)37 997 y Fr(\017)30 b Fp(Support)10 b(for)i(Xt)f(fixed.)g Fs(The)g(support)e(for)j(using)e (ILU)h(with)f(Xt)h(now)f(works.)37 1070 y Fr(\017)30 b Fp(Simplification)18 b(of)i(Windows)e(support.)36 b Fs(The)20 b(Windows)e(build)g(has)i(been)g(simplified.)36 b(WINIO)20 b(has)f(been)90 1133 y(removed,)12 b(and)f(everything)f (builds)f(with)h(one)h(set)g(of)g(makefiles.)h(Support)e(for)h(WIN16)g (has)g(been)g(removed.)0 1254 y Fo(17.7.6)25 b(Changes)15 b(from)h(2.0alpha7)e(to)h(2.0alpha8)37 1358 y Fr(\017)30 b Fp(HTTP)18 b(protocol)f(added.)31 b Fs(This)17 b(allows)g(you)h(to)f (use)h(the)g(standard)f(World)g(Wide)h(Web)g Ft(HTTP)p Fs(,)i(version)d(1.0,)90 1420 y(between)e(address)g(spaces.)24 b(This)15 b(makes)g(ILU)h(programs)f(Web)h(servers)f(and)g(clients,)h (though)e(only)g(in)h(a)h(very)90 1483 y(limited)10 b(sense.)h(See)h (the)f(`Protocols)f(and)h(Transports')f(chapter)i(of)f(the)g(user)g (manual)g(for)g(more)h(information.)37 1556 y Fr(\017)30 b Fp(OS)12 b(threading)f(added.)h Fs(We've)g(added)g(support)e(for)i (use)g(of)f(the)h(operating)e(system's)h(threads,)h(if)g(available,)f (with)90 1618 y(the)16 b(languages)f(C,)i(C)p Ft(++)p Fs(,)h(and)e(Python.)25 b(The)16 b(threading)f(systems)g(supported)f (are)j(POSIX)g(threads,)g(Solaris)e(2)90 1681 y(threads,)10 b(and)g(Windows/NT)e(threads.)i(See)h(`)p Ft(examples/test1/srvr.c)p Fs(')e(for)h(an)g(example)g(of)h(using)d(threads.)37 1754 y Fr(\017)30 b Fp(ILU)13 b(Simple)g(Binding)e(via)i(an)g(ILU)g (service.)j Fs(You)c(can)h(now)g(choose)f(to)g(`simple)h(binding')e (via)i(either)f(a)h(shared)90 1816 y(file)e(system)g(or)g(via)g(an)g (ILU)g(service.)h(See)g(the)e(chapter)i(on)e(`ILU)i(Concepts')e(for)i (more)f(information.)37 1890 y Fr(\017)30 b Ft(ilusbls)p Fp(.)d Fs(A)17 b(program,)h Ft(ilusbls)p Fs(,)g(that)e(will)g(list)f (the)h(objects)g(known)f(to)h(the)h(simple)f(binding)e(service,)19 b(is)90 1952 y(provided.)i Ft(ilusbls)15 b Fs(will)e(work)i(with)f (either)g(the)h(shared)f(files)h(simple)f(binding)f(or)i(the)f(ILU)h (service)g(simple)90 2014 y(binding.)37 2087 y Fr(\017)30 b Fp(Identities)6 b(exported)g(via)i(a)f(meta-object)h(protocol.)h Fs(Application-specific)t(identity)d(types)g(may)i(now)f(be)h (registered)90 2150 y(with)g(the)h(ILU)f(kernel,)i(and)f(procedures)f (to)h(`pickle')f(and)h(`unpickle')f(them)h(are)h(supported.)f (Application-specific)90 2212 y(protocols)j(and)i(transports)f(have)h (access)g(to)g(these)f(identity)f(objects,)i(and)g(can)h(use)e(them)h (for)h(various)e(security,)90 2274 y(accounting,)c(and)h(authorization) e(strategies.)h(See)i(`)p Ft(runtime/kernel/iluxport.h)p Fs(')d(for)i(more)g(information)90 2336 y(on)h Ft(ilu_IdentityInfo)p Fs(.)37 2410 y Fr(\017)30 b Fp(Python)15 b(threading)g(supported.)26 b Fs(If)16 b(ILU)h(is)e(configured)h(with)f Ft(--enable-os-threads)p Fs(,)h(and)g(your)g(Python)90 2472 y(installation)9 b(has)i(been)h (built)e(with)h(thread)g(support,)g(thread)g(support)g(will)f(also)h (be)h(available)f(in)g(the)h(Python)e(ILU)90 2534 y(runtime.)27 b(A)17 b(new)g(Python)e(function,)i Ft(ilu.ThreadedOperation\(\))p Fs(,)g(has)f(been)h(added)f(to)g(enable)h(use)f(of)90 2597 y(threads.)37 2670 y Fr(\017)30 b Fp(ILU/Python)10 b(support)f(for)j(Windows)d(NT.)p eop %%Page: 255 256 255 255 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(255)37 183 y Fr(\017)30 b Fp(Change)19 b(in)f(default)g(marshalling)f (of)i(discriminant)e(references.)34 b Fs(We)19 b(switched)e(to)h(using) g(a)g(more)i(efficient)90 246 y(representation)9 b(for)i(server)g(IDs)f (when)g(marshalling)g(the)g(discriminant)f(of)i(a)g(call)f(on)g(the)g (wire.)i(This)d(changes)h(our)90 308 y(ONC)15 b(RPC)h(and)e(XNS)h (Courier)g(wire)g(formats;)h(the)f(program)g(numbers)f(used)h(have)f (been)h(changed)g(to)f(reflect)90 370 y(this.)37 444 y Fr(\017)30 b Fp(Change)17 b(in)g(algorithm)f(to)h(compute)g(type)g (UIDs.)29 b Fs(We)17 b(switched)f(to)h(a)h(much)f(more)h(efficient)f (algorithm)f(for)90 507 y(computing)c(the)h(structural)g(fingerprint)f (of)h(a)h(type.)k(As)13 b(a)g(result,)h(all)f(stubbed)f(files)h(should) f(be)h(re-stubbed;)g(the)90 569 y(type)e(IDs)g(from)g(ILU)g(2.0alpha7)g (will)f(not)g(be)i(compatible)e(with)g(those)g(of)i(2.0alpha8.)37 643 y Fr(\017)30 b Fs(Various)7 b(fixes,)f(to)h(all)g(the)g(problems)g (reported)f(in)g Ft(ftp://ftp.p)o(arc.xerox.)o(com/pub/ilu)o (/2.0/2.0alp)o(ha7-)90 705 y(patches.html)p Fs(,)11 b(and)g(more.)0 829 y Fo(17.7.7)25 b(Changes)15 b(from)h(1.8)f(to)g(2.0alpha)62 933 y Fs(This)g(release)i(contains)d(some)i(major)h(changes,)g(and)e (is)h(NOT)f(compatible)h Ft(")p Fs(on)f(the)h(wire)p Ft(")g Fs(with)f(any)g(previous)0 995 y(version)10 b(of)h(ILU.)h(There) f(are)h(also)f(a)g(few)h(API)f(changes.)g(There)h(may)f(be)h(further)f (changes)g(in)f(2.0beta)h(and)g(2.0.)37 1082 y Fr(\017)30 b Fs(We)11 b(now)g(use)g(GNU)g(autoconf)f(\(and)h(still)f(use)h (imake\).)37 1156 y Fr(\017)30 b Fs(Support)11 b(for)i(C)g(and)f(C)p Ft(++)g Fs(use)g(on)g(Windows)f(95)h(and)g(Windows)f(NT)h(\(Windows)e (3.1)j(coming)e(soon\),)i(thanks)e(to)90 1219 y(Dan)g(Larner.)h (Windows)e(binaries)g(are)i(available)e(\(as)h(well)g(as)g(source)g (code\).)37 1293 y Fr(\017)30 b Fs(Thanks)12 b(to)h(Bridget)g (Spitznagel,)g(we)g(now)g(have)g(support)f(for)h(cross-language)f (calls)h(within)e(the)i(same)h(address)90 1355 y(space.)20 b(Because)15 b(we're)g(not)e(a)i(compiler)f(vendor,)g(and)g(can't)g (keep)g(up)g(with)f(all)h(the)g(compiler)g(vendors)f(in)g(the)90 1417 y(world)f(\(not)f(to)h(mention)g(all)f(the)h(combinations)f(of)h (them\),)h(we)g(don't)e(solve)h(your)f(problem)h(of)h(getting)d (multiple)90 1480 y(language)k(runtimes)h(to)f(co-exist.)22 b(But)15 b(where)g(you)g(*have*)f(solved)g(that)g(problem)h(\(perhaps)g (because)g(you've)90 1542 y(got)e(an)h(easy)f(instance,)h(such)f(as)h (C)g(and)g(XXX\),)g(you)f(can)h(now)f(just)g(call)g(through)f(an)i(ILU) g(interface)g(---)g(rather)90 1604 y(than)f(having)f(to)h(write)g (messy)g Ft(")p Fs(foreign)f(function)p Ft(")g Fs(interfaces)h(from)h (one)f(language)g(to)f(another.)18 b(Each)13 b(part)g(of)90 1666 y(your)h(program)h(looks)e(mono-lingual)g(and)h(normal,)i(and)e (we)h(provide)e(the)h(control-flow)f(and)i(data-conversion)90 1729 y(glue)10 b(to)h(put)f(them)g(together.)h(Data)g(conversion)e(is)h (currently)h(done)f(by)g(serializing)g(and)g(de-serializing)g(to/from)g (a)90 1791 y(normalized)i(form)h(in)f(a)h(memory)g(buffer;)f(we)h(plan) f(to)g(investigate)e(more)j(direct)f(methods)g(\(but)f(not)h (necessarily)90 1853 y(for)f(release)h(2.0\).)37 1927 y Fr(\017)30 b Fs(Our)11 b Ft(")p Fs(transport)p Ft(")f Fs(abstraction)g(has)h(been)g(re-organized.)h(Among)f(other)f(things,)g (this)h(makes)g(it)g(\(relatively\))f(easy)90 1990 y(to)h(introduce)f Ft(")p Fs(filters)p Ft(")g Fs(at)h(the)g(transport)f(level.)i(Of)f (course,)h(ILU)f(remains)g(open)g(and)g(extensible)f(in)g(this)h (regard.)90 2052 y(Want)g(to)g(add)g(a)g(compression)f(filter?)h(Go)g (ahead!)37 2126 y Fr(\017)30 b Fs(ILU)11 b(string)f(binding)f(handles)h (become)i(IETF)g(URLs.)37 2200 y Fr(\017)30 b Fs(We've)12 b(made)f(it)g(possible)e(for)j(a)f(calling)f(application)g(to)g (interrupt)g(a)i(call)f(in)g(progress.)37 2275 y Fr(\017)30 b Fs(The)11 b(documentation)f(\(and)h(of)g(course,)g(TIM\))h(has)f (diagrams)g(and)g(URLs!)90 2349 y(8\))i(Generalized)g(cleanup)g(and)g (bug)g(fixing.)j(This)c(includes)g(more)i(attention)d(to)i(making)g(it) g(practical)g(for)g(others)90 2411 y(to)e(add)g(transport)f(and)h (protocol)f(meta-objects.)i(This)e(also)h(includes)f(a)i(more)g (rigorous)e(treatment)h(of)h(exceptions)90 2473 y(in)j(the)f(kernel)h (and)g(runtimes,)g(with)f(a)i(taxonomy)e(of)h(exceptions)f(aligned)g (with)g(CORBA's.)23 b(It)15 b(also)g(includes)90 2536 y(fixes)g(that)f(change)h(the)g(type)f(ID's)i(and)e(protocol)g (mappings,)i(which)e(caused)h(us)g(to)f(bump)h(the)g(major)g(version)90 2598 y(number.)29 b(All)16 b(ONC)h(RPC)h(and)f(Courier)g(program)g (numbers,)h(and)f(ISO)g(object)f(IDs)h(are)h(now)e(official.)28 b(The)90 2660 y(Courier)11 b(type-ID-to-program-number)g(mapping)f (registry)g(has)h(been)g(eliminated.)p eop %%Page: 256 257 256 256 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(256)0 183 y Fo(17.7.8)25 b(Changes)15 b(from)h(1.7)f(to)g(1.8)37 287 y Fr(\017)30 b Fs(A)11 b(kernel)g(memory)h(leak)f(caused)g(by)g (having)f(many)h(clients)f(connect)h(to,)g(then)g(drop,)g(a)g(server)h (was)f(fixed.)37 359 y Fr(\017)30 b Fs(File)10 b(descriptors)e(are)j (now)e(removed)h(from)g(the)g(event)f(loop)g(registry)g(when)g(a)h (connection)f(is)g(closed,)h(which)f(fixes)90 421 y(some)i(errors)h(in) e(various)h(runtimes.)37 493 y Fr(\017)30 b Fs(The)17 b(kernel)g(routines)g(ilu)p 526 493 14 3 v 15 w(ConsiderSBH\(\))g(and)h (ilu)p 974 493 V 15 w(ReLookupObject\(\))e(are)i(now)f(provided)f(to)h (change)g(the)90 555 y(binding)11 b(of)i(a)h(surrogate)e(kernel)h (server.)k(This)12 b(allows)g(a)h(client)f(to)h(track)g(changes)g (caused)f(when)h(a)g(server)h(goes)90 618 y(down)9 b(and)g(is)g (re-started)g(with)g(different)g(contact)g(info.)i(This)d(should)g (also)h(handle)g(the)g(relocation)g(requirement)g(of)90 680 y(CORBA's)j(IIOP.)g(They)e(have)h(not)g(been)g(fully)f(tied)g(into) g(the)h(language)f(runtimes)g(yet.)i(Some)f(language)g(runtime)90 742 y(code)g(may)h(still)d(improperly)i(keep)g(a)g(cache)h(of)g(an)f (earlier)g(SBH.)37 814 y Fr(\017)30 b Fs(The)17 b(Common)g(Lisp)e (garbage)i(collector)f(is)g(now)g(tied)g(in)h(to)f(the)g(ILU)h(network) f(GC)h(scheme,)i(so)d(that)g(client)90 876 y(interest)9 b(in)h(collectible)e(true)i(objects)g(is)f(communicated)h(and)g(used)g (properly)f(between)h(Lisp)f(clients)g(and)h(servers.)90 938 y(Collectible)g(true)h(objects)f(are)i(now)f(GC'ed.)37 1010 y Fr(\017)30 b Fs(A)10 b(new)f(appendix)f(to)i(the)f(ILU)g(manual) h(documents)f(the)g(process)g(of)h(adding)e(ILU)i(support)e(for)i(a)g (different)f(variety)90 1073 y(of)i(Common)h(Lisp.)37 1144 y Fr(\017)30 b Fs(Various)10 b(fixes)h(to)g(the)f(Python)h (support)e(have)i(been)g(made)h(to)f(fix)g(various)f(bugs,)g(and)h(to)g (allow)f(unregistration)f(of)90 1207 y(Tk)k(event)f(handlers)h(when)f (connections)g(are)h(closed.)k(Python)12 b(true)h(objects)f(must)h (still)e(be)i(manually)g(held)f(onto)90 1269 y(by)f(the)g(server.)37 1341 y Fr(\017)30 b Fs(References)12 b(into)e(freed)i(data)f (structures)f(have)h(been)h(fixed)e(in)h(the)g(C)h(and)f(C)p Ft(++)g Fs(runtime,)g(thanks)f(to)h(Purify.)37 1413 y Fr(\017)30 b Fs(An)11 b(authentication)e(framework)i(has)g(been)g (added,)h(but)e(no)h(protocols)e(currently)i(pass)f(any)h(identity)e (information)90 1475 y(except)16 b(for)h(the)f(Sun)g(RPC)h(protocol's)e (default)h(authentication)e(of)i Ft(")p Fs(AUTH)p 1383 1475 V 16 w(UNIX)p Ft(")p Fs(.)26 b(This)16 b(identity)e(is)i(now)90 1537 y(available)10 b(in)g(C)i(true)e(method)h(code,)g(but)f(the)g (access)h(method)g(is)f(not)g(yet)h(documented,)f(as)h(it)f(will)g (surely)g(change.)37 1609 y Fr(\017)30 b Fs(An)22 b(obscure)h(bug)f(in) g(the)h(Lisp)e(generic)i(process)f(code,)k(responsible)21 b(for)i(causing)f(an)h(occasional)f Ft(")p Fs(Bad)90 1671 y(Process-Lock)p Ft(")11 b Fs(message,)g(has)g(been)h(fixed.)37 1743 y Fr(\017)30 b Fs(The)11 b(XView)g(X)g(toolkit)e(code)i(in)g (ILUSRC/etc/xview/)f(has)h(been)g(successfully)f(used.)37 1815 y Fr(\017)30 b Fs(Memory)16 b(leaks)g(in)f(C)h(true)g(stubs)e (have)i(been)g(fixed,)g(and)g(C)g(true)g(stubs)e(now)h(report)h (unexpected)f(exceptions)90 1877 y(properly.)37 1949 y Fr(\017)30 b Fs(Fixes)11 b(from)h(hassan)p Ft(@)p Fs(db.stanford.edu) d(for)i(the)g(DEC)g(Alpha)g(system)f(with)h(OSF/1)g(have)g(been)g (incorporated.)0 2068 y Fo(17.7.9)25 b(Changes)15 b(from)h(1.6.4-p9)e (to)h(1.7)37 2172 y Fr(\017)30 b Fs(The)12 b(way)h(of)f(associating)e (a)j(Sun)g(RPC)g(\(program)g(number,)g(version\))e(tuple)h(with)f(an)i (object)e(type)h(has)g(changed.)90 2234 y(In)h(release)h(1.6.4,)g(the)e (\(program)i(number,)g(version\))e(was)h(assigned)f(either)h(manually)f (or)h(automatically,)g(and)g(a)90 2296 y(file)f(maintained)f(a)h(list)e (of)i(\(type)g(ID,)g(program)g(#,)g(version\))f(tuples.)h(Each)g (client)f(and)h(server)g(consulted)e(this)g(file)90 2359 y(when)i(mapping)h(between)f(Sun)h(RPC)h(program)f(#'s)f(and)h(ILU)f (type)h(ID's.)j(This)c(led)g(to)h(a)g(number)g(of)f(problems.)90 2421 y(This)g(scheme)h(has)f(been)h(changed)f(in)g(release)h(1.7)g(to)f (a)h(scheme)g(in)f(which)g(the)g(Sun)h(RPC)g(program)g(#)g(is)f(always) 90 2483 y(the)j(value)g(0x31000400,)g(and)g(the)g(\(32-bit\))g(Sun)g (RPC)i(version)d(is)h(computed)g(from)h(the)f(ILU)h(type)f(ID,)g(using) 90 2545 y(the)d(CRC-32)h(hash)f(algorith.)h(Thus)f(the)g(version)f (number)h(is)g(the)g(CRC-32)h(of)f(the)g(ILU)g(type)g(ID.)h(This)e(has) h(been)90 2608 y(tested)e(for)g(collisions,)f(and)h(they)g(have)g(been) g(found)g(to)g(be)g(extremely)h(rare)g(--)g(much)f(rarer)i(than)e (collisions)d(would)90 2670 y(have)k(been)g(under)g(the)g(ILU)g(1.6.4)g (scheme.)p eop %%Page: 257 258 257 257 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(257)90 183 y(This)11 b(means)h(that)f(if)g(you)g(wish)g(to)g(use)g (ILU)h(1.6.4)g(clients)e(or)i(servers)f(with)g(ILU)h(1.7,)g(you)f (should)f(edit)h(the)g(1.6.4)90 246 y(SunRPCRegistry)g(file)g(to)g(use) g(the)g(1.7)g(program)g(number)g(and)g(version)g(for)g(each)h (particular)e(object)h(type.)37 321 y Fr(\017)30 b Fs(The)15 b(C)h(runtime)e(now)h(offers)g(an)g(interface)h(to)e(threads,)i(so)f (that)f(C)i(servers)f(can)g(handle)g(requests)f(in)h(different)90 384 y(threads.)c(This)f(has)h(been)g(tested)g(with)f(the)h(PPCR)h (implementation)e(of)h(POSIX)h(threads.)37 459 y Fr(\017)30 b Fs(Untested)7 b(pseudo-threads)f(lib)o(raries)h(for)g(th)o(e)g(Xt)g (and)f(XVi)o(ew)h(X)g(t)o(oolk)o(its)f(are)h(provi)o(ded,)e(under)i (ILUSRC/etc/)p Ft({)p Fs(Xt,xview)p Ft(})p Fs(/.)37 535 y Fr(\017)30 b Fs(Support)10 b(for)i(the)f(Python)f(programming)h (language)f(has)h(been)g(added.)37 611 y Fr(\017)30 b Fs(All)10 b(languages)h(now)f(support)g(IN,)i(OUT,)f(and)g(INOUT)f (method)h(parameters.)37 687 y Fr(\017)30 b Fs(Support)17 b(for)g(CORBA)h(NIL)g(object)e(references)j(has)e(been)g(added,)i(via)f (the)f(new)g(OPTIONAL)g(keyword)g(on)90 749 y(object)11 b(types.)j(All)d(object)h(types)f(defined)h(with)f(OMG)h(IDL)g(will)f (be)i(tagged)e(automatically)g(with)g(OPTIONAL;)90 811 y(object)j(types)h(defined)f(with)h(ILU)g(ISL)g(have)g(the)g(option)f (of)h(being)f(OPTIONAL.)h(Note)g(that)f(this)g(keyword)h(is)90 874 y(different)d(from)i(the)e(ISL)h(OPTIONAL)f(type)h(constructor.)i (The)d(use)h(of)g(this)e(keyword)h(in)g(ISL)i(is)e(deprecated)h(in)90 936 y(favor)e(of)h(the)e(OPTIONAL)h(type)g(constructor.)90 1012 y(This)f(also)h(means)h(that)e(the)h(ILU)g(on-the-wire)g(mapping)g (for)g(objects)f(has)h(been)h(changed)f(\(slightly\))e(to)i(allow)f (for)90 1074 y(NIL)h(object)g(references.)h(Applications)d(that)h(do)h (not)f(use)h(NIL)h(objects)e(will)g(not)g(encounter)h(this)f(change.)37 1150 y Fr(\017)30 b Fs(The)12 b(usage)h(of)f(the)h(SINGLETON)f(keyword) f(on)i(object)f(types)f(has)i(changed.)i(It)e(now)f(takes)g(a)h(string) e(argument)90 1212 y(which)f(defines)h(the)g(particular)g(``pinfo'')f (and)h(``tinfo'')g(to)g(be)g(used)g(with)f(the)h(object)f(type.)37 1288 y Fr(\017)30 b Fs(Network)10 b(GC)i(now)f(works.)37 1364 y Fr(\017)30 b Fs(Numerous)11 b(bugs)f(have)h(been)g(fixed.)0 1505 y Fu(17.8)29 b(Bug)16 b(Reporting)e(and)h(Comments)0 1649 y Fo(17.8.1)25 b(Known)15 b(Bugs)g(and)f(Gotchas)62 1754 y Fs(KNOWN)d(BUGS:)62 1843 y(Release)h(2.0alpha10:)37 1931 y Fr(\017)30 b Fp(Java,)12 b(C)p Ft(++)f Fs(Network)f(GC)i (doesn't)e(work)h(with)f(Java)h(yet,)g(and)g(has)g(never)h(worked)e (with)h(our)g(old)f(C)p Ft(++)h Fs(support.)37 2007 y Fr(\017)30 b Fp(kernel)15 b Fs(UDP)c(support)f(is)h(still)e(broken.)37 2083 y Fr(\017)30 b Fp(C)p Ft(++)15 b Fs(The)g(current)g(C)p Ft(++)h Fs(support)d(is)i(old)f(and)h(buggy.)22 b(There)16 b(are)f(known)f(leaks)h(in)g(the)f(generated)h(stubs,)g(and)90 2145 y(in)e(the)f(runtime)h(itself.)j(It)d(is)f(being)h(completely)f (re-worked)h(for)g(version)f(2.0)h(of)g(ILU.)g(We)h(do)e(not)g (recommend)90 2207 y(serious)e(use)h(of)g(the)g(current)g(C)p Ft(++)h Fs(support,)e(but)g(it)h(is)g(included)f(for)h(use)g(in)g (testing)e(other)i(parts)g(of)g(the)g(system.)37 2283 y Fr(\017)30 b Fp(Security)17 b Fs(Still)d(not)g(released)i(yet!)22 b(We're)16 b(updating)e(our)g(GSS)i(implementation)e(to)g(the)h(latest) f(version)g(of)h(the)90 2345 y(spec,)d(so)e(we)i(decided)e(to)h(hold)f (it)h(back)g(for)g(this)f(release.)37 2421 y Fr(\017)30 b Fp(configuration)12 b Fs(Since)g(our)f(Makefiles)g(are)i(constructed) d(via)h(imake)g(from)h(Imakefiles,)g(which)f(involves)f(running)90 2483 y(the)j(C)g(preprocessor,)h(watch)f(out)f(for)h(use)g(of)g (predefined)g(C)g(preprocessor)g(symbols)f(in)g(pathnames!)17 b(Common)90 2545 y(boobytraps)j(include)i(names)g(of)g(processors,)j (vendors,)f(and)e(operating)f(systems)g(\(e.g.,)27 b Ft(")p Fs(sparc)p Ft(")p Fs(,)e Ft(")p Fs(sun)p Ft(")p Fs(,)90 2608 y Ft(")p Fs(hpux)p Ft(")p Fs(\),)19 b(which)e(are)h(used)g (\(as)g(isolated)e(tokens)h(according)g(to)g(C)i(rules\))e(in)g(some)h (folks')f(conventions)f(for)90 2670 y(naming)d(directories.)19 b(If)14 b(you're)g(lucky,)g(you)f(can)h(solve)f(these)h(problems)f (with)g(quoting.)k(A)d(more)h(heavy-duty)p eop %%Page: 258 259 258 258 bop 0 -58 a Fs(Chapter)11 b(17:)g(Installation)e(of)i(ILU)1316 b(258)90 183 y(approach)14 b(is)g(to)f(#undef)h(the)g(offending)f (macros)h(at)g(the)g(start)g(of)g(imake/ilu.defs.new,)g(and)g (re#define)g(them)g(at)90 246 y(the)d(end.)37 320 y Fr(\017)30 b Fp(ISL)19 b Ft(")p Fs(TYPE)14 b(X)g(=)h(OBJECT)f(SUPERTYPES)h(Y)f (...;)j(TYPE)d(Y)g(=)g(OBJECT)h(SUPERTYPES)f(X)h(...)p Ft(")g Fs(crashes)90 382 y(the)c(parser)g(\(and)g(thus)g(islscan)f(and) h(all)f(the)h(stubbers\).)g(Don't)f(do)h(this!)37 457 y Fr(\017)30 b Fp(MOP)22 b Fs(If)17 b(ilu)p 309 457 14 3 v 16 w(AddRegisterersToDefault)d(is)j(used,)h(callers)e(of)h(ilu)p 1211 457 V 16 w(Register)p Ft({)p Fs(Input,Output)p Ft(})o Fs(Source)e(must)h(be)90 519 y(prepared)11 b(for)h(false)f(callbacks.) 62 632 y(Release)h(2.0alpha9:)37 719 y Fr(\017)30 b Fp(OMG)14 b(IDL)k Fs(The)c(Java,)g(Lisp,)g(and)f(C)p Ft(++)h Fs(support)f(in)g (this)f(release)i(is)g(fairly)f(flakey,)h(and)g(in)f(particular)g(will) g(not)90 781 y(work)e(with)f(interfaces)h(written)f(in)h(OMG)g(IDL.)37 856 y Fr(\017)30 b Fp(Java,)12 b(C)p Ft(++)f Fs(Network)f(GC)i(doesn't) e(work)h(with)f(Java)h(yet,)g(and)g(has)g(never)h(worked)e(with)h(our)g (old)f(C)p Ft(++)h Fs(support.)37 930 y Fr(\017)30 b Fp(kernel)15 b Fs(UDP)c(support)f(is)h(still)e(broken.)37 1005 y Fr(\017)30 b Fp([C)p Ft(++)p Fp(])15 b Fs(The)e(current)h(C)p Ft(++)g Fs(support)e(is)g(old)h(and)g(buggy.)18 b(There)13 b(are)h(known)f(leaks)g(in)g(the)g(generated)g(stubs,)g(and)90 1067 y(in)g(the)f(runtime)h(itself.)j(It)d(is)f(being)h(completely)f (re-worked)h(for)g(version)f(2.0)h(of)g(ILU.)g(We)h(do)e(not)g (recommend)90 1130 y(serious)e(use)h(of)g(the)g(current)g(C)p Ft(++)h Fs(support,)e(but)g(it)h(is)g(included)f(for)h(use)g(in)g (testing)e(other)i(parts)g(of)g(the)g(system.)37 1204 y Fr(\017)30 b Fp([Security])14 b Fs(Still)f(not)f(released)i(yet!)j (We're)e(updating)c(our)i(GSS)h(implementation)e(to)h(the)g(latest)g (version)f(of)h(the)90 1267 y(spec,)f(so)e(we)i(decided)e(to)h(hold)f (it)h(back)g(for)g(this)f(release.)37 1341 y Fr(\017)30 b Fp([configuration])8 b Fs(Since)i(our)e(Makefiles)h(are)h (constructed)e(via)g(imake)i(from)f(Imakefiles,)h(which)e(involves)g (running)90 1404 y(the)13 b(C)g(preprocessor,)h(watch)f(out)f(for)h (use)g(of)g(predefined)g(C)g(preprocessor)g(symbols)f(in)g(pathnames!) 17 b(Common)90 1466 y(boobytraps)j(include)i(names)g(of)g(processors,)j (vendors,)f(and)e(operating)f(systems)g(\(e.g.,)27 b Ft(")p Fs(sparc)p Ft(")p Fs(,)e Ft(")p Fs(sun)p Ft(")p Fs(,)90 1528 y Ft(")p Fs(hpux)p Ft(")p Fs(\),)19 b(which)e(are)h(used)g (\(as)g(isolated)e(tokens)h(according)g(to)g(C)i(rules\))e(in)g(some)h (folks')f(conventions)f(for)90 1590 y(naming)d(directories.)19 b(If)14 b(you're)g(lucky,)g(you)f(can)h(solve)f(these)h(problems)f (with)g(quoting.)k(A)d(more)h(heavy-duty)90 1653 y(approach)f(is)g(to)f (#undef)h(the)g(offending)f(macros)h(at)g(the)g(start)g(of)g (imake/ilu.defs.new,)g(and)g(re#define)g(them)g(at)90 1715 y(the)d(end.)37 1790 y Fr(\017)30 b Fp([ISL])14 b Ft(")p Fs(TYPE)f(X)f(=)h(OBJECT)f(SUPERTYPES)h(Y)g(...;)h(TYPE)e(Y)h (=)f(OBJECT)h(SUPERTYPES)g(X)f(...)p Ft(")i Fs(crashes)90 1852 y(the)d(parser)g(\(and)g(thus)g(islscan)f(and)h(all)f(the)h (stubbers\).)g(Don't)f(do)h(this!)37 1927 y Fr(\017)30 b Fp([MOP])16 b Fs(If)e(ilu)p 330 1927 V 16 w(AddRegisterersToDefault)d (is)j(used,)g(callers)g(of)g(ilu)p 1217 1927 V 15 w(Register)p Ft({)p Fs(Input,Output)p Ft(})p Fs(Source)e(must)h(be)90 1989 y(prepared)e(for)h(false)f(callbacks.)0 2114 y Fo(17.8.2)25 b(Reporting)14 b(Bugs)62 2217 y Fs(Report)d(bugs)f(\(nah!)h(--)g (couldn't)f(be!\))h(to)g(the)f(Internet)h(address)f Ft (ilu-bugs.parc@xerox.com)p Fs(,)f(or)i(to)g(the)f(XNS)0 2280 y(address)i Ft(ILU-bugs:PARC:Xerox)p Fs(.)h(Bug)g(reports)e(are)i (more)g(helpful)e(with)h(some)g(information)f(about)h(the)g(activity;)0 2342 y Fp(please)17 b Fs(read)f(Section)f(16.7)g([Debugging)e(ILU)i (Programs],)i(page)e(231,)h(for)f(more)h(information)e(on)h(how)f(to)h (look)f(at)0 2404 y(problems.)d(General)g(comments)g(and)g(suggestions) e(can)i(be)h(sent)e(to)h(either)g Ft(ILU@parc.xerox.com)e Fs(or)j Ft(ILU-bugs)p Fs(.)p eop %%Page: 259 260 259 259 bop 0 -58 a Fs(Chapter)11 b(18:)g(Multiple)f(Languages)g(In)h (One)g(Address)g(Space)876 b(259)0 183 y Fq(18)36 b(Multiple)14 b(Languages)g(In)h(One)f(Address)h(Space)62 330 y Fs(With)c(ILU)h (version)f(2.0)h(or)f(later,)i(modules)e(implemented)g(in)h(different)f (programming)h(languages)e(can)i(be)g(mixed)0 392 y(in)f(the)g(same)h (address)e(space,)i(with)e(ILU)i(doing)e(automatic)g(translation)g (between)h(data)g(representations.)1717 376 y Fm(1)1745 392 y Fs(There)h(are)g(a)0 454 y(number)f(of)g(things)f(to)h(consider)f (when)h(doing)f(this;)f(this)h(section)h(discusses)e(some)i(of)h(them.) 0 599 y Fu(18.1)29 b(Dueling)15 b(Runtimes)62 705 y Fs(Some)d (languages)f(simply)f(cannot)g(be)i(mixed)f(in)g(the)g(same)h(address)e (space)i(because)f(their)g(runtimes)g(will)f(conflict.)0 767 y(ILU)j(offers)g(no)f(solutions)f(to)h(this)g(problem.)k(Typical)c (examples)h(are)g(two)f(languages)g(like)g(Franz)i(Allegro)e(Common)0 829 y(Lisp)7 b(and)i(DEC)f(SRC)h(Modula-3.)h(They)e(each)h(implement)f (a)h(user-level)f(threads)g(package,)h(and)f(their)g(implementations)0 892 y(of)j(threads)g(probably)f(cannot)g(co-exist.)62 981 y(A)j(possible)d(solution)g(to)i(this)f(problem,)i(called)f(the)g (POSIX)h(Portable)f(Common)h(Runtime)f(\(PPCR\),)i(is)e(available)0 1043 y(from)g(Xerox)f(PARC,)h(as)f Ft (ftp://ftp.parc.xerox.com/pub/ppcr/)p Fs(.)e(It)i(containsa)f(basic)h (runtime)f(which)h(can)0 1105 y(be)k(used)f(as)g(the)g(platform)g(for)h (a)g(particular)f(language)f(implementation's)g(runtime.)21 b(Languages)14 b(which)g(use)g(PPCR)0 1167 y(will)c(have)h(a)h(lower)f (chance)g(of)g(having)g(conflicting)e(runtimes.)0 1312 y Fu(18.2)29 b(Module)16 b(Initialization)62 1418 y Fs(Module)e (initialization)d(really)j(consists)e(of)i(two)f(operations:)i (interface)g(initialization)c(and)j(object)f(instantiation.)0 1480 y(The)h(first)f(operation)f(initializes)g(all)i(the)f(interfaces)h (used)f(or)h(exported)f(by)g(the)h(module;)g(the)f(second)g(creates)i (one)e(or)0 1542 y(more)f(true)f(instances)f(of)h(objects)f(to)h(be)g (used)g(by)g(other)f(modules.)62 1632 y(Generally,)24 b(each)e(ILU)f(interface)g(must)g(be)h(initialized.)40 b(The)21 b(process)g(of)g(doing)f(this)g(initialization)e(varies)0 1694 y(from)24 b(programming)f(language)f(to)h(programming)g(language.) 47 b(In)23 b(ANSI)h(C,)g(ILU)f(requires)g(explicit)f(calls)h(to)0 1756 y Fp(interface)s Ft(__Initialize\(\))9 b Fs(for)i(interfaces)g (being)e(used,)i(or)g Fp(interface)s Ft(__InitializeServer\(\))d Fs(for)j(interfaces)0 1818 y(being)g(exported.)j(In)f(C)p Ft(++)p Fs(,)g(interface)f(initialization)e(is)h(performed)i (automatically,)f(but)f(at)h(some)h(indeterminate)e(time)0 1881 y(before)i(the)g(first)f(symbol)g(from)i(that)e(interface)h(is)g (referenced)h(from)f(outside)f(the)h(interface.)k(In)c(Python)f(or)h (Common)0 1943 y(Lisp,)g(interface)g(initialization)d(is)j(performed)h (automatically)d(by)i(the)g(language)f(at)h(the)g(time)g(the)g(module)g (describing)0 2005 y(the)e(interface)g(is)g(``loaded'')g(into)f(the)h (address)g(space.)62 2094 y(In)19 b(addition)e(to)h(initializing)e(all) i(interfaces)h(being)f(used)g(or)g(exported,)j(a)e(module)f(must)g (create)h(one)g(or)g(more)0 2156 y(true)e(object)f(instances,)i(to)f (allow)f(other)g(modules)h(to)f(access)i(it.)28 b(Again,)18 b(the)f(specific)g(way)g(of)g(doing)f(this)f(varies)0 2219 y(from)e(programming)g(language)f(to)h(programming)f(language.)k (Once)d(the)g(true)g(instance)f(has)g(been)h(created,)i(it)d(can)h(be)0 2281 y Fp(exported)18 b Fs(from)d(the)f(module)g(by)f(either)h (publishing)e(it,)i(via)g(the)g(ILU)g(simple)g(binding)e(system,)j(or)f (taking)f(its)g(string)0 2343 y(binding)c(handle,)i(and)g(passing)f (that)g(outside)g(the)h(module)g(for)g(other)g(modules)f(to)h(use.)p 0 2400 600 2 v 21 2528 a Fm(1)62 2544 y Fs(Currently,)g(it)f(does)g (this)f(by)i(marshalling)e(one)h(language's)g(representation)f(into)h (a)h(data)f(buffer,)i(as)e(if)h(to)f(transmit)g(it)62 2606 y(to)h(another)g(address)f(space,)i(then)f(hands)f(this)g(buffer)i (to)f(the)f(other)h(language's)g(ILU)g(support,)f(which)g(unmarshalls) 62 2669 y(it)h(into)f(representations)g(appropriate)g(for)h(that)g (language.)g(We)g(plan)g(to)f(optimize)h(this)f(process)h(in)f(the)h (future.)p eop %%Page: 260 261 260 260 bop 0 -58 a Fs(Chapter)11 b(18:)g(Multiple)f(Languages)g(In)h (One)g(Address)g(Space)876 b(260)62 183 y(When)13 b(multiple)e (languages)h(are)h(used)g(in)f(the)g(same)i(address)e(space,)i(each)f (must)f(be)h(initialized)e(according)h(to)g(the)0 246 y(standards)f(used)g(for)h(that)f(programming)h(language.)g(This)f(can) h(be)g(tricky)f(when)h(using)e(both)h(statically)f(compiled)h(and)0 308 y(dynamically)e(compiled)g(languages)h(together.)g(Consider)f(the)h (case)h(where)f(Python)f(and)h(ANSI)g(C)h(are)g(linked)e(together.)0 370 y(This)g(use)i(of)f(Python)f(may)i(be)g(as)f(an)h(extension)e (language)g(to)h(a)h(program)g(written)e(in)h(C.)h(In)g(this)e(case,)i (the)f(C)h(code)g(must)0 432 y(do)i(all)g(initialization)d(of)j (modules)g(written)f(in)h(C)h(before)f(calling)f(into)h(any)g(Python)f (module)h(which)f(might)h(reference)0 495 y(them.)e(Similarly,)g (Python)e(initialization)e(\()p Ft(import)p Fs(\))j(of)g(modules)g (must)g(occur)g(before)h(the)f(C)g(code)h(can)f(use)g(them.)h(See)0 557 y(`)p Fp(ILUSRC)t Ft(/src/examples/multlang/)p Fs(')f(for)h(an)g (example)h(of)f(a)g(situation)e(of)j(this)e(sort.)62 644 y(In)17 b(the)f(other)g(case,)i(C)f(true)f(modules)g(which)g(are)h (to)f(be)g(used)g(from)h(a)g(Python)e(program)i(in)f(the)g(same)h (address)0 706 y(space)11 b(must)f(somehow)h(be)g(first)f(loaded)g (into)g(that)g(address)g(space,)i(then)e(initialized.)f(The)i(loading)e (is)i(done)f(by)h(turning)0 769 y(the)j(C)h(module)e(into)g(a)i(Python) e Fp(extension)g(module)p Fs(,)i(and)f(either)g(linking)e(it)h(into)g (the)h Ft(python)g Fs(image,)i(or)e(creating)g(a)0 831 y(dynamically)8 b(loadable)h(module)g(from)h(it.)g(The)g (initialization)c(is)j(done)g(by)g(then)g(calling)g Ft(import)g Fs(on)g(that)g(module)g(from)0 893 y(within)j(the)h(Python)g (interpreter.)19 b(The)13 b(extension)f(module's)h(initialization)e (routine)i(initializes)e(all)i(of)h(its)f(interfaces,)0 955 y(creates)j(one)f(or)h(more)g(true)f(objects,)h(and)f(exports)g (them.)25 b(After)15 b(the)g Ft(import)h Fs(statement)e(returns,)j(the) e(objects)f(are)0 1018 y(available)c(for)i(finding)d(\(see)j(next)f (section\))f(from)i(within)d(Python.)0 1155 y Fu(18.3)29 b(Finding)15 b(Objects)62 1258 y Fs(Object)e(instances)g(may)h(be)g (located)f(by)g(calls)g(on)h(the)f(variations)f(of)i Ft(LookupObject)f Fs(and)g Ft(ObjectOfSBH)g Fs(that)0 1321 y(exist)c(in)h(the)g(various)f(language)g(runtimes.)h Ft(LookupObject)g Fs(is)f(implemented)h(so)f(that)h(it)f(first)h(looks) f(to)g(see)h(if)h(the)e(true)0 1383 y(object)k(for)i(the)e(specified)h (object)f(ID)h(is)g(available)f(in)h(the)g(local)f(address)h(space.)20 b(If)15 b(so,)f(it)g(returns)f(a)i(version)e(of)h(that)0 1445 y(object.)19 b(Only)14 b(if)g(the)f(object)h(is)f(not)h(locally)f (available)g(does)g(it)h(perform)h(external)e(lookups)f(in)i(an)g (attempt)g(to)f(locate)0 1507 y(the)g(object.)18 b(Note)13 b(that)f(for)i(an)g(object)e(to)h(be)h(found)e(via)i Ft(LookupObject)p Fs(,)f(the)g(true)g(instance)g(must)g(first)g(have)g (been)0 1570 y(published)d(via)i(the)g(implementation)e(language)i(ILU) f(runtime's)h(variant)f(of)i Ft(PublishObject)p Fs(.)g(If)f(you)g(do)f (not)h(want)0 1632 y(your)f(objects)f(published)f(outside)h(your)g (address)h(space,)h(you)e(should)g(use)h Ft(ObjectOfSBH)f Fs(to)h(find)f(them.)p eop %%Page: 261 262 261 261 bop 0 -58 a Fs(Chapter)11 b(19:)g(Using)f(Imake)i(with)e(ILU) 1244 b(261)0 183 y Fq(19)36 b(Using)14 b(Imake)h(with)f(ILU)62 330 y Fs(ILU)f(uses)f(the)g Ft(imake)g Fs(system)g(from)h(the)f(X)h (Window)e(System)i(distribution)o(.)g Ft(imake)f Fs(provides)g(a)h (parameterized)0 392 y(way)g(of)g(constructing)e(`)p Ft(Makefile)p Fs('s)i(automatically)f(from)h(`)p Ft(Imakefile)p Fs('s.)k(The)c(`)p Ft(Imakefile)p Fs('s)g(contain)f(macros)0 455 y(which)e(are)i(expanded)f(to)g(regular)g(`)p Ft(Makefile)p Fs(')g(rules)f(when)h(the)g(program)g Ft(imake)g Fs(is)g(run.)0 600 y Fu(19.1)29 b(Creating)14 b(`)p Fh(Makefile)p Fu('s)h(from)f(`)p Fh(Imakefile)p Fu('s)62 705 y Fs(The)i(program)h Ft(ilumkmf)e Fs(is)h(supplied)e(with)h(the)h(ILU)g(system.)26 b(When)16 b(run,)h(it)f(will)f(use)h(the)g(`)p Ft(Imakefile)p Fs(')g(in)0 768 y(your)d(current)g(working)g(directory)f(as)i(input,)f(and)g (produce)h(the)f(corresponding)f(`)p Ft(Makefile)p Fs(',)i(again)f(in)g (the)g(current)0 830 y(working)d(directory:)120 919 y Ft(\045)25 b Fj(cd)g(myilu)120 969 y Ft(\045)g Fj(ls)120 1019 y Ft(Imakefile)f(foo.isl)g(fooProg.cc)120 1069 y(\045)h Fj(ilumkmf)120 1118 y Ft(\045)g Fj(ls)120 1168 y Ft(Imakefile)f (Makefile)g(foo.isl)g(fooProg.cc)120 1218 y(\045)0 1363 y Fu(19.2)29 b(ANSI)16 b(C)g(Usage)62 1469 y Fs(A)11 b(typical)g(`)p Ft(Imakefile)p Fs(')f(for)i(an)f(ANSI)g(C)h(ILU)f (application)f(would)g(look)g(like:)120 1558 y Ft(NormalObjectRule\(\)) 48 b(/*)25 b(this)f(rule)h(defines)f(the)h(.c)g(->)f(.o)h(step)f(*/)120 1658 y(InterfaceTarget\(foo.isl\))120 1707 y(ILUCTarget\(foo.h)f (foo-surrogate.c)h(foo-common.c)g(foo-true.c,)g(foo.isl\))120 1807 y(DepObjectTarget\(programComponent1.o,)e(foo.h)i (somethingElse.h\))120 1857 y(ObjectTarget\(programComponent2.o\))120 1956 y(CProgramTarget\(program,)f(programComponent1.o)g (programComponent2.o)g(foo-surrogate.o)120 2006 y(foo-common.o,,\))0 2137 y Fo(19.2.1)i(ANSI)16 b(C)f(ILU)g Fl(imake)g Fo(Macros)62 2243 y Fs(The)c(variable)g Ft(LOCAL_INCLUDES)f Fs(is)h(a)g(list)f(of)i (include)e(file)h(locations)e(to)i(be)g(included)f(when)h(compiling.)62 2332 y(The)f(variable)g Ft(ANSI_C_COMMAND)f Fs(defines)g(the)h (particular)f(command)i(invoked)d(for)j(compiling)d(ANSI)i(C)h(on)f (your)0 2394 y(system.)18 b(If)13 b(you)g(wish)g(to)g(use)g(a)g (different)h(ANSI)f(C)h(compiler,)g(override)f(the)g(default)g(command) h(by)f(redefining)f(this)0 2456 y(value)d(in)g(your)g(`)p Ft(Imakefile)p Fs('.)i(Note)d(that)h(it)g(may)h(also)f(be)g(necessary)h (to)f(build)f(a)i(version)e(of)h(the)h(ILU)f(ANSI)h(C)f(library,)0 2519 y(`)p Fp(ILUHOME)t Ft(/lib/libilu-c.a)p Fs(',)i(to)f(use)h(with)f (this)g(compiler.)62 2608 y Ft(NormalObjectRule\(\))i Fs(defines)g(a)i(number)f(of)g(suffix)f(rules,)h(in)g(particular)f(the) h(one)g(to)g(go)f(from)i(`)p Ft(.c)p Fs(')f(files)g(to)0 2670 y(`)p Ft(.o)p Fs(')e(files)g(in)g(your)f(environment.)p eop %%Page: 262 263 262 262 bop 0 -58 a Fs(Chapter)11 b(19:)g(Using)f(Imake)i(with)e(ILU) 1244 b(262)62 183 y Ft(InterfaceTarget\()p Fp(ISL-file)s Ft(\))14 b Fs(defines)h(a)h(number)g(of)g(rules)f(about)g(the)g(`)p Ft(.isl)p Fs(')h(file)f Fp(ISL-file)p Fs(.)26 b(You)15 b(should)0 246 y(have)c(one)g(of)g(these)g(in)g(your)g(`)p Ft(Imakefile)p Fs(')f(for)i(every)f(interface)g(you)g(use.)62 344 y Ft(ILUCTarget\()p Fp(generated-files)p Ft(,)f Fp(ISL-file)s Ft(\))h Fs(defines)h(which)g(ANSI)g(C)h(files)f(are)h(generated)f(from) h(the)f(`)p Ft(isl)p Fs(')g(file)0 406 y(and)i(may)h(therefore)g(by)f (re-generated)g(at)h(will,)f(and)g(when)g(the)h(`)p Ft(.isl)p Fs(')f(file)g(changes.)21 b(Generally,)15 b(for)g(an)f(interface)0 468 y(called)21 b Ft(foo)p Fs(,)i(the)d(generated)h(files)f(will)g(be)h (`)p Ft(foo-surrogate.c)p Fs(',)h(`)p Ft(foo-true.c)p Fs(',)h(`)p Ft(foo-common.c)p Fs(',)g(and)0 531 y(`)p Ft(foo.h)p Fs('.)62 629 y Ft(ObjectTarget\()p Fp(object-file)s Ft(\))9 b Fs(simply)h(states)g(that)h(the)g(specified)f Fp(object-file)j Fs(should)d(be)h(built.)62 728 y Ft(DepObjectTarget\() p Fp(object-file)p Ft(,)e Fp(dependencies)r Ft(\))i Fs(says)h(that)g (the)g(specified)g Fp(object-file)i Fs(should)d(be)i(built,)e(and)0 790 y(that)k(it)h(depends)f(on)h(the)g(files)f(specified)h(in)f Fp(dependencies)p Fs(,)i(which)e(is)h(a)g(list)f(of)h(file)g(names)g (separated)g(by)g(spaces.)0 852 y(Whenever)11 b(something)f(in)h(the)g Fp(dependencies)g Fs(list)f(changes,)h(the)g Fp(object-file)i Fs(will)d(be)i(re-built.)62 951 y Ft(CProgramTarget\()p Fp(program-name)p Ft(,)f Fp(objects)p Ft(,)f Fp(dep-libraries)p Ft(,)g Fp(non-dep-libraries)r Ft(\))42 b Fs(defines)i(a)h(program)0 1013 y(called)20 b Fp(program-name)j Fs(that)c(is)h(dependent)f(on)h (the)f(object)h(files)f(defined)h(in)f Fp(objects)p Fs(,)j(and)e(the)f (libraries)g(speci-)0 1075 y(fied)11 b(in)g Fp(dep-libraries)p Fs(,)f(so)h(that)f(it)h(will)f(be)h(re-built)f(if)h(anything)e(changes) i(in)g(those)f(two)g(groups.)h(It)g(will)f(also)g(be)h(linked)0 1137 y(with)f(libraries)g(specified)h(in)g Fp(non-dep-libraries)p Fs(,)e(but)i(will)f(not)g(be)h(re-built)g(if)g(they)f(change.)i(Note)e (that)h(the)g(ILU)g(ANSI)0 1200 y(C)h(libraries)e(are)i(not)f (automatically)f(included)g(by)h(this)f(command,)i(but)f(may)g(be)h (specified)e(as)i(part)f(of)g(the)g(program)h(by)0 1262 y(specifying)e(them)h(as)g(part)g(of)g(either)g Ft(dep-libraries)g Fs(or)g Ft(non-dep-libraries)p Fs(.)62 1360 y Ft(ILUCProgramTarget\()p Fp(program-name)p Ft(,)f Fp(objects)p Ft(,)g Fp(dep-libraries)p Ft(,)g Fp(non-dep-libraries)r Ft(\))18 b Fs(defines)h(a)h(program)0 1423 y(called)13 b Fp(program-name)j Fs(that)d(is)g(dependent)f(on)h (the)g(object)f(files)h(defined)f(in)h Fp(objects)p Fs(,)g(and)g(the)g (libraries)f(specified)h(in)0 1485 y Fp(dep-libraries)p Fs(,)g(and)g(the)g(normal)g(ILU)g(ANSI)g(C)h(libraries,)f(so)g(that)f (it)h(will)f(be)h(re-built)f(if)h(anything)f(changes)g(in)h(those)0 1547 y(three)d(groups,)g(all)f(of)h(which)g(will)f(be)h(linked)f(into)g (the)g(program)i Fp(program-name)p Fs(.)h(It)e(will)f(also)g(be)h (linked)f(with)g(libraries)0 1609 y(specified)j(in)g Fp(non-dep-libraries)p Fs(,)f(but)h(will)f(not)h(be)g(re-built)g(if)g (they)g(change.)k(This)11 b(differs)h(from)h Ft(CProgramTarget)0 1672 y Fs(in)e(that)f(the)h(ILU)g(libraries)g(are)g(automatically)f (included.)0 1854 y Fu(19.3)29 b(C)p Fh(++)16 b Fu(Usage)62 1969 y Fs(A)11 b(typical)g(`)p Ft(Imakefile)p Fs(')f(for)i(a)f(C)p Ft(++)h Fs(application)d(and)i(ILU)g(would)f(look)g(like:)120 2067 y Ft(LOCALINCLUDES)24 b(=)h(-I$\(ILUHOME\)/include)120 2117 y(ILULIBS)f(=)h($\(ILUHOME\)/lib/libilu-c++.a)d ($\(ILUHOME\)/lib/libilu.a)120 2216 y(NormalObjectRule\(\))48 b(/*)25 b(this)f(rule)h(defines)f(the)h(.cc)f(->)h(.o)g(step)f(*/)120 2316 y(InterfaceTarget\(foo.isl\))120 2366 y(ILUCPlusPlusTarget\(foo.H) f(foo.cc)h(foo-server-stubs.cc,)f(foo.isl\))120 2466 y(DepObjectTarget\(programComponent1.o,)f(foo.H)i(somethingElse.H\))120 2515 y(ObjectTarget\(programComponent2.o\))120 2615 y (CPlusPlusProgramTarget\(program,)e(programComponent1.o)h (programComponent2.o)g(foo.o,)120 2665 y($\(ILULIBS\),\))p eop %%Page: 263 264 263 263 bop 0 -58 a Fs(Chapter)11 b(19:)g(Using)f(Imake)i(with)e(ILU) 1244 b(263)0 183 y Fo(19.3.1)25 b(C)p Fl(++)15 b Fo(ILU)h Fl(imake)f Fo(Macros)62 287 y Fs(The)21 b(variable)f Ft(LOCAL_INCLUDES)f Fs(is)h(a)h(list)f(of)g(include)g(file)g(locations) f(to)h(be)h(included)e(when)h(compiling.)0 349 y Ft (-I$\(ILUHOME\)/include)9 b Fs(should)h(always)h(be)g(on)g(this)f(list) g(for)h(compiling)f(ILU)h(applications.)62 436 y(The)e(variable)g Ft(CPLUSPLUS_COMMAND)f Fs(defines)h(the)g(particular)g(command)h (invoked)e(for)h(compiling)f(C)p Ft(++)i Fs(on)f(your)0 499 y(system.)i(If)f(you)g(wish)f(to)h(use)f(a)i(different)f(C)p Ft(++)p Fs(,)h(override)e(the)h(default)g(command)g(by)g(redefining)f (this)g(value.)i(Note)f(that)0 561 y(it)h(will)g(also)g(be)g(necessary) h(to)f(build)f(a)i(version)f(of)g(ILU)h(C)p Ft(++)g Fs(library,)f(`)p Fp(ILUHOME)t Ft(/lib/libilu-c++.a)p Fs(',)g(to)g(use)0 623 y(with)f(this)g(compiler.)62 710 y Ft(NormalObjectRule\(\))g Fs(defines)h(a)h(number)g(of)f(suffix)g(rules,)g(in)g(particular)g(the) g(one)h(to)f(go)g(from)h(`)p Ft(.cc)p Fs(')g(files)f(to)0 773 y(`)p Ft(.o)p Fs(')g(files)g(in)g(your)f(environment.)62 860 y Ft(InterfaceTarget\()p Fp(ISL-file)s Ft(\))k Fs(defines)h(a)h (number)g(of)g(rules)f(about)g(the)g(`)p Ft(.isl)p Fs(')h(file)f Fp(ISL-file)p Fs(.)26 b(You)15 b(should)0 922 y(have)c(one)g(of)g (these)g(in)g(your)g(`)p Ft(Imakefile)p Fs(')f(for)i(every)f(interface) g(you)g(use.)62 1009 y Ft(ILUCPlusPlusTarget\()p Fp(generated-files)p Ft(,)e Fp(ISL-file)s Ft(\))19 b Fs(defines)h(which)f(C)p Ft(++)h Fs(files)f(are)h(generated)g(from)g(the)0 1072 y(`)p Ft(isl)p Fs(')13 b(file)h(and)f(may)g(therefore)h(by)f (re-generated)h(at)f(will,)g(and)g(when)g(the)g(`)p Ft(.isl)p Fs(')g(file)g(changes.)18 b(Generally,)c(for)f(an)0 1134 y(interface)e(called)g Ft(foo)p Fs(,)h(the)f(generated)g(files)f(will)g (be)i(`)p Ft(foo.cc)p Fs(',)f(`)p Ft(foo.H)p Fs(',)h(and)f(`)p Ft(foo-server-stubs.cc)p Fs('.)62 1221 y Ft(ObjectTarget\()p Fp(object-file)s Ft(\))e Fs(simply)h(states)g(that)h(the)g(specified)f Fp(object-file)j Fs(should)d(be)h(built.)62 1308 y Ft (DepObjectTarget\()p Fp(object-file)p Ft(,)e Fp(dependencies)r Ft(\))i Fs(says)h(that)g(the)g(specified)g Fp(object-file)i Fs(should)d(be)i(built,)e(and)0 1370 y(that)k(it)h(depends)f(on)h(the)g (files)f(specified)h(in)f Fp(dependencies)p Fs(,)i(which)e(is)h(a)g (list)f(of)h(file)g(names)g(separated)g(by)g(spaces.)0 1433 y(Whenever)11 b(something)f(in)h(the)g Fp(dependencies)g Fs(list)f(changes,)h(the)g Fp(object-file)i Fs(will)d(be)i(re-built.)62 1520 y Ft(CPlusPlusProgramTarget\()p Fp(program-name)p Ft(,)e Fp(objects)p Ft(,)g Fp(dep-libraries)p Ft(,)g Fp(non-dep-libraries)r Ft(\))42 b Fs(defines)i(a)0 1582 y(program)17 b(called)g Fp(program-name)j Fs(that)d(is)f(dependent)g (on)h(the)g(object)f(files)h(defined)f(in)h Fp(objects)p Fs(,)g(and)g(the)g(libraries)0 1644 y(specified)12 b(in)g Fp(dep-libraries)p Fs(,)g(so)g(that)g(it)g(will)g(be)g(re-built)g(if)h (anything)d(changes)j(in)f(those)f(two)h(groups.)j(It)e(will)e(also)h (be)0 1707 y(linked)i(with)h(libraries)f(specified)h(in)g Fp(non-dep-libraries)p Fs(,)h(but)e(will)h(not)g(be)g(re-built)g(if)g (they)g(change.)25 b(Note)15 b(that)f(the)0 1769 y(ILU)e(ANSI)h(C)f (libraries)g(are)h(not)e(automatically)g(included)g(by)h(this)f (command,)j(but)d(may)i(be)f(specified)g(as)g(part)g(of)g(the)0 1831 y(program)f(by)g(specifying)f(them)h(as)g(part)g(of)h(either)f Ft(dep-libraries)f Fs(or)h Ft(non-dep-libraries)p Fs(.)62 1918 y Ft(ILUCPlusPlusProgramTarget\()p Fp(program-name)p Ft(,)f Fp(objects)p Ft(,)g Fp(dep-libraries)p Ft(,)g Fp(non-dep-libraries)r Ft(\))t Fs(defines)d(a)0 1981 y(program)17 b(called)g Fp(program-name)j Fs(that)d(is)f(dependent)g (on)h(the)g(object)f(files)h(defined)f(in)h Fp(objects)p Fs(,)g(and)g(the)g(libraries)0 2043 y(specified)h(in)g Fp(dep-libraries)p Fs(,)h(and)f(the)g(normal)h(ILU)f(ANSI)g(C)h (libraries,)h(so)e(that)g(it)f(will)h(be)g(re-built)g(if)g(anything)0 2105 y(changes)13 b(in)g(those)g(three)g(groups,)g(all)h(of)f(which)g (will)f(be)i(linked)e(into)g(the)i(program)f Fp(program-name)p Fs(.)19 b(It)14 b(will)e(also)h(be)0 2167 y(linked)d(with)h(libraries)f (specified)h(in)g Fp(non-dep-libraries)p Fs(,)f(but)g(will)g(not)h(be)h (re-built)e(if)h(they)g(change.)h(This)e(differs)i(from)0 2230 y Ft(CProgramTarget)e Fs(in)h(that)f(the)h(ILU)g(libraries)g(are)h (automatically)d(included.)p eop %%Page: 264 265 264 264 bop 0 -58 a Fs(Appendix)10 b(A:)g(How)h(to)g(Create)h(ILU)f (Support)f(for)i(a)f(Programming)h(Language)578 b(264)0 114 y Fq(Appendix)14 b(A)36 b(How)14 b(to)h(Create)g(ILU)f(Support)g (for)h(a)g(Programming)0 183 y(Language)62 332 y Fs(This)j(chapter)g (is)g(addressed)g(to)g(the)h(ILU)f(developer)g(who)g(wants)g(to)g(add)g (support)f(for)i(a)g(new)g(programming)0 394 y(language)10 b(to)h(ILU.)62 484 y(Supporting)g(a)i(new)f(programming)g(language)g (for)h(ILU)f(involves)f(four)h(tasks:)h(\(1\))f(defining)f(how)h(ISL)h (is)f(mapped)0 546 y(into)d(that)g(programming)g(language;)g(\(2\))h (designing)d(how)i(stubs)g(work,)h(and)f(their)g(interface)h(to)f(the)h Fp(Language-Specific)0 608 y(Runtime)19 b Fs(\()p Fp(LSR)5 b Fs(\))18 b(support;)g(\(3\))f(writing)e(the)i Fp(stub)e(generator)21 b Fs(\()p Fp(stubber)t Fs(\))15 b(for)i(that)g(language;)h(and)f(\(4\)) g(writing)e(the)0 670 y(Language-Specific)g(Runtime)h(\(LSR\))g (support.)24 b(Naturally)15 b(the)g(existing)f(language)h(supports)f (provide)h(interesting)0 733 y(examples)j(when)g(defining)f(a)i(new)f (one.)32 b(The)18 b(best)g(existing)e(supports)h(are)i(currently)e (those)h(for)g(C)h(and)f(Python.)0 795 y(Understanding)9 b(of)i(the)g(other)g(generic)g(parts)g(of)g(this)f(reference)i(manual)g (is)e(assumed.)62 884 y(Adapting)i(ILU)h(to)g(work)g(on)g(different)g (operating)f(system)h(interfaces)g(is)f(an)i(independent)d(topic,)j (that)e(of)i Fp(porting)0 947 y Fs(\(not)d(addressed)f(in)h(this)f (chapter\).)0 1093 y Fu(A.1)30 b(Defining)14 b(the)h(Mapping)62 1199 y Fs(The)d(problem)f(here)h(is)f(to)g(define)h(how)f(each)h(of)f (the)h(concepts)f(in)g(ISL)h(maps)f(into)g(a)h(concept)f(in)g(the)h (programming)0 1261 y(language.)22 b(We)15 b(prefer)h(to)e(map)i(into)d (the)i(most)g(natural)f(presentation)f(for)i(the)g(language)f(at)h (hand.)22 b(For)15 b(example,)i(a)0 1324 y Ft(SEQUENCE)11 b(OF)g(SHORT)g(CHARACTER)h Fs(maps)h(into)e(a)j(C)f Ft(char)e(*)p Fs(,)i(because)g Ft(char)e(*)i Fs(is)f(by)h(far)g(the)g(most)f (conventional)0 1386 y(way)17 b(to)f(represent)h(a)g(string)f(in)g(C,)i (even)f(though)e(no)i(tasteful)f(person)g(would)g(make)h(that)g(choice) f(if)h(starting)f(from)0 1448 y(scratch)11 b(today.)62 1538 y(When)f(working)f(on)h(a)h(language)e Fp(L)15 b Fs(for)10 b(which)g(the)g(OMG)g(has)g(defined)g(a)h(CORBA)g(mapping,)f (we)g(strive)g(to)f(satisfy)0 1600 y(the)i(following)e(equation:)120 1689 y Ft(for)25 b(all)f(acceptable)g(IDL)h(i:)g(ISL-to-)p Fp(L)t Ft(\(IDL-to-ISL\(i\)\))e(=)h(IDL-to-)p Fp(L)t Ft(\(i\))62 1806 y Fs(where)18 b(IDL-to-L)g(is)f(the)h(mapping)f (defined)g(by)h(CORBA,)h(IDL-to-ISL)e(is)h(our)f(standard)g(way)h(of)g (translating)0 1868 y(CORBA)24 b(interfaces)f(into)f(ILU)h(interfaces,) j Fp(acceptable)d(IDL)28 b Fs(is)22 b(IDL)h(that's)g(acceptable)g(to)g (our)f(IDL-to-ISL)0 1931 y(translation,)9 b(and)h(ISL-to-)p Fp(L)15 b Fs(is)9 b(the)h(mapping)g(being)f(defined)h([hmm,)i(this)d (equation)g(should)g(probably)g(be)h(a)h(little)e(more)0 1993 y(complicated,)14 b(to)f(take)g(into)f(account)h(the)g(fact)h (that)e(one)i(IDL)f(source)g(can)h(declare)f(multiple)f Ft(")p Fs(interfaces)p Ft(")p Fs(].)18 b(If)c(there)0 2055 y(is)e(no)f(ISL-to-)p Fp(L)17 b Fs(that)11 b(satisfies)g(the)h (above)g(equation,)f(we)i(also)e(have)h(to)g(modify)g(IDL-to-ISL)g (\(and)g(thus)f(all)h(the)g(other)0 2117 y(ILU)f(language)g(mappings)f (too)g(---)i(so)f(we)g(don't)f(want)h(to)g(do)g(this)f(very)h (often!\).)62 2207 y(When)j(working)f(on)h(a)h(language)e(for)i(which)e (there)h(is)g(a)h(defined)f(IDL)g(mapping,)g(it's)g(also)g(necessary)g (to)g(have)g(a)0 2269 y(mapping)h(for)g(the)h(standard)e(CORBA)j Ft(")p Fs(psuedo-objects)p Ft(")p Fs(,)d(and)i(the)f(methods)f(of)i Ft(CORBA::Object)p Fs(.)23 b(Even)16 b(when)0 2331 y(working)c(without) g(interference)i(from)g(CORBA,)g(it's)f(worth)g(considering)f(the)h (issues)f(those)h(features)g(address.)18 b(ILU)0 2394 y(does)d(not)f(\(and)i(thus)e(your)h(language)f(mapping)h(need)g(not\)) g(attempt)g(to)g(provide)f(the)h(following)f(parts)g(of)i(CORBA:)0 2456 y(Interface)10 b(Repository,)f(Implementation)f(Repository,)h (Dynamic)g(Invocation)f(Interface,)j(Dynamic)e(Server)h(Interface,)0 2518 y(Basic)h(Object)g(Adaptor,)g(Portable)f(Object)h(Adaptor)f (\(yet\).)62 2608 y(ILU)h(also)e(has)i(some)f(general)h(\(i.e.,)g(not)f (explicitly)e(appearing)i(in)g(any)g(particular)g(ISL)h(file\))f (features)h(that)e(CORBA)0 2670 y(doesn't)19 b(and)g(must)g(be)h (addressed)f(in)g(a)h(language)f(mapping;)j(prominent)d(among)g(them)h (are)g(servers,)i(and)e(their)p eop %%Page: 265 266 265 265 bop 0 -58 a Fs(Appendix)10 b(A:)g(How)h(to)g(Create)h(ILU)f (Support)f(for)i(a)f(Programming)h(Language)578 b(265)0 183 y(attendant)8 b(ports)h(and)h(object)f(tables.)h(You)f(will)g(need) g(to)h(define)f(how)g(servers)h(are)g(created)g(and)g(shut)e(down;)h (this)g(should)0 246 y(be)h(able)g(to)g(follow)f(the)h(spirit)f(of)h (the)g(kernel)g(interface)g(on)g(this)f(matter)h(closely.)g(Define)g (how)g(an)g(application)e(indicates)0 308 y(which)13 b(of)h(its)f(true)h(objects)e(are)j(in)e(which)g(of)h(its)f(true)h (servers.)19 b(You)14 b(may)g(want)f(to)h(provide)f(a)h Ft(")p Fs(default)f(server)p Ft(")h Fs(for)0 370 y(use)g(in)h(simple)f (programs)g(that)g(don't)g(want)g(to)g(explicitly)f(manage)i(multiple)e (servers.)22 b(ILU)15 b(also)f(involves)f(explicit)0 432 y(management)d(of)f(ports,)g(to)g(give)g(applications)e(control)h (over)i(selection)e(of)h(RPC)h(and)g(transport)e(protocols)f(used;)i (define)0 495 y(how)k(ports)g(are)i(created)f(and)g(destroyed.)k(ILU)c (supports)e(\(but)i(not)f(as)h(completely)f(as)h(we'd)g(like\))f(the)h (possibilit)o(y)d(of)0 557 y(multiple)g(ports)g(on)h(a)g(server,)h (with)e(inclusion)f(of)i(information)f(about)h(all)f(those)h(ports)f (in)g(an)i(object)e(reference)i(\(string)0 619 y(binding)c(handle,)h Ft(")p Fs(SBH)p Ft(")p Fs(,)i(in)e(ILU)h(parlance;)f(see)h(Section)g (1.3.1.6)g([String)f(Binding)f(Handle],)i(page)g(7\).)g(Define)g(how)0 681 y(an)g(application)f(supplies)f(an)i(object)g(table)f(to)h(a)h (server.)62 771 y(ILU's)17 b(has)h(its)e(own)h(security)g(story.)30 b(This)16 b(story)h(only)f(concerns)h(how)g(to)g(provide)g (authentication,)g(message)0 833 y(integrity,)i(and)f(message)h (secrecy)f(---)h(or)g(a)f(selected)g(subset)g(of)g(them.)33 b(The)19 b(paradigm)f(is)g(that)f(a)i(security)f(filter)0 895 y(can)e(appear)g(in)f(the)h(protocol)e(stack;)j(higher)e(layers)h (need)g(only)e(concern)i(themselves)f(with)g(getting)f(the)h(necessary) 0 958 y(parameters)e(to)f(and)g(from)h(that)e(security)h(filter.)i(The) e(necessary)g(parameters)h(are)g(bundled)e(into)g(an)i Ft(ilu_Passport)p Fs(,)0 1020 y(which)7 b(is)h(a)h(collection)d(of)i Ft(ilu_IdentityInfo)p Fs(s.)h(Each)f(call)g(may)h(optionally)d(have)i (an)g Ft(ilu_Passport)f Fs(associated)0 1082 y(with)12 b(it.)17 b(You)c(design)f(the)h(language-specific)f(appearance)i(of)f (passports)f(and)h(identities,)f(and)h(a)h(calling)e(convention)0 1144 y(that)f(incorporates)f(implicit)f(optional)h(parameters.)62 1234 y(There)16 b(are)g(two)e(more)i(implicit)e(optional)f(parameters,) k(and)e(they)g(are)h(of)f(interest)g(only)f(on)h(the)g(client)f(side)h (of)g(a)0 1296 y(call:)d(a)g(serialization)e(guarantee)h(instance)g(\() p Ft(ilu_Serializer)p Fs(\))g(and)h(an)f(pipeline)g(\()p Ft(ilu_Pipeline)p Fs(\).)h(You)f(design)0 1358 y(the)i (language-specific)g(appearance)h(of)g(serialization)e(guarantee)i (instances)e(and)i(pipelines,)f(and)h(further)f(use)h(of)f(the)0 1421 y(calling)d(convention)f(that)i(incorporates)f(implicit)g (optional)f(parameters.)62 1510 y(A)24 b(language)e(mapping)h(should)f (preserve)h(the)g(type)g(structure)g(of)g(the)g(ISL.)h(In)f (particular,)k(the)c(subtyping)0 1572 y(relationships)14 b(should)h(be)i(preserved.)28 b(That)16 b(is,)i(if)e(ISL)h(type)f Fp(T1)h Fs(is,)h(according)e(to)g(ISL)h(semantics,)h(a)f(subtype)e(of)0 1635 y(ISL)d(type)g Fp(T2)p Fs(,)g(then)g Fp(LT1)g Fs(\(the)g (language-)p Fp(L)k Fs(mapping)11 b(of)h Fp(T1)p Fs(\))g(should)f(be,)i (according)e(to)h(language)f Fp(L)t Fs('s)i(semantics,)f(a)0 1697 y(subtype)e(of)h Fp(LT2)p Fs(.)0 1828 y Fo(A.1.1)26 b(Object)14 b(References)62 1934 y Fs(The)f(biggest)e(part)i(of)g(this) f(definitional)e(challenge)i(usually)g(concerns)g(objects.)k(Many)d (programming)f(languages)0 1997 y(do)i(not)g(have)g(an)h(object)f (system)g(as)g(rich)g(as)h(ISL's;)h(some)e(have)h(no)f(object)g(system) g(at)g(all.)21 b(If)15 b(not)f(already)g(present,)0 2059 y(an)e(object)f(system)h(of)g(sufficient)f(richness)g(must)g(be)i (invented)d(and)i(embedded)g(in)g(the)f(programming)h(language.)h(C)g (is)0 2121 y(one)e(example)h(of)f(this:)f(it)h(has)g(no)g(object)f (system)h(at)h(all,)f(and)g(so)g(the)g(OMG)h(invented)e(an)h(embedded)g (one)h(for)f(use)g(with)0 2183 y(CORBA.)j(Modula-3)f(is)f(an)h(even)g (thornier)f(example:)j(it)d(has)h(an)g(object)f(system,)h(but)g(with)f (only)g(single)f(inheritance;)0 2246 y(for)i(an)g(ILU)g(mapping,)g(a)g (multiple-inheritance)d(object)j(system)f(has)g(to)h(be)g(embedded)g (in)f(Modula-3)g(---)i(in)e(the)h(least)0 2308 y(annoying)d(way)h (possible)e(\(and)i(exactly)g(what)f(is)h(least)g(annoying)e(is)i (unfortunately)e(debatable\).)0 2439 y Fo(A.1.2)26 b(Storage)14 b(Management)62 2545 y Fs(Another)23 b(major)g(part)g(of)h(the)f (defintion)e(to)i(be)h(made)g(concerns)f(storage)f(management)i(\(and)f (for)h(objects,)0 2608 y(management)15 b(of)f(other,)h(hidden,)f (resources\).)21 b(Prominent)14 b(areas)g(where)h(this)e(issue)g(shows) g(up)h(are)h(in)f(management)0 2670 y(of)i(objects,)h(and)f(of)g (arguments,)i(results,)e(and)g(exception)g(parameters)g(of)h(method)e (invocations.)25 b(Servers)16 b(and)g(the)p eop %%Page: 266 267 266 266 bop 0 -58 a Fs(Appendix)10 b(A:)g(How)h(to)g(Create)h(ILU)f (Support)f(for)i(a)f(Programming)h(Language)578 b(266)0 183 y(call-specific)13 b(meta-objects)g(\(passports,)g(identities,)g (pipelines,)g(and)h(serialization)e(guarantee)h(instances\))g(also)g (need)0 246 y(management.)e(In)e(the)g(simplest)f(case,)i(you)e(map)h (into)f(a)h(language)g(that)f(is)g(defined)h(to)f(include)g(a)h (garbage)g(collector,)g(and)0 308 y(do)g(not)f(aspire)g(to)h(enable)g (the)f(programmer)i(to)e(free)i(resources)f(before)g(the)g(collector)f (eventually)f(does.)k(However,)e(even)0 370 y(when)i(a)h(garbage)g (collector)f(is)g(available,)g(some)h(application)e(programmers)i(may)g (demand)g(to)f(be)h(able)f(to)g(release)h(the)0 432 y(resources)f (hidden)e(behind)h(an)h(object)f(\(e.g.,)i(private)e(state,)h(file)f (handles,)g(ILU)h(kernel)f(objects\))g(when)h(the)f(application)0 495 y(detects)g(that)h(it's)f(done)h(with)f(the)h(object,)g(which)f (\(for)h(most)g(collectors\))f(can)h(be)h(arbitrarily)e(long)g(before)h (the)g(collector)0 557 y(does.)g(When)g(a)g(garbage)g(collector)f(is)h (not)f(available,)h(or)g(when)f(explicit)g(management)h(by)g(the)g (application)e(is)h(desired,)0 619 y(a)h(reference-counting)g(scheme)h (---)f(or)g(something)f(even)h(more)h(painful)e(---)h(is)g(often)g (employed.)g(Some)g(languages)f(are)0 681 y(not)g(defined)g(to)g (include)f(a)i(garbage)g(collector,)f(but)g(add-on)g(collectors)f(are)j (available;)d(for)i(such)f(a)h(language,)f(the)h(most)0 744 y(flexible)f(design)g(would)g(cope)h(with)g(operation)f(both)g (with)g(and)h(without)e(a)j(collector.)0 931 y Fo(A.1.3)26 b(Control)14 b(Flow)62 1055 y Fs(Another)9 b(issue)g(that)g(must)h(be)g (addressed)f(in)h(defining)e(a)i(language)f(mapping)h(\(and)f(even)h (more)h(so)e(in)h(the)f(following)0 1117 y(steps\))19 b(is)h(control)f(structure.)38 b(ILU)20 b(is)f(designed)g(to)h(be)g (usable)g(in)g(both)f(single-threaded)f(and)i(multie-threaded)0 1180 y(environments.)10 b(Some)i(languages)e(are)i(defined)f(to)f(be)h (one)g(or)h(the)e(other.)i(Other)e(languages)g(\(such)h(as)g(C)h(and)f (C)p Ft(++)p Fs(\))h(are)0 1242 y(single-threaded)f Ft(")p Fs(by)h(default)p Ft(")p Fs(,)g(but)g(can)g(be)h(used)f(to)g(write)g (code)g(for)h(use)f(in)g(a)g(multi-threaded)g(environment.)i(Your)0 1304 y(mapping)c(should)g(support)g(the)h(same)g(choices)g(in)g(this)f (area)i(as)f(the)g(language)g(does.)62 1412 y(In)j(a)g(single-threaded) d(environment,)j(many)f(packages)h(use)f(a)h Ft(")p Fs(main)f(loop)p Ft(")f Fs(that)h(does)g Ft(")p Fs(event)g(dispatching)p Ft(")e Fs(as)0 1474 y(their)h(top-level)g(control)g(structure.)k(ILU)d (is)g(such)f(a)h(package,)h(on)f(the)g(server)g(side.)j(Unfortunately,) c(some)h(programs)0 1537 y(must)f(integrate)g(two)f(or)i(more)g(such)f (packages)g(---)h(and)f(are)h(thus)f(presented)g(with)f(a)i(problem:)g (there)f(can't)h(be)f(two)g(or)0 1599 y(more)j(*top-level*)e(control)g (structures.)21 b(Solving)13 b(this)g(problem)i(requires)f(cooperation) f(from)i(the)g(main-loop-using)0 1661 y(packages)d(involved.)g(The)g (solution)e(involves)g(picking)h(one)h(package's)g(one)g(main)g(loop)f (\(or)i(inventing)d(a)i(completely)0 1723 y(independent)d(loop\))h(to)g (be)h(the)f(top-level)g(control,)g(and)h(making)f(the)g(other)h (packages)f Ft(")p Fs(adopt)p Ft(")g Fs(the)g(chosen)g(main)h(loop)0 1786 y(for)f(their)g(own)g(use.)h(ILU)f(is)f(designed)g(to)h(be)g(able) g(to)g(play)g(either)f(role:)i(that)e(of)h Ft(")p Fs(donating)p Ft(")e Fs(or)j Ft(")p Fs(adopting)p Ft(")d Fs(main)i(loop)0 1848 y(services;)g(your)h(language)g(mapping)f(\(for)h(a)h (single-threaded)e(language\))g(should)g(expose)g(the)h(support)f(for)h (both)g(roles.)62 1956 y(In)j(a)f(multi-threaded)f(environment,)h (there)g(are)h(issues)e(of)h(synchronization)e(between)i(threads.)k(At) c(the)g(language)0 2018 y(mapping)h(level,)i(these)e(are)i(mostly)e (independent)f(of)i(what)f(you)h(must)f(define.)23 b(Just)13 b(follow)h(this)g(simple)g(rule:)k(ILU)0 2080 y(objects)10 b(and)g(their)h(methods)f(allow)g(just)f(as)i(much)g(concurrency)g(as)f (the)h(other)f(objects)g(and)h(methods)f(in)g(the)h(language.)0 2143 y(Of)i(course,)g(the)f(implementations)f(of)i(ILU)f(objects)g (will)f(involve)h(synchronization)e(issues,)i(but)g(that's)f(a)i (subject)f(for)0 2205 y(later)g(sections.)i(The)f(one)f(place)g(where)h (synchronization)d(typically)h(shows)g(up)h(in)g(a)h(mapping)e (defintion)g(is)h(in)g(object)0 2267 y(tables,)f(whose)f(methods)h(are) h(called)e(under)h(certain)g(mutual)g(exclusion)f(conditions.)62 2375 y(See)j(Chapter)f(12)g([Threads)g(and)g(Event)f(Loops],)h(page)g (186)f(and)h(the)g Ft(")p Fs(Locking)p Ft(")e Fs(section)h(of)h(`)p Ft(iluxport.h)p Fs(')g(for)0 2438 y(more)g(details)e(on)h(mutexes)f (and)h(locking)f(comments.)62 2545 y(Your)h(language)g(mapping)f(must)h (include)f(locking)g(comments)h(in)g(the)g(defined)f(interfaces)i (\(e.g.,)g(the)f(definition)e(of)0 2608 y(an)f(object)g(table,)g(and)g (interfaces)h(emitted)e(by)h(the)g(stubber\).)i(One)e(or)g(the)g(other) g(of)g(the)g(above)g(views)f(\(invariant-oriented)0 2670 y(or)k(object)g(locking\))f(must)g(be)i(complete;)e(both)g(would)g(be)i (nice.)p eop %%Page: 267 268 267 267 bop 0 -58 a Fs(Appendix)10 b(A:)g(How)h(to)g(Create)h(ILU)f (Support)f(for)i(a)f(Programming)h(Language)578 b(267)0 183 y Fo(A.1.4)26 b(Any)14 b(and)h(TypeCode)62 292 y Fs(ILU)10 b Ft(PICKLE)f Fs(support)f(provides)g(dynamically-typed)g (value)h(functionality)e(in)i(a)h(strongly-typed)d(object)i(interface)0 354 y(system.)j(This)e(is)h(typically)e(useful)i(for)h(intermediary)e (modules,)h(such)g(as)h(name)g(services,)f(which)g(hold)f(onto)h (arbitrary)0 417 y(values)i(associated)g(with)g(some)h(other)g(value,)g (but)f(never)i(need)e(to)h(use)g(those)f(values)g(except)h(to)f(send)h (them)g(to)f(some)0 479 y(other)e(module.)g Ft(PICKLE)g Fs(itself)f(is)h(treated)g(as)g(a)g(basic)g(type)g(in)g(ILU)g(ISL,)h (much)f(like)f Ft(BOOLEAN)h Fs(or)g Ft(REAL)p Fs(.)62 571 y(The)g Ft(PICKLE)g Fs(support)e(in)i(ILU)f(is)h(modelled)f(after)h (the)g Fp(pickle)i Fs(concept)d(in)h(several)g(other)f(programming)h (systems,)0 633 y(such)h(as)h(Modula-3)g(and)f(Python.)k(The)d(idea)f (is)h(that)f(a)h(value)g(is)f(represented)h(as)g(a)g(tuple)f Ft(\(<)p Fp(type-id)p Ft(>,)e(<)p Fp(marshalled-)0 696 y(value)p Ft(>\))p Fs(,)i(where)g(the)g Ft(<)p Fp(type-id)p Ft(>)e Fs(identifies)h(the)g(value's)h(type,)g(and)f(the)h Ft(<)p Fp(marshalled-value)p Ft(>)f Fs(is)g(a)i(representation)d(of)0 758 y(the)h(value)f(in)g(some)h(standard)f(form.)i(In)f(ILU,)g(we)g (use)g(the)g(standard)f(ILU)g(type)h(id)f(\(or)h(CORBA)h(repository)d (id\))h(for)h(the)0 820 y Ft(<)p Fp(type-id)p Ft(>)p Fs(,)f(and)g(the)g(standard)g(representation)f(form)j(is)e(a)h(simple)f (big-endian,)f(non-aligned)g(form.)j(The)e(tuple)g(itself)g(is)0 882 y(bundled)h(up)i(into)f(a)h(sequence)f(of)h(bytes,)g(for)g(more)g (convenient)f(handling)f(in)h(the)h(ILU)g(kernel)f(and)h(with)f(the)g (various)0 945 y(wire)f(protocols.)62 1037 y(The)17 b(language)f (runtime)h(should)e(provide)h(general)h(compatibility)d(with)i(CORBA's) i(notion)d(of)i Ft(any)p Fs(,)i(which)d(is)0 1099 y(another)h (dynamically)g(typed)g(value)h(type.)31 b(This)17 b(basically)g(means)h (that)f(there)h(should)e(be)i(two)g(kinds)e(of)i(objects)0 1161 y(added)f(to)f(those)g(supported)f(by)i(the)f(language)g(runtime:) 22 b Fp(Any)c Fs(and)f Fp(Typecode)p Fs(.)28 b(The)16 b Fp(Any)j Fs(object)d(is)g(used)h(as)f(the)0 1224 y(language-specific) 10 b(representation)g(of)h(an)g(ILU)g(pickle;)f(the)h Fp(Typecode)j Fs(object)c(is)h(used)f(to)h(represent)g(an)g(ISL)h (type.)62 1316 y(The)19 b Fp(Any)h Fs(object)e(LSR)i(support)d(is)h (quite)g(simple.)34 b(It)19 b(should)e(be)i(implemented)f(as)h(an)g (opaque)f(object)g(with)0 1378 y(accessors.)23 b(This)14 b(allows)g(the)g(value)h(contained)f(in)h(the)f Fp(Any)j Fs(to)e(be)g(kept)f(in)h(the)g(pickle)f(form)h(until)f(it)g(is)h(asked) g(for,)0 1440 y(which)d(makes)h(the)g(operation)e(of)i(ILU)g(pickles)f (particularly)f(efficient)i(in)f(services)h(such)f(as)h(name)g (services)g(or)g(event)0 1503 y(services,)i(in)f(which)f(the)h(values)f (are)i(never)f(unpickled.)19 b(There)c(should)d(be)j(a)f(constructor)f (function)g(for)h Fp(Any)i Fs(which)0 1565 y(allows)c(an)g(instance)g (to)h(be)f(constructed)g(from)h(a)g Fp(Typecode)i Fs(and)d(a)h (language-specific)f(value.)k(There)d(are)g(minimally)0 1627 y(two)d(methods)g(on)g(the)g Fp(Any)j Fs(object,)d(one)h(to)f (retrieve)g(the)h Fp(Typecode)h Fs(of)f(the)f(contained)g(value,)h(and) f(one)h(to)f(retrieve)g(the)0 1689 y(contained)g(value)g(itself)g(in)g (language-specific)g(form.)i(It)e(is)g(allowable)g(to)g(refuse)h(to)g (return)f(a)h(language-specific)f(value)0 1752 y(if)h(the)g Fp(Any)i Fs(contains)d(a)h(pickled)g(value)f(the)h(type)g(ID)g(of)g (which)g(is)g(unknown)e(to)i(the)g(language)f(runtime.)62 1844 y(LSR)h Fp(Typecode)h Fs(support)c(is)i(also)f(simple.)i(There)f (should)e(be)i(a)h(method)e(to)h(retrieve)g(the)f(type)h(ID)g(of)g(the) f Fp(Typecode)p Fs(,)0 1906 y(and)j(another)g(to)g(compare)h(two)e Fp(Typecode)k Fs(values)c(for)i(equality.)g Fp(Typecode)h Fs(values)e(are)h(typically)d(generated)j(by)e(the)0 1968 y(stubber,)g(one)g(for)g(each)h(type)e(defined)h(in)g(an)g (interface's)h(ISL.)g(The)f(language)f(runtime)h(must)g(also)f(provide) h Fp(Typecode)0 2031 y Fs(values)d(for)g(the)g(ILU)f(basic)g(typ)o(es,) f(such)i(as)g Ft(REAL)d Fs(or)j Ft(BYTE)p Fs(.)i(To)e(aid)g(in)g(t)o (hat,)d(the)j(kernel)g(exports)g(a)g(s)o(et)g(o)o(f)g(character)g (arrays)0 2093 y(containing)g(the)i(type)f(ID's)h(for)g(those)f(basic)h (types;)f(see)h(the)g(file)g(`)p Fp(ILUSRC)t Ft (/runtime/kernel/ilutypes.h)p Fs(')e(for)0 2155 y(the)j(names)g(of)h (these)e(arrays.)0 2312 y Fu(A.2)30 b(Designing)14 b(Runtime)h (Operation)62 2421 y Fs(This)i(task)g(mainly)g(involves)f(designing)g (what)h(the)g(generated)h(stubs)e(look)h(like,)i(prominently)d (including:)21 b(the)0 2483 y(data)15 b(structures)f(that)h(represent)g (ILU)g(objects,)h(the)f(way)g(the)g(storage)g(management)g(issues)f (are)i(implemented,)g(and)0 2545 y(the)j(sequence)h(of)g(LSR)g(calls)f (involved)f(in)h(making)g(and)h(serving)f(ILU)g(method)g(calls.)37 b(For)20 b(the)f(first)g(two,)j(see)0 2608 y(Section)14 b(A.4.3.5)i([Object)e(Management],)j(page)e(276)f(for)h(a)g(discussion) e(of)i(the)f(options.)21 b(We)15 b(have)g(found)f(the)h(last)0 2670 y(one)f(to)g(be)g(facilitated)g(by)g(writing)f(some)h(example)h (stubs)e(by)h(hand,)h(and)f(writing)f(down)g(a)i(draft)f(LSR)h (interface.)21 b(A)p eop %%Page: 268 269 268 268 bop 0 -58 a Fs(Appendix)10 b(A:)g(How)h(to)g(Create)h(ILU)f (Support)f(for)i(a)f(Programming)h(Language)578 b(268)0 183 y(pre-requisite)10 b(to)h(doing)e(these)i(tasks)f(is)h (understanding)e(how)h(the)h(ILU)g(runtime)f(kernel)h(is)g(designed)f (to)g(support)g(LSRs)0 246 y(\(which)h(is)f(discussed)g(in)h(the)f (section)h(on)f(writing)g(the)h(LSR\).)62 336 y(Another)h(issue)g(to)g (address)g(in)g(runtime)g(design)f(is)h(how)g(the)h(control)e (structure)h(options)f(defined)h(in)g(the)g(language)0 398 y(mapping)e(are)i(implemented,)f(and)g(the)g(impact)g(on)g(the)g (rest)g(of)g(the)g(runtime)g(design.)62 488 y(It)16 b(is)f(important)f (to)h(understand)f(the)i(major)f(pieces)h(of)f(a)h(running)e(ILU)i (program.)24 b(At)15 b(the)h(base,)g(there)g(is)f(some)0 551 y(operating)10 b(system)g(interface,)i(and)f(libc)f(\(the)h (standard)f(ANSI)h(C)h(runtime)f(library\).)g(On)f(top)h(of)g(the)f(OS) i(and)f(libc)f(is)g(the)0 613 y(ILU)k(runtime)h(kernel,)g(a)g(common)g (piece)f(of)h(runtime)f(support.)20 b(It)15 b(is)f(written)f(in)i(ANSI) f(C,)i(used)e(in)g(each)h(of)f(ILU's)0 675 y(language)e(runtime)h (supports,)f(and)h(does)g(as)g(much)h(of)f(that)g(job)f(as)h(possible.) j(The)d(remainder)h(of)f(the)g(job)f(is)h(done)g(by)0 737 y(the)j(LSR,)h(which)f(is)g(just)f(a)i(thin)e(\(as)h(thin)g(as)g (possible,)g(but)g(no)g(more\))h(veneer)f(over)h(the)f(kernel.)26 b(When)16 b(multiple)0 800 y(languages)f(can)h(co-exist)e(in)i(one)f (runtime)g(environment,)h(their)g(ILU)f(LSRs)h(should)e(also)h(be)h (able)g(to)f(co-exist;)h(the)0 862 y(kernel)11 b(is)g(prepared)g(to)g (deal)g(with)f(multiple)g(LSRs.)0 1011 y Fu(A.3)30 b(Writing)14 b(the)g(Stub)i(Generator)62 1118 y Fs(Each)g(stub)e(generator)i(is)f (an)h(independent)d(program,)18 b(and)d(can)h(\(in)f(principle\))g(be)g (structured)g(in)g(any)g(way,)i(and)0 1181 y(written)12 b(in)g(any)h(language.)j(Most)d(of)g(the)g(existing)e(stubbers)g(are)j (written)e(in)g(ANSI)i(C,)f(and)g(make)h(use)f(of)g(a)g(common)0 1243 y(front-end)c(\(found)f(in)h(`)p Ft(stubbers/parser/)p Fs('\).)h(This)f(parser)g(makes)h(use)f(of)h(a)g(BISON)f(grammer)i (\(in)e(`)p Ft(ilu.bison)p Fs(',)0 1305 y(translated)i(to)h(`)p Ft(iluparse.c)p Fs('\);)g(this)f(file)h(also)g(includes)f(some)h (procedures)g(of)h(common)f(utility)e(to)i(back-ends.)i(The)0 1367 y(interface)d(to)g(the)g(parse)g(tree)h(and)f(common)g(utilities)e (is)i(`)p Ft(iluptype.h)p Fs('.)62 1458 y(Much)k(could)g(be)g(written)e (about)i(`)p Ft(iluptype.h)p Fs(',)g(but)g(right)f(now)g(I'll)h(give)f (only)g(a)h(few)g(clues.)23 b(First,)16 b(it)e(could)0 1520 y(profit)c(from)i(significant)d(revision;)h(sorry)h(about)f(that.) 62 1610 y(The)h(type)e Ft(Procedure)h Fs(refers)h(to)f(a)h(method)f(of) h(an)f(object)g(type.)h(The)f(type)g Ft(Class)g Fs(refers)h(to)f(an)h (object)e(type)h(\(ILU)0 1673 y(is)f(full)g(of)g(places)h(where)f Ft(")p Fs(class)p Ft(")g Fs(is)g(used)g(instead)g(of)g Ft(")p Fs(object)g(type)p Ft(")g Fs(---)h(because)g(the)f(word)g Ft(")p Fs(class)p Ft(")g Fs(was)g(erroneously)0 1735 y(used)i(for)g Ft(")p Fs(object)f(type)p Ft(")h Fs(early)g(in)g(the)g (project\).)62 1825 y(The)e(type)f Ft(Type)g Fs(is)g(confusing)f(in)i (many)f(ways.)j(The)d(type)g Ft(Type)h Fs(refers)g(to)f(an)h(occurence) g(of)f(a)h(type)f(reference)i(in)e(the)0 1887 y(parse)g(tree)g(---)h (not)e(the)g(underlying,)g(analyzed)h(type.)i(Analyzed)d(type)g (information)g(is)g(found)g(in)h(a)g Ft(TypeDescription)p Fs(,)0 1950 y(which)j(is)h(hung)f(off)i(the)f Ft(Type)g Fs(appearing)f(in)h(the)g(definition)e(statement)i(\()p Ft(TYPE)f Fp(name)j Ft(=)d(...;)p Fs(\))i(that)e(introduces)g(that)0 2012 y(type)16 b(information.)26 b(For)16 b(other)g Ft(Type)p Fs(s,)i(the)e Ft(supertype)f Fs(member)j(\(grossly)d(misnamed\))h (points)f(toward)h(another)0 2074 y Ft(Type)h Fs(closer)h(to)f(the)g (one)h(that)f(holds)f(the)h Ft(TypeDescription)p Fs(.)30 b(Type)17 b Ft(Type)h Fs(has)f(two)g(members)i(that)e(identify)0 2136 y(interfaces:)e(one)e(\()p Ft(Interface)e(interface)p Fs(\))h(identifies)g(the)h(interface)h(in)f(which)f(the)h(type)g (reference)h(appears;)g(the)0 2199 y(other)d(\()p Ft(string)g (importInterfaceName)p Fs(\))f(identifies)h(the)g(interface)h(into)f (which)f(the)i(reference)h(is)e(referring)h(\(i.e.,)0 2261 y(the)f Ft(Ifc)g Fs(part)g(of)g(a)h(type)e(reference)j(that)d (looks)g(like)h Ft(Ifc.Foo)p Fs(\).)62 2351 y(A)g(good)g(example)g (might)g(be)g(the)g(Python)f(stubber,)g(which)h(is)g(highly)e (organized)i(and)g(clean.)0 2501 y Fu(A.4)30 b(Writing)14 b(the)g(LSR)62 2608 y Fs(This)e(is)h(about)f(writing)g(the)h(veneer)g (between)g(\(a\))h(the)e(kernel)h(and)g(\(b\))g(the)g(stubs)f(and)h (application.)i(Some)f(of)f(this)0 2670 y(topic)d(is)h(addressed)g(in)f (the)h(refman,)i(and)e(some)g(in)g(the)g(kernel's)f(interface)i(\(`)p Ft(runtime/kernel/iluxport.h)p Fs('\).)p eop %%Page: 269 270 269 269 bop 0 -58 a Fs(Appendix)10 b(A:)g(How)h(to)g(Create)h(ILU)f (Support)f(for)i(a)f(Programming)h(Language)578 b(269)0 183 y Fo(A.4.1)26 b(Control)14 b(Structure)g(Options)62 287 y Fs(By)k(default,)g(the)g(kernel)f(operates)g(single-threaded,)g (using)f(ILU's)h(default)g(main)g(loop.)29 b(If)18 b(your)f(language)g (is)0 349 y(multi-threaded,)d(your)g(LSR)h(will)e(need)h(to)g(make)h (calls)f(at)g(startup)f(time)h(to)g(switch)f(the)h(kernel)g(into)f (multi-threaded)0 412 y(operation.)18 b(If)c(your)f(language)f(is)h (single-threaded,)g(your)g(adopt-a-foreign-main-loop)f(operation)g (will)h(need)g(to)g(call)0 474 y(into)h(the)i(kernel)f(to)g(make)h(it)g (adopt)e(a)i(new)g(main)f(loop)g(\(you'll)f(have)i(to)f(provide)g(a)h Ft(")p Fs(glue)p Ft(")f Fs(object)f(that)h(translates)0 536 y(between)h(the)g(ANSI)h(C)g(declaration)f(of)g(a)h(main)g(loop)e (meta-object)i(in)f(the)g(kernel)g(interface)h(and)f(the)g(language)g Fp(L)0 598 y Fs(declaration)g(in)h(your)g(runtime)f(interface\).)30 b(See)18 b(Chapter)f(12)g([Threads)g(and)g(Event)g(Loops],)h(page)f (186)f(for)i(more)0 661 y(details.)62 748 y(To)i(switch)g(the)g(kernel) g(to)g(multi-threaded)f(operation,)j(four)e(procedure)h(calls)f(must)g (be)g(made)h(early)g(in)e(the)0 810 y(initialization)h(sequence.)47 b(The)23 b(procedures)f(to)h(be)g(called)g(are:)35 b Ft(ilu_SetWaitTech)p Fs(,)25 b Ft(ilu_SetMainLoop)p Fs(,)0 872 y Ft(ilu_SetLockTech)p Fs(,)13 b(and)h Ft (ilu_NewConnectionGetterForked)p Fs(.)i(See)f(`)p Ft(iluxport.h)p Fs(')e(for)h(details,)f(and)g(the)0 935 y(Java)h(and)g(Common)g(Lisp)f (LSRs)h(\(found)f(in)h(`)p Fp(ILUSRC)t Ft(/runtime/java/)p Fs(')f(and)h(`)p Fp(ILUSRC)t Ft(/runtime/lisp/)p Fs('\))0 997 y(for)d(usage)g(examples.)62 1084 y(Instead)d(of)f(the)h(first)f (three)h(procedures,)h(an)f(LSR)g(may)g(call)g Ft (ilu_InitializeOSThreading)e Fs(to)h(use)h(predefined)0 1146 y(metaobjects)14 b(constructed)g(from)h(the)g(POSIX,)h(Solaris)e (2,)i(or)f(Win32)f(threads)g(API.)i(This)d(option)h(is)g(only)g (available)0 1209 y(if)h(running)e(on)h(a)h(system)f(that)g(exports)g (one)g(of)h(the)g(above)f(threads)g(APIs,)i(and)f(only)e(if)i Ft(--enable-os-threads)0 1271 y Fs(was)d(selected)g(during)f(the)g (configuration)g(step)g(of)h(installing)e(ILU)i(\(see)g(Section)g (17.2.4.1)g([Configuration)f(Options],)0 1333 y(page)g(237\).)62 1420 y(See)17 b(the)f Ft(")p Fs(Concurrent)f(I/O)h(routines)p Ft(")e Fs(section)h(of)h(`)p Ft(iluxport.h)p Fs(')f(for)h(more)h (details)e(on)g(this)g(issue:)k(how)c(the)0 1483 y(kernel)c(donates)f (and)h(adopts)f(main)h(loop)g(services)f(and)h(FD)h(waiting)e (services.)62 1570 y(Remember)17 b(to)e(rigorously)e(document)i(the)g (use)g(of)h(mutexes)f(in)f(your)h(internal)f(interfaces)i(and)f(code.) 24 b(Verify)15 b(it)0 1632 y(meshes)c(properly)g(with)f(the)h(locking)e (comments)j(in)e(the)h(kernel's)g(interface.)0 1750 y Fo(A.4.2)26 b(The)15 b(Main)f(Sequence)h(-)g(How)f(Calls)h(are)h (Handled)e(on)g(the)h(Client)f(and)h(Server)g(Sides)62 1853 y Fs(This)26 b(should)f(be)i(well)g(documented)f(in)h(the)f Ft(")p Fs(Client)g(side)h(routines)p Ft(")e Fs(and)i Ft(")p Fs(Server)g(side)p Ft(")g Fs(sections)e(of)0 1916 y(`)p Ft(iluxport.h)p Fs('.)0 2033 y Fo(A.4.3)h(Object)14 b(Management)62 2137 y Fs(For)g(each)g(language)f Fp(L)p Fs(,)h(kernel)f(object)g Fp(ko)p Fs(,)h(and)f(corresponding)f (language-)p Fp(L)17 b(lso)p Fs(,)d(the)f(object's)g(server)h(includes) 0 2199 y(this)h(invariant:)k(either)c(\(a\))i Fp(ko)g Fs(and)f Fp(lso)h Fs(both)e(exist)g(and)g(point)g(to)g(each)h(other,)h (or)f(\(b\))g(neither)g(points)e(to)h(the)h(other)0 2262 y(\(and)e(either)f(or)g(both)g(may)h(have)g(been)f(freed\).)20 b(This)12 b(organizes)h(the)h(relationship)d(between)i(the)g(two)g (objects,)h(which)0 2324 y(otherwise)g(could)h(be)h(created)g(and)f (destroyed)g(rather)h(independently)d(\(with)i(ensuing)f(confusion)g (in)h(any)g(code)h(that)0 2386 y(must)11 b(relate)g(the)g(two\).)g (More)h(details)e(are)i(in)e(the)h Ft(")p Fs(Deleting)f(Objects)p Ft(")g Fs(section)g(of)i(`)p Ft(iluxport.h)p Fs('.)0 2504 y Fn(A.4.3.1)23 b(Discussion)62 2608 y Fs(An)13 b(ILU)h(object)e(is)h(represented)g(in)g(a)h(program)g(instance)e (\(aka)i(running)e(program,)i(UNIX)g(process\))f(by)g(a)g(kernel)0 2670 y(object)21 b(\(KO\))h(and,)i(for)e(every)f(programming)h (language)e(X)i(in)f(which)g(that)g(object)g(is)g(being)g(manipualted,) i(an)p eop %%Page: 270 271 270 270 bop 0 -58 a Fs(Appendix)10 b(A:)g(How)h(to)g(Create)h(ILU)f (Support)f(for)i(a)f(Programming)h(Language)578 b(270)0 183 y(Application-level)8 b(Language-Specific)i(Object)f(\(App)h(LSO)h (for)f(language)g(X\).)h(The)f(X)g(App)g(LSO)h(is)e(an)i(object)f(in)f (the)0 246 y(object)j(system)g(of)h(the)g(ILU)g(mapping)f(to)g(X.)h(In) g(fact,)h(there)f(may)h(be)f(multiple)e(X)i(App)f(LSOs)h(corresponding) e(to)h(one)0 308 y(ILU)g(object)f(---)i(when)e (CORBA::Object::duplicate)f(isn't)h(a)h(no-op.)h(Between)f(an)g(App)g (LSO)g(and)g(its)f(KO)h(there)g(may)0 370 y(be)f(a)g(number)g(of)g (auxiliary)e(objects)h(that)g(implement)g(the)h(defined)f(relationship) f(between)h(the)g(two)g(main)h(objects;)f(like)0 432 y(the)h(KO,)g(these)g(auxiliary)f(objects)g(are)i(not)e(exposed)h(to)f (the)h(application.)62 544 y(Both)f(the)h(KO)f(and)g(the)h(X)f(App)g (LSO)h(\(or)f(one)h(of)f(its)g(associated)g(auxiliary)f(objects\))h (have)g(slots)f(that)h(hold)g(pointers)0 606 y(to)15 b(the)h(other)g(\(or)g(NIL\).)g(The)g(KO's)f(slot)g(that)g(holds)g(a)h (pointer)f(to)h(the)f(X)h(LSO)g(is)f(accessed)i(via)e(getter)h(and)g (setter)0 668 y(procedures)e(in)f(the)h(kernel)g(interface,)i Ft(ilu_GetLSO)d Fs(and)h Ft(ilu_SetLSO)f Fs(\(these)h(are)h(the)f (shorthands)e(I'll)i(use)g(here)0 730 y(for)g(whatever)f(their)g(real)g (names)h(in)f(iluxport.h)e(are\).)19 b(The)13 b(X)h(LSO's)f(slot)f (that)h(holds)f(a)i(pointer)e(to)h(the)g(KO)g(is)g(the)g(X)0 793 y(LSR's)f(responsibilit)o(y)c(to)j(declare.)62 904 y(The)16 b(ILU)g(runtime)f(for)h(language)f(X)h(can)g(be)g(designed)e (such)h(that)h(X)f(App)h(LSOs)f(are)i(managed)f(by)f(a)h(garbage)0 966 y(collector,)d(or)g(such)f(that)h(they)f(are)i(explicitly)d (managed)i(by)f(the)h(application)e(---)j(or)f(even)g(to)f(leave)h (that)f(choice)h(up)g(to)0 1029 y(the)d(application.)g(The)g(KOs)g(are) h(explicitly)d(managed)j(by)f(the)g(kernel)g(and)g(LSRs.)i(A)e(KO)h (will)e(persist)g(as)i(long)e(as)i(it)e(has)0 1091 y(any)k(associated)g (LSOs)g(--)h(or)f(any)g(of)h(certain)f(other)g(reasons)g(\(which)g(are) h(private)e(to)h(the)h(kernel\))f(to)g(persist.)k(One)c(of)0 1153 y(those)d(other)g(reasons)g(is)f(being)h(of)h(a)f(collectible)f (MST)i(and)g(having)e(recently)h(had)g(live)g(surrogates.)g(The)h (LSR's)f(role)h(in)0 1215 y(the)g(explicit)f(management)h(of)g(a)h(KO)f (is)f(captured)h(in)g(its)f(calls)h(on)g Ft(ilu_SetLSO)p Fs(:)f(while)g(the)h(most)g(recent)g(call)g(passed)0 1278 y(a)k(non-NIL)e(value)h(for)h(`lso',)g(the)f(LSR)h(is)f(deemed)h (to)f(have)g(some)h(App)f(LSOs)g(associated)f(with)h(the)g(KO.)h (Because)0 1340 y(the)d(other)g(reasons)g(for)h(a)f(KO's)g(continued)f (existence)h(are)h(private)f(to)g(the)g(kernel,)h(an)f(LSR)h(can)g (rely)f(on)g(the)h(KO)f(still)0 1402 y(existing)g(only)h(when)g(its)g (most)g(recent)i(call)e(on)h Ft(ilu_SetLSO)f Fs(passed)g(a)h(non-NIL)f (`lso'.)19 b(For)14 b(this)f(reason)g(we)h(have)0 1464 y(the)c(following)f(invariant:)g(either)i(\(a\))g(the)g(KO)f(and)h(X)g (App)f(LSO)g(point)g(to)g(each)h(other,)g(or)g(\(b\))g(both)e(pointers) h(are)h(set)g(to)0 1527 y(NIL)f(\(and)g(each)h(object)f(is)g(being)f (used)h(independently)e(or)i(has)g(been)g(destroyed\).)h(This)e (invariant)g(is)h(part)g(of)g(the)g(mutex)0 1589 y(invariant)h(for)i (the)f(object's)g(server's)g(mutex.)j(In)e(other)f(words,)g(the)h (server's)f(mutex)g(must)h(be)f(held)g(when)g(reading)g(or)0 1651 y(writing)e(either)h(of)g(these)g(pointers.)62 1762 y(KO)j(and)g(App)f(LSO)h(can)g(exist)f(and)h(be)g(used)g(independently) d(of)j(one)g(another)f(---)i(for)f(uses)g(that)f(don't)g(logically)0 1825 y(require)e(both.)f(For)i(example,)f(an)g(application)f(can)h (create)h(App)e(LSOs)h(and)g(use)g(them)g(only)f(locally)g(---)h(and)g (as)g(long)f(as)0 1887 y(there's)i(no)f(attempt)h(to)g(marshal)g(or)g (unmarshal)f(the)h(LSO)g(\(or)g(do)g(any)g(other)f(ILU-specific)g (thing)g(with)g(it\),)h(there)g(will)0 1949 y(be)h(no)f(KO)h(or)f (auxiliary)g(objects)f(involved.)k(And)d(of)h(course)f(you)g(would)g (expect)g(that)g(in)g(a)h(multi-language)f(runtime)0 2012 y(environment,)h(the)g(existence)f(of)h(a)h(KO)f(and)g(X)g(App)f (LSO)h(does)g(not)f(require)h(the)g(existence)g(of)g(a)g(Y)g(App)g (LSO.)g(The)0 2074 y(kernel)d(can)g(serve)g(and)g(make)g(built-in)e (calls)h(using)g(only)g(the)g(KO.)i(In)e(special)h(times)f(during)g (the)h(startup)f(and)g(shutdown)0 2136 y(sequences)i(of)g(objects,)f (you)h(might)f(also)h(expect)g(an)g(KO)g(to)g(exist)f(while)h(there)g (is)f(no)h(corresponding)f(App)g(LSO.)62 2247 y(In)g(some)f(cases,)i(a) e(dissociated)f(KO)h(and)g(X)h(App)f(LSO)g(can)h(be)f(found)g(and)g (linked)f(together)h(by)g(the)g(ILU)h(X)f(runtime;)0 2310 y(sometimes)j(this)f(can)h(even)g(involve)e(creating)i(one)g(of)g (those)f(two)h(when)f(starting)g(from)h(the)g(other.)i(The)e(cases)g (depend)0 2372 y(on)g(whether)f(we're)i(talking)e(about)g(a)i(true)e (or)i(surrogate)e(object,)h(and,)h(in)e(the)h(true)g(object)f(case,)j (whether)d(the)h(object's)0 2434 y(server)f(has)g(an)h(object)e(table.) 62 2545 y(The)18 b(ILU)f(X)g(runtime)g(should)f(be)i(able)f(to)g (create)h(from)g(scratch)g(a)g(surrogate)e(App)h(LSO)h(for)f(any)h (given)e(ILU)0 2608 y(object)11 b(type)h(that)f(has)h(been)g (registered)f(\(by)h(a)h(stub\))e(with)g(that)g(runtime.)j(In)e (general)g(we)g(expect)g(the)g(aforementioned)0 2670 y(registration)g(step)h(to)g(supply)e(a)j(procedure)g(for)f (instantiating)e(a)i(new)h(App)f(LSO)g(of)h(the)f(appropriate)f (language)h(type;)p eop %%Page: 271 272 271 271 bop 0 -58 a Fs(Appendix)10 b(A:)g(How)h(to)g(Create)h(ILU)f (Support)f(for)i(a)f(Programming)h(Language)578 b(271)0 183 y(in)11 b(a)h(language)f(with)f(sufficiently)g(powerful)h (reflective)g(capabilities,)f(the)h(runtime)g(can)h(do)f(the)h (instantiation)c(without)0 246 y(calling)i(type-specific)g(code.)62 357 y(The)h(ILU)g(X)g(runtime)f(is)h(not)f(expected)g(to)h(be)g(able)g (to)f(create)i(a)f(true)g(App)f(LSO;)g(only)g(the)h(application)e(is)h (expected)0 419 y(to)h(be)g(able)h(to)e(do)h(that.)h(The)f(application) e(can)j(always)f(create)h(App)e(LSOs)h(on)g(its)g(own)g(initiative.)e (Additionally,)g(if)i(the)0 481 y(application)d(supplies)g(an)i (`object)f(table')g(to)h(the)f(server,)i(the)e(ILU)h(kernel)f(and)h(X)g (runtime)f(can)h(call)g(on)f(this)g(object)g(table)0 544 y(to)j(create)i(App)e(LSOs)g(when)h(needed.)j(Remember)e(that)e (the)g(object)g(table)h(that)f(the)g(application)f(supplies)g(will)h (create)0 606 y(true)i(App)f(LSOs,)i(while)e(the)h(object)f(table)h(of) g(the)f(kernel)h(server)g(must)g(return)g(KOs)f(\(that)h(are)g(true)g (for)g(the)g(server's)0 668 y(language\).)62 779 y(The)j(kernel)g(is)g (able)f(to)h(create)h(a)f(KO)g(given)f(an)h(SBH,)h(or)f (\(equivalently\))f(an)h(instance)f(handle)g(and)h(a)h(server.)0 842 y(At)f(the)f(kernel)h(interface,)i(this)d(ability)f(is)h(bundled)g (into)g(procedures)g(that)h(either)f(find)h(an)g(existing)e(KO)i(or)f (create)0 904 y(a)h(new)f(one.)27 b(For)17 b(creating)f(a)h(KO)f(that)g (is)g(true)g(for)h(some)f(language,)i(there)e(are)h(two)f(cases:)22 b(\(1\))16 b(the)g(caller)h(wants)0 966 y(the)f(kernel)h(to)f(consult)f (the)h(server's)h(object)e(table)i(\(if)f(any\),)i(and)f(\(2\))g(not.) 27 b(Case)17 b(\(2\))f(is)g(useful)g(when)g(the)h(ILU)f(X)0 1029 y(runtime)f(is)h(already)g(holding)d(the)j(App)f(LSO,)i(and)e (just)g(wants)g(the)h(corresponding)e(KO;)h(case)h(\(1\))g(is)f(useful) h(when)0 1091 y(starting)9 b(from)h(just)f(the)h(SBH.)i(Case)e(\(1\))h (is)e Ft(ilu_ObjectOfSBH)p Fs(;)g(case)i(\(2\))f(is)g Ft(ilu_FindOrCreateTrueObject)p Fs(;)0 1153 y Ft (ilu_FindOrCreateSurrogate)f Fs(is)i(another)f(variant,)h(for)h(which)e (object)h(tables)f(are)i(irrelevant.)62 1264 y(An)f(App)g(LSO)g(should) f(be)h(able)g(to)g(identify)f(the)h(SBH,)h(or)g(the)f(instance)f (handle)h(and)g(server,)h(of)f(the)g(ILU)g(object)g(in)0 1327 y(question.)h(There)h(are)f(any)g(number)g(of)g(ways)g(of)g (formulating)f(this.)i(It)f(is)g(most)f(interesting)f(for)j(true)f (objects,)f(because)0 1389 y(this)i(is)h(a)h(question)e(of)h(how)g (this)f(responsibility)f(is)i(put)f(upon)h(the)g(application.)20 b(In)14 b(the)g(C)h(mapping,)g(the)f(procedure)0 1451 y(for)d(creating)g(a)g(true)g(App)g(LSO)g(takes)g(instance)f(handle)g (and)h(server)h(as)f(arguments.)g(In)g(the)g(Modula-3)f(mapping)h (\(now)0 1513 y(defunct\),)k(the)e(App)h(LSO)g(had)f(to)h(implement)f (a)i Ft(")p Fs(get-server)p Ft(")e Fs(method,)i(and)f(the)f(server's)h (M3)h(object)e(table)g(has)h(an)0 1576 y(additional)8 b Ft(")p Fs(instance-handle-from-object)p Ft(")g Fs(method)h(\(a)h (default)g(implementation)e(being)h(used)g(for)h(servers)g(that)f(lack) 0 1638 y(object)h(tables\).)62 1749 y(There)16 b(must)g(be)g(some)g (way)g(to)g(determine)g(when)g(an)g(application)e(is)i(done)f(with)g (the)h(App)f(LSO\(s\))i(of)f(a)g(given)0 1812 y(ILU)j(object.)34 b(In)18 b(some)h(languages,)i(a)e(garbage)g(collector)f(is)g(available) g(to)h(do)f(this.)33 b(To)19 b(be)g(useful,)h(it)f(must)f(be)0 1874 y(possible)d(to)i(register)f(a)h(`finalization')f(procedure)h (that)f(can)h(be)g(run)g(after)g(the)g(collector)f(determines)g(an)h (object)g(is)0 1936 y(unreachable.)e(If)e(this)e(is)h(not)g(possible,)g (garbage)g(collection)f(cannot)h(be)g(used)g(to)g(manage)h(App)f(LSOs.) j(Furthermore,)0 1998 y(there)i(must)f(be)g(a)h(`WeakRef')h(facility.) 27 b(A)16 b(WeakRef)i(is)e(a)h(thing)e(that)h(holds)f(a)i(disguised)e (pointer)g(\(i.e.,)k(one)e(that)0 2061 y(doesn't)10 b(count)g(as)g (keeping)g(its)g(target)g(`reachable'\))i(to)e(some)h(object;)f(there)g (is)h(a)g(`reveal')g(operation)f(on)g(the)g(WeakRef)0 2123 y(that)17 b(returns)g(a)h(normal)g(pointer)e(to)h(the)h (obscurely-referenced)f(object.)30 b(If)18 b(and)g(when)f(the)g (collector)g(decides)g(the)0 2185 y(obscurely-referenced)11 b(object)f(is)g(unreachable,)i(it)e(atomically)g(changes)h(the)f (WeakRef)i(such)e(that)h(future)f(invocations)0 2247 y(of)h(`reveal')h(will)e(return)h(NIL.)62 2359 y(In)h(languages)e (without)f(a)j(useful)f(garbage)g(collector,)g(some)h(other)f(method)g (must)g(be)g(used)g(to)g(determine)g(when)g(an)0 2421 y(App)h(LSO)h(is)f(no)g(longer)g(useful)g(to)g(the)g(application.)i (The)f(CORBA-mandated)g(solution)d(is)i(the)h(most)f(useful)g(one.)j (It)0 2483 y(can)f(be)f(understood)f(as)i(reference)g(counting.)j(The)c (App)g(LSO)h(\(or)g(one)f(of)g(its)g(auxiliary)f(objects\))h(holds)f(a) i(reference)0 2545 y(count.)33 b(Every)18 b(unmarshalling)f(of)h(the)g (object)g(increments)g(the)g(count.)33 b(CORBA::Object::duplicate)16 b(is)i(used)g(to)0 2608 y(produce)12 b(an)h(independently)e(managed)i (reference)h(from)g(some)f(existing)e(reference;)j(this)e(procedure)h (increments)f(the)0 2670 y(reference)h(count)e(and)h(returns)f(the)h (given)f(reference.)k(CORBA::Object::release)c(is)g(used)h(to)f (declare)h(the)g(application)p eop %%Page: 272 273 272 272 bop 0 -58 a Fs(Appendix)10 b(A:)g(How)h(to)g(Create)h(ILU)f (Support)f(for)i(a)f(Programming)h(Language)578 b(272)0 183 y(done)12 b(with)f(\(a)i(copy)f(of\))g(the)g(reference;)i(it)e (decrements)h(the)f(count.)i(When)e(the)g(reference)h(count)f(reaches)h (0,)g(all)f(parts)0 246 y(of)f(the)g(application)e(are)j(done)f(with)f (the)h(App)g(LSO.)0 362 y Fn(A.4.3.2)23 b(Life)15 b(Cycle)62 466 y Fs(Following)10 b(is)g(a)i(summary)f(of)h(the)e(life-cycle)h(of)h (a)f(KO)g(and)g(App)g(LSO)g(\(and)g(the)g(linkage)f(between)h(them\).) 62 553 y(One)h(startup)f(path)g(begins)f(with)h(the)g(application)f (creating)i(a)g(true)f(App)h(LSO.)g(This)e(may)j(be)e(on)h(the)f (application's)0 615 y(initiative,)g(or)h(as)h(the)f(result)f(of)i(an)f (object)g(table)g(invocation.)h(Creation)f(of)g(the)g(App)g(LSO)g(does) g(not)g(by)g(itself)f(require)0 677 y(creation)g(of)h(the)f(KO)h(or)f (any)h(linkage)e(between)h(them;)h(the)f(application)f(can)i(now)f(do)g (arbitrary)g(non-ILU)g(things)f(with)0 740 y(the)i(App)g(LSO.)g(At)g (some)h(future)f(point)e(the)i(X)h(LSR)f(may)h(need)f(to)g(get)g(the)g (corresponding)f(KO.)h(If)h(the)f(KO)g(and)g(App)0 802 y(LSO)k(are)g(already)f(extant)g(and)h(cross-linked,)f(the)g(pointer)g (from)h(App)f(LSO)h(to)f(KO)g(reveals)h(this,)g(and)f(the)h(LSR)g(is)0 864 y(done.)i(Otherwise,)13 b(the)h(kernel)f(is)g(consulted,)g(via)g Ft(ilu_FindOrCreateTrueObject)p Fs(;)f(this)g(procedure)i(returns)f(a)0 927 y(KO,)e(whether)g(it)g(existed)f(before)h(or)h(not.)e(The)h(LSR)h (cross-links)d(the)i(KO)g(and)g(App)g(LSO.)62 1014 y(Let)i(us)f (digress)f(a)i(moment)g(to)f(think)f(carefully)i(about)f(object)f (tables.)k(The)e(API)g(for)g(ILU's)f(X)h(mapping)f(includes)0 1076 y(a)j(declaration)g(of)g(the)g(type)f(of)h(object)g(tables;)g (such)g(an)g(object)f(table)h(has)g(an)g(`instance-handle-to-object')e (method)0 1138 y(that)i(returns)g(an)g(X)h(App)e(LSO.)i(The)f (implementation)f(of)i(this)e(method)h(is)g(nearly)g(arbitrary)g (application)f(code)h(\(the)0 1201 y(restriction)10 b(is)i(that)f(it)g (must)h(run)g(inside)e(the)i(server's)g(mutex\).)i(The)e(kernel)f (interface)h(uses)g(a)g(different)g(type)f(of)h(object)0 1263 y(table,)18 b(one)f(whose)f(`instance-handle-to-object')e(method)j (returns)f(a)h(KO.)g(This)f(object)g(table)h(is)f(implemented)h(by)0 1325 y(the)e(LSR,)h(in)f(terms)g(of)g(the)g(application-supplied)d (object)i(table.)23 b(The)15 b(instance-handle-to-KO)e(method)i(first)g (calls)0 1387 y(the)f(instance-handle-to-App-LSO)e(method,)j(and)g (then)f(continues)f(as)h(outlined)f(in)h(the)g(latter)g(half)h(of)f (the)g(previous)0 1450 y(paragraph,)d(starting)f(from)i(where)f(the)g (LSR)h(is)f(holding)e(an)i(App)g(LSO)g(and)g(wanting)f(a)h(KO.)62 1537 y(Another)c(startup)g(path)g(i)o(s)g(un)o(marshalli)o(ng)g(an)f (object.)h(The)g(LSR)g(first)g(calls)g(a)g(kernel)g(rout)o(ine)g(\()p Ft(ilu)o(_InputObjec)o(tID)p Fs(\))0 1599 y(that)k(returns)g(a)h(KO.)g (If)h(that)e(KO)g(is)h(already)f(cross-linked)g(with)f(an)i(X)g(App)f (LSO,)h(the)g(LSR)g(is)g(done.)h(Otherwise,)e(two)0 1661 y(different)j(courses)h(of)f(action)g(are)i(pursued,)f(one)f(if)h(the)f (object)g(is)g(true)h(for)g(X,)g(the)f(other)g(if)h(not.)21 b(For)15 b(the)g(surrogate)0 1724 y(case,)e(the)e(LSR)h(instantiates)e (a)i(new)f(App)g(LSO)h(if)g(possible,)e(and)h(cross-links)f(it)h(with)g (the)g(KO;)h(if)f(instantiation)e(is)i(not)0 1786 y(possible,)i(the)h (unmarshalling)e(fails.)19 b(For)14 b(the)g(true)g(case,)h Ft(ilu_InputObjectID)d Fs(will)h(have)h(already)g(invoked)e(the)0 1848 y(kernel)e(interface)h(version)f(of)g(the)g(server's)h(object)f (table)g(\(if)h(any)f(were)h(present)f(and)g(needed\))h(---)g(and)f (this)g(would)f(have)0 1910 y(cross-linked)i(the)h(KO)g(and)h(App)f (LSO;)g(the)g(present)g(lack)g(of)h(cross-links)e(means)h(the)h (unmarshalling)d(should)h(simply)0 1973 y(fail)g(at)g(this)f(point.)62 2060 y(Translating)j(an)i(SBH)h(into)d(an)i(X)g(App)f(LSO)h(proceeds)g (much)g(like)f(unmarshalling;)g(the)h(difference)g(is)f(that)g(the)0 2122 y(LSR)e(starts)e(by)h(calling)f Ft(ilu_ObjectOfSBH)g Fs(instead)g(of)h Ft(ilu_InputObjectID)p Fs(.)62 2209 y(Having)i(considered)g(the)h(ways)g(that)f(KO)h(and)g(App)g(LSO)g(can) g(be)g(created)h(and)f(cross-linked,)f(we)h(now)g(turn)f(our)0 2271 y(attention)c(to)i(ways)g(they)g(can)g(be)g(dissociated)f (\(un-cross-linked\))f(and)i(destroyed.)62 2359 y(The)j(LSR)h(may)g (supply)e(the)h(application)f(with)g(an)h(operation)g(to)f(explicitly)g (dissociate)g(the)h(KO)g(and)g(App)g(LSO.)0 2421 y(This)i(leaves)g(the) g(KO)h(to)f(be)h(destroyed)e(by)i(the)f(kernel)h(when)f(the)g(kernel)h (has)f(no)g(other)h(reason)f(to)g(keep)h(the)f(KO)0 2483 y(around,)f(and)f(the)g(App)f(LSO)i(to)e(be)i(destroyed)e(by)h(the)f(X) i(language)e(runtime)h(\(perhaps)g(augmented)g(by)g(the)f(X)i(LSR)0 2545 y(with)c(a)i(reference)g(counting)e(scheme\))i(when)e(the)h (application)f(has)h(no)g(more)g(need)h(for)f(it.)i(However,)f(we)f (should)f(also)0 2608 y(consider)g(what)g(happens)g(if,)h(at)f(any)h (time)g(after)g(this)e(dissociation,)g(the)h(LSR)h(finds)f(itself)g (again)g(wanting)f(to)h(cross)g(the)0 2670 y(bridge)j(between)h(the)g (two)g(objects.)22 b(Starting)14 b(from)i(the)f(App)g(LSO,)g(this)f(is) h(easy,)h(because)f(the)g(kernel)g(will)f(gladly)p eop %%Page: 273 274 273 273 bop 0 -58 a Fs(Appendix)10 b(A:)g(How)h(to)g(Create)h(ILU)f (Support)f(for)i(a)f(Programming)h(Language)578 b(273)0 183 y(return)12 b(the)g(still-existi)o(ng)d(KO)j(or)g(create)h(a)f(new) g(one)g(\(whichever)g(is)g(appropriate\).)h(Starting)e(from)i(the)f (KO,)g(consider)0 246 y(whether)e(the)h(App)f(LSO)g(is)g(true)h(or)f (surrogate.)h(In)g(the)f(surrogate)g(case,)i(the)e(LSR)h(could)f (easily)g(instantiate)e(a)j(new)g(App)0 308 y(LSO.)g(But)g(the)g(old)g (one)f(might)h(still)e(exist,)i(and)g(we)g(would)f(then)g(have)i(a)f (violation)e(of)i(ILU's)g(`EQ-ness)f(preservation')0 370 y(property.)17 b(Perhaps)c(an)h(application)d(that)i(explicitly)e (dissociates)g(KO)i(and)g(App)g(LSO)g(deserves)g(what)g(it)g(gets)g(in) f(this)0 432 y(case.)k(If)d(not,)f(the)g(LSR)h(could)f(keep)h(its)e (own)h(instance-handle-to-App-LSO)e(table)i(\(the)g(LSR)h(can)g (arrange)g(to)f(know)0 495 y(when)h(the)h(LSR)g(is)f(destroyed,)g(and)h (remove)g(this)e(table)i(entry)f(at)g(that)g(time\),)i(enabling)d(the)i (LSR)g(to)f(re-link)g(the)g(KO)0 557 y(with)c(the)g(same)h(old)f(LSO)g (if)h(it)f(still)f(exists)g(\(and)i(a)g(new)f(one)h(otherwise\).)g(In)f (the)h(true)f(case,)i(the)e(KO)g(can)h(be)g(re-linked)f(to)0 619 y(an)i(App)f(LSO)h(in)f(the)g(usual)g(ways)g(\(by)h(object)f(table) g(invocation)f(or)i(explicit)e(true)h(App)h(LSO)f(creation\))h(and)f (no)h(others.)62 714 y(The)h(other)f(shutdown)e(scenario)j(starts)e (with)h(the)g(LSR)h(determining)f(that)g(the)g(App)g(LSO)h(is)f(no)g (longer)g(interesting)0 776 y(to)k(the)h(application)e(and)i(no)f (longer)g(`very)h(interesting')f(to)g(the)h(kernel)f(\(as)h(revealed)g (by)g(the)f Ft(ilu_ObjectNoter)0 838 y Fs(and/or)10 b Ft(ilu_VeryInterested)p Fs(\).)g(The)h(LSR)g(dissociates)e(the)i(KO)g (and)f(App)h(LSO.)g(This)f(step)g(will)g(destroy)g(the)g(KO)0 901 y(---)h(if)f(it's)f(still)g(not)g(interesting)f(to)i(the)g(kernel.) g(Again,)g(the)g(issue)f(of)i(possible)d(later)i(re-linking)e(the)i (two)g(comes)g(up,)g(and)0 963 y(the)h(analysis)e(of)i(the)f(previous)g (paragraph)h(applies;)e(it)h(shows)g(that)g(The)h(Right)f(Thing)g (happens)f(---)j(at)f(least,)f(as)h(long)f(as)0 1025 y(the)h(App)g(LSO)g(cannot)f(change)h(from)h(being)e(unreachable)h (back)h(to)e(reachable.)62 1120 y(The)h(remainder)h(of)f(this)f (document)h(gives)f(some)h(worked)g(examples.)0 1267 y Fn(A.4.3.3)23 b(Automatically)13 b(Managed)i(Objects)62 1379 y Fs(Here's)d(a)f(basic)g(scheme)h(for)f(garbage-collected)g (runtimes:)85 2107 y @beginspecial 77 @llx 461 @lly 504 @urx 617 @ury 4270 @rwi @setspecial %%BeginDocument: object-linkage-1.idraw /arrowHeight 10 def /arrowWidth 5 def /IdrawDict 52 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 reencodeISO def /Times-Italic 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 /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 %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.799705 0 0 0.799705 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 67.1257 270.053 ] concat %I 174 411 270 475 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 80.2472 270.053 ] concat %I 270 515 350 579 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 27.7611 263.492 ] concat %I 358 451 438 499 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 277.07 270.053 ] concat %I 174 411 270 475 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 -44.4072 270.053 ] concat %I 174 411 270 475 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 408.285 270.053 ] concat %I 174 411 270 475 Rect End Begin %I Line %I b 65520 0 0 0 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 5.12559 0 0 0.892992 -2350.72 225.513 ] concat %I 561 611 561 395 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 89 515 89 475 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 177 459 137 459 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 137 427 177 427 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 273 427 433 427 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 529 427 593 427 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 593 459 529 459 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 433 459 393 459 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 289 547 241 475 Line %I 1 End Begin %I Line %I b 65520 0 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 313 459 273 459 Line %I 1 End Begin %I Line %I b 65520 0 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 641 531 641 475 Line %I 1 End Begin %I Line %I b 65520 0 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0.5 SetP %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 609 555 369 555 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 0.820095 0 0 0.820095 117.972 635.816 ] concat %I [ (App LSO) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 0.820095 0 0 0.820095 216.383 635.816 ] concat %I [ (2nd Aux LSO) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 0.820095 0 0 0.820095 314.794 721.105 ] concat %I [ (pin table) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 0.820095 0 0 0.820095 334.477 655.498 ] concat %I [ (weak ref) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 0.820095 0 0 0.820095 432.888 635.816 ] concat %I [ (1st Aux LSO) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 0.820095 0 0 0.820095 557.542 635.816 ] concat %I [ (kernel object) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 0.820095 0 0 0.820095 131.093 714.545 ] concat %I [ (App) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 0.820095 0 0 0.820095 577.225 727.666 ] concat %I [ (Kernel) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-i-normal-*-14-*-*-*-*-*-*-* Times-Italic 14 SetF %I t [ 0.820095 0 0 0.820095 301.673 592.351 ] concat %I [ (Language X) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-i-normal-*-14-*-*-*-*-*-*-* Times-Italic 14 SetF %I t [ 0.820095 0 0 0.820095 589.673 592.351 ] concat %I [ (C) ] Text End End %I eop showpage end %%EndDocument @endspecial 62 2264 a(This)g(is)g(a)h(very)g(generic)g(scheme,)g (designed)f(to)g(minimize)h(demands)f(on)g(the)h(language)f(runtime)g (and)h(application.)0 2326 y(Certain)i(of)g(the)g(above)g(objects)f (can)i(be)f(coalesced)g(when)g(more)g(demands)g(can)h(be)f(made)h (\(we'll)e(get)h(explicit)f(about)0 2388 y(this)i(later\).)27 b(The)16 b(pointers)f(to)h(X)h(objects)e(are)i(visible)e(to)h(the)g (garbage)g(collector)g(\(and)g(thus)f(might)h(not)f(be)i(simple)0 2451 y(pointers\).)i(The)14 b(pointers)f(to)g(C)i(objects)e(are)i(C)f (pointers;)g(we)g(assume)g(that)g(either)g(\(a\))g(the)g(garbage)g (collector)g(either)0 2513 y(doesn't)c(manage)i(the)f(C)g(heap,)h(or)f (\(b\))h(it)e(manages)i(the)f(C)g(heap)g(and)g(can)h(follow)e(C)i (pointers.)62 2608 y(In)e(this)f(scheme)h(ILU's)f(language)g(X)h (runtime)f(establishes)f(finalization)g(on)h(the)h(2nd)f(Auxiliary)f (LSO;)h(the)h(2A)f(LSO)0 2670 y(is)i(distinct)e(from)j(the)f(App)f(LSO) h(exactly)g(so)g(that)f(the)h(Application)e(can)j(put)e(its)g(own)h (finalization)f(on)g(the)h(App)g(LSO.)p eop %%Page: 274 275 274 274 bop 0 -58 a Fs(Appendix)10 b(A:)g(How)h(to)g(Create)h(ILU)f (Support)f(for)i(a)f(Programming)h(Language)578 b(274)62 183 y(The)14 b(1A)f(LSO)h(could)e(be)i(coalesced)g(with)e(the)h (WeakRef)i(if)e(the)h(language)f(doesn't)f(require)i(them)f(to)g(be)h (distinct)0 246 y(objects.)62 349 y(The)i(1A)g(LSO)g(could)f(be)h (merged)h(into)d(the)i(2A)g(LSO)g(\(leaving)f(the)h(KO)g(to)f(point)g (to)g(the)h(WeakRef,)i(which)e(in)0 411 y(turn)c(points)f(obscurely)h (to)g(the)g(2A)g(LSO\))h(if)g(either)f(\(a\))h(an)g(object)f(can)h(be)g (made)g(reachable)g(again)f(in)g(its)g(finalization)0 473 y(procedure)i(and)g(then)f(re-subjected)h(to)f(finalization)g (\(the)h(2A)f(LSO)h(will)f(want)h(two)f(different)h(finalizations,)f (but)g(the)0 535 y(App)e(LSO)g(just)f(one)h(to)g(run)f(once,)i(of)f (course\),)h(or)f(\(b\))g(fairly)g(heaveyweight)f(stuff)h(can)g(be)g (done)g(within)e(a)j(finalization)0 598 y(procedure.)62 701 y(The)i(pin)e(table)h(holds)f(a)i(pointer)f(to)g(the)g(2A)g(LSO)h (exactly)f(when)g(the)g(kernel)g(is)g(`very)h(interested')e(in)h(the)g (object;)0 763 y(the)e(LSR)h(registers)e(an)h Ft(ilu_ObjectNoter)f Fs(with)g(the)h(kernel)g(to)g(maintain)f(this)h(relationship.)62 866 y(Here's)17 b(how)e(the)h(LSR)g(gets)f(an)h(App)g(LSO)g(from)g(an)g (SBH.)h(First,)g(it)f(calls)f(the)h(kernel's)f Ft(ilu_ObjectOfSBH)0 928 y Fs(procedure.)k(This)12 b(may,)j(under)f(the)f(covers,)i(call)e (the)g(server's)h(object)f(table.)18 b(If)c Ft(ilu_ObjectOfSBH)f Fs(returns)g(NIL,)0 991 y(failure;)18 b(otherwise,)e(we're)g (Inside\(server,)h(static)p 840 991 14 3 v 16 w(type\).)25 b(Next)15 b(call)h Ft(ilu_GetLanguageSpecificObject)p Fs(;)f(if)0 1053 y(this)8 b(returns)g(NIL,)i(we:)f(create)h(a)g(1A)e (LSO,)i(create)f(a)h(Weak)f(Ref)h(that)e(holds)g(NIL,)h(and)g(call)g Ft(ilu_SetLSO)p Fs(.)h(If)f(the)g(Weak)0 1115 y(Ref)j(holds)e(NIL,)h (we)g(consider)f(whether)h(the)g(LSR)g(can)g(create)h(the)f(App)f(LSO;) h(this)f(would)g(normally)g(be)h(trivially)e(true)0 1178 y(for)i(a)h(surrogate,)f(and)g(an)h(object)e(table)h(consultation)e (for)i(a)h(true)f(object)g(\(note)g(that)f(this)g(makes)i(the)f (external)g(behavior)0 1240 y(independent)f(of)i(when)g(the)g (auxiliary)f(process)g(below)h(gets)f(around)g(to)h Ft(ilu_SetLSO)p Fs(\).)h(If)g(the)f(WeakRef)h(holds)d(NIL)0 1302 y(and)j(the)h(LSR)g (can)g(create)g(the)g(App)f(LSO,)h(the)f(LSR)h(creates)g(the)g(App)f (LSO)g(and)h(2A)f(LSO)h(and)f(sets)g(the)h(Weak)f(Ref)0 1364 y(to)g(\(disguisedly\))e(point)h(at)h(the)g(2A)g(LSO;)g(if)g(we)h (can't)f(create)h(the)f(App)g(LSO,)g(failure.)18 b(We)c(return)f(the)g (App)f(LSO)i(to)0 1427 y(which)c(the)h(2A)g(LSO)g(points,)f(after)i (exiting)e(the)h(appropriate)f(mutexes.)62 1530 y(When)h(the)g(App)f (LSO)h(eventually)f(becomes)h(unreachable)g(\(from)h(both)e(the)h(App)f (and)h(the)g(pin)f(table\),)h(the)g(garbage)0 1592 y(collector)20 b(should)e(eventually)h(schedule)h(both)f(the)h(App)g(LSO)g(and)g(the)h (2A)f(LSO)g(for)g(finalization,)i(setting)c(the)0 1654 y(Weak)c(Ref)g(to)f(NIL.)h(If)g(the)f(X-Object-from-SBH)h(procedure)f (is)g(executed)g(after)h(this)e(point)h(in)g(time)g(but)g(before)g(the) 0 1717 y(finalization)f(happens,)i(the)f(existing)f(1A)i(LSO)g(and)f (Weak)h(Ref)h(will)d(be)i(traversed,)h(to)e(find)g(the)h(Weak)g(Ref)g (holding)0 1779 y(NIL,)e(and)f(a)h(new)f(2A)g(LSO)h(and)f(App)g(LSO)g (created)h(if)g(possible)d(\(as)j(explained)e(above\).)i(The)g (finalization)d(procedure)0 1841 y(puts)k(the)g(1A)g(LSO)h(on)f(a)h (queue)g(to)f(be)g(processed)h(by)f(an)g(auxiliary)g(thread)g(or)h (event)f(handler.)19 b(To)13 b(avoid)g(allocating)0 1903 y(in)k(the)f(finalization)f(procedure,)k(the)e(queue)g(is)f(threaded)h (through)e(the)i(1A)g(LSO.)g(The)g(auxiliary)f(thread)h(or)g(event)0 1966 y(handler)e(does)f(the)h(following)f(for)h(each)h(1A)f(LSO)g(it)g (pulls)e(from)j(the)f(queue.)24 b(First,)16 b(it)e(establishes)g (Inside\(object's)0 2028 y(server's)c(mutex,)g(object's)f(MST\).)h (Then)g(it)f(considers)f(whether)h(the)h(auxiliary)e(objects)h(are)h (the)f(remnants)h(of)g(a)g(forcible)0 2090 y(dissociation)i(or)j(the)g (Weak)g(Ref)h(currently)e(holds)g(a)i(NIL)e(pointer.)22 b(In)15 b(either)g(case,)i(it)d(is)h(done;)h(otherwise,)f(it)g(calls)0 2152 y Ft(ilu_SetLSO)p Fs(,)c(passing)f(NIL)h(as)g(the)g Ft(")p Fs(lso)p Ft(")p Fs(.)f(Finally,)h(it)g(disestablishes)d (Inside\(..\).)62 2256 y(An)16 b(App)g(LSO)g(can)g(be)g(forcibly)f (dissociated)f(from)j(the)f(kernel)f(object.)26 b(This)15 b(involves)f(entering)h(the)h(object's)0 2318 y(server's)10 b(mutex)f(and:)h(setting)e(the)h(four)h(pointers)e(to/from)h(the)h(KO)f (and)h(App)f(LSO)g(to)h(NIL;)f(leaving)f(the)i(three)g(pointers)0 2380 y(among)f(the)g(1A)g(LSO,)h(2A)f(LSO,)h(and)f(WeakRef)h(intact;)f (and)g(removing)g(the)g(LSO)h(from)g(the)f(pin)f(table.)j(An)e (application)0 2442 y(may)14 b(want)g(to)g(do)f(this)g(as)h(part)g(of)g (a)g(graceful)g(shutdown)e(procedure.)20 b(This)13 b(leaves)h(the)g (App)f(LSO)h(fully)f(extant)g(and)0 2505 y(constructed)d(as)h(far)h(as) f(X)g(code)h(can)f(tell,)g(except)g(that)f(it's)h(not)f(linked)g(into)g (the)h(ILU)g(runtime.)62 2608 y(When)28 b(relying)g(on)g(a)g(garbage)h (collector,)j(CORBA::Object::duplicate)25 b(is)j(the)g(identity)f (function,)k(and)0 2670 y(CORBA::Object::release)10 b(is)h(a)g(no-op.)p eop %%Page: 275 276 275 275 bop 0 -58 a Fs(Appendix)10 b(A:)g(How)h(to)g(Create)h(ILU)f (Support)f(for)i(a)f(Programming)h(Language)578 b(275)0 183 y Fn(A.4.3.4)23 b(Explicitly)14 b(Managed)h(Objects)62 403 y Fs(An)23 b(alternative)f(is)h(to)g(not)f(rely)i(on)e(a)i(garbage) f(collector,)j(and)d(require)g(the)g(application)f(programmer)i(to)0 465 y(use)e(CORBA::Object::duplicate)e(and)i(CORBA::Object::release)f (to)h(explicitly)f(manage)i(objects.)44 b(The)23 b(most)0 527 y(straightforward)10 b(approach)h(is)f(this:)358 1252 y @beginspecial 165 @llx 446 @lly 461 @urx 601 @ury 2960 @rwi @setspecial %%BeginDocument: object-linkage-2.idraw /arrowHeight 10 def /arrowWidth 5 def /IdrawDict 52 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 reencodeISO def /Times-Italic 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 /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 %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.799705 0 0 0.799705 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 225 411 297 459 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 165 ] concat %I 225 411 297 459 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 279 229 ] concat %I 225 411 297 459 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 353 347 457 435 Rect End Begin %I Elli %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -1 261 ] concat %I 393 387 40 24 Elli End Begin %I Line %I b 65535 0 1 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 353 419 297 443 Line %I 1 End Begin %I Line %I b 65535 0 1 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 297 427 353 403 Line %I 1 End Begin %I Line %I b 65535 0 1 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 353 371 297 339 Line %I 1 End Begin %I Line %I b 65535 0 1 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 297 323 353 355 Line %I 1 End Begin %I Line %I b 65535 0 1 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 521 403 457 403 Line %I 1 End Begin %I Line %I b 65535 0 1 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 457 387 521 387 Line %I 1 End Begin %I Line %I b 65520 0 0 0 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.25 -0 -0 0.848624 349.75 314.261 ] concat %I 489 515 489 299 Line %I 1 End Begin %I Line %I b 65520 0 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 553 467 553 419 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 216 707 ] concat %I [ (App LSO) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 216 603 ] concat %I [ (App LSO) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 360 691 ] concat %I [ (Aux LSO) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 360 651 ] concat %I [ (interest bit) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 520 675 ] concat %I [ (kernel) (object) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 520 747 ] concat %I [ (Kernel) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-i-normal-*-14-*-*-*-*-*-*-* Times-Italic 14 SetF %I t [ 1 0 0 1 312 574 ] concat %I [ (Language X) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-i-normal-*-14-*-*-*-*-*-*-* Times-Italic 14 SetF %I t [ 1 0 0 1 536 574 ] concat %I [ (C) ] Text End Begin %I Elli %I b 65520 0 0 0 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 0.113197 -0 -0 0.113197 227.209 601.476 ] concat %I 113 411 8 8 Elli End Begin %I Elli %I b 65520 0 0 0 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 0.113197 -0 -0 0.113197 227.209 609.476 ] concat %I 113 411 8 8 Elli End Begin %I Elli %I b 65520 0 0 0 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 0.113197 -0 -0 0.113197 227.209 617.476 ] concat %I 113 411 8 8 Elli End Begin %I Elli %I b 65520 0 0 0 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 0.113197 -0 -0 0.113197 227.209 593.476 ] concat %I 113 411 8 8 Elli End End %I eop showpage end %%EndDocument @endspecial 62 1517 a(The)f(`interest)f(bit')g(records)h(whether)f (the)h(kernel)g(is)f(`very)h(interested')f(in)g(this)g(object.)i (CORBA::Object::duplicate)0 1579 y(creates)i(a)f(new)g(App)g(LSO,)g(as) g(does)g(each)h(unmarshalling)d(of)i(the)g(object.)g (CORBA::Object::release)f(deletes)g(an)i(App)0 1641 y(LSO)f(---)g(both) e(removing)h(it)g(from)h(the)g(set)f(managed)h(by)f(the)g(Aux)g(LSO,)h (and)g(freeing)f(it)g(\(what)h(if)f(true)h(object?\).)f(When)0 1704 y(there)i(are)g(no)f(App)g(LSOs,)h(and)f(the)h(interest)e(bit)h (is)g(clear,)i(the)e(Aux)g(LSO)h(can)g(be)f(freed,)i(and)e Ft(ilu_SetLSO)p Fs(\(ko,)g(NIL\))0 1766 y(called.)62 1969 y(When)k(multiple)f(App)g(LSOs)h(are)g(associated)f(with)g(a)i (given)e(abstract)g(ILU)h(object)f(\(i.e.,)j(kernel)e(object\),)h (things)0 2031 y(get)22 b(more)g(interesting)e(for)i(true)g(objects.)43 b(We)22 b(should)e(not)h(ask)h(the)g(application)e(to)h(implement)h (cloning)e(and)0 2093 y(consistency)c(among)j(clones.)32 b(Instead,)19 b(one)f(of)h(the)f(App)f(LSOs)h(is)g(true,)i(and)e(the)g (others)g(produced)f(from)i(it)f(by)0 2156 y(CORBA::Object::duplicate) 10 b(or)j(unmarshalling)e(should)h(be)h(surrogates.)j(ILU's)d(language) f(X)h(stubber)f(and)h(runtime)0 2218 y(support)j(should)f(conspire)h (to)h(short-circuit)e(calls)i(made)h(on)e(a)i(surrogate)e(into)g(calls) h(on)f(the)h(true)g(object,)h(without)0 2280 y(involving)10 b(the)i(kernel.)k(As)d(far)g(as)g(the)f(kernel)g(is)h(concerned,)g(the) f(Aux)g(LSO)h(is)f(the)h(true)f(LSO.)h(The)g(short-circuiting)0 2342 y(could)e(be)h(done)f(by)h(structuring)e(a)i(client-side)f(stub)f (as)i(follows:)f(\(1\))h(am)h(I)f(a)g(clone)g(of)f(the)h(true)g (object?)h(\(2\))f(if)f(so,)h(call)0 2405 y(on)f(the)g(true)g(object,)g (otherwise)f(\(3\))h(do)g(the)g(`normal')g(thing)f(and)h(call)g (through)f(the)h(kernel.)62 2608 y(If)i(there)g(is)f(no)g(state)g(that) g(needs)g(to)h(be)f(associated)g(with)f(individual)g(App)h(LSO)g (copies,)h(we)g(can)f(instead)g(use)g(just)0 2670 y(one)f(copy,)g(with) f(a)i(reference)g(count.)f(That)g(would)f(look)g(like)g(this:)p eop %%Page: 276 277 276 276 bop 0 -58 a Fs(Appendix)10 b(A:)g(How)h(to)g(Create)h(ILU)f (Support)f(for)i(a)f(Programming)h(Language)578 b(276)571 621 y @beginspecial 197 @llx 459 @lly 391 @urx 608 @ury 1940 @rwi @setspecial %%BeginDocument: object-linkage-3.idraw /arrowHeight 10 def /arrowWidth 5 def /IdrawDict 52 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 reencodeISO def /Times-Italic 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 /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 %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.799705 0 0 0.799705 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 [ 1 0 0 1 -88 8 ] concat Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 279 229 ] concat %I 225 411 297 459 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 353 347 457 435 Rect End Begin %I Elli %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -1 261 ] concat %I 393 387 40 24 Elli End Begin %I Line %I b 65535 0 1 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 521 403 457 403 Line %I 1 End Begin %I Line %I b 65535 0 1 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 457 387 521 387 Line %I 1 End Begin %I Line %I b 65520 0 0 0 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.25 -0 -0 0.848624 349.75 314.261 ] concat %I 489 515 489 299 Line %I 1 End Begin %I Line %I b 65520 0 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 553 467 553 419 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 520 675 ] concat %I [ (kernel) (object) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 520 747 ] concat %I [ (Kernel) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-i-normal-*-14-*-*-*-*-*-*-* Times-Italic 14 SetF %I t [ 1 0 0 1 352 590 ] concat %I [ (Language X) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-i-normal-*-14-*-*-*-*-*-*-* Times-Italic 14 SetF %I t [ 1 0 0 1 536 590 ] concat %I [ (C) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 368 651 ] concat %I [ (ref count) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 360 691 ] concat %I [ (App LSO) ] Text End End %I eop End %I eop showpage end %%EndDocument @endspecial 62 807 a(The)7 b(kernel)g(being)g(`very)g(interested)o(')g (in)g(t)o(he)g(ob)o(ject)g(con)o(tribu)o(tes)g(1)f(to)g(the)h (reference)g(count.)g(CORBA::Object:duplicate,)0 869 y(and)g(each)g(unmarshalling,)f(increments)h(the)g(reference)g(count)g (\(and)g(returns)g(t)o(he)g(same)g(LSO\),)g(whil)o(e)g(CORBA::Obj)o (ect::release)0 931 y(decrements)18 b(it.)32 b(When)18 b(the)g(reference)h(count)f(goes)f(to)h(0,)i(CORBA::Object::release)d (breaks)h(the)g(cross-pointers)0 993 y(between)11 b(the)g(KO)g(and)g (the)g(App)f(LSO)h(and)g(then)g(frees)h(the)f(App)f(LSO.)62 1117 y(To)h(forcibly)f(dissociate)g(the)h(KO)g(and)g(App)g(LSO,)g(just) f(break)i(the)e(pointers)g(between)h(them.)0 1351 y Fn(A.4.3.5)23 b(Hybrid)15 b(Schemes)62 1491 y Fs(To)i(give)f(the)g(App)g(the)h (choice,)h(independently)d(for)i(each)g(abstract)f(ILU)h(object)f (\(i.e,)j(each)e(kernel)f(object\),)i(of)0 1553 y(either:)10 b(\(a\))i(letting)e(the)h(GC)g(reclaim)h(all)f(App)f(LSOs)h(or)h(\(b\)) f(explicitly)e(managing)i(all)f(App)h(LSOs:)106 2236 y @beginspecial 82 @llx 471 @lly 499 @urx 616 @ury 4170 @rwi @setspecial %%BeginDocument: object-linkage-4.idraw /arrowHeight 10 def /arrowWidth 5 def /IdrawDict 52 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 reencodeISO def /Times-Italic 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 /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 %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.799705 0 0 0.799705 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.8 0 0 0.8 72.8 136 ] concat Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.989796 -0 -0 1.71212 3.77551 -111.682 ] concat %I 174 411 270 475 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 18 181 ] concat %I 270 515 350 579 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -46 173 ] concat %I 358 451 438 499 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 258 181 ] concat %I 174 411 270 475 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 418 181 ] concat %I 174 411 270 475 Rect End Begin %I Line %I b 65520 0 0 0 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -1 181 ] concat %I 561 611 561 395 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -1 181 ] concat %I 273 427 433 427 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -1 181 ] concat %I 529 427 593 427 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -1 181 ] concat %I 593 459 529 459 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -1 181 ] concat %I 433 459 393 459 Line %I 1 End Begin %I Line %I b 65520 0 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -1 181 ] concat %I 313 459 273 459 Line %I 1 End Begin %I Line %I b 65520 0 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -1 181 ] concat %I 641 531 641 475 Line %I 1 End Begin %I Line %I b 65520 0 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0.5 SetP %I t [ 1 -0 -0 1 -1 181 ] concat %I 609 555 369 555 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 184 683 ] concat %I [ (2nd Aux LSO) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 304 731 ] concat %I [ (pin table) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 328 651 ] concat %I [ (weak ref) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 448 627 ] concat %I [ (1st Aux LSO) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 608 635 ] concat %I [ (kernel object) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 624 739 ] concat %I [ (Kernel) ] Text End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -134 181 ] concat %I 174 411 270 475 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -134 293 ] concat %I 174 411 270 475 Rect End Begin %I Elli %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 241 363 40 24 Elli End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 305 483 153 483 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 193 411 153 467 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 153 443 193 387 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 193 371 153 371 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 153 339 193 339 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 208 645 ] concat %I [ (interest) (bit) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 64 739 ] concat %I [ (App LSO) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 64 627 ] concat %I [ (App LSO) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-i-normal-*-14-*-*-*-*-*-*-* Times-Italic 14 SetF %I t [ 1 0 0 1 320 581 ] concat %I [ (Language X) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-i-normal-*-14-*-*-*-*-*-*-* Times-Italic 14 SetF %I t [ 1 0 0 1 632 581 ] concat %I [ (C) ] Text End Begin %I Elli %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 0 -0 -0 0 88 696 ] concat %I 145 579 8 8 Elli End Begin %I Elli %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 0 -0 -0 0 88 672 ] concat %I 145 579 8 8 Elli End Begin %I Elli %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 0 -0 -0 0 88 680 ] concat %I 145 579 8 8 Elli End Begin %I Elli %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 0 -0 -0 0 88 688 ] concat %I 145 579 8 8 Elli End Begin %I Elli %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 0 -0 -0 0 88 664 ] concat %I 145 579 8 8 Elli End End %I eop End %I eop showpage end %%EndDocument @endspecial 62 2422 a(In)e(this)f(scheme)i(we)f(free)h(the)f(aux)g (LSOs)f(when)h(either)g(\(a\))g(the)g(GC)g(informs)g(us)g(that)f(the)h (2A)g(LSO)g(is)f(unreachable)h(or)0 2484 y(\(b\))h(the)g(last)f(App)h (LSO)g(is)f(deleted)h(and)f(the)h(kernel)g(is)f(not)h(`very)g (interested')f(in)g(the)h(object.)h(CORBA::Object::release)0 2546 y(destroys)f(an)h(App)g(LSO.)g(The)g(pin)g(table)g(points)e(to)i (the)g(true)g(App)f(LSO,)i(if)f(any.)62 2670 y(Again,)g(if)g(we)h (don't)e(need)h(distinct)e(App)i(LSOs,)g(we)h(can)f(use)g(one)g(with)f (reference)j(counting:)p eop %%Page: 277 278 277 277 bop 0 -58 a Fs(Appendix)10 b(A:)g(How)h(to)g(Create)h(ILU)f (Support)f(for)i(a)f(Programming)h(Language)578 b(277)85 650 y @beginspecial 77 @llx 461 @lly 504 @urx 617 @ury 4270 @rwi @setspecial %%BeginDocument: object-linkage-5.idraw /arrowHeight 10 def /arrowWidth 5 def /IdrawDict 52 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 reencodeISO def /Times-Italic 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 /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 %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.799705 0 0 0.799705 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.80997 0 0 1.36682 68.8874 45.347 ] concat %I 174 411 270 475 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 80.2472 270.053 ] concat %I 270 515 350 579 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 27.7611 263.492 ] concat %I 358 451 438 499 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 277.07 270.053 ] concat %I 174 411 270 475 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 -44.4072 270.053 ] concat %I 174 411 270 475 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 408.285 270.053 ] concat %I 174 411 270 475 Rect End Begin %I Line %I b 65520 0 0 0 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 5.12559 0 0 0.892992 -2350.72 225.513 ] concat %I 561 611 561 395 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 89 515 89 475 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 177 459 137 459 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 137 427 177 427 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 273 427 433 427 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 529 427 593 427 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 593 459 529 459 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 433 459 393 459 Line %I 1 End Begin %I Line %I b 65520 0 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 313 459 273 459 Line %I 1 End Begin %I Line %I b 65520 0 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 641 531 641 475 Line %I 1 End Begin %I Line %I b 65520 0 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0.5 SetP %I t [ 0.820095 0 0 0.820095 64.6654 270.053 ] concat %I 609 555 369 555 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 0.820095 0 0 0.820095 117.972 635.816 ] concat %I [ (App LSO) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 0.820095 0 0 0.820095 216.383 675.816 ] concat %I [ (2nd Aux LSO) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 0.820095 0 0 0.820095 314.794 721.105 ] concat %I [ (pin table) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 0.820095 0 0 0.820095 334.477 655.498 ] concat %I [ (weak ref) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 0.820095 0 0 0.820095 432.888 635.816 ] concat %I [ (1st Aux LSO) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 0.820095 0 0 0.820095 557.542 635.816 ] concat %I [ (kernel object) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 0.820095 0 0 0.820095 131.093 714.545 ] concat %I [ (App) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 0.820095 0 0 0.820095 577.225 727.666 ] concat %I [ (Kernel) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-i-normal-*-14-*-*-*-*-*-*-* Times-Italic 14 SetF %I t [ 0.820095 0 0 0.820095 301.673 592.351 ] concat %I [ (Language X) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-i-normal-*-14-*-*-*-*-*-*-* Times-Italic 14 SetF %I t [ 0.820095 0 0 0.820095 589.673 592.351 ] concat %I [ (C) ] Text End Begin %I Elli %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg none SetP %I p n %I t [ 0.680936 -0 -0 0.752613 82.2698 355.456 ] concat %I 249 371 40 16 Elli End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 0.820095 0 0 0.820095 237.972 635.816 ] concat %I [ (refcnt) ] Text End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 319 450 273 427 Line %I 1 End End %I eop showpage end %%EndDocument @endspecial 62 805 a(This)10 b(scheme)i(requires)f(the)g(GC)g(vs.)g (explicit)f(management)i(choice)f(to)g(be)g(made)h(once)f(per)g (abstract)g(ILU)g(object.)62 898 y(To)g(enable)g(the)g(choice)g (independently)e(at)i(each)h(App)e(LSO:)81 1580 y @beginspecial 76 @llx 461 @lly 505 @urx 606 @ury 4290 @rwi @setspecial %%BeginDocument: object-linkage-6.idraw /arrowHeight 10 def /arrowWidth 5 def /IdrawDict 52 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 reencodeISO def /Times-Italic 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 /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 %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.799705 0 0 0.799705 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.824615 0 0 0.824615 63.84 117.157 ] concat Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 194 181 ] concat %I 270 515 350 579 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.989796 -0 -0 1.4697 259.776 -12.0454 ] concat %I 174 411 270 475 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 418 181 ] concat %I 174 411 270 475 Rect End Begin %I Line %I b 65520 0 0 0 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -1 165 ] concat %I 561 611 561 395 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -1 181 ] concat %I 273 427 433 427 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -1 181 ] concat %I 529 427 593 427 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -1 181 ] concat %I 593 459 529 459 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -1 181 ] concat %I 433 459 393 459 Line %I 1 End Begin %I Line %I b 65520 0 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -1 181 ] concat %I 641 531 641 475 Line %I 1 End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 2 181 ] concat %I 174 411 270 475 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -46 165 ] concat %I 358 451 438 499 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -134 181 ] concat %I 174 411 270 475 Rect End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -1 181 ] concat %I 177 459 137 459 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -1 181 ] concat %I 137 427 177 427 Line %I 1 End Begin %I Line %I b 65520 0 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -1 181 ] concat %I 313 459 273 459 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 56 635 ] concat %I [ (App LSO) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 192 627 ] concat %I [ (2nd Aux LSO) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 328 643 ] concat %I [ (weak ref) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 440 667 ] concat %I [ (1st Aux LSO) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 608 635 ] concat %I [ (kernel object) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 624 739 ] concat %I [ (Kernel) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 480 739 ] concat %I [ (pin table) ] Text End Begin %I Line %I b 65520 0 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0.5 SetP %I t [ 1 -0 -0 1 -17 269 ] concat %I 625 467 561 467 Line %I 1 End Begin %I Elli %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -8.99999 269 ] concat %I 489 355 40 24 Elli End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 464 637 ] concat %I [ (interest) (bit) ] Text End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 2 277 ] concat %I 174 411 270 475 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -46 237 ] concat %I 358 451 438 499 Rect End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -134 277 ] concat %I 174 411 270 475 Rect End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -1 277 ] concat %I 177 459 137 459 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -1 277 ] concat %I 137 427 177 427 Line %I 1 End Begin %I Line %I b 65520 0 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -1 261 ] concat %I 313 459 273 459 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 56 731 ] concat %I [ (App LSO) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 192 723 ] concat %I [ (2nd Aux LSO) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 328 715 ] concat %I [ (weak ref) ] Text End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 449 411 409 459 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 289 419 449 395 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -17 269 ] concat %I 481 475 289 475 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-i-normal-*-14-*-*-*-*-*-*-* Times-Italic 14 SetF %I t [ 1 0 0 1 296 582 ] concat %I [ (Language X) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-i-normal-*-14-*-*-*-*-*-*-* Times-Italic 14 SetF %I t [ 1 0 0 1 632 582 ] concat %I [ (C) ] Text End Begin %I Elli %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 0 -0 -0 0 224 680 ] concat %I 137 579 8 8 Elli End Begin %I Elli %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 0 -0 -0 0 224 664 ] concat %I 137 579 8 8 Elli End Begin %I Elli %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 0 -0 -0 0 224 672 ] concat %I 137 579 8 8 Elli End End %I eop End %I eop showpage end %%EndDocument @endspecial 62 1735 a(Here)j(the)f(LSR)h(establishes)e(finalization)g (on)h(each)h(2A)f(LSO.)h(The)f(finalization,)f(like)h (CORBA::Object::release,)0 1798 y(removes)f(the)f(relevant)h(WeakRef)g (from)h(the)e(1A)h(LSO's)g(set)f(of)h(WeakRefs.)h(When)e(that)g(set)h (is)f(empty,)h(and)g(the)f(kernel)0 1860 y(is)15 b(not)h(`very)g (interested')e(in)i(the)g(object,)g(the)g(remaining)f(LSO)h(cruft)g (can)g(be)g(freed,)i(and)e Ft(ilu_SetLSO)p Fs(\(ko,)g(NIL\))0 1922 y(called.)11 b(The)g(pin)g(table)f(points)g(at)h(the)g(true)g(App) g(LSO,)g(if)g(any.)0 2064 y Fo(A.4.4)26 b(Server)15 b(Management)62 2173 y Fs(Like)c(objects,)f(servers)g(are)i(also)e(managed.)i(However,) e(their)h(management)g(is)f(typically)f(easier,)j(because)e(they)h(are) 0 2235 y(not)h(first-class)g(objects)f(\(i.e.,)k(can't)e(appear)g(in)f (network)g(interfaces\))h(and)f(so)h(are)g(manipulated)f(in)g(only)g(a) h(few)g(ways.)0 2298 y(You)e(will)f(define)h(a)g Fp(LSS)j Fs(\()p Fp(Language-Specific)d(Server)p Fs(,)h(the)f(language)g (mapping)f(of)h(an)h Ft(ilu_Server)p Fs(\).)62 2390 y(Each)h Ft(ilu_Server)f Fs(has)h(a)g(collection)e(of)i(LSSes)h(associated)e (with)f(it,)i(in)g(the)g(same)g(way)g(that)f(an)h Ft(ilu_Object)0 2453 y Fs(has)18 b(a)h(collection)e(of)h(associated)g(LSOs.)33 b Ft(ilu_GetLSS)17 b Fs(and)i Ft(ilu_SetLSS)e Fs(manipulate)h(the)g (pointer)f(from)i(the)0 2515 y Ft(ilu_Server)10 b Fs(to)h(its)f (language-)p Fp(L)15 b Fs(LSS;)d(the)f(reverse)g(pointer)f(is)h(your)g (problem.)62 2608 y Ft(ilu_Server)p Fs(s)k(are)h(reference-counted,)h (in)e(a)h(way)f(similar)g(to)h Ft(ilu_Object)p Fs(s.)23 b(The)15 b(server)h(mutex)f(invariant)0 2670 y(includes)c(the)h (assertion)f(that,)h(for)h(each)g(given)e(language)h Fp(L)k Fs(an)d Ft(ilu_Server)e Fs(and)i(it's)e Fp(L)17 b Fs(LSS)c(point)e(to)g(each)i(other,)p eop %%Page: 278 279 278 278 bop 0 -58 a Fs(Appendix)10 b(A:)g(How)h(to)g(Create)h(ILU)f (Support)f(for)i(a)f(Programming)h(Language)578 b(278)0 183 y(or)11 b(neither)f(does;)g(each)h(pointer)f(from)h Ft(ilu_Server)f Fs(to)g(LSS)h(counts)f(as)h(a)g(reference.)h(Each)f (locally-reified)f(object)g(in)0 246 y(the)h(server)g(also)g(counts)f (as)h(a)h(reference.)62 333 y(The)h(time)f(when)g(an)g Ft(ilu_Server)g Fs(is)g(checked)g(and)h(possibly)d(freed)j(is)e(when)h (its)g(mutex)g(is)g(exited.)i(This)e(should)0 395 y(always)e(be)h(done) f(by)g(calling)g Ft(ilu_ExitServerMutex)f Fs(instead)g(of)i(fetching)f (the)g(mutex)h(and)f(applying)f(the)h(generic)0 457 y Ft(ilu_ExitMutex)g Fs(to)h(it.)0 580 y Fo(A.4.5)26 b(Call-Specific)13 b(MetaObjects)62 684 y Ft(ilu_Pipeline)p Fs(s)c(and)g Ft(ilu_Serializer)p Fs(s)f(are)i(managed)g(by)g(a)g(simple,)f(explicit) f(reference)j(counting)d(scheme:)0 746 y(you)17 b(get)g(a)h(reference)h (count)d(of)i(1)f(when)g(you)g(create)h(one,)h(and)f(may)g(later)f (release)h(that)f(reference)i(count.)29 b(Each)0 809 y Ft(ilu_Call)12 b Fs(that)g(is)f(associated)h(with)f(one)h(of)h(these) f(metaobjects)f(also)h(counts)f(as)i(a)g(reference,)h(if)e Ft(ilu_StartCall)0 871 y Fs(succeeded)f(and)g Ft(ilu_FinishCall)f Fs(hasn't)h(yet)g(been)g(called.)62 958 y Ft(ilu_Passport)p Fs(s)c(and)g Ft(ilu_IdentityInfo)p Fs(s)f(are)h(managed)g(by)g(an)f (even)h(si)o(mpler)g(scheme.)h Ft(ilu_DestroyPassport)0 1020 y Fs(frees)18 b(a)g Ft(ilu_Passport)e Fs(and)h(those)g(of)g(its)g Ft(ilu_IdentityInfo)p Fs(s)e(that)i(are)h(marked)g(as)f(being)g(owned)f (by)h(the)0 1083 y Ft(ilu_Passport)p Fs(.)0 1206 y Fo(A.4.6)26 b(Errors)62 1310 y Fs(The)d(kernel)f(has)g(a)h(\(partly)f(deployed\))f (standard)h(way)g(to)g(return)g(result)g(codes)g(and)g(further)g (details.)44 b(It's)0 1372 y(called)13 b(the)h Ft(")p Fs(error)g(system)p Ft(")p Fs(.)19 b(`)p Ft(runtime/kernel/iluerror.h)p Fs(')12 b(describes)h(the)g(system)g(in)h(general)f(terms,)i(and)0 1434 y(`)p Ft(iluerrs.h)p Fs(')d(describes)g(the)h(particular)f(types)g (of)h(errors)g(currently)f(possible.)i(Most)f(calls)f(into)f(the)i (kernel)f(take)h(an)0 1497 y(error-signalling)c(OUT)i(parameter)h(in)f (the)g(last)f(position.)62 1584 y(CORBA)18 b(defines)f(some)g(standard) g(system)f(exceptions.)28 b(An)17 b(LSR)h(must,)h(when)d(relaying)h(an) g(error)h(from)f(the)0 1646 y(kernel)11 b(to)g(an)g(application,)f (convert)h(a)h(kernel)f(error)g(into)g(a)g(CORBA)h(standard)f(system)g (exception.)f(To)h(facilitate)g(this,)0 1708 y(the)g(kernel)g(error)h (system)f(has)h(been)f(defined)g(to)g(include)f(a)i(collection)e(of)i (error)g(types)e(that)h(correspond)g(to)g(CORBA's)0 1771 y(standard)f(system)h(exceptions.)62 1858 y(Sadly,)k(CORBA's)f (standard)f(collection)f(of)i(system)f(exceptions)g(doesn't)g (correspond)f(very)i(directly)f(to)g(the)h(full)0 1920 y(collection)8 b(of)i(all)f(the)g(things)f(that)h(can)h(go)g(wrong)f (at)g(the)h(kernel)f(interface.)i(So)f(there)g(are)g(some)g(additional) e(error)i(types.)0 1982 y(Of)i(course,)g(when)f(translating)f(to)h(a)h (CORBA)h(system)e(exception,)g(a)h(standard)f(one)g(must)g(be)h (chosen.)h(Also,)e(there)h(are)0 2044 y(some)g(old)g(error)g(types)g (left)g(over)g(from)h(a)f(previous)f(version)g(of)h(the)g(system;)g(we) h(are)f(working)f(on)h(identifying)e(which)0 2107 y(should)g(be)h (eliminated,)f(and)h(which)g(should)f(stay)g(\(perhaps)h(with)f (modification\).)0 2230 y Fo(A.4.7)26 b(Internal)14 b(Consistency)h (Checks)62 2334 y Fs(The)f(kernel)g(includes)e(internal)h(consistency)f (checks,)j(of)f(two)f(styles.)18 b(When)c(such)f(a)i(check)f(fails,)g (one)g(of)g(a)g(few)0 2396 y(possible)d(courses)i(of)g(action)f(are)i (taken.)i(An)d(application)e(can)i(specify)g(what)f(to)h(do.)k(Your)12 b(mapping)g(should)g(expose)0 2458 y(this)e(ability.)g(See)i(the)f Ft(")p Fs(Internal)f(Consistency)g(Checking)p Ft(")h Fs(section)f(of)h(`)p Ft(iluxport.h)p Fs(')g(for)g(details.)62 2545 y(The)18 b(kernel)f(is)g(allowed)g(to)g(check)h(consistency)e (only)g(with)h(respect)g(to)h(conditions)d(that)i(it)g(establishes)e (itself;)0 2608 y(the)f(kernel)g(should)e(not)h(rely)h(on)g(correct)g (operation)f(of)h(the)g(LSRs)g(or)g(externally-supplied)d(meta-objects) j(\(the)g(error)0 2670 y(system)d(should)f(be)h(used)g(to)g(report)h (bogus)e(behavior)h(of)g(other)g(parties\).)h(An)f(LSR)h(may)g(also)f (do)g(internal)g(consistency)p eop %%Page: 279 280 279 279 bop 0 -58 a Fs(Appendix)10 b(A:)g(How)h(to)g(Create)h(ILU)f (Support)f(for)i(a)f(Programming)h(Language)578 b(279)0 183 y(checking,)9 b(relying)g(on)g(correct)h(operation)e(of)h(the)g (kernel)h(\(and)f(of)g(course)h(any)f(meta-objects)g(the)g(LSR)h (itself)e(supplies\);)0 246 y Ft(ilu_Check)j Fs(may)g(be)g(used)g(for)g (such)g(checks.)0 368 y Fo(A.4.8)26 b(Debugging)62 471 y Ft(ilu_DebugPrintf)11 b Fs(\(see)i(`)p Ft(iluxport.h)p Fs('\))f(may)h(be)f(used)g(to)g(display)e(messages)j(to)e(the)h(user)h (\(if)f(and)g(when)g(an)0 534 y(LSR)f(is)f(in)g(such)g(dire)g (straights)f(that)h(it)g(needs)g(to\).)h(Use)g(this)e(instead)g(of)i (printing)e(directly)g(to)h(stderr)g(to)g(take)h(advantage)0 596 y(of)g(the)g(kernel's)g(standard)f(re-direction)h(facility.)f(See)i (the)f Ft(")p Fs(from)h(debug.c)p Ft(")f Fs(section)f(of)h(`)p Ft(iluxport.h)p Fs('.)62 683 y(The)e(kernel)f(is)g(loaded)g(with)f (conditional)f(printf)i(statements,)h(for)f(debugging)f(purposes;)h(an) g(LSR)h(may)g(also)f(include)0 745 y(conditional)k(printf)h(statements) g(using)g(the)g(same)i(mechanism.)20 b(See)15 b(`)p Ft (runtime/kernel/iludebug.h)p Fs(',)e(for)h(the)0 808 y(definition)c(of)j(the)f Ft(DEBUG)g Fs(macro)i(and)e(the)g(particular) g(bits)f(available)h(for)h(control.)h(The)f Ft(")p Fs(from)f(debug.c)p Ft(")h Fs(section)e(of)0 870 y(`)p Ft(iluxport.h)p Fs(')f(also)h (includes)e(procedures)i(that)f(allow)g(the)h(control)f(bits)f(to)i(be) g(set;)f(this)g(should)f(be)i(exposed)f(in)h(your)0 932 y(language)f(mapping.)0 1054 y Fo(A.4.9)26 b(Fine)15 b(Grain)f(Time)62 1158 y Fs(The)j(ILU)f(kernel)h(uses)f(a)h (representation)e(of)i(time)f(that)g(has)h(subsecond)e(resolution.)26 b(The)16 b(exact)h(resolution)e(is)0 1220 y(dependent)10 b(on)h(the)g(OS,)h(and)f(can)g(be)g(read)h(from)g(a)f(global)f (variable.)h(See)h(the)f Ft(")p Fs(Time)p Ft(")g Fs(section)g(of)g(`)p Ft(iluxport.h)p Fs('.)0 1342 y Fo(A.4.10)25 b(FD)16 b(Budget)62 1446 y Fs(The)g(ILU)g(kernel)f(will)g(restrain)g(itself)g(to)g(use)h (at)f(most)h(a)g(given)f(number)h(of)f(File)h(Descriptors)e(\(FDs\).)26 b(See)16 b(the)0 1508 y Ft(")p Fs(FD)d(&)g(Connection)f(Management)p Ft(")h Fs(section)f(of)h(`)p Ft(iluxport.h)p Fs('.)j(Your)c(mapping)h (should)e(expose)h(this)g(control)g(to)0 1571 y(applications.)0 1693 y Fo(A.4.11)25 b(Supporting)13 b(Multiple)h(Languages)h(in)g(One)g (Runtime)62 1797 y Fs(It's)d(not)g(your)g(job)g(to)g(integrate)f (language)h Fp(L)t Fs('s)h(runtime)f(system)g(with)f(language)h Fp(M)t Fs('s.)j(But)d(supposing)e(someone)0 1859 y(has,)16 b(your)e(LSR)i(for)f Fp(L)k Fs(should)13 b(be)i(able)g(to)f(co-exist)g (with)g(the)h(LSR)g(for)g Fp(M)p Fs(.)h(The)f(kernel)g(is)f(prepared)h (to)f(deal)h(with)0 1921 y(multiple)9 b(LSRs.)i(Each)f(LSR)g(should)f (call)g Ft(ilu_RegisterLanguage)p Fs(,)g(to)h(get)f(a)h Ft(ilu_LanguageIndex)f Fs(for)h(use)g(in)0 1983 y(certain)g(kernel)g (calls.)h(To)f(support)e('Collectible')i(objects,)f(an)i(LSR)f (normally)g(calls)g Ft(ilu_SetGcClient)p Fs(,)f(providing)0 2046 y(an)14 b(object)g(that)f(can)i(be)f('pinged')f(to)h(determine)g (whether)g(or)g(not)f(a)i(process)e(is)h(still)f(alive.)20 b(In)14 b(the)g(case)g(of)g(multiple)0 2108 y(LSRs)f(within)f(one)h (process,)g(only)f(one)h(LSR)g(should)f(do)h(this.)j(An)c(LSR)i(can)f (determine)g(if)g(a)h(GC)f(client)f(has)h(already)0 2170 y(been)e(set)g(by)g(calling)f Ft(ilu_IsGcClientSet)p Fs(.)0 2292 y Fo(A.4.12)25 b(Type)16 b(Information)62 2396 y Fs(The)10 b(stubs)e(for)i(an)g(ISL)g(interface)g(are)g (responsible)e(for)i(describing)f(to)g(the)g(kernel)h(each)g(object)f (type)g(defined)h(in)f(that)0 2458 y(interface.)i(The)d(kernel)g(will)f (either)h(make)h(an)f(internal)g(copy)g(of)g(this)f(information,)h(or)h (\(if)f(stubs)f(for)h(a)h(different)f(language)0 2521 y(have)15 b(already)f(described)g(the)g(type\))g(check)h(for)g (equivalence)e(of)i(the)f(given)g(information)f(with)h(an)g (already-existing)0 2583 y(internal)c(copy.)h(See)h(the)f Ft(")p Fs(Object)g(Type)f(Registry)p Ft(")h Fs(section)f(of)h(`)p Ft(iluxport.h)p Fs('.)62 2670 y(Support)g(for)g Ft(ANY)g Fs(introduces)f(the)h(need)g(to)g(describe)f(all)h(types)g(defined)f (in)h(an)g(interface.)h(See)g(ilutypes.h.)p eop %%Page: 280 281 280 280 bop 0 -58 a Fs(Appendix)10 b(A:)g(How)h(to)g(Create)h(ILU)f (Support)f(for)i(a)f(Programming)h(Language)578 b(280)0 183 y Fo(A.4.13)25 b(Simple)15 b(Binding)f(Service)62 299 y Fs(This)d(is)h(a)g(simple)g(bootstrap)e(for)i(solving)e(the)i (name)g(service)g(problem.)i(It)e(should)e(be)j(used)e(to)h(get)f(to)h (a)g(real)h(name)0 361 y(service.)19 b(See)c(the)e Ft(")p Fs(Simple)h(Binding)p Ft(")e Fs(and)i Ft(")p Fs(from)g(sbilu.c)p Ft(")f Fs(sections)f(of)i(`)p Ft(iluxport.h)p Fs('.)k(Your)c(mapping)f (should)0 423 y(expose)e(this)f(functionality.)0 583 y Fo(A.4.14)25 b(Security)15 b(Support)62 699 y Fs(ILU)i(provides)f (hooks)f(for)j(the)e(following)f(three)i(security)f(services:)22 b(authentication,)16 b(message)h(integrity,)g(and)0 761 y(message)12 b(secrecy.)h(The)e(services)g(are)h(provided)f(by)g(a)h (transport)e(filter)h(that's)g(written)f(against)g(the)i(GSS)g(API)g (\(see)f(the)0 823 y(section)h(on)h(RPC)h(and)f(transport)f(protocols)f (in)i(the)g(refman\).)18 b(This)12 b(filter)h(is)g(parameterized)g(by)g (certain)g(identity)e(and)0 885 y(credential)i(information.)k([More)e (needs)e(to)g(be)h(written)e(about)h(these)g(parameters)h(and)f(their)g (management)h(---)g(Bill?])0 948 y(See)e(the)f Ft(")p Fs(Identities)e(and)i(Passports)p Ft(")f Fs(section)g(of)i(`)p Ft(iluxport.h)p Fs('.)0 1107 y Fo(A.4.15)25 b(SBH)15 b(schemes)62 1223 y Fs(An)e(ILU)f(SBH)h(\(string)f(binding)f(handle;)h (see)h(Section)f(1.3.1.6)h([String)f(Binding)f(Handle],)i(page)g(7\))g (is)f(organized)0 1285 y(like)i(a)g(WWW)g(URL:)g(a)h Ft(")p Fs(scheme)p Ft(")p Fs(,)g(followed)e(by)h(a)h(colon)e(and)h (then)g(some)g(scheme-dependent)g(stuff.)20 b(The)14 b(set)g(of)0 1347 y(schemes)d(understood)f(by)h(the)f(kernel)h(can)h (be)f(extended;)f(see)i(the)f Ft(")p Fs(URL)g(Syntax)p Ft(")f Fs(section)g(of)i(`)p Ft(iluxport.h)p Fs('.)0 1507 y Fo(A.4.16)25 b(Pickle)16 b(Support)0 1683 y Fn(A.4.16.1)23 b(The)15 b(Kernel)h(Interface)g(to)f(Pickle)62 1799 y Fs(The)g(basic)f(data)h(structure)f(the)g(ILU)h(kernel)f(uses)g(for)h (pickles)f(is)g Ft(ilu_Pickle)p Fs(,)h(which)f(is)g(a)h(struct)f (containing)0 1861 y(some)g(allocated)g(storage.)20 b(The)14 b(basic)g(calls)f(for)i(input,)f(output,)f(and)h(sizing)f(pickles)h (are)g(similar)g(to)g(those)f(for)i(other)0 1924 y(basic)c(types:)120 2022 y Ft(extern)24 b(void)170 2072 y(ilu_OutputPickle)f(\(ilu_Call,)h (/*)h(the)g(call)f(in)h(progress)f(*/)220 2122 y(ilu_Pickle,)g(/*)g (pointer)g(to)h(the)g(pickled)f(value)h(*/)220 2172 y (ILU_ERRS\(\(IoErrs\)\))e(*\);)120 2271 y(extern)h(ilu_cardinal)170 2321 y(ilu_SizeOfPickle)f(\(ilu_Call,)h(/*)h(the)g(call)f(in)h (progress)f(*/)220 2371 y(ilu_Pickle,)g(/*)g(pointer)g(to)h(the)g (pickled)f(value)h(*/)220 2421 y(ILU_ERRS\(\(IoErrs\)\))e(*\);)120 2521 y(extern)h(ilu_boolean)g(/*)h(the)g(value)f(read,)g(PASS)h(*/)170 2570 y(ilu_InputPickle)e(\(ilu_Call,)h(/*)h(the)g(call)f(in)h(progress) f(*/)195 2620 y(ilu_Pickle)g(*,)g(/*)h(OUT:)50 b(the)24 b(value)h(input,)f(PASS)h(*/)195 2670 y(ILU_ERRS\(\(IoErrs\)\))e(*\);)p eop %%Page: 281 282 281 281 bop 0 -58 a Fs(Appendix)10 b(A:)g(How)h(to)g(Create)h(ILU)f (Support)f(for)i(a)f(Programming)h(Language)578 b(281)62 183 y(The)12 b(ILU)g(kernel)g(exports)f(a)i(small)e(set)h(of)g (functions)f(to)g(provide)g(generic)h(pickle)g(support.)g(They)g(are)h (intended)e(to)0 246 y(work)j(with)g(standard)g(language-runtime)g (functionality)e(to)i(provide)g(language-specific)f(pickle)h(support.) 21 b(A)15 b(pickle)0 308 y(can)c(be)h(created)f(via)g(a)h(function)e (similar)g(to)h(this:)120 399 y Ft(ilu_Pickle)24 b(Pickle)g (\(ilu_string)g(type_id,)g(ilu_refany)g(value\))120 449 y({)170 499 y(ilu_Call_s)g(call;)170 549 y(ilu_cardinal)g(size;)170 598 y(ilu_Pickle)g(pickle)g(=)h({)g(0)g(};)170 648 y(ilu_Error)f(err;) 170 748 y(ilu_StartPickle)f(\(&call,)i(&err\);)170 798 y(if)g(\(ILU_ERRNOK\(err\)\))e(return)h(pickle;)170 847 y(size)g(=)h(<)p Fp(size-fn)p Ft(>)g(\(&call,)f(value,)g(&err\);)170 897 y(if)h(\(ILU_ERRNOK\(err\)\))e(return)h(pickle;)170 947 y(ilu_WritePickle)f(\(&call,)i(size,)f(type_id,)g(&err\);)170 997 y(if)h(\(ILU_ERRNOK\(err\)\))e(return)h(pickle;)170 1047 y(<)p Fp(output-fn)p Ft(>)f(\(&call,)h(value,)g(&err\);)170 1097 y(if)h(\(ILU_ERRNOK\(err\)\))e(return)h(pickle;)170 1146 y(ilu_EndPickle)g(\(&call,)g(&pickle,)g(&err\);)170 1196 y(return)g(pickle;)120 1246 y(})0 1366 y Fs(where)13 b Ft(<)p Fp(size-fn)p Ft(>)f Fs(is)f(the)h(normal)h(function)e(which)g (calculates)h(the)g(marshalled)g(size)g(of)h(a)f(value,)h(and)f Ft(<)p Fp(output-fn)p Ft(>)f Fs(is)0 1429 y(the)h(normal)g(function)f (which)g(causes)h(the)g(value)g(of)g(that)f(type)h(to)f(be)i(output.)f (Of)h(course,)f(the)g(example)g(code)g(must)g(be)0 1491 y(re-written)f(in)f(the)h(target)g(language)g(instead)f(of)h(in)g(C.)62 1582 y(Similarly,)g(a)h(language-specific)e(value)h(may)g(be)g (extracted)g(from)h(a)g(pickle)e(with)g(the)h(analogue)g(of)g(this)f (code:)120 1674 y Ft(ilu_string)24 b(Unpickle)g(\(ilu_Pickle)g(pickle,) g(ilu_refany)g(*value\))120 1724 y({)170 1773 y(ilu_string)g(type_id;) 170 1823 y(ilu_Error)g(err;)170 1873 y(<)p Fp(input-fn-type)p Ft(>)e(<)p Fp(input-fn)p Ft(>;)170 1973 y(type_id)i(=)h(ilu_PickleType) e(\(pickle,)i(&err\);)149 b(/*)24 b(read-only)g(*/)170 2022 y(if)h(\(ILU_ERRNOK\(err\)\))e(return)h(ILU_NIL;)170 2072 y(<)p Fp(input-fn)p Ft(>)f(=)i(<)p Fp(map-type-id-to-input-fn)p Ft(>)d(\(type_id\);)170 2122 y(if)j(\(input_fn)f(==)g(NULLFN\))h({)f (/*)h(this)g(type)f(unknown)g(in)h(this)g(LSR)f(*/)220 2172 y(ILU_CLER\(*err\);)220 2222 y(*value)g(=)h(ILU_NIL;)220 2271 y(return)f(ILU_NIL;)170 2321 y(})h(else)f({)220 2371 y(ilu_Call_s)g(call;)220 2421 y(ilu_Pickle)g(p2;)220 2521 y(ilu_StartPickle)f(\(&call,)h(&err\);)220 2570 y(if)g(\(ILU_ERRNOK\(err\)\))g(return)g(ILU_NIL;)220 2620 y(if)g(\(!ilu_ReadPickle\(&call,)f(pickle,)h(&err\)\))h(return)f (ILU_NIL;)220 2670 y(*value)g(=)h(<)p Fp(input-fn)p Ft(>)e(\(&call,)h (&err\);)p eop %%Page: 282 283 282 282 bop 0 -58 a Fs(Appendix)10 b(A:)g(How)h(to)g(Create)h(ILU)f (Support)f(for)i(a)f(Programming)h(Language)578 b(282)220 183 y Ft(if)24 b(\(ILU_ERRNOK\(err\)\))g(return)g(ILU_NIL;)220 233 y(ilu_EndPickle\(&call,)f(&p2,)h(&err\);)220 283 y(if)g(\(ILU_ERRNOK\(*err\)\))g({)269 333 y(if)h(\(*value)f(!=)h (ILU_NIL\))319 382 y(<)p Fp(free-fn)p Ft(>)h(\(*value\);)269 432 y(return)f(ILU_NIL;)220 482 y(})220 532 y(ILU_CLER\(*err\);)220 582 y(return)f(type_id;)170 632 y(})120 681 y(})0 793 y Fs(As)14 b(before,)i(the)f(function)e Ft(<)p Fp(input-fn)p Ft(>)g Fs(is)h(the)g(normal)h(language-specific)e(input)g(function)h (for)g(the)h(type)f(designated)0 856 y(by)h Ft(type_id)p Fs(,)h(and)f Ft(<)p Fp(free-fn)p Ft(>)h Fs(is)f(the)g(way)g(of)h (freeing)f(an)g(unused)g(value.)23 b(The)15 b(value)g(of)h Ft(type_id)f Fs(is)f(read-only,)0 918 y(and)e(only)e(guaranteed)i(to)f (exist)g(for)g(the)h(lifetime)f(of)h(the)f(pickle.)i(The)e(function)g Ft(<)p Fp(map-type-id-to-input-fn)p Ft(>)e Fs(must)i(be)0 980 y(provided)f(by)h(the)g(language)f(runtime;)h(it)f(will)g(usually)g (need)h(some)g(support)f(from)i(the)f(language)f(stubber.)62 1067 y(A)i(non-obvious)c(side)j(effect)h(of)g(calling)e Ft(ilu_ReadPickle)g Fs(is)h(that)g(control)f(over)h(the)g(allocated)g (data)g(inside)f(the)0 1130 y Fp(pickle)j Fs(parameter)f(is)e(passed)h (to)f(the)h(kernel,)g(from)h(the)e(language)h(runtime.)g(That)f(space)h (may)h(be)f(reclaimed,)h(as)f(in)f(the)0 1192 y(example)15 b(above,)g(by)f(passing)f(a)i(non-NIL)e(pickle)h(reference)i(to)e(the)g (final)g(call)g(to)g Ft(ilu_EndPickle)p Fs(;)g(otherwise)g(it)0 1254 y(will)c(be)h(freed)h(in)f(the)g(call)g(to)f Ft(ilu_EndPickle)p Fs(.)62 1341 y(Finally,)h(an)g Ft(ilu_Pickle)g Fs(value)f(may)i(be)f (freed)h(with)e(a)i(call)f(to)f Ft(ilu_FreePickle)p Fs(.)62 1429 y(See)15 b(the)f(file)f(`)p Fp(ILUSRC)t Ft (/runtime/kernel/ilutypes.h)p Fs(')f(for)j(more)f(information)f(on)g (the)h(kernel)g(routines)0 1491 y(referred)e(to)f(here.)0 1615 y Fn(A.4.16.2)23 b(Pickles)14 b(and)h(the)h(CORBA)g(IIOP)62 1719 y Fs(Generally,)c(pickles)e(are)i(sent)f(over)h(a)g(wire)f (protocol)g(as)g(a)h(simple)f(sequence)g(of)h(bytes,)f(which)g(consist) f(of)i(a)f(prefix)0 1781 y(byte,)e(a)h(type)e(ID,)i(and)f(the)g (marshalled)f(form)i(of)f(the)g(value.)h(However,)g(the)f(CORBA)h Ft(IIOP)e Fs(requires)h(a)h(full)e(description)0 1844 y(of)16 b(the)f(type)g(to)g(be)h(sent,)h(rather)e(than)h(just)e(the)h (type)h(ID.)g(This)e(makes)i(using)f(pickles)f(with)h(the)g Ft(IIOP)h Fs(much)g(more)0 1906 y(expensive)10 b(than)h(with)f(other)h (protocols,)f(but)g(must)h(still)e(be)j(supported)d(for)j(CORBA)g (compliance.)62 1993 y(To)17 b(support)e(this,)j(the)e(LSR)h(must)g (provide)f(full)g(type)g(information)g(to)g(the)g(kernel)h(for)g(each)g (constructed)f(type)0 2055 y(in)j(the)h(ISL)g(interface.)38 b(The)20 b(LSR)g(does)f(this)g(by)h(calling)e(type)i(registration)e (routines)g(exported)h(from)i(the)e(ILU)0 2118 y(kernel.)28 b(Typically,)17 b(these)f(calls)h(are)g(made)g(by)g(stubber-generated)e (interface)i(initialization)d(code.)28 b(Some)18 b(simple)0 2180 y(constructed)13 b(types)g(may)h(be)g(registered)f(with)g(a)h (single)f(call:)i Ft(SEQUENCE)p Fs(,)g Ft(OPTIONAL)p Fs(,)f Ft(ARRAY)p Fs(,)h Ft(OBJECT)e Fs(and)h(alias)0 2242 y(types.)j(Others)12 b(\()p Ft(RECORD)p Fs(,)i Ft(UNION)p Fs(,)g Ft(ENUMERATION)p Fs(\))e(require)h(a)h(sequence)f(of)g(calls.)k (For)c(example,)h(a)g Ft(RECORD)f Fs(type)0 2304 y(is)e(first)h (registered)f(by)h(calling)f Ft(ilu_RegisterRecordType)p Fs(;)f(the)h(result)h(of)g(this)e(call)i(is)g(then)f(used)g(in)h (subsequent)0 2367 y(calls)f(to)f Ft(ilu_RegisterRecordField)p Fs(,)g(one)h(call)g(per)g(field)g(in)g(the)g Ft(record)g Fs(type.)62 2454 y(These)j(calls)g(should)f(only)h(be)g(made)h(if)g (both)e(VARIANT)h(support)f(and)h(IIOP)h(support)e(are)j(configured)d (into)g(the)0 2516 y(ILU)e(system;)f(the)h(kernel)g(will)f(not)h (export)f(the)h(required)g(functions)f(if)h(one)g(or)g(the)g(other)g (is)f(not)h(available.)p eop %%Page: 283 284 283 283 bop 0 -58 a Fs(Appendix)10 b(B:)h(The)g(TIM)h(Documentation)d (Language)989 b(283)0 183 y Fq(Appendix)14 b(B)36 b(The)15 b(TIM)f(Documentation)g(Language)62 315 y Fs(This)c(document)h (describes)f(the)h(TIM)g(documentation)f(language)g(that)g(the)h (documentation)f(for)h(ILU)g(is)f(written)g(in.)0 377 y(It)h(is)f(not)f(necessary)i(to)f(be)h(familiar)f(with)g(TIM)h(to)f (use)g(ILU;)h(you)f(will)f(only)h(need)g(to)g(know)g(TIM)h(if)g(you)f (wish)f(to)h(use)h(it)0 439 y(to)g(write)f(or)i(modify)e (documentation.)62 527 y(TIM)17 b(is)g(essentially)d(a)j(superset)f(of) h(the)f(GNU)h(texinfo)e(language,)j(version)e(2.)28 b(It)16 b(adds)g(several)h(features)g(such)0 589 y(as)d(support)f(for)h (pictures)g(and)g(URLs,)h(but)e(its)h(most)f(important)h(extension)e (is)i(to)g(provide)f(domain-specific)g(markup)0 651 y(commands)f(to)g (allow)g(adding)f(arbitrary)h(meta-information)f(to)h(Texinfo)f (documents.)j(You)e(should)f(be)h(familiar)g(with)0 713 y(the)f(basic)f(Texinfo)h(system)f(first.)h(Documentation)e(on)i (Texinfo)f(is)h(supplied)e(with)h(the)h(ILU)g(distribution)o(;)d(you)j (should)0 776 y(be)g(able)g(to)g(find)g(it)f(in)h(the)g(files)g(`)p Ft(ILUSRC/doc/texinfo2.ps)p Fs('.)0 910 y Fu(B.1)30 b(Introduction)62 1014 y Fs(Both)14 b(TIM)g(and)g(Texinfo)f(input)g(files)h(contain)f (text)g(`marked)i(up')f(with)f(document)g(markup)h(commands.)20 b(These)0 1076 y(commands)15 b(are)g(similar)f(to)g(LaTeX)h(commands,)h (except)e(that)g(they)g(start)g(with)g(an)g(at-sign)g(character)h (rather)g(than)f(a)0 1138 y(backslash.)c(They)h(contain)f (meta-information)h(about)f(the)h(area)h(of)f(the)g(text)g(to)g(which)f (they)h(apply.)f(For)i(example:)170 1225 y Ft(A)25 b(kernel)f(server)g (@dfn{export}s)g(its)h(objects)f(by)h(making)f(them)g(available)170 1275 y(to)h(other)f(modules.)49 b(It)25 b(may)f(do)h(so)g(via)f(one)h (or)g(more)f(@dfn{port}s,)g(which)h(are)170 1325 y(abstractly)f(a)h (tuple)f(of)h(\(@metavar{rpc)e(protocol},)h(@metavar{transport)g (type},)170 1375 y(@metavar{transport)f(address}\).)49 b(For)25 b(example,)f(a)h(typical)f(port)g(might)170 1425 y(provide)g(access)g(to)h(a)g(kernel)f(server's)g(objects)h(via)f (@code{\(@protocol{Sun)f(RPC},)170 1474 y(@transport{TCP/IP},)g(UNIX)h (port)h(2076\)}.)49 b(Another)24 b(port)h(on)g(the)170 1524 y(same)f(kernel)h(server)f(might)g(provide)h(access)f(to)h(the)f (objects)h(via)170 1574 y(@code{\(@protocol{Xerox)e(Courier},)h (@transport{XNS)f(SPP},)i(XNS)f(port)h(1394\)}.)0 1686 y Fs(When)11 b(formatted,)g(this)f(paragraph)h(would)f(look)h(like)120 1773 y(A)i(kernel)g(server)h Fp(export)t Fs(s)f(its)f(objects)g(by)h (making)g(them)g(available)g(to)g(other)g(modules.)k(It)c(may)h(do)f (so)120 1823 y(via)g(one)h(or)g(more)g Fp(port)t Fs(s,)g(which)f(are)h (abstractly)f(a)h(tuple)f(of)g(\()p Fp(rpc)i(protocol)p Fs(,)e Fp(transport)f(type)p Fs(,)i Fp(transport)120 1873 y(address)r Fs(\).)c(For)g(example,)g(a)f(typical)f(port)h(might)f (provide)h(access)g(to)g(a)g(kernel)g(server's)g(objects)f(via)h Ft(\(Sun)120 1923 y(RPC,)i(TCP/IP,)g(UNIX)g(port)g(2076\))p Fs(.)29 b(Another)17 b(port)f(on)h(the)g(same)h(kernel)f(server)h (might)e(provide)120 1973 y(access)11 b(to)g(the)g(objects)f(via)h Ft(\(Xerox)g(Courier,)g(XNS)g(SPP,)g(XNS)g(port)g(1394\))p Fs(.)62 2085 y(There)19 b(are)f(two)g(kinds)e(of)j(markup)f(commands:) 24 b(without)17 b(arguments)g(or)h(with)f(arguments.)32 b(The)18 b(commands)0 2147 y(without)d(arguments)h(always)g(span)g (some)h(portion)e(of)i(the)g(document,)h(so)e(we)h(call)f(them)h Fp(span)f(commands)p Fs(.)29 b(They)0 2209 y(may)13 b(be)g(nested,)g (but)f(may)h(not)f(overlap.)j(There)e(are)h(two)e(forms)h(of)f(span)h (commands,)g Fp(style)f(commands)i Fs(and)f Fp(format)0 2271 y(commands)p Fs(.)19 b(The)14 b(style)e(commands)i(mark)h(some)e (section)g(of)h(the)f(text,)h(typically)e(a)i(short)f(sequence)g(of)h (text,)g(with)f(a)0 2334 y(single)g(attribute,)i(which)e(may)i(be)g (either)f(a)h(semantic)f(tag)h(like)f Ft(important)p Fs(,)h(or)f(a)h(formatting)f(style)f(like)h Ft(italic)p Fs(.)0 2396 y(The)f(format)g(commands)h(apply)e(a)h(similar)g(tag)g(to) f(a)i(block)e(of)h(the)g(input;)f(they)h(begin)f(with)g(a)i(single)e (line)g(containing)0 2458 y Ft(@)p Fp(attribute)s Fs(,)f(and)h(end)g (with)f(a)h(single)f(line)g(containing)g Ft(@end)g Fp(attribute)s Fs(.)h(Style)g(commands)g(may)g(be)h(nested)e(in)h(a)g(block)0 2521 y(command,)g(but)e(block)h(commands)g(should)f(not)g(be)h(nested)g (in)g(style)f(commands.)62 2608 y(Markup)j(commands)f(with)f(arguments) h(always)g(take)g(a)g(single)f(line.)j(The)e(line)g(begins)f(with)g Ft(@)p Fp(attribute)s Fs(,)g(followed)0 2670 y(by)h(whitespace,)f (followed)g(by)g(the)h(arguments,)g(separated)g(by)f(whitespace.)i(If)f (there)g(is)g(whitespace)f(in)g(an)h(argument,)p eop %%Page: 284 285 284 284 bop 0 -58 a Fs(Appendix)10 b(B:)h(The)g(TIM)h(Documentation)d (Language)989 b(284)0 183 y(the)11 b(argument)g(is)g(surrounded)e(with) i(braces,)g(as)h(in)0 246 y Ft(@deffun)f({struct)f(foo})h(Bar)g(\()h (arg)f(\))0 389 y Fu(B.2)30 b(Extensions)14 b(to)h(GNU)g(Texinfo)62 495 y Fs(TIM)i(removes)f(the)g(need)h(to)e(begin)h(every)g(file)g(with) f Ft(\\input)c(texinfo)p Fs(,)18 b(and)e(to)f(end)h(every)h(file)f (with)f Ft(@bye)p Fs(.)0 557 y(These)h(lines)g(are)h(added)g (automatically)e(by)i(TIM)g(as)f(needed.)28 b(This)16 b(allows)g(a)h(file)f(to)g(define)h(both)e(a)i(stand-alone)0 619 y(document,)11 b(and)g(to)g(be)g(included)f(as)h(a)h(section)e(in)h (some)g(larger)g(document.)0 749 y Fo(B.2.1)26 b(TIM)16 b(Domain-Independent)d(Format)62 854 y Fs(TIM)d(domain-independent)e (format)i(\()p Fp(DIF)5 b Fs(\))10 b(is)f(basically)g(Texinfo)g(with)f (four)i(new)g(built-in)d(commands.)12 b(They)d(are:)37 943 y Fr(\017)30 b Ft(@url)p Fs(,)11 b(a)h(style)e(command,)i(is)f (used)f(to)h(mark)h(World)e(Wide)h(Web)g(URL)h(forms)f(that)g(appear)g (in)g(the)g(text.)37 1019 y Fr(\017)30 b Ft(@picture)p Fs(,)12 b(a)g(command)g(with)f(arguments,)h(is)f(used)h(to)f(include)g (an)h(Encapsulated)e(Postscript)g(picture)i(into)e(the)90 1082 y(document.)i(It)f(takes)g(two)g(arguments,)h(the)f(name)h(of)g (the)f(file,)h(and)f(a)h(caption)e(for)i(the)f(picture.)h(The)f (caption)g(may)90 1144 y(be)g(omitted.)37 1220 y Fr(\017)30 b Ft(@ttitalic)p Fs(,)22 b(a)e(style)f(command,)k(is)c(used)h(to)f (indicate)g(that)g(this)g(span)g(should)g(be)h(rendered)g(in)f(an)h (italic)90 1283 y(typewriter)10 b(font,)h(if)g(available.)37 1359 y Fr(\017)30 b Ft(@timmacro)p Fs(,)9 b(a)f(command)h(with)f (arguments,)h(allows)e(the)h(user)h(to)f(define)g(domain-specific)f (markup)i(commands.)90 1421 y(The)i(two)g(arguments)f(are)i(the)f (macro)h(name,)g(and)f(the)g(macro's)h(replacement)f(in)g(vanilla)f (DIF.)0 1551 y Fo(B.2.2)26 b(Defining)14 b(Domain-Specific)f(Markup)i (Commands)g(With)f Fl(@)p Fo(timmacro)62 1656 y Fs([)e(TBD)f(])0 1800 y Fu(B.3)30 b(TIM)15 b(Tools)62 1905 y Fs(ILU)c(provides)f(a)i (program)f(called)g Ft(tim)g Fs(to)g(turn)g(TIM)g(files)g(into)f (either)h(PostScript,)f(text,)h(or)h(GNU)e(Info)i(files.)f(It)g(is)0 1968 y(invoked)f(as)62 2119 y Ft(tim)h Fp(output-format)k Ft([)c(-s)g Fp(flag)i Ft(])f([)f(-m)g Fp(macros)i Ft(])f([)f(-o)g Fp(output-file)h Ft(])f([)g Fp(input-file)p Ft(.tim)f(])0 2270 y Fs(where)g Fp(output-format)k Fs(must)9 b(be)i(either)f Fn(-p)g Fs(for)h(Postscript)d(output,)i Fn(-i)g Fs(for)g(GNU)g(Info)g (output,)f Fn(-d)i Fs(for)f(TIM)h(DIF)f(output,)0 2332 y Fn(-t)i Fs(for)f(plain)f(text)h(output,)f(and)h Fn(-x)g Fs(for)g(vanilla)f(GNU)h(Texinfo)f(output.)62 2421 y(In)i(addition,)f (the)h(switch)f Fn(-v)h Fs(can)g(be)g(specified)f(to)h(cause)g(the)g Ft(tim)g Fs(script)f(to)g(output)g(information)f(about)i(progress,)0 2483 y(the)i(switch)f Fn(-m)28 b Fp(macro-file-name)18 b Fs(may)c(be)g(specified)g(to)g(have)g Ft(tim)g Fs(pre-load)g(a)g (file)g(of)g Ft(@timmacro)g Fs(macros,)h(the)0 2545 y(switch)9 b Fn(-s)h Fs(may)h(be)f(specified)f(to)h(set)g(various)f(TexInfo)h (conditional)e(flags,)i(and)g(the)g(switch)f Fn(-o)23 b Fp(output-file-name)12 b Fs(may)0 2608 y(used)g(to)g(specify)g(the)g (output)e(file.)15 b(If)e(no)f(input)f(file)h(is)g(specified,)g Ft(tim)g Fs(reads)h(from)g(the)f(standard)f(input.)j(If)f(no)f(output)0 2670 y(file)f(is)g(specified,)f Ft(tim)i Fs(writes)e(to)h(the)g (standard)f(output.)p eop %%Page: 285 286 285 285 bop 0 -58 a Fs(Appendix)10 b(B:)h(The)g(TIM)h(Documentation)d (Language)989 b(285)62 183 y Ft(tim)11 b Fs(is)f(a)h(script)e(written)h (in)g(the)g(Python)g(script)f(language,)i(so)f(you)g(will)f(need)i(to)f (have)g Ft(Python)g Fs(installed)f(to)h(use)g(it.)0 246 y(See)j(the)f(ILU)g(installation)d(instructions)h(for)i(a)g(location)f (from)i(which)e Ft(Python)h Fs(can)g(be)h(FTP'ed.)i(The)d(script)f (uses)g(the)0 308 y(GNU)f(programs)h Ft(texindex)f Fs(and)g Ft(makeinfo)p Fs(,)g(along)g(with)g Ft(TeX)g Fs(and)h Ft(dvips)p Fs(,)f(so)g(it)g(is)g(necessary)h(to)f(have)g(all)h(four)f (of)0 370 y(those)g(programs)h(installed)f(to)g(use)h Ft(tim)p Fs(.)62 457 y(Another)e(program)h(called)f Ft(timdif2html)g Fs(can)h(be)g(used)f(to)h(turn)f(TIM)h(DIF)g(files)f(into)g(World)g (Wide)g(Web)h(HTML.)0 520 y(See)h(the)g(end)f(of)h(the)f Ft(timdif2html)g Fs(script)g(for)h(instructions)d(on)i(how)g(to)g(use)g (it.)h(It)g(in)f(turn)g(uses)g(the)g(script)g Ft(eps2gif)p Fs(,)0 582 y(which)i(requires)h(having)e Ft(ghostscript)h Fs(built)g(with)g(a)h(GIF)g(driver.)k(Both)12 b Ft(timdif2html)g Fs(and)h Ft(eps2gif)f Fs(are)i(Perl)0 644 y(scripts,)c(so)h(the)g(Perl) h(interpreter)e Ft(perl)h Fs(must)g(be)g(installed)f(to)h(use)f(them.)0 782 y Fu(B.4)30 b(Markup)15 b(Commands)h(used)f(with)g(ILU)62 886 y Fs(The)j(file)g(`)p Fp(ILUSRC)t Ft(/doc/ilu-macros.tim)p Fs(')f(defines)g(the)h(following)e(TIM)i(markup)g(commands)g(that)g (are)0 948 y(used)11 b(with)f(the)h(ILU)g(documentation:)37 1035 y Fr(\017)30 b Ft(@var)15 b Fs(is)h(used)f(to)g(indicate)g(a)h (regular)g(programming)f(language)g(variable.)24 b(The)16 b(term)g Ft(@metavar)f Fs(is)g(used)h(to)90 1098 y(mark)c (meta-variables.)62 1210 y(TIM)g(also)f(extends)f(texinfo)g(by)h (adding)f(the)h(following)e(markup:)37 1297 y Fr(\017)30 b Ft(@C)11 b Fs(is)g(used)g(to)f(mark)i(artifacts)f(of)g(the)g(C)h (language,)e(e.g.,)j Ft(@C{#define})p Fs(.)37 1372 y Fr(\017)30 b Ft(@C++)11 b Fs(is)g(used)f(to)h(mark)h(artifacts)f(of)g (the)g(C)p Ft(++)g Fs(language,)g(e.g.,)h Ft(@C++{#define})p Fs(.)37 1447 y Fr(\017)30 b Ft(@class)11 b Fs(is)f(used)h(to)g(mark)h (names)f(of)g(object)g(classes.)37 1522 y Fr(\017)30 b Ft(@command)16 b Fs(is)h(used)f(to)h(mark)h(user)e(input,)i(such)e (as)h(a)h(user-typed)e(shell)g(command,)j(when)e(it)f(occurs)h(in)f (the)90 1584 y(normal)10 b(flow)f(of)h(text.)h(The)e(term)i Ft(@userinput)e Fs(is)g(used)h(when)f(the)h(user)f(input)g(occurs)h (within)e(a)i Ft(@transcript)90 1647 y Fs(section.)37 1722 y Fr(\017)30 b Ft(@codeexample)13 b Fs(is)h(used)g(to)g(mark)h (code)g(that)e(is)h(excerpted)h(in)f(the)g(style)f(of)i(a)f(texinfo)g Ft(example)p Fs(.)20 b(The)15 b(term)90 1784 y Ft(@codeexample)g Fs(should)g(appear)i(on)f(a)h(line)f(by)g(itself,)h(before)g(the)f (text)g(of)g(the)g(code,)i(and)f(the)f(terms)g Ft(@end)90 1846 y(codeexample)10 b Fs(should)g(appear)h(on)g(a)h(line)e(by)h (itself,)g(at)g(the)g(end)g(of)g(the)g(text)g(of)g(the)g(code.)37 1921 y Fr(\017)30 b Ft(@cl)11 b Fs(is)g(used)f(to)h(mark)h(artifacts)f (of)g(the)g(Common)g(Lisp)g(language,)f(e.g.,)j Ft(@cl{defmacro})p Fs(.)37 1996 y Fr(\017)30 b Ft(@constant)11 b Fs(can)g(be)g(used)g(to)g (mark)g(constant)f(names)i(and)f(values)f(that)h(appear)g(in)g(the)g (text.)37 2071 y Fr(\017)30 b Ft(@exception)10 b Fs(is)h(used)g(to)g (mark)g(names)h(of)f(exceptions.)37 2146 y Fr(\017)30 b Ft(@fn)11 b Fs(is)g(used)f(to)h(mark)h(function)e(names)h(that)g (occur)g(in)g(the)g(text.)37 2221 y Fr(\017)30 b Ft(@interface)10 b Fs(is)h(used)g(to)g(mark)g(interface)h(names.)37 2296 y Fr(\017)30 b Ft(@isl)11 b Fs(is)g(used)f(to)h(mark)h(artifacts)f(of)g (the)g(ILU)g(ISL)g(language,)g(e.g.)h Ft(@isl{SIBLING})p Fs(.)37 2370 y Fr(\017)30 b Ft(@java)11 b Fs(is)g(used)f(to)h(mark)h (artifacts)f(of)g(the)g(Java)g(language,)g(e.g.)h Ft(@java{class)e (Foo;})p Fs(.)37 2445 y Fr(\017)30 b Ft(@kwd)11 b Fs(is)g(used)f(to)h (mark)h(keywords)e(that)g(occur)i(in)f(the)f(text.)37 2520 y Fr(\017)30 b Ft(@language)11 b Fs(is)f(used)h(to)g(mark)g(names) h(of)f(computer)g(or)g(human)g(languages.)37 2595 y Fr(\017)30 b Ft(@m3)11 b Fs(is)g(used)f(to)h(mark)h(artifacts)f(of)g(the)g (Modula-3)f(language,)h(e.g.)h Ft(@m3{INTERFACE)e(Foo;})p Fs(.)37 2670 y Fr(\017)30 b Ft(@macro)11 b Fs(is)f(used)h(to)g(mark)h (names)f(of)g(macros)h(that)f(occur)g(in)g(the)g(text.)p eop %%Page: 286 287 286 286 bop 0 -58 a Fs(Appendix)10 b(B:)h(The)g(TIM)h(Documentation)d (Language)989 b(286)37 183 y Fr(\017)30 b Ft(@message)11 b Fs(is)f(used)h(to)g(mark)g(in-line)g(text)f(that)h(is)f(a)i(message)f (a)h(program)f(may)h(write)f(to)f(its)h(output.)37 258 y Fr(\017)30 b Ft(@metavar)11 b Fs(is)f(used)h(to)g(mark)g (meta-variables.)37 333 y Fr(\017)30 b Ft(@method)11 b Fs(is)f(used)h(to)g(mark)h(method)e(names.)37 407 y Fr(\017)30 b Ft(@module)12 b Fs(is)g(used)g(to)g(denote)g(module)h (names)g(for)f(those)g(languages)g(which)f(support)h(them,)h(such)f(as) h(Common)90 470 y(Lisp)d(package)h(names,)h(or)g(Java)f(package)g (names.)37 544 y Fr(\017)30 b Ft(@parm)11 b Fs(is)g(used)f(to)h(mark)h (parameter)g(names.)37 619 y Fr(\017)30 b Ft(@picture)9 b Fs(is)g(used)h(to)f(include)g(a)h(file)f(containing)f(encapsulated)h (Postscript)f(of)i(a)g(diagram)g(or)g(picture.)g(It)g(should)90 681 y(appear)k(on)f(a)g(line,)h(followed)e(by)h(the)g(name)h(of)f(the)g (file)g(containing)f(the)h(picture,)g(followed)f(by)h(a)h(newline.)j (We)90 744 y(find)9 b(the)h(InterViews)f(tool)g Ft(idraw)h Fs(works)g(well)f(in)h(creating)f(diagrams)h(in)g(the)g(form)g(of)g (encapsulated)f(Postscript.)37 818 y Fr(\017)30 b Ft(@program)11 b Fs(is)f(used)h(to)g(mark)g(program)h(names)f(that)g(occur)g(in)g(the) g(text.)37 893 y Fr(\017)30 b Ft(@protocol)11 b Fs(is)f(used)h(to)g (mark)g(names)h(of)f(ILU)g(RPC)h(protocols.)37 968 y Fr(\017)30 b Ft(@symbol)11 b Fs(is)f(used)h(to)g(mark)h(names)f(of)g (symbols)f(in)h(Makefiles)g(or)g(object)g(files.)37 1043 y Fr(\017)30 b Ft(@system)11 b Fs(is)f(used)h(to)g(mark)h(system)e (names)i(that)e(occur)i(in)e(the)h(text.)37 1117 y Fr(\017)30 b Ft(@switch)11 b Fs(is)f(used)h(to)g(mark)h(command-line)f(switches)e (or)j(options)d(to)i(programs.)37 1192 y Fr(\017)30 b Ft(@transcript)13 b Fs(is)h(used)f(to)h(mark)h(an)f(example)g(that)f (is)h(a)g(dialog)f(between)h(a)g(user)g(and)g(a)g(program.)21 b(The)14 b(term)90 1254 y Ft(@transcript)h Fs(should)g(appear)i(on)f(a) g(line)g(by)g(itself,)h(before)f(the)g(text)g(of)g(the)g(dialog,)h(and) f(the)g(terms)g Ft(@end)90 1316 y(transcript)d Fs(should)e(appear)j(on) f(a)g(line)g(by)g(itself,)g(at)g(the)g(end)g(of)h(the)f(dialog.)j(The)d (term)h Ft(@userinput)f Fs(may)90 1379 y(be)e(used)g(within)f(a)h (transcript.)37 1453 y Fr(\017)30 b Ft(@transport)10 b Fs(is)h(used)g(to)g(mark)g(the)g(names)h(of)f(ILU)g(data)g(transport) f(systems.)37 1528 y Fr(\017)30 b Ft(@type)11 b Fs(is)g(used)f(to)h (mark)h(the)f(names)g(of)g(programming)g(language)g(types.)37 1603 y Fr(\017)30 b Ft(@url)11 b Fs(is)g(used)f(to)h(mark)h(World)e (Wide)h(Web)g(urls.)37 1678 y Fr(\017)30 b Ft(@userinput)10 b Fs(is)h(used)g(to)g(mark)g(text)g(typed)f(by)h(the)g(user)g(in)g(a)g (transcript)f(section.)p eop %%Page: 287 288 287 287 bop 0 -58 a Fs(Appendix)10 b(C:)h(The)g(ILU)g(Common)h(Lisp)e (Portable)h(DEFSYSTEM)g(Module)614 b(287)0 114 y Fq(Appendix)14 b(C)36 b(The)15 b(ILU)f(Common)g(Lisp)h(Portable)f(DEFSYSTEM)0 183 y(Module)62 336 y Fs(The)k(ILU)g(Common)h(Lisp)e(support)f(uses)i (files)f(called)h(`sysdcl's)f(to)h(describe)f(the)h(generated)g(lisp)f (files)h(for)g(a)0 399 y(particular)e(interface.)29 b(A)17 b Fp(sysdcl)j Fs(is)d(similar)f(to)h(a)g(UNIX)g(`Makefile',)i(in)d (that)h(it)f(describes)g(the)h(dependencies)f(of)0 461 y(the)d(files)g(of)h(a)g(module)f(on)h(each)g(other.)k(As)13 b(part)h(of)g(ILU,)f(we)h(supply)e(an)i(implementation)e(of)i(a)g (sysdcl)e(interpreter,)0 523 y(implemented)i(in)f(the)h Ft(DEFSYSTEM)f Fs(package)i(\(which)e(is)h(also)f(nicknamed)h Ft(PDEFSYS)p Fs(\).)20 b(The)14 b(notion)e(is)i(that)f(to)h(load)0 585 y(a)i(module,)g(the)g(user)f(loads)g(the)g(sysdcl)f(which)h (describes)g(it,)i(then)e(uses)g(the)g Ft(DEFSYSTEM)g Fs(commands)g(to)h(compile)0 648 y(and)c(load)g(the)f(files)h(of)g (that)g(module.)i(The)e(rest)g(of)g(this)f(section)g(describes)g(this)g (system)h(in)g(more)g(detail.)i(All)d(symbols)0 710 y(described)g(here) g(are)h(in)f(the)g Ft(pdefsys)f Fs(package)i(unless)e(otherwise)g (specified.)1739 832 y(Function)-1902 b Fo (pdefsys:set-system-source-file)22 b Fk(\()p Fp(NAME)11 b Ft(string)p Fk(\))g(\()p Fp(PATHNAME)g Ft(pathname)p Fk(\))120 894 y Fs(Informs)j(the)f(defsystem)g(utility)e(that)i(the)g (definition)f(of)h(the)g(system)g(name)h(can)g(be)g(found)f(by)g (loading)120 956 y(the)e(file)g(pathname.)1739 1078 y(Function)-1902 b Fo(pdefsys:load-system-def)21 b Fk(\()p Fp(NAME)11 b Fk(\()p Ft(or)g(symbol)g(string)p Fk(\))g Fs(&optional)f(\()p Fp(RELOAD)208 1140 y Ft(boolean)24 b(t)p Fs(\))11 b Ft(=>)g(boolean)120 1202 y Fs(If)16 b(there)f(is)g(a)h(system)e(named)i(name)g(and)f (reload)g(is)g(false)g(\(the)h(default\),)g(does)f(nothing.)22 b(Otherwise,)120 1265 y(loads)14 b(the)i(system)e(defintion)g(from)i(a) g(file.)24 b(If)15 b Ft(pdefsys:set-system-source-file)e Fs(has)i(been)120 1327 y(used)f(to)h(give)f(an)h(explicit)e(source)i (file)f(for)h(the)g(system)f(defintion,)h(that)f(file)g(is)h(used.)22 b(Otherwise)13 b(the)120 1389 y(file)h(`)p Fp(NAME)p Ft(-sysdcl.lisp)p Fs(')f(is)h(loaded)f(from)i(the)f(directory)f (specified)h(in)f Ft(pdefsys:*sysdcl-)120 1452 y(pathname-defaults*)d Fs(if)h(such)g(a)g(file)h(exists.)e(Returns)h(false)g(if)g(the)g (system)g(was)g(not)g(loaded)g(and)g(is)120 1514 y(not)f(already)i (defined,)f(true)g(otherwise.)1744 1636 y(Variable)-1901 b Fo(pdefsys:*sysdcl-pathname-default)o(s*)120 1698 y Fs(Specifies)11 b(the)g(location)g(for)g(system)g(declaration)g(files.) g Ft(*sysdcl-pathname-defaults*)f Fs(is)h(a)g(list)120 1760 y(of)k(pathnames;)g(each)g(location)e(is)h(searched)h(for)f(the)g (declaration)g(file.)21 b(The)15 b(default)e(value)h(is)g Ft(\(list)120 1822 y(#P"/import/commonlisp-library/sysdcl/")o(\))p Fs(.)1782 1944 y(Macro)-1900 b Fo(pdefsys:defsystem)22 b Fk(\()p Fp(NAME)12 b Ft(string)p Fk(\))f(\()p Fp(SYSTEM-OPTIONS)g Ft(plist)p Fk(\))g Fs(&rest)208 2006 y(\()p Fp(MODULE-DESCRIPTIONS)g Ft(module-list)p Fs(\))120 2069 y(The)k(name)g(of)g(the)g(system)f (\(which)g(is)h(interned)f(in)g(the)h(current)g(package\),)h(is)e(used) h(by)f(defsystem)h(to)120 2131 y(allow)10 b(dependencies)h(between)f (multiple)g(systems.)120 2221 y(The)h Fp(SYSTEM-OPTIONS)j Fs(is)d(a)g(plist)f(which)g(may)i(contain)e(each)i(of)f(the)g (following)e(keywords:)157 2312 y Fr(\017)30 b Ft(:default-pathname)10 b Fs(\()p Ft(\(or)h(string)g(pathname\))p Fs(\))210 2390 y(The)e(default)f(place)g(in)h(which)f(to)g(find)g(files;)g(this)g (value)g(defaults)g(to)g(the)h(null)e(string.)j(This)d(argument)210 2452 y(is)k(evaluated)f(\(unlike)g(most)h(of)g(the)g(others\).)157 2530 y Fr(\017)30 b Ft(:default-binary-pathname)9 b Fs(\()p Ft(\(or)i(string)g(pathname\))p Fs(\))210 2608 y(The)h(default)f (location)f(in)h(which)h(to)f(place)h(and)f(look)g(for)h(binaries.)g (This)f(defaults)g(to)g(the)h(value)f(of)210 2670 y(the)g (:default-pathname)f(option.)g(This)g(argument)h(is)g(evaluated)f (\(unlike)g(most)h(of)g(the)g(others\).)p eop %%Page: 288 289 288 288 bop 0 -58 a Fs(Appendix)10 b(C:)h(The)g(ILU)g(Common)h(Lisp)e (Portable)h(DEFSYSTEM)g(Module)614 b(288)157 183 y Fr(\017)30 b Ft(:default-package)10 b Fs(\()p Ft(\(or)h(symbol)g(package\))p Fs(\))210 264 y(The)d(default)g(package)g(to)g(load/compile)f(modules)h (in;)g(this)f(value)h(defaults)g(to)f(the)i(current)f(package.)157 345 y Fr(\017)30 b Ft(:default-optimizations)9 b Fs(\()p Ft(list)p Fs(\))210 425 y(List)k(of)h(default)g(compiler)f (optimizations)f(settings)g(to)i(use)g(when)f(compiling)g(modules.)19 b(If)c Ft(nil)p Fs(,)210 488 y(optimization)9 b(levels)i(are)g(not)g (changed.)157 568 y Fr(\017)30 b Ft(:needed-systems)10 b Fs(\()p Ft(list)p Fs(\))210 649 y(A)h(list)f(of)h(subsystems;)e(this) h(value)h(defaults)g(to)f Ft(nil)p Fs(.)157 730 y Fr(\017)30 b Ft(:load-before-compile)9 b Fs(\()p Ft(\(or)j(boolean)e(list\))p Fs(\))210 811 y(A)16 b(list)e(of)i(subsystems)e(needed)i(for)g (compilation;)g(this)f(value)g(defaults)g(to)h Ft(nil)p Fs(.)25 b(A)16 b(value)f(of)h Ft(T)210 873 y Fs(means)11 b(all)g(needed)g(subsystems.)120 997 y(The)e(module-descriptions)e(is)i (a)h(list)e(of)i(modules)f(which)g(make)h(up)f(a)h(system.)g(A)g (module)f(is)g(a)h(list)e(whose)120 1059 y(car)k(is)f(the)g(module)g (name)h(and)f(whose)g(cdr)g(is)g(a)h(list)e(of)h(keywords)g(and)g (values.)g(The)g(module)g(keywords)120 1122 y(may)h(contain)e(each)h (of)h(the)f(following:)157 1215 y Fr(\017)30 b Ft(:load-before-compile) 9 b Fs(\()p Ft(list)p Fs(\))210 1295 y(The)g(load-before-compile)f (keyword)g(specifies)g(a)h(list)e(of)i(modules)f(which)g(will)g(cause)h (this)f(module)210 1358 y(to)13 b(be)g(recompiled.)j(If)e(any)f(of)g (listed)e(modules)i(is)f(newer)h(then)g(the)g(current)f(module;)i(the)e (current)210 1420 y(module)17 b(will)f(be)h(recompiled.)29 b(If)18 b(the)f(current)g(module)g(is)f(recompiled)h(the)g(list)f(of)h (recompile)210 1482 y(dependencies)10 b(will)g(be)i(loaded)e(first.)210 1563 y(This)f(is)g(also)h(a)g(recursive)f(recompilation.)h(If)h(foo)e (dependends)g(on)g(bar)i(and)e(bar)h(is)g(out)f(of)h(date)g(then)210 1625 y(bar)h(will)f(be)i(recompiled)f(before)g(foo)g(is)g(recompiled.) 210 1706 y(A)k(value)g(of)h Ft(T)f Fs(means)h(all)f(modules)f(that)h (occur)g(earlier)h(in)f(the)g(system)f(definition.)22 b(This)15 b(value)210 1768 y(defaults)10 b(to)h Ft(nil)p Fs(.)157 1849 y Fr(\017)30 b Ft(:load-after)10 b Fs(\()p Ft(list)p Fs(\))210 1930 y(The)17 b(load-after)f(keyword)g(specifies)g (a)h(list)e(of)i(modules)f(which)g(should)f(be)i(loaded)f(before)g(the) 210 1992 y(current)10 b(module)g(is)g(loaded.)g(This)g(option)e(is)i (useful)g(only)f(for)h(modules)g(during)f(compilation)g(since)210 2054 y(the)15 b(load)f(order)h(will)f(normally)h(be)g(satisfied)e (during)h(a)i(load-system.)21 b(A)15 b(value)g(of)g Ft(T)g Fs(means)h(all)210 2116 y(modules)10 b(that)h(occur)g(earlier)h(in)e (the)h(system)g(definition.)e(This)i(value)f(defaults)h(to)f Ft(nil)p Fs(.)157 2197 y Fr(\017)30 b Ft(:pathname)11 b Fs(\()p Ft(\(or)g(string)g(pathname\))p Fs(\))210 2278 y(The)k(pathname)f(keyword)g(specifies)g(a)i(pathname)e(to)h(find)f (the)h(current)f(module.)22 b(Normally)14 b(the)210 2340 y(pathname)c(is)g(the)g(result)g(of)g(the)g(concatenation)f(of)i(the)f (default)g(pathname)g(for)g(the)g(system)g(and)g(the)210 2402 y(module)k(name.)21 b(This)13 b(value)g(defaults)h(to)f Ft(nil)p Fs(.)21 b(This)13 b(argument)h(is)f(evaluated,)i(unlike)e(the) h(other)210 2465 y(module)d(options.)157 2545 y Fr(\017)30 b Ft(:binary-pathname)12 b Fs(\()p Ft(\(or)g(string)e(pathname\))p Fs(\))j(Specifies)h(the)f(pathname)h(for)g(the)f(binary)210 2608 y(of)g(the)g(current)h(module.)j(Defaults)c(to)g(the)g(pathname)g (with)g(the)g(same)h(directory)e(&)i(name)g(as)f(the)210 2670 y(module)e(source,)g(with)f(an)i(appropriate)e(file)h(type.)p eop %%Page: 289 290 289 289 bop 0 -58 a Fs(Appendix)10 b(C:)h(The)g(ILU)g(Common)h(Lisp)e (Portable)h(DEFSYSTEM)g(Module)614 b(289)157 183 y Fr(\017)30 b Ft(:package)9 b Fs(\()p Ft(\(or)j(symbol)e(package\))p Fs(\))g(The)g(package)g(keyword)f(specifies)g(a)h(package)g(in)g(which) 210 246 y(to)i(load/compile)f(the)h(current)h(module.)i(Normally)c(the) i(package)f(is)g(the)g(default)g(package)h(for)f(the)210 308 y(system.)f(This)f(value)h(defaults)f(to)h Ft(nil)p Fs(.)157 385 y Fr(\017)30 b Ft(:compile-satisfies-load)8 b Fs(\()p Ft(boolean)p Fs(\))i(The)h(compile-satisfies-load)c(keyword)j (specifies)210 447 y(that)i(compiling)f(the)i(current)f(module)h(will)e (satisfy)h(a)h(load)f(\(and)h(hence)g(the)f(current)h(module)f(will)210 509 y(not)h(be)h(loaded)f(during)g(a)h(compile\).)19 b(This)13 b(option)f(is)h(useful)g(only)g(for)h(files)f(containing)f (macros.)210 571 y(This)e(value)h(defaults)f(to)h(false.)157 648 y Fr(\017)30 b Ft(:language)25 b Fs(\()p Ft(keyword)p Fs(\))g(The)g(language)g(the)g(source)g(is)g(written)f(in.)53 b(See)27 b(the)e(variable)210 710 y Ft(pdefsys:*language-descriptions*) 8 b Fs(for)k(further)f(info.)g(The)g(default)f(is)h(:LISP.)157 787 y Fr(\017)30 b Ft(:optimizations)11 b Fs(\()p Ft(list)p Fs(\))h(List)f(of)i(compiler)f(optimization)e(settings)g(to)i(use)g (when)g(compiling)210 850 y(the)g(module.)g(A)g(useful)f(value)h(for)g (lisp)e(might)h(be)h(\(\(SPEED)g(3\))g(\(SAFETY)g(0\)\);)g(for)g(C)g (\()p Ft(")p Fs(-O)p Ft(")p Fs(\).)i(If)210 912 y(not)9 b(present,)h(the)g(system's)f(default-optimizations)e(are)j(used.)h(If) f(they)f(too)g(are)i(absent,)f(the)f(current)210 974 y(settings)g(are)j(used.)157 1051 y Fr(\017)30 b Ft(:libraries)13 b Fs(\()p Ft(list)p Fs(\))g(List)f(of)i(object)e(libraries)h(to)g(load) g(when)g(the)g(module)g(is)g(loaded.)k(This)c(is)210 1113 y(only)d(useful)h(for)g(languages)f(like)h(C.)157 1190 y Fr(\017)30 b Ft(:features)13 b Fs(\()p Ft(list)p Fs(\))h(Run-time)f(conditionializatio)o(n,)f(similar)h(to)g(#)p Ft(+)p Fs(.)19 b(The)14 b(module)f(is)g(used)g(iff)210 1252 y(the)18 b(features)g(is)f Ft(")p Fs(true)p Ft(")h Fs(in)g(the)f(same)i(way)f(that)f(#)p Ft(+)h Fs(interpretes)f(the)h (features.)32 b(Additionally,)210 1315 y(features)12 b(may)g(be)g Ft(T)g Fs(\(the)g(default\))g(which)f(is)g(always)h(true,) g(or)g(a)g(list)f(of)h(features)g(which)f(is)g(true)h(iff)210 1377 y(at)f(least)g(one)g(of)g(the)g(features)g(matches.)157 1454 y Fr(\017)30 b Ft(:eval-after)9 b Fs(\()p Ft(form)p Fs(\))h(If)g(present,)g(a)g(form)h(that)e(will)g(be)h(evaluated)f (after)h(the)g(module)f(is)g(loaded.)210 1516 y(It)14 b(should)e(be)i(noted)g(that)f(this)g(is)g(evaluated)h(each)g(time)g (the)g(module)f(is)h(loaded,)g(whether)g(or)g(not)210 1578 y(the)d(coresponding)e(-file-)i(is)g(loaded.)157 1655 y Fr(\017)30 b Ft(:binary-only)13 b Fs(\()p Ft(boolean)p Fs(\))h(If)h(true,)g(declares)f(that)g(there)g(is)g(no)g(source)g(file) g(associated)f(with)210 1717 y(the)e(module.)g(No)g(attempt)g(will)f (be)h(name)h(to)f(compile)f(it.)h(Defaults)g(to)f(false.)1744 1834 y(Variable)-1901 b Fo(pdefsys:*language-descriptions*)120 1896 y Fs(An)16 b(alist)e(describing)h(how)g(files)g(written)g(in)g (different)h(languages)e(are)j(compiled)e(and)g(loaded.)25 b(Each)120 1958 y(entry)17 b(in)g(the)g(list)f(is)h(of)g(the)g(form)h (\(language-name)f(source-file-type)g(binary-file-type)f(compile-fn)120 2020 y(load-fn\).)26 b(The)16 b(language-name)g(is)g(the)g(\(keyword\)) g(name)h(of)f(the)g(language.)26 b(Source-file-type)15 b(and)120 2083 y(binary-file-type)e(are)i(lists)e(of)i(strings;)f(they) g(are)i(the)e(file-types)f(for)i(source)f(and)h(binary)f(files)g(for)g (the)120 2145 y(language.)21 b(The)14 b(compile-fn)g(is)g(symbol)g (that)f(will)h(be)g(called)g(with)g(three)g(arguments)g(to)g(compile)g (the)120 2207 y(source)f(file;)h(the)f(pathname)g(of)g(the)g(source)g (file,)h(the)f(pathname)g(of)h(the)f(binary)f(output)g(file,)i(and)f(a) g(list)120 2269 y(of)j(the)g(optimizations)e(declared)j(for)f(the)g (module.)26 b(Load-fn)16 b(is)g(a)h(symbol)e(that)h(will)f(be)h(called) g(with)120 2332 y(two)c(required)g(argument)g(to)g(load)g(the)g(binary) g(file:)h(the)g(pathname)f(of)g(the)h(binary,)f(and)g(a)h(list)e(of)i (object)120 2394 y(library)e(files)f(to)h(use.)120 2483 y(The)17 b(initial)e(value)i(of)g(*language-descriptions)o(*)d (contains)i(a)h(description)e(of)i Ft(:lisp)p Fs(,)i Ft(:k&r-c)d Fs(and)120 2545 y Ft(:ansi-c)11 b Fs(languages.)f(The)h (description)f(of)h Ft(:lisp)g Fs(uses)f(the)h(second)g(argument)g(to)f (the)h(compile-fn)g(as)120 2608 y(a)h(list)e(of)i(compiler)f (optimization)f(settings.)h(The)g(description)f(of)h Ft(:k&r-c)h Fs(and)f Ft(:ansi-c)g Fs(uses)g(the)g(list)120 2670 y(as)g(a)h(set)f(of)g(additional)e(arguments)i(to)f(pass)h(to)g (the)g(C)g(compiler.)p eop %%Page: 290 291 290 290 bop 0 -58 a Fs(Appendix)10 b(C:)h(The)g(ILU)g(Common)h(Lisp)e (Portable)h(DEFSYSTEM)g(Module)614 b(290)1782 183 y(Macro)-1900 b Fo(pdefsys:undefsystem)22 b Fk(\()p Fp(NAME)11 b Fk(\()p Ft(or)g(symbol)g(string)p Fk(\)\))120 246 y Fs(This)f(macro)i(removes)f (the)g(named)h(system)f(description)e(from)j(the)f(list)f(of)h(all)g (systems.)1739 355 y(Function)-1902 b Fo(pdefsys:load-system)22 b Fk(\()p Fp(NAME)11 b Fk(\()p Ft(or)h(symbol)e(string)p Fk(\)\))h Fs(&key)h(\()p Fp(RELOAD)f Ft(boolean)208 417 y(nil)p Fs(\))g(\()p Fp(RECURSE)h Ft(boolean)24 b(nil)p Fs(\))11 b(\()p Fp(TRACE)h Ft(boolean)24 b(nil)p Fs(\))11 b(\()p Fp(SOURCE-IF-NEWER)208 479 y Ft(boolean)24 b(nil)p Fs(\))120 542 y(This)g(function)f(loads)h(the)h(modules)f(of)g(the)h (system)f(with)g(the)g(specified)g(name)i(and)e(is)g(called)120 604 y(recursively)15 b(for)h(all)f(required)h(systems.)24 b(While)15 b(the)h(system)f(is)g(being)g(loaded,)i(the)e(special)h (variable)120 666 y Ft(pdefsys:*current-system*)9 b Fs(is)i(bound)f(to) h(the)f(name)i(of)f(the)g(system.)120 753 y(The)g(keyword)f(args)i(act) f(as)g(follows:)157 841 y Fr(\017)30 b Fp(RELOAD)210 914 y Fs(The)10 b(reload)f(keyword,)h(if)g(true,)g(specifies)f(that)g (a)i(full)e(reload)g(of)h(all)g(system)f(modules)g(and)h(required)210 976 y(systems,)h(regardless)f(of)i(need.)f(This)f(value)h(defaults)f (to)h(false.)157 1050 y Fr(\017)30 b Fp(RECURSE)210 1123 y Fs(If)18 b(recurse)g(is)f(true,)i(required)e(systems)f(are)j (reloaded)e(if)g(the)g(currently)g(loaded)g(version)f(is)h(not)210 1185 y(up-to-date)h(or)g(if)h(the)f(reload)g(option)f(is)h(true.)34 b(If)18 b(recurse)h(is)f(false)h(\(the)f(default\),)j(a)e(required)210 1247 y(subsystem)10 b(is)g(not)h(loaded)f(if)i(there)f(is)f(already)i (a)f(version)f(loaded.)157 1321 y Fr(\017)30 b Fp(TRACE)210 1394 y Fs(If)18 b(true,)i(no)e(module)f(or)h(subsystem)f(is)g(actually) g(loaded.)32 b(Instead)17 b(a)h(message)h(is)e(printed)g(out)210 1456 y(informing)10 b(you)h(of)g(what)g(would)f(have)h(been)g(loaded.)g (The)g(default)g(value)f(is)h(false.)157 1530 y Fr(\017)30 b Fp(SOURCE-IF-NEWER)210 1603 y Fs(If)15 b(true)f(and)h(a)g(module's)e (source)i(is)f(newer)h(than)f(its)f(binary,)i(or)g(the)f(binary)g(does) g(not)g(exist,)g(the)210 1665 y(source)f(will)g(be)g(loaded.)18 b(In)13 b(all)g(other)g(cases,)i(the)e(binary)g(will)f(be)i(loaded.)j (The)d(default)f(value)g(is)210 1728 y(false.)1739 1840 y(Function)-1902 b Fo(pdefsys:compile-system)23 b Fk(\()p Fp(NAME)11 b Fk(\()p Ft(or)g(string)g(symbol)p Fk(\)\))g Fs(&key)g(\()p Fp(RECOMPILE)208 1902 y Ft(boolean)24 b(nil)p Fs(\))11 b(\()p Fp(RELOAD)g Ft(boolean)24 b(nil)p Fs(\))11 b(\()p Fp(PROPAGATE)g Ft(boolean)25 b(nil)p Fs(\))11 b(\()p Fp(TRACE)208 1964 y Ft(boolean)24 b(nil)p Fs(\))11 b(\()p Fp(INCLUDE-COMPONENTS)g Ft(boolean)24 b(nil)p Fs(\))120 2027 y(This)19 b(function)f(compiles)i(the)f(modules) g(of)h(the)g(system)f(with)g(the)h(specified)f(name)h(and)g(is)f (called)120 2089 y(recursively)12 b(for)h(all)f(required)g(systems.)j (While)d(the)g(system)h(is)f(being)f(compiled,)i(the)g(special)f (variable)120 2151 y Ft(pdefsys:*current-system*)d Fs(is)i(bound)f(to)h (the)f(name)i(of)f(the)g(system.)120 2238 y(The)g(keyword)f(args)i(act) f(as)g(follows:)157 2325 y Fr(\017)30 b Fp(RECOMPILE)210 2399 y Fs(The)8 b(recompile)f(keyword,)h(if)g(true,)g(specifies)f(that) g(all)h(modules)e(should)h(be)g(recompiled,)i(regardless)210 2461 y(of)i(need.)h(This)e(value)h(defaults)f(to)h(false.)157 2534 y Fr(\017)30 b Fp(INCLUDE-COMPONENTS)210 2608 y Fs(The)14 b(include-components)d(keyword,)j(if)g(true,)g(specifies)f (that)g(compile-system)g(should)f(load)i(all)210 2670 y(required)d(systems.)f(This)h(value)f(defaults)h(to)f(true.)p eop %%Page: 291 292 291 291 bop 0 -58 a Fs(Appendix)10 b(C:)h(The)g(ILU)g(Common)h(Lisp)e (Portable)h(DEFSYSTEM)g(Module)614 b(291)157 183 y Fr(\017)30 b Fp(RELOAD)210 260 y Fs(The)10 b(reload)f(keyword,)h(if)g(true,)g (specifies)f(that)g(a)i(full)e(reload)g(of)h(all)g(system)f(modules)g (and)h(required)210 322 y(systems,)h(regardless)f(of)i(need.)f(This)f (value)h(defaults)f(to)h(false.)157 398 y Fr(\017)30 b Fp(PROPAGATE)210 475 y Fs(If)14 b(true,)h(the)f(compile)f(propagates) g(to)g(all)h(subsystems)e(\(those)h(required)h(to)f(load)g(and)h(to)g (compile)210 537 y(this)c(system\).)h(The)g(default)g(is)f(false.)157 613 y Fr(\017)30 b Fp(TRACE)210 690 y Fs(If)15 b(true,)i(no)d(module)h (of)g(subsystem)e(is)i(actually)f(compiled.)22 b(Instead)15 b(a)g(message)g(is)g(printed)f(out)210 752 y(informing)c(you)h(of)g (what)g(would)f(have)h(been)g(done.)g(The)g(default)g(value)g(is)f (false.)1739 867 y(Function)-1902 b Fo(pdefsys:show-system)22 b Fk(\()p Fp(NAME)12 b Fk(\()p Ft(or)f(string)g(symbol)p Fk(\)\))120 930 y Fs(This)f(function)g(outputs)f(a)j(formatted)f (description)e(of)i(the)g(system)g(with)f(the)h(specified)g Fp(NAME)p Fs(.)0 1073 y Fu(C.1)30 b(Pathname)14 b(Support)62 1179 y Fs(Some)i(lisps)d(don't)h(yet)g(support)f(the)i(structured)e (directories)h(specified)g(in)g(CLtL2)g(\(p.)22 b(620\).)g(To)14 b(support)f(those)0 1241 y(lisps,)d Ft(pdefsys)h Fs(contains)f(two)g (functions)g(which)g(do)h(support)f(some)h(of)g(that)g(functionality.) 1739 1358 y(Function)-1902 b Fo(pdefsys:make-pathname)21 b Fs(&key)11 b Fp(host)f(device)h(directory)g(name)h(type)e(version)h (defaults)1739 1449 y Fs(Function)-1902 b Fo (pdefsys:pathname-directory)20 b Fp(pathname)62 1539 y Fs(These)14 b(functions)e(shadow)g(the)i(functions)e(in)h(the)h Ft(common-lisp)e Fs(package,)j(and)f(support)e(the)h(subdirectory)f (list)0 1601 y(syntax)e(described)h(as)g(follows)f(\(From)i(the)e (X3J13)g(PATHNAME-SUBDIRECTORY-LIST)i(proposal\):)120 1690 y(It)17 b(is)g(impossible)e(to)h(write)h(portable)f(code)h(that)g (can)g(produce)g(a)g(pathname)g(in)g(a)g(subdirectory)f(of)h(a)120 1740 y(hierarchical)11 b(file)g(system.)g(This)f(defeats)h(much)g(of)h (the)f(purpose)f(of)h(the)g(pathname)g(abstraction.)120 1816 y(According)d(to)h(CLtL,)g(only)f(a)i(string)e(is)g(a)i(portable)e (value)h(for)g(the)g(directory)g(component)f(of)h(a)h(pathname.)120 1866 y(Thus)f(in)h(order)g(to)g(denote)g(a)g(subdirectory,)f(the)h(use) g(of)g(punctuation)e(characters)j(\(such)f(as)g(dots,)g(slashes,)120 1916 y(or)k(backslashes\))g(would)f(be)h(necessary.)21 b(The)14 b(very)h(fact)f(that)g(such)g(syntax)f(varies)h(from)h(host)e (to)h(host)120 1966 y(means)d(that)f(although)f(the)h(representation)f (might)h(be)h Ft(")p Fs(portable)p Ft(")p Fs(,)f(the)g(code)g(using)g (that)g(representation)120 2016 y(is)h(not)f(portable.)120 2092 y(This)h(problem)h(is)g(even)g(worse)g(for)g(programs)g(running)f (on)h(machines)g(on)f(a)i(network)e(that)h(can)g(retrieve)120 2142 y(files)c(from)i(multiple)e(hosts,)g(each)h(using)f(a)h(different) g(OS)g(and)g(thus)f(different)h(subdirectory)e(punctuation.)120 2218 y(Proposal:)120 2295 y(Allow)k(the)h(value)f(of)h(a)h(pathname's)f (directory)f(component)g(to)h(be)g(a)g(list.)h(The)f(car)h(of)f(the)g (list)f(is)g(one)h(of)120 2345 y(the)g(symbols)f(:ABSOLUTE)h(or)g (:RELATIVE.)g(Each)g(remaining)g(element)h(of)f(the)g(list)g(is)f(a)i (string)e(or)i(a)120 2394 y(symbol)d(\(see)h(below\).)f(Each)h(string)e (names)i(a)g(single)f(level)g(of)h(directory)f(structure.)g(The)h (strings)e(should)120 2444 y(contain)h(only)g(the)h(directory)g(names)g (themselves)g(--)g(no)g(punctuation)e(characters.)120 2521 y(A)18 b(list)f(whose)g(car)h(is)g(the)f(symbol)g(:ABSOLUTE)g (represents)h(a)g(directory)f(path)h(starting)e(from)i(the)120 2570 y(root)c(directory.)21 b(The)14 b(list)f(\(:ABSOLUTE\))h (represents)g(the)h(root)e(directory.)21 b(The)15 b(list)e(\(:ABSOLUTE) 120 2620 y Ft(")p Fs(foo)p Ft(")i(")p Fs(bar)p Ft(")g(")p Fs(baz)p Ft(")p Fs(\))h(represents)e(the)h(directory)g(called)g Ft(")p Fs(/foo/bar/baz)p Ft(")f Fs(in)h(Unix)f([except)h(possibly)120 2670 y(for)c(alphabetic)g(case)g(--)h(that)e(is)h(the)g(subject)f(of)h (a)h(separate)f(issue].)p eop %%Page: 292 293 292 292 bop 0 -58 a Fs(Appendix)10 b(C:)h(The)g(ILU)g(Common)h(Lisp)e (Portable)h(DEFSYSTEM)g(Module)614 b(292)120 183 y(A)12 b(list)e(whose)h(car)h(is)g(the)f(symbol)g(:RELATIVE)f(represents)h(a)h (directory)f(path)g(starting)g(from)h(a)g(default)120 233 y(directory.)22 b(The)14 b(list)g(\(:RELATIVE\))g(has)h(the)f(same) h(meaning)g(as)g Ft(nil)f Fs(and)h(hence)g(is)f(not)g(used.)22 b(The)120 283 y(list)12 b(\(:RELATIVE)h Ft(")p Fs(foo)p Ft(")f(")p Fs(bar)p Ft(")p Fs(\))i(represents)f(the)g(directory)f (named)i Ft(")p Fs(bar)p Ft(")f Fs(in)g(the)g(directory)g(named)120 333 y Ft(")p Fs(foo)p Ft(")e Fs(in)f(the)h(default)g(directory.)62 445 y(Here's)h(an)g(sample)g(sysdcl)e(file)i(that)f(shows)f(how)h(the)g (DEFSYSTEM)i(functions)d(and)h(these)g(pathname)h(functions)0 507 y(work)f(together.)170 594 y Ft(\(in-package)24 b("DEFSYSTEM"\))170 694 y(\(defvar)g(*my-system-default-directory*)220 744 y(\(make-pathname)f(:directory)593 793 y('\(:absolute)h("import")g ("my-system")g("release-1.0"\)\)\))170 893 y(\(set-system-source-file)f (:mysys-test)220 943 y(\(make-pathname)g(:directory)h('\(:relative)g ("test"\))593 993 y(:name)h("test-sysdcl")593 1043 y(:defaults)f (*my-system-default-directory*\)\))170 1142 y(\(defsystem)g(:my-system) g(\(:default-pathname)f(*my-system-default-directory*)743 1192 y(:default-package)g("USER")743 1242 y(:load-before-compile)g (\(\))743 1292 y(:needed-systems)g(\(\)\))220 1341 y(...\))p eop %%Page: 293 294 293 293 bop 0 -58 a Fs(Appendix)10 b(D:)g(The)h(ILU)h(Common)f(Lisp)f (Lightweight)f(Process)i(System)675 b(293)0 112 y Fq(Appendix)14 b(D)36 b(The)15 b(ILU)f(Common)g(Lisp)h(Lightweight)f(Process)0 183 y(System)0 435 y Fu(D.1)30 b(Introduction)62 546 y Fs(Although)11 b(it)h(is)g(not)h(required)f(by)g(the)h (specification,)f(most)g(Common)h(Lisp)f(implementations)f(include)h(a) h(facility)0 609 y(for)21 b(multiple,)h(independent)d Fp(threads)i Fs(of)g(control)e(\(often)h(called)h Fp(lightweight)c (processes)r Fs(\))j(within)f(a)i(single)e(Lisp)0 671 y(environment.)14 b(Unfortunately,)d(this)g(facility)g(is)h(not)f (standardized)g(across)h(the)g(various)f(implementations.)i(Although)0 733 y(the)8 b(capabilities)f(provided)g(are)i(very)f(similar)g(across)g (implementations,)g(the)g(details)f(of)i(lightweight)c(processes)j(and) g(the)0 796 y(interface)j(to)f(them)h(differ)g(significantly.)e(This)g (situation)g(makes)i(it)f(difficult)f(to)i(write)f(programs)g(that)g (use)h(lightweight)0 858 y(processes)g(and)g(yet)f(are)i(portable)f (across)g(Common)g(Lisp)f(implementations.)62 953 y(Common)j(Lisp)f (ILU)h(does)f(not)g(requires)h(lightweight)d(processes)i(in)g(order)h (to)f(function,)h(but)f(they)g(are)h(useful.)j(In)0 1015 y(particular,)e(servers)g(typically)e(make)j(heavy)f(use)f(of)h (lightweight)e(process)h(facilities.)19 b(The)13 b(purpose)g(of)h(the)g (ILU)g(CL)0 1078 y(Process)d(Interface)i(is)d(to)h(provide)g(a)h (standardized,)e(portable)h(interface)h(to)e(lightweight)f(processes)i (for)h(use)f(within)e(the)0 1140 y(ILU)j(environment.)h(This)e (interface)i(isolates)d(ILU)i(users)g(from)h(the)f(differences)g(in)f (the)h(various)f(lightweight)f(process)0 1202 y(implementations)i(and)h (allows)f(them)i(to)f(write)g(programs)g(that)g(are)h(portable)e (across)h(all)g(implementations)f(to)h(which)0 1264 y(the)e(ILU)g(CL)g (Process)g(Interface)h(has)e(been)h(ported.)g(At)g(present,)f(these)h (implementations)e(include)h(Franz)i(Allegro)e(CL)0 1327 y(4.1,)i(and)f(Lucid)f(Common)i(Lisp)e(3.0)h(\(a.k.a.,)i(Sun)e(Common)h (Lisp\).)62 1422 y(This)d(chapter)h(explains)e(how)h(the)h(ILU)f(CL)h (Process)g(Interface)h(works)e(for)h(ILU)f(users.)i(It)f(begins)e(with) h(an)h(overview)0 1484 y(that)f(describes)g(the)g(ILU)g(CL)h(Process)g (model,)g(followed)e(by)h(a)h(listing)d(of)j(some)f(functional)f (capabilities)g(of)i(this)e(model.)0 1546 y(After)15 b(brief)f(discussions)e(of)j(the)f(implementation)g(architecture)g(and) h(general)f(limitations)f(of)h(the)h(ILU)f(CL)h(Process)0 1609 y(Interface,)c(the)f(chapter)h(presents)e(an)h(example)h(of)f(how) g(to)g(use)g(the)g(interface)g(to)g(define)g(a)g(simple)g(shared)g (FIFO)h(queue.)0 1671 y(Next,)g(it)f(lists)f(all)h(of)h(the)g (functions)e(and)h(macros)h(necessary)g(to)f(use)h(lightweight)d (processes)i(in)g(the)g(ILU)h(environment.)0 1733 y(The)g(chapter)g (concludes)f(with)g(a)i(brief)f(list)f(of)h(references.)62 1828 y(To)j(use)f(the)g(information)g(in)g(this)f(chapter,)j(you)e (should)f(be)i(familiar)f(with)g(Common)h(Lisp)e(and)i(with)e(the)i (notion)0 1891 y(of)f(processes)g(and)g(threads)g(in)g(an)h(operating)e (system.)18 b(Familiarity)12 b(with)h(the)g(UNIX)g(process)g(model)g (would)f(also)h(be)0 1953 y(helpful.)d(\(See)j(the)e(References)h (section)e(for)h(recommendations)g(on)g(further)g(reading.\))0 2122 y Fu(D.2)30 b(Overview)13 b(Of)h(The)h(ILU)g(CL)h(Process)d(Model) 62 2234 y Fs(The)19 b(ILU)g(CL)h(Process)f(Interface)h(features)f(an)g (interface)g(to)g(lightweight)d(processes)j(similar)g(to)f(that)h(on)f (the)0 2296 y(Symbolics)9 b(Lisp)g(machine.)i(In)f(particular,)f (within)f(a)j(single)d(Lisp)h(environment)f(\(which)i(on)f(stock)g (hardware)h(runs)f(as)h(a)0 2359 y(single)d(heavyweight)g(UNIX)i (process\))f(there)h(are)g(multiple)f(threads)g(of)g(control)g(that)g (can)h(be)g(scheduled)e(independently.)0 2421 y(These)16 b(threads)h(are)g(called)f Fp(lightweight)e(processes)k Fs(\(or)f(sometimes)f(just)g Fp(processes)r Fs(\).)27 b(Each)17 b(lightweight)d(process)0 2483 y(contains)9 b(its)h(own)g(run-time)h(control)e(and)i(binding)d(stack,)j(but)f(it)g (shares)g(the)h(global)e(data)i(and)f(program)h(address)f(space)0 2545 y(with)h(all)h(other)g(processes)f(in)h(the)g(Lisp)f(environment.) i(Note)f(that)g(this)f(arrangement)h(differs)g(from)h(that)e(of)i(the)e (UNIX)0 2608 y(heavyweight)j(process)i(facility,)g(where)h(each)f (process)g(has)f(its)g(own)h(address)f(space)h(as)g(well)g(as)g(its)f (own)g(run-time)0 2670 y(stack.)p eop %%Page: 294 295 294 294 bop 0 -58 a Fs(Appendix)10 b(D:)g(The)h(ILU)h(Common)f(Lisp)f (Lightweight)f(Process)i(System)675 b(294)0 183 y Fo(D.2.1)26 b(The)15 b(Scheduler)f(Process)62 288 y Fs(Each)g(lightweight)d (process)j(represents)f(an)h(independent)e(thread)h(of)h(control.)19 b(The)13 b(multiple)g(threads)g(within)f(the)0 350 y(Lisp)i (environment)g(are)i(managed)f(by)g(a)g(special)g Fp(scheduler)j Fs(process.)k(The)15 b(ILU)g(CL)g(Process)g(Interface)h(makes)g(no)0 412 y(assumptions)c(about)h(the)h(nature)f(of)h(this)f(scheduler)g (process.)19 b(However,)c(most)e(implementations)f(use)i(a)g (time-slice,)0 475 y(priority-based)8 b(scheduler.)j(In)f(such)g(a)h (scheduler,)f(an)g(interrupt)f(occurs)h(once)h(every)f(so)g(often)g (\(called)g(the)g(scheduler's)0 537 y Fp(quantum)s Fs(\).)j(When)f(the) f(interrupt)g(occurs,)h(the)g(process)f(that)g(is)h(currently)f (running)f(is)h(stopped)g(and)g(its)g(state)h(is)f(saved.)0 599 y(The)g(scheduler)f(then)h(examines)g(all)g(processes)f(that)h(are) g(runnable)g(\(that)f(is,)h(waiting)f(to)g(run\))h(and)g(restarts)g (the)g(process)0 661 y(that)k(has)g(the)h(highest)e(priority.)24 b(This)14 b(process)h(runs)g(until)g(the)g(next)g(interrupt)g(or)g (until)f(it)i(gives)e(up)i(control)e(to)h(the)0 724 y(scheduler,)d (whichever)f(comes)h(first.)h(At)f(any)f(given)g(time,)i(the)e(one)h (process)f(that)g(is)h(``currently'')f(running)g(is)g(known)0 786 y(as)g(the)g Fp(current)g(process)p Fs(.)0 913 y Fo(D.2.2)26 b(States)14 b(Of)h(Processes)62 1017 y Fs(In)k(the)e(ILU)i (CL)f(Process)g(model,)i(each)f(lightweight)d(process)h(is)h (represented)g(by)g(a)g(single)f(Lisp)g(object)h(that)0 1080 y(maintains)c(the)g(information)g(about)f(that)i(process.)21 b(Also,)15 b(each)g(process)f(is)h(always)f(in)g(one)h(of)f(three)h (states:)i Fp(active)p Fs(,)0 1142 y Fp(inactive)p Fs(,)f(or)f Fp(killed)p Fs(.)24 b(A)15 b(process)g(maintains)f(two)h(lists)f(of)i (objects)e(called,)j(respectively,)e(the)g Fp(run)h(reasons)g Fs(and)f(the)0 1204 y Fp(arrest)d(reasons)i Fs(for)e(the)g(process.)j (For)d(a)h(process)f(to)g(be)g(active,)h(it)e(must)h(have)h(at)f(least) g(one)g(run)g(reason)g(and)g(no)g(arrest)0 1266 y(reasons.)22 b(A)15 b(process)f(with)g(no)g(run)h(reasons)f(or)h(at)g(least)f(one)g (arrest)h(reason)g(is)f(considered)g(inactive.)22 b(The)14 b(ILU)h(CL)0 1329 y(Process)10 b(Interface)h(provides)e(functions)f (for)i(adding)f(and)h(removing)g(run)g(and)g(arrest)g(reasons)f(for)i (a)f(process.)h(Thus,)e(the)0 1391 y(user)i(\(or)g(a)h(program\))f(can) h(move)f(a)h(process)f(between)f(the)h(active)g(and)g(inactive)f (states.)62 1479 y(The)h(scheduler)f(runs)h(only)e(active)i(processes.) g(Until)e(an)i(inactive)f(process)h(is)f(reactivated,)h(it)f(cannot)g (run.)i(A)e(killed)0 1541 y(process)h(is)f(one)h(that)g(has)f(been)h (explicitly)e(killed)h(\(using)g(the)h Ft(ilu-process:process-kill)e Fs(function\).)h(A)h(killed)0 1603 y(process)g(can)g(never)g(be)h(run)f (again)f(\(that)h(is,)g(it)g(can)g(never)h(be)f(made)h(active\).)62 1691 y(An)k(active)f(process)h(can)g(in)f(turn)g(be)h(in)g(one)f(of)h (two)f(substates:)k Fp(runnable)e Fs(and)f Fp(waiting)p Fs(.)24 b(A)16 b(runnable)f(process)0 1754 y(is)g(ready)g(to)g(be)g (restarted)g(by)g(the)g(scheduler,)h(which)e(determines)h(whether)g (and)g(when)f(a)i(process)f(will)f(actually)g(be)0 1816 y(restarted)i(based)g(on)h(its)e(status)h(\(that)g(is,)h(priority\))f (and)g(the)g(status)f(of)i(the)f(other)g(runnable)g(processes.)27 b(A)17 b(waiting)0 1878 y(process)12 b(is)h(a)g(process)g(that)f(has)h (a)g Fp(wait)g(function)h Fs(and)f(a)g(list)f(of)h Fp(wait)g(arguments) p Fs(.)j(These)d(two)f(items)h(are)g(supplied)f(to)0 1940 y(the)f(process)h(using)e(the)h Ft(ilu-process:process-wait)f Fs(function.)i(Periodically,)f(the)g(scheduler)g(will)g Ft(apply)g Fs(the)0 2003 y(process's)j(wait)g(function)g(to)g(its)g (wait)g(arguments)g(\(in)h(the)f(context)g(of)h(the)f(scheduler\).)22 b(If)15 b(the)g(result)f(is)g(a)h(non-)p Ft(nil)0 2065 y Fs(value,)10 b(the)g(wait)f(function)g(and)h(wait)f(arguments)h(are)g (removed)g(from)h(the)f(process,)g(and)f(the)h(process)g(thereby)f (becomes)0 2127 y(runnable.)20 b(Usually,)14 b(the)g(scheduler)f (evaluates)h(the)g(wait)f(functions)g(for)h(all)g(waiting)f(processes)g (every)i(time)f(around)0 2190 y(the)d(scheduler)f(loop.)h(Therefore,)h (it)f(is)f(important)g(that)h(wait)g(functions)e(be)i(fast)g(and)g (very)g(efficient.)0 2316 y Fo(D.2.3)26 b(Removing)15 b(Or)g(Killing)f(Processes)62 2421 y Fs(You)j(can)h(reversably)e (remove)i(a)g(process)f(from)h(a)f(runnable)g(state)g(either)g(by)f (entering)h(a)h(wait)e(or)i(by)f(making)0 2483 y(it)f(inactive.)28 b(In)17 b(general,)h(it)f(is)f(more)h(efficient)g(to)f(make)i(a)f (process)f(inactive)g(because)h(this)f(removes)h(it)f(from)h(the)0 2545 y(scheduler's)10 b(active)g(process)g(list.)g(Thus,)g(the)g (scheduler)g(does)f(not)h(incur)g(the)g(cost)g(of)h(periodically)d (evaluating)h(its)h(wait)0 2608 y(function.)j(However,)g(an)f(inactive) f(process)h(cannot)f(make)i(itself)e(active.)k(It)d(must)g(depend)f(on) h(some)g(other)g(process)g(to)0 2670 y(recognize)d(when)g(it)g(is)g (ready)g(to)g(run)g(again)g(and)g(to)g(reactivate)g(it)g(at)g(that)g (time.)i(Although)c(a)j(waiting)e(process)h(is)g(initially)p eop %%Page: 295 296 295 295 bop 0 -58 a Fs(Appendix)10 b(D:)g(The)h(ILU)h(Common)f(Lisp)f (Lightweight)f(Process)i(System)675 b(295)0 183 y(more)12 b(costly)f(than)g(an)h(inactive)e(one,)i(it)f(is)h(automatically)e (returned)h(to)g(a)i(runnable)d(state)i(by)f(the)g(scheduler)g (whenever)0 246 y(its)h(wait)g(function)f(returns)h(non-)p Ft(nil)p Fs(.)k(Hence,)d(no)g(second)f(process)g(is)g(needed)h(to)f Fp(restart)17 b Fs(a)c(waiting)e(function.)k(Thus,)0 308 y(the)10 b(choice)g(between)f(waiting)g(a)h(process)f(and)h (rendering)g(it)f(inactive)g(depends)g(on)h(the)g(architecture)f(of)h (the)g(application)0 370 y(being)g(written.)62 468 y(When)f(a)f (process)h(is)f(first)g(started,)g(it)g(is)h(given)e(a)i(Lisp)f (function)f(and)h(a)h(set)g(of)f(arguments)g(to)g(this)g(function.)h (These)f(are)0 531 y(known)g(as)i(the)f(process's)g Fp (initial-function)g Fs(and)g Fp(inital-arguments)p Fs(,)f (respectively.)i(A)g(newly)e(created)i(process,)g Ft(apply)p Fs(s)0 593 y(its)15 b(initial-function)e(to)i(its)g(inital-arguments.) 24 b(When)15 b(the)h(initial-function)d(returns,)j(the)g(process)f(is)h (automatically)0 655 y(killed.)d(Once)f(killed)f(it)g(can)h(never)g(be) h(restarted.)g(You)f(can)g(also)f(kill)g(the)h(process)f(before)i(the)e (inital-function)f(returns)0 718 y(using)15 b(the)h Ft (ilu-process:process-kill)e Fs(function,)j(which)f(causes)g(the)g (process)g(to)g(execute)g(a)h Ft(throw)f Fs(in)g(its)0 780 y(current)e(context.)20 b(This)13 b Ft(throw)h Fs(causes)g(the)g (stack)g(to)g(unwind)f(\(executing)g(unwind-protect)f(forms)j(along)e (the)h(way\))0 842 y(and)d(the)g(initial-function)d(to)j(return,)g (thereby)g(killing)e(the)i(process.)0 1000 y Fo(D.2.4)26 b(Properties)15 b(Of)g(Processes)62 1115 y Fs(Every)g(process)g(has)g (a)h(number)f(of)h(properties.)22 b(Specifically,)17 b(a)e(process)g(has)g(an)g(arbitrary)g Fp(process)g(name)k Fs(that)0 1178 y(identifies)e(it)h(in)g(displays)e(and)i(in)g(certain)h (operations.)31 b(Process)19 b(names)g(need)f(not)g(be)g(unique.)32 b(A)19 b(process)f(also)0 1240 y(has)c(a)g Fp(priority)h Fs(that)f(the)g(scheduler)f(uses)h(optionally)d(to)j(determine)g(when)g (to)f(schedule)h(the)g(process.)20 b(Priorities)13 b(are)0 1302 y(small)g(integers)f(and)h(default)g(to)g(zero)g(\(0\).)18 b(In)13 b(most)g(implementations,)f(processes)h(with)f(higher)h (priorities)e(are)j(given)0 1364 y(scheduling)c(preference.)16 b(Negatives)11 b(are)i(used)e(to)h(indicate)f(that)h(a)g(process)g (should)e(run)i(as)h(a)f(background)f(task)h(when)0 1427 y(nothing)7 b(else)j(is)f(running.)g(Finally,)g(a)h(process)f(has)g(a)h Fp(quantum)p Fs(,)f(which)g(is)f(the)i(amount)e(of)i(time)f(\(measured) h(in)f(seconds\))0 1489 y(that)14 b(the)g(process)h(wishes)e(to)h(run)h (each)g(time)g(before)g(it)f(is)g(interrupted.)21 b(In)14 b(some)h(implementations,)f(the)h(scheduler)0 1551 y(uses)e(a)g (process's)g(quantum)f(to)h(help)g(determine)g(the)g(actual)g(length)f (of)h(the)g(time-slice)g(given)f(to)h(the)g(process.)k(Many)0 1613 y(implementations)9 b(ignore)i(the)g(quantum)f(altogether.)0 1772 y Fo(D.2.5)26 b(Process)16 b(Locks)62 1887 y Fs(The)11 b(ILU)f(CL)h(Process)g(Interface)g(also)f(includes)g(a)h(facility)e (called)i Fp(process)f(locks)h Fs(that)f(supports)f(exclusion-based)0 1949 y(sharing)k(of)h(a)h(common)f(resource)g(\(that)g(is,)h(a)f (common)h(object)e(or)h(data)g(structure\))g(or)g(a)g(critical)g (region)f(of)h(code)h(by)0 2011 y(two)g(or)g(more)h(concurrent)e (processes.)23 b(A)15 b(process)g(lock)g(is)f(an)i(object)e(that)h(a)g (process)g(can)g Fp(lock)20 b Fs(in)15 b(order)g(to)g(claim)0 2073 y(exclusive)9 b(access)i(to)f(the)g(shared)g(resource)h (corresponding)d(to)i(the)g(lock.)h(Process)f(locks)g(are)h (essentially)d(a)j(semaphore)0 2136 y(mechanism)g(specialized)g(for)g (use)g(with)f(the)h(ILU)g(CL)h(Process)f(interface.)62 2234 y(Each)f(process)e(lock)h(has)g(a)g(name)h(and)f(a)h(locker.)h(A)e (lock's)f(name)i(is)f(for)g(display)f(purposes)g(only.)i(Processes)f (can)g(ask)0 2296 y(to)g(gain)g(or)h(relinquish)e(exclusive)g(rights)g (to)i(the)f(lock)g(\(called)g Fp(locking)i Fs(and)e Fp(unlocking)h Fs(the)f(lock,)h(respectively\).)g(While)0 2359 y(a)k(process)g(has)f (rights)g(to)g(the)h(lock,)g(the)g(lock's)f(locker)g(is)h (\(generally\))f(the)h(process)f(object)g(for)h(that)f(process.)19 b(When)0 2421 y(a)14 b(process)g(asks)f(to)h(lock)f(a)i(lock)e(that)g (is)h(already)g(locked,)g(the)g(asking)f(process)g(blocks)g(and)h (``waits'')f(until)g(the)h(lock)0 2483 y(is)e(free.)j(Waiting)c(does)h (not)f(necessarily)h(use)g(the)f(standard)h(wait)f(mechanism.)k(Some)e (implementations)e(use)h(process)0 2545 y(deactivation)h(to)h (implement)g(the)h(``wait'')f(in)h(this)e(case.)22 b(Some)16 b(implementations)d(may)i(also)f(maintain)g(a)h(queue)f(of)0 2608 y(processes)g(waiting)f(for)i(a)g(lock)f(to)h(be)f(freed,)j (thereby)d(ensuring)f(fair)i(access)g(to)g(the)f(lock.)22 b(Other)14 b(implementations)0 2670 y(may)e(not)e(maintain)h(such)f(a)i (queue,)f(and)g(therefore)g(fair)h(access)f(to)g(the)g(lock)g(is)f(not) h(guaranteed.)p eop %%Page: 296 297 296 296 bop 0 -58 a Fs(Appendix)10 b(D:)g(The)h(ILU)h(Common)f(Lisp)f (Lightweight)f(Process)i(System)675 b(296)62 183 y(Process)17 b(locks)e(are)i(contractual)e(in)h(nature.)27 b(The)16 b(various)f(processes)h(sharing)f(a)i(resource)f(\(or)h(critical)e (section)0 246 y(of)h(code\))f(must)g(all)g(agree)h(not)f(to)g(access)h (the)f(common)h(resource)f(while)g(the)g(process)g(lock)g (corresponding)f(to)h(that)0 308 y(resource)e(is)g(held)f(by)h(another) f(process.)17 b(Furthermore,)d(they)f(must)f(agree)i(to)f(lock)f(the)h (process)f(lock)h(whenever)g(they)0 370 y(need)18 b(exclusive)f(access) h(to)f(the)h(resource,)i(thereby)d(notifying)f(the)h(other)h(processes) f(of)h(their)f(intent.)30 b(Moreover,)0 432 y(the)14 b(correspondence)f(between)h(a)h(process)e(lock)h(and)g(the)f(shared)h (resource)h(is)e(a)i(matter)f(of)g(agreement)h(between)e(the)0 495 y(cooperating)d(processes.)i(The)f(system)g(does)g(not)g(provide)g (any)g(direct)g(support)f(for)i(this)e(correspondence)h(\(although)f (it)0 557 y(may)i(be)f(added)g(on)g(at)g(a)g(higher)g(level)g(built)e (on)i(top)g(of)g(the)g(basic)f(process)h(lock)g(mechanism\).)62 644 y(Process)i(locks)g(provide)f(a)h(code-centered)h(``sharing'')e (mechanism)i(where)f(the)g(access)g(control)f(is)h(built)e(into)h(the)0 706 y(programs)d(that)g(access)h(the)g(shared)f(resource.)i(Process)f (locks)f(are)h(suited)e(for)i(closed,)g(or)f(non-extensible,)f (applications)0 769 y(where)i(the)g(shared)g(resource)h(is)e(a)i (standard)e(Lisp)g(data)h(structure)g(\(that)g(is,)g(not)f(a)i(CLOS)f (object\))g(and)g(where)g(efficiency)0 831 y(is)h(a)h(major)h(concern.) g(For)f(applications)e(not)h(meeting)g(these)h(criteria,)g(a)g (mechanism)g(in)g(which)f(a)h(CLOS)g(object)f(itself)0 893 y(controls)f(simultaneous)f(access)j(to)e(its)h(internal)f(data)h (structures)f(may)i(be)f(more)h(appropriate.)0 1028 y Fu(D.3)30 b(Functional)14 b(Overview)62 1131 y Fs(The)i(ILU)g(CL)g (Process)g(Interface)h(provides)d(all)i(of)g(the)g(functions)e(and)i (macros)g(necessary)g(to)f(use)h(lightweight)0 1194 y(processes)11 b(in)f(the)h(ILU)g(environment.)g(The)g(functionality)d(provided)i(by)h (these)g(functions)f(and)h(macros)g(includes:)37 1281 y Fr(\017)30 b Fs(Starting)10 b(new)h(processes)g(and)g(killing)e (processes)37 1354 y Fr(\017)30 b Fs(Displaying)9 b(status)g (information,)i(such)f(as)h(the)g(current)g(process,)g(all)g(active)f (processes,)h(or)g(all)g(known)f(processes)37 1428 y Fr(\017)30 b Fs(Accessing)10 b(and)h(modifying)f(the)h(properties)f(of) h(a)h(process)e(\(for)i(example,)g(its)e(name)i(or)f(priority\))37 1501 y Fr(\017)30 b Fs(Adding/Removing)9 b(arrest)i(and)g(run)g (reasons)g(for)g(a)h(process)37 1575 y Fr(\017)30 b Fs(Allowing)9 b(a)j(process)e(to)h(give)g(up)f(control)h(to)f(the)h(scheduler)g(or)g (enter)g(into)f(a)i(wait)f(state)37 1648 y Fr(\017)30 b Fs(Temporarily)11 b(turning)e(off)j(the)f(scheduler)f(so)h(that)f (the)h(current)g(process)g(cannot)g(be)g(interrupted)37 1722 y Fr(\017)30 b Fs(Creating,)11 b(locking,)f(unlocking,)g(and)h (modifying)f(process)g(locks)0 1856 y Fu(D.4)30 b(Implementation)13 b(Architecture)62 1960 y Fs(The)k(ILU)f(CL)h(Process)g(Interface)g(is)g (implemented)f(as)g(a)h(veneer)g(over)g(the)f(existing)f(process)h (interfaces)h(for)g(a)0 2022 y(number)h(of)h(Common)f(Lisp)g (implementations)e(\(currently)i(Franz)h(Allegro)e(CL)i(and)f(Lucid)f (Common)i(Lisp\).)32 b(In)0 2085 y(many)10 b(cases,)h(the)f (implementation's)f(functions)f(are)j(simply)e(imported)g(and)h(then)g (exported)f(from)i(the)f Ft(ilu-process)0 2147 y Fs(package.)15 b(In)d(other)g(cases,)h(a)g(new)f(function)f(is)h(wrapped)g(around)g (the)g(implementation's)f(native)g(function)g(to)h(change)0 2209 y(the)f(name,)h(arguments,)f(or)g(semantics)g(of)g(the)g(function) e(so)i(that)f(they)h(match)g(those)g(required)f(by)h(the)g(ILU)g(CL)g (Process)0 2271 y(Interface)i(specification.)g(In)g(a)g(few)f(cases,)h (whole)f(new)g(functions)f(have)h(been)h(written)e(to)h(achieve)g (functionality)e(not)0 2334 y(provided)g(by)h(the)g(original)e (implementation.)62 2421 y(The)15 b(nature)f(of)g(the)h(process)f (object)f(in)h(the)g(ILU)h(CL)g(Process)f(Interface)h(is)f(not)g (specified.)21 b(The)14 b(process)g(object)0 2483 y(is)e(inherited)f (from)i(the)f(underlying)f(implementation)f(and)j(may)f(therefore)h(be) f(a)h(list,)f(a)h(structure,)f(a)h(flavor)f(object,)g(or)0 2545 y(even)e(a)h(CLOS)g(object.)g(Because)g(of)f(this)f(lack)i(of)f (specification,)f(process)h(objects)g(cannot)f(be)i(specialized.)f (Moreover,)0 2608 y(they)g(cannot)g(be)h(accessed)f(or)h(modified)f(in) g(any)g(way)h(other)f(than)g(through)f(the)h(functional)g(interface)g (described)g(in)g(this)0 2670 y(chapter.)p eop %%Page: 297 298 297 297 bop 0 -58 a Fs(Appendix)10 b(D:)g(The)h(ILU)h(Common)f(Lisp)f (Lightweight)f(Process)i(System)675 b(297)0 183 y Fu(D.5)30 b(General)13 b(Limitations)62 288 y Fs(The)d(ILU)h(CL)f(Process)g (Interface)h(assumes)f(that)g(the)g(scheduler)g(is)f(loaded)h(and)g (running)f(in)h(the)g(ILU)g(environment.)0 350 y(Procedures)i(for)h (starting)e(the)h(scheduler)f(are)i(not)f(included)f(in)h(the)g(ILU)g (CL)g(Process)h(Interface.)i(Some)e(implementa-)0 413 y(tions,)e(however,)i(may)g(require)f(you)f(to)h(actually)f(load)h(and) g(start)f(up)h(the)g(scheduler.)i(For)f(example,)g(in)e(Franz)i (Allegro)0 475 y(CL,)h(you)f(need)h(to)f(evaluate)g Ft (\(mp:start-scheduler\))f Fs(either)h(at)g(the)g(top-level)g(or)g(in)g (your)g(`)p Ft(.clinit.cl)p Fs(')g(file)0 537 y(in)e(order)g(to)g(load) f(and)h(start)g(up)g(the)g(scheduler.)62 625 y(The)j(ILU)f(CL)h (Process)g(Interface)g(is)f(subject)g(to)g(all)g(of)h(the)f (limitations)e(of)j(its)e(underlying)g(implementations.)17 b(In)0 687 y(particular,)f(one)e(problem)h(with)f(most)g(Common)h(Lisp) f(implementations)f(on)i(stock)f(hardware)h(is)f(that)g(the)h(smallest) 0 750 y(scheduler)k(quantum)g(possible)f(is)h(one)h(second.)36 b(This)19 b(means)h(that)f(each)h(process)f(gets)h(to)f(run)g(for)h (one)g(second)0 812 y(uninterrupted.)26 b(For)18 b(applications)c(that) i(involve)g(real-time)h(response,)h(waiting)d(for)i(one)f(second)h (before)g(an)g(event)0 874 y(can)d(be)f(handled)f(is)h(problematic.)k (In)c(practice,)i(this)d(problem)h(can)g(be)h(lessened)e(if)h(all)g (processes)g(release)g(control)g(to)0 937 y(the)g(scheduler)f(at)g (regular,)i(short)e(intervals)f(\(that)i(is,)g(each)g(few)g(times)g (around)f(a)h(tight)e(inner)i(loop\),)f(thereby)h(making)0 999 y(the)j(effective)h(quantum)f(significantly)e(less)i(than)g(one)g (second.)27 b(Note)16 b(that)g(this)f(practice)i(effectively)f(reduces) g(the)0 1061 y(scheduler)11 b(to)f(a)i(prioritized,)e(cooperative)g (scheduler)h(rather)g(than)g(the)g(preemptive)g(scheduler)f(intended.) 62 1149 y(Most)d(Common)h(Lisp)f(implementations)f(build)g(their)h (process)g(mechanism)g(on)h(top)e(of)i(a)g(very)f(powerful)g(mechanism) 0 1211 y(called)j Fp(stack)f(groups)p Fs(.)h(Stack)g(groups)f(provide)g (for)h(alternative)f(run-time)g(stacks)g(in)h(the)f(Lisp)g(environment) g(that)g(can)h(be)0 1274 y(used)g(for)h(various)f(purposes)f(beyond)h (implementing)f(processes.)i(For)g(example,)g(stack)g(groups)e(are)i (an)g(ideal)f(substrate)0 1336 y(for)j(implementing)f(co-routines.)k (Unfortunately,)c(not)g(all)h(implementations)e(provide)h(an)h (interface)g(to)g(stack)f(groups)0 1398 y(\(if)g(indeed)g(they)g(have)g (stack)g(groups\).)i(Hence,)f(an)f(interface)g(to)g(stack)g(groups)f (is)h(not)f(a)i(part)f(of)g(the)g(ILU)h(CL)f(Process)0 1461 y(Interface.)0 1601 y Fu(D.6)30 b(How)15 b(To)f(Use)i(The)e(ILU)i (CL)f(Process)f(Interface)62 1706 y Fs(The)20 b(ILU)g(CL)g(Process)g (Interface)h(is)f(intended)e(as)i(a)h(programmer's)g(interface;)j(the)c (functions)e(and)i(macros)0 1768 y(provided)13 b(should)g(be)h(used)g (to)g(implement)g(programs)g(that)g(run)g(in)g(the)g(ILU)h (environment.)20 b(Although)12 b(you)i(can)g(use)0 1831 y(any)d(of)h(the)f(functions)f(and)h(macros)h(directly)f(from)h(a)g (Lisp)e(listener,)h(the)h(interface)f(is)g(not)g(designed)f (particularly)h(well)0 1893 y(for)j(interactive)f(use.)18 b(The)c(two)f(exceptions)f(to)h(this)g(rule)g(are)h(the)g(functions)e Ft(ilu-process:show-process)f Fs(and)0 1955 y Ft (ilu-process:show-all-processes)p Fs(,)g(both)h(of)h(which)f(are)h (designed)f(to)g(print)g(out)g(status)f(information)h(in)g(the)0 2018 y(Lisp)d(listener)g(window.)h(Because)g(it)g(is)f(a)h (user-oriented)f(function,)h Ft(ilu-process:show-process)e Fs(accepts)i(either)0 2080 y(the)h(process)g(name)g(or)h(a)f(process)g (object)f(to)h(identify)f(the)h(process)f(whose)h(status)f(is)g(to)h (be)g(displayed.)62 2168 y(Most)18 b(implementations)e(include)h(an)h (interactive)g(interface)g(to)f(multiple)g(processes)h(and)g(the)f (scheduler.)32 b(For)0 2230 y(example,)21 b(Franz)f(Allegro)e(CL)h(has) g(a)g(special)f(top-level)g(command)h(language)f(that)g(is)h(operative) f(in)g(every)h(Lisp)0 2292 y(listener.)c(This)d(command)h(language)f (includes)g(the)g(following)f(commands)i(that)f(deal)h(specifically)e (with)h(lightweight)0 2355 y(processes)f(\(see)g(Chapter)g(4)g(of)h Fp([Franz-92])g Fs(for)g(more)g(information\):)37 2443 y Fr(\017)30 b Ft(:processes)90 2519 y Fs(Lists)10 b(all)h(processes)f (\(see)i Ft(ilu-process:all-processes)p Fs(\))37 2594 y Fr(\017)30 b Ft(:kill)90 2670 y Fs(Kills)10 b(a)h(process)g(\(see)h Ft(ilu-process:process-kill)p Fs(\))p eop %%Page: 298 299 298 298 bop 0 -58 a Fs(Appendix)10 b(D:)g(The)h(ILU)h(Common)f(Lisp)f (Lightweight)f(Process)i(System)675 b(298)37 183 y Fr(\017)30 b Ft(:arrest)90 259 y Fs(Adds)10 b(an)i(arrest)f(reason)g(to)g(a)g (process)g(\(see)g Ft(ilu-process:add-arrest-reason)p Fs(\))37 336 y Fr(\017)30 b Ft(:unarrest)90 412 y Fs(Removes)14 b(any)f(arrest)g(reason)g(that)g(was)g(added)g(to)g(a)h(process)e(by)h Ft(:arrest)g Fs(\(see)h Ft(ilu-process:process-)90 474 y(revoke-arrest-reason)p Fs(\))37 551 y Fr(\017)30 b Ft(:focus)90 627 y Fs(Performs)13 b(an)g Ft(:arrest)f Fs(on)h(a)g(process)f(and)h(arranges)f(for)h(all)g(user)f(keyboard)g (input)f(to)i(be)f(sent)h(to)f(the)g(arrested)90 689 y(process)f(\(usually)f(to)g(the)h(debugger\).)0 832 y Fu(D.7)30 b(How)15 b(To)f(Program)g(The)g(ILU)i(CL)f(Process)f (Interface)62 937 y Fs(The)i(following)e(example)i(illustrates)e(how)i (to)f(use)h(the)g(ILU)g(CL)g(Process)g(Interface)h(to)e(define)h(a)h (shared)e(FIFO)0 1000 y(queue.)k(Two)13 b(processes)g(will)g(utilize)f (this)h(queue.)18 b(A)c(producer)g(process)f(will)f(read)i(input)f (items)g(from)h(the)g(user)f(and)0 1062 y(place)f(them)g(on)g(the)f (shared)h(queue.)h(A)f(consumer)g(process)g(will)f(wake)h(up)f(every)h (five)g(seconds)f(and)h(read)g(items)g(from)0 1124 y(the)f(shared)f (queue,)h(printing)e(them)i(on)g(the)f(standard)h(output)e(stream)i(as) g(they)f(are)i(taken)e(off)h(the)g(queue.)g(Access)g(to)f(the)0 1187 y(shared)h(queue)g(will)f(be)h(controlled)f(using)g(a)h(process)g (lock)g(associated)f(with)g(the)h(queue.)120 1275 y Ft (;;;___________________________________)o(___________)o(__)120 1325 y(;;;)25 b(the)f(shared)h(queue,)f(its)h(process-lock,)e(and)i (its)g(accessors/mutators)120 1375 y(;;;)120 1474 y(\(defvar)f(queue)h (\(list)f(t\))h("The)f(shared)h(queue"\))120 1574 y(\(defvar)f (queue-lock)g(\(ilu-process:make-process-lock)e(:name)j("queue)f (lock"\))170 1624 y("process)g(lock)h(for)f(queue"\))120 1724 y(\(defun)g(queue-pop)g(\(queue\))170 1773 y("Pop)g(an)h(item)g (off)f(of)h(the)g(shared)f(FIFO)g(queue.)195 1823 y(Use)g (ilu-process:with-process-lock)f(to)h(prevent)h(collisions)e(between)i (processes.)170 1873 y(")170 1923 y(\(ilu-process:with-process-lock)d (\(queue-lock\))220 1973 y(\(prog1)120 2022 y(\(cadr)i(queue\))269 2072 y(\(rplacd)h(queue)f(\(cddr)h(queue\)\)\))220 2122 y(\)\))120 2222 y(\(defun)f(queue-push)g(\(queue)h(item\))170 2271 y("Push)f(an)h(item)g(onto)f(the)h(shared)f(FIFO)h(queue.)195 2321 y(Use)f(ilu-process:with-process-lock)f(to)h(prevent)h(collisions) e(between)i(processes.)170 2371 y(")170 2421 y (\(ilu-process:with-process-lock)d(\(queue-lock\))220 2471 y(\(nconc)i(queue)g(\(list)h(item\)\))220 2521 y(\)\))120 2620 y(\(defun)f(queue-empty-p)g(\(queue\))170 2670 y("Is)g(queue)h (empty?)p eop %%Page: 299 300 299 299 bop 0 -58 a Fs(Appendix)10 b(D:)g(The)h(ILU)h(Common)f(Lisp)f (Lightweight)f(Process)i(System)675 b(299)195 183 y Ft(Use)24 b(ilu-process:with-process-lock)f(to)h(prevent)h(collisions)e(between)i (processes.)170 233 y(")170 283 y(\(ilu-process:with-process-lock)d (\(queue-lock\))i(\(null)g(\(cdr)h(queue\)\))f(\)\))120 382 y(;;;___________________________________)o(___________)o(__)120 432 y(;;;)50 b(The)24 b(producer)g(function)120 482 y(;;;)120 582 y(\(defun)g(produce)h(\(\))170 632 y("Loop)f(reading)h(an)f(item)h (from)f(the)h(user)f(and)h(pushing)f(it)h(onto)g(the)f(shared)h (queue.")170 681 y(\(let)f(\(Item\))220 731 y(\(loop)269 781 y(;;)h(Wait)g(until)f(there)h(is)f(something)g(on)h(the)g(input)f (stream.)269 831 y(\(ilu-process:process-wait)f("Waiting)h(for)h (input")f(#'listen)g(*standard-input*\))269 930 y(;;)h(Read)g(the)f (input.)269 980 y(\(setq)h(Item)f(\(read)h(*standard-input*\)\))269 1080 y(;;)g(Check)g(to)f(see)h(if)g(it)f(is)h(the)g(EOF)f(marker)h(and) f(exit)h(if)g(so.)269 1130 y(\(when)g(\(eq)g(Item)f(:EOF\))g(\(return)h (nil\)\))269 1229 y(;;)g(Push)g(the)f(item)h(onto)f(the)h(queue.)269 1279 y(\(queue-push)f(queue)h(Item\))269 1329 y(\)\)\))120 1429 y(;;;___________________________________)o(___________)o(__)120 1478 y(;;;)g(The)f(consumer)g(function)120 1528 y(;;;)120 1628 y(\(defun)g(consume)h(\(\))170 1678 y("Wake)f(up)h(every)f(five)h (seconds)f(and)h(see)f(if)h(there)g(is)f(something)g(on)h(the)g(shared) 195 1727 y(queue.)49 b(If)25 b(there)f(is,)h(pop)f(it)h(off)g(and)f (print)h(it)g(on)f(standard)g(output.)195 1777 y(If)g(the)h(queue)g(is) f(empty)h(and)f(the)h(producer)f(process)g(is)h(not)g(alive,)f (terminate.)170 1827 y(")170 1877 y(\(loop)220 1927 y(;;)g(Check)h(to)g (see)f(if)h(there)f(is)h(anything)f(on)h(the)g(queue.)220 1977 y(\(if)f(\(not)h(\(queue-empty-p)e(queue\)\))120 2026 y(;;)i(There)f(is)h(an)g(item)f(on)h(the)f(queue;)h(pop)f(and)h (print)g(all)f(items.)120 2076 y(\(do)h(\(\)\(\(queue-empty-p)e (queue\)\))170 2126 y(\(fresh-line)h(t\))170 2176 y(\(princ)g("Output:) g("\))170 2226 y(\(prin1)g(\(queue-pop)g(queue\)\))170 2275 y(\(fresh-line)g(t\))170 2325 y(\(finish-output)f(t\)\))269 2425 y(;;)i(Queue)g(is)f(empty;)h(check)f(to)h(see)f(if)h(the)g (producer)f(is)h(still)f(alive.)269 2475 y(\(if)h(\(null)g (\(ilu-process:find-process)d("Producer)i(Process"\)\))170 2574 y(;;)h(Producer)f(not)g(alive;)h(terminate.)170 2624 y(\(return)f(nil\)\)\))p eop %%Page: 300 301 300 300 bop 0 -58 a Fs(Appendix)10 b(D:)g(The)h(ILU)h(Common)f(Lisp)f (Lightweight)f(Process)i(System)675 b(300)220 233 y Ft(;;)24 b(Sleep)h(for)f(five)h(seconds;)f(this)h(gives)f(up)h(control)f (immediately)220 283 y(;;)g(so)h(some)g(other)f(process)g(can)h(run.) 220 333 y(\(sleep)f(5\))220 382 y(\)\))120 482 y (;;;___________________________________)o(___________)o(__)120 532 y(;;;)74 b(Main)25 b(function;)f(starts)g(consumer)h(and)f (producer)g(processes)120 582 y(;;;)120 681 y(\(defun)g(test-queue)g (\(\))170 731 y("Start)g(consumer)g(and)h(producer)f(processes.)g(Wait) h(in)f(an)h(idle)g(loop)f(until)195 781 y(both)g(the)h(producer)f(and)h (the)f(consumer)g(processes)h(die.)49 b(This)24 b(function)h(is)195 831 y(meant)f(to)h(be)g(evaluated)f(in)g(the)h(Lisp)g(listener.)49 b(Waiting)24 b(until)g(both)195 881 y(processes)g(die)g(ensures)h(that) f(the)h(Lisp)f(listener)h(does)f(not)h(interfere)195 930 y(with)f(user)h(input)f(to)h(the)g(producer.)170 980 y(")170 1030 y(\(let)f(\(Producer)g(Consumer\))220 1080 y(;;)g(Start)h(the)f(producer)h(first;)f(the)h(consumer)f(needs)g (the)h(producer)f(to)h(run.)220 1130 y(\(setq)f(Producer)g (\(ilu-process:fork-process)f("Producer)h(Process")g(#'produce\)\))220 1180 y(;;)g(Start)h(the)f(consumer.)220 1229 y(\(setq)g(Consumer)g (\(ilu-process:fork-process)f("Consumer)h(Process")g(#'consume\)\))220 1279 y(;;)g(Show)h(processes)f(on)h(the)f(standard)g(ouput.)220 1329 y(\(ilu-process:show-all-processes\))220 1379 y(;;)g(Wait)h(until) f(both)h(consumer)f(and)h(producer)f(are)g(dead.)220 1429 y(\(ilu-process:process-wait)e("Waiting)i(for)h(godot")120 1478 y(#'\(lambda)f(\(P1)h(P2\))220 1528 y(\(not)245 1578 y(\(or)f(\(ilu-process:process-alive-p)e(P1\))145 1628 y(\(ilu-process:process-alive-p)g(P2\)\)\)\))120 1678 y(Consumer)i(Producer\))220 1727 y(\)\))62 1870 y Fs(The)11 b(following)e(is)i(a)h(transcript)e(of)h(this)f(test)g (program)i(in)f(operation:)120 1973 y Ft (;;;___________________________________)o(___________)o(__)120 2022 y(#73:)25 b(\(test-queue\))120 2072 y(-------------Data)e(on)i (all)g(processes)f(follows---------)120 2122 y(Process:)g("Consumer)g (Process")170 2172 y(Process-alive-p:)f(T)170 2222 y(Process-active-p:) g(T)170 2271 y(Process-quantum:)g(2)170 2321 y(Process-priority:)g(0) 170 2371 y(Process-run-reasons:)g(\(:START)h(:START\))120 2421 y(Process:)g("Producer)g(Process")170 2471 y(Process-alive-p:)f(T) 170 2521 y(Process-active-p:)g(T)170 2570 y(Process-quantum:)g(2)170 2620 y(Process-priority:)g(0)170 2670 y(Process-run-reasons:)g (\(:START)h(:START\))p eop %%Page: 301 302 301 301 bop 0 -58 a Fs(Appendix)10 b(D:)g(The)h(ILU)h(Common)f(Lisp)f (Lightweight)f(Process)i(System)675 b(301)120 183 y Ft(Process:)24 b("Initial)g(Lisp)h(Listener")170 233 y(Process-alive-p:)e(T)170 283 y(Process-active-p:)g(T)170 333 y(Process-quantum:)g(2)170 382 y(Process-priority:)g(0)170 432 y(Process-run-reasons:)g (\(:ENABLE\))120 482 y(123)120 532 y(Output:)h(123)120 582 y(456)120 632 y(789)120 681 y(Output:)g(456)120 731 y(Output:)g(789)120 781 y(444)120 831 y(555)120 881 y(666)120 930 y(Output:)g(444)120 980 y(Output:)g(555)120 1030 y(Output:)g(666)120 1080 y(:eof)120 1130 y(NIL)120 1180 y(#74:)0 1335 y Fu(D.8)30 b(The)15 b(ILU)g(CL)g(Process)f(Interface)62 1443 y Fs(The)e(following)e(sections)h(detail)h(the)g(functions)e(and)i (macros)h(that)e(make)i(up)f(the)g(ILU)g(CL)g(Process)h(Interface.)i (All)0 1505 y(are)h(assumed)f(to)f(be)i(in)e(the)h Ft(ilu-process)g Fs(package)g(unless)f(otherwise)g(specified.)23 b(Arguments)14 b(are)i(shown)e(with)0 1568 y(their)d(type,)g(if)g(they)f(have)h(any)g (restrictions)e(on)i(their)g(type.)g(Return)g(types)f(are)i(shown)e(if) h(the)f(function)g(returns)h(a)g(value.)0 1630 y(Optional)e(arguments)i (are)h(shown)e(with)g(their)h(type)g(and)g(their)f(default)h(value.)0 1768 y Fo(D.8.1)26 b(The)15 b(Process)h(Object)62 1876 y Fs(The)11 b(following)e(listings)g(describe)i(the)g(object)f(that)h (is)g(used)f(to)h(represent)g(each)h(lightweight)c(process.)1807 2002 y(Type)-1901 b Fo(i)23 b Fn(lu-process:process)120 2064 y Fs(A)13 b(Lisp)e(object)h(representing)f(a)i(single)f(process.)j (This)c(object)h(is)g(to)g(be)h(used)f(only)f(as)i(a)g(handle)f(for)g (the)120 2127 y(process.)21 b(To)15 b(alter)f(the)h(state)f(or)h (characteristics)e(of)i(a)g(process,)h(use)e(the)g(external)h(function) e(interface)120 2189 y(defined)i(below.)24 b(The)16 b(exact)g(nature)f (of)h(the)f(process)g(object)g(differs)h(between)f(implementations.)23 b(In)120 2251 y(particular,)13 b(it)f(may)h(or)g(may)g(not)f(be)h(a)g (flavor)g(or)f(a)i(CLOS)f(object.)i(Hence,)f(it)e(is)g(not)g(safe)h(to) g(specialize)120 2314 y(processes.)1739 2439 y(Function)-1902 b Fo(find-process)22 b Fk(\()p Fp(NAME)11 b Ft(string)p Fk(\))g Ft(=>)g(process)120 2502 y Fs(Returns)h(the)g(process)g(object) f(whose)h(name)h(is)f Fp(NAME)p Fs(.)g(Only)g Ft (ilu-process:process-alive-p)120 2564 y Fs(processes)i(\(that)g(is,)h (processes)f(on)g(the)g(list)f(returned)h(from)h Ft (ilu-process:all-processes)p Fs(\))e(are)120 2626 y(searched.)f(This)e (function)g(returns)g Ft(nil)h Fs(if)h(there)f(is)f(no)h(matching)g (process.)p eop %%Page: 302 303 302 302 bop 0 -58 a Fs(Appendix)10 b(D:)g(The)h(ILU)h(Common)f(Lisp)f (Lightweight)f(Process)i(System)675 b(302)1739 183 y(Function)-1902 b Fo(processp)23 b Fp(OBJECT)11 b Ft(=>)g(boolean)120 246 y Fs(Returns)17 b(non-)p Ft(nil)g Fs(if)g Fp(OBJECT)k Fs(is)c(an)h(object)e(of)i(type)f Ft(process)g Fs(for)g(this)f (implementation.)29 b(This)120 308 y(function)10 b(returns)g Ft(nil)i Fs(otherwise.)0 434 y Fo(D.8.2)26 b(Querying)14 b(The)h(Status)f(Of)g(The)i(Scheduler)e(And)g(All)h(Processes)62 538 y Fs(The)d(following)d(functions)h(and)i(macros)g(provide)f(status) f(information)h(about)f(the)i(general)f(state)h(of)f(processes)g(and)0 600 y(the)g(scheduler)f(in)h(the)g(Lisp)f(environment.)1782 714 y(Macro)-1900 b Fo(active-processes)23 b Ft(=>)11 b(list)120 776 y Fs(Returns)g(a)g(list)f(of)h(all)g(active)g (processes;)f(that)h(is,)g(processes)f(that)h(have)g(at)g(least)g(one)g (run)g(reason)g(and)g(no)120 839 y(arrest)i(reasons.)j(Note,)d (however,)h(that)e(these)h(processes)f(are)h(not)g(necessarily)f (runnable)g(because)h(they)120 901 y(may)f(be)f(in)g(a)g(process-wait.) 1782 1015 y(Macro)-1900 b Fo(all-processes)23 b Ft(=>)11 b(list)120 1077 y Fs(Returns)h(a)g(list)f(of)h(all)g(processes)f (currently)g(known)g(by)h(the)g(scheduler,)g(including)d(active)j(and)g (inactive)120 1139 y(processes)f(but)f(not)g(processes)h(that)g(have)g (been)g(killed.)1782 1253 y(Macro)-1900 b Fo(current-process)22 b Ft(=>)12 b(process)120 1315 y Fs(Returns)f(the)g(process)f(object)h (for)g(the)g(current)g(thread)g(of)g(control.)1739 1429 y(Function)-1902 b Fo(show-all-processes)23 b Fs(&optional)9 b(\()p Fp(STREAM)j Ft(streamp)24 b(cl:*standard-output*)p Fs(\))208 1491 y(\()p Fp(VERBOSE)11 b Ft(boolean)24 b(nil)p Fs(\))120 1553 y(Displays)7 b(information)g(about)g(all)h(processes)g (known)f(by)h(the)g(scheduler)f(\(that)h(is,)h(the)f(processes)g (returned)120 1616 y(by)k Ft(ilu-process:all-processes)p Fs(\).)j(Output)c(is)h(to)g Fp(STREAM)p Fs(,)i(which)e(defaults)g(to)g (the)h(value)f(of)120 1678 y Ft(cl:*standard-output*)p Fs(.)25 b(This)16 b(function)f(shows)g(only)g(non-)p Ft(nil)h Fs(fields)f(unless)h Fp(VERBOSE)21 b Fs(is)120 1740 y(non-)p Ft(nil)p Fs(;)10 b(the)h(default)g(is)f Ft(nil)p Fs(.)0 1866 y Fo(D.8.3)26 b(Starting)13 b(And)i(Killing)e (Processes)1739 1996 y Fs(Function)-1902 b Fo(fork-process)22 b Fk(\()p Fp(NAME-OR-KEY-LIST)12 b Fk(\()p Ft(or)f(string)g(proplist)p Fk(\))f(\()p Fp(FUNCTION)208 2059 y Ft(function)p Fk(\))g Fs(&rest)i Fp(ARGS)f Ft(=>)g(process)120 2121 y Fs(Creates)g(a)f(new)g (process)g(and)f(returns)h(the)g Ft(process)f Fs(object)h(for)g(this)f (process.)h(In)h(this)d(process,)j Fp(FUNC-)120 2183 y(TION)17 b Fs(is)12 b Ft(apply)p Fs(ed)g(to)g Fp(ARGS)p Fs(.)i(If)f Fp(FUNCTION)k Fs(ever)c(returns,)f(the)h(process)f(is)g (automatically)f(killed.)120 2246 y(The)c Fp(FUNCTION)12 b Fs(is)7 b(known)f(as)i(the)f(initial-function)t(of)h(the)f(process)g (\(see)h Ft(ilu-process:process-)120 2308 y(initial-form)p Fs(\).)120 2395 y(The)14 b(new)h(process)f(is)f(activated)h(by)g (default,)h(although)e(you)h(can)g(create)h(it)f(in)g(a)h(deactivated)f (state)g(by)120 2458 y(giving)f(it)g(a)i(run)f(reasons)f(list)g(with)g (a)i(value)f(of)g Ft(nil)g Fs(or)g(by)g(giving)f(it)g(one)h(or)g(more)h (arrest)f(reasons)g(as)120 2520 y(detailed)c(below.)120 2608 y Fp(NAME-OR-KEY-LIST)15 b Fs(is)10 b(either)g(a)h(string,)e(in)h (which)g(case)h(it)f(serves)g(as)h(the)f(name)h(of)f(the)h(process,)f (or)120 2670 y(it)h(is)f(a)i(property)e(list)g(with)g(one)h(or)h(more)f (of)h(the)e(following)g(property-value)g(pairs:)p eop %%Page: 303 304 303 303 bop 0 -58 a Fs(Appendix)10 b(D:)g(The)h(ILU)h(Common)f(Lisp)f (Lightweight)f(Process)i(System)675 b(303)157 183 y Fr(\017)30 b Ft(:name)11 b Fs(\()p Ft(string)p Fs(\))210 260 y(A)g(string)f(to)h (be)g(used)g(as)g(the)g(name)h(of)f(the)g(process.)157 336 y Fr(\017)30 b Ft(:priority)11 b Fs(\()p Ft(integer)p Fs(\))210 413 y(Sets)23 b(the)h(priority)e(of)h(the)h(process)f(to)g (the)g(given)g(value)g(\(see)h Ft(ilu-process:process-)210 475 y(priority)p Fs(\).)157 552 y Fr(\017)30 b Ft(:quantum)11 b Fs(\()p Ft(\(or)g(numberp)g(nil\))p Fs(\))210 628 y(Sets)21 b(the)h(quantum)e(of)i(the)f(process)g(to)g(the)g(given)g(value)g (\(see)h Ft(ilu-process:process-)210 690 y(quantum)p Fs(\).)11 b(Defaults)g(to)f Ft(1)p Fs(.)157 767 y Fr(\017)30 b Ft(:stack-size)10 b Fs(\()p Ft(fixnum)p Fs(\))210 844 y(Sets)h(the)g(stack-size)g(of)g(the)g(process)f(\(if)i(possible)d(in)i (this)f(implementation\).)157 920 y Fr(\017)30 b Ft(:run-reasons)10 b Fs(\()p Ft(list)p Fs(\))210 997 y(Sets)17 b(the)g(run)g(reasons)g(of) h(this)e(process)h(to)g(the)g(given)f(list.)29 b(Unless)16 b(run-reasons)h(is)g(non-)p Ft(nil)p Fs(,)210 1059 y(the)d(forked)f (process)h(does)f(not)g(run)h(until)e(a)j Ft (ilu-process:process-add-run-reason)c Fs(is)210 1121 y(done.)g(This)f(property)h(defaults)f(to)h Ft(\(quote)f(\(:start\)\))p Fs(.)157 1198 y Fr(\017)30 b Ft(:arrest-reasons)10 b Fs(\()p Ft(list)p Fs(\))210 1274 y(Sets)k(the)f(arrest)h(reasons)f(of)h (this)f(process)g(to)g(the)h(given)f(list.)18 b(If)c(arrest-reasons)f (is)g(non-)p Ft(nil)p Fs(,)h(the)210 1336 y(forked)9 b(process)f(does)g(not)g(run)h(until)f(a)h Ft (ilu-process:process-revoke-arrest-r)o(eason)210 1399 y Fs(is)i(done.)g(This)f(property)g(defaults)h(to)f Ft(nil)p Fs(.)157 1475 y Fr(\017)30 b Ft(:bindings)11 b Fs(\()p Ft(list)p Fs(\))210 1552 y(A)17 b(list)e(of)i(bindings)d(\(as)j(in)g (let\))f(that)g(are)h(done)g(in)f(the)g(context)g(of)h(the)f(forked)h (process)f(before)210 1614 y(the)j(function)f(is)h(run.)37 b(This)18 b(property)h(defaults)g(to)g Ft (ilu-process:*default-process-)210 1676 y(bindings*)p Fs(.)1739 1792 y(Function)-1902 b Fo(process-kill)22 b Fk(\()p Fp(PROCESS)13 b Ft(process)p Fk(\))120 1854 y Fs(Terminates)g Fp(PROCESS)k Fs(and)d(removes)g(it)f(from)h(the)g (scheduler's)e(consideration)g(altogether.)18 b(It)c(is)f(an)120 1917 y(error)c(if)f Fp(PROCESS)j Fs(is)d(not)g Ft(ilu-process:processp) e Fs(and)i Ft(ilu-process:process-alive-p)p Fs(.)120 2006 y(A)18 b(process)f(may)h(not)f(terminate)g(immediately.)30 b(In)18 b(particular,)h(the)e(process)g(is)g(first)g(activated)g(and) 120 2068 y(scheduled.)j(It)14 b(is)g(then)g(forced)h(to)f Ft(throw)g Fs(out)g(of)g(its)g(initial-function)o(,)f(thereby)h (properly)g(unwinding)120 2130 y(and)d(executing)f(any)h(unwind)f (forms.)120 2219 y(A)h(killed)f(process)h(cannot)f(be)i(reactivated.)0 2349 y Fo(D.8.4)26 b(Waiting)13 b(A)i(Process)1739 2483 y Fs(Function)-1902 b Fo(process-wait)22 b Fk(\()p Fp(WHOSTATE)11 b Ft(string)p Fk(\))g(\()p Fp(FUNCTION)g Ft(function)p Fk(\))g Fs(&rest)g Fp(ARGS)120 2545 y Fs(The)22 b(current)h(process)f (is)g(suspended)f(until)g Fp(FUNCTION)26 b Fs(applied)c(to)g Fp(ARGS)j Fs(returns)d(non-)p Ft(nil)p Fs(.)120 2608 y(During)12 b(this)g(time,)j(the)e(process's)f(whostate)g(\(see)i Ft(ilu-process:process-whostate)p Fs(\))d(is)i(set)g(to)120 2670 y Fp(WHOSTATE)p Fs(.)p eop %%Page: 304 305 304 304 bop 0 -58 a Fs(Appendix)10 b(D:)g(The)h(ILU)h(Common)f(Lisp)f (Lightweight)f(Process)i(System)675 b(304)120 183 y(Note)16 b(that)g(the)h(current)g(process)f(is)g(not)g(deactivated.)28 b(It)16 b(is)g(simply)g(not)g(scheduled)g(to)g(run)h(until)e(its)120 246 y(wait-function)d(returns)h(non-)p Ft(nil)p Fs(.)19 b(The)14 b(scheduler)g(re-evaluates)f(the)h(wait-function)e (periodically.)18 b(In)120 308 y(general,)13 b(the)f(re-evaluation)f (occurs)h(whenever)g(the)g(waited)g(process)f(would)g(be)i(scheduled)e (to)h(run)g(if)g(it)120 370 y(were)e(not)f(suspended.)g(However,)i(in)e (some)g(implementations)f(it)h(is)g(run)h(during)e(every)i(scheduler)f (break.)0 500 y Fo(D.8.5)26 b(Activating)13 b(And)i(Deactivating)e (Processes)1739 634 y Fs(Function)-1902 b Fo(process-add-arrest-reason) 22 b Fk(\()p Fp(PROCESS)12 b Ft(process)p Fk(\))f Fp(OBJECT)120 696 y Fs(Adds)g Fp(OBJECT)k Fs(to)c(the)g(list)g(of)g(arrest)h(reasons) f(for)h Fp(PROCESS)p Fs(.)h(The)e Fp(OBJECT)16 b Fs(argument)11 b(can)h(be)f(any)120 758 y(Lisp)f(object.)h(It)g(is)g(an)g(error)h(if)f Fp(PROCESS)j Fs(is)d(not)g Ft(ilu-process:processp)p Fs(.)120 847 y(Adding)e(an)i(arrest)g(reason)g(may)h(cause)f(a)g (process)f(to)h(become)g(deactivated.)g(In)g(particular,)f(if)h(this)f (is)g(the)120 909 y(first)h(arrest)g(reason,)g(then)g(the)g(process)f (becomes)i(deactivated)e(\(if)i(it)e(was)h(previously)e(activated\).) 1739 1027 y(Function)-1902 b Fo(process-add-run-reason)21 b Fk(\()p Fp(PROCESS)13 b Ft(process)p Fk(\))e Fp(OBJECT)120 1089 y Fs(Adds)i Fp(OBJECT)19 b Fs(to)13 b(the)h(list)f(of)h(run)g (reasons)g(for)g Fp(PROCESS)p Fs(.)i(The)e Fp(OBJECT)19 b Fs(argument)14 b(can)g(be)g(any)120 1151 y(Lisp)c(object.)h(It)g(is)g (an)g(error)h(if)f Fp(PROCESS)j Fs(is)d(not)g Ft(ilu-process:processp)p Fs(.)120 1240 y(Adding)i(a)i(run)f(reason)h(may)g(cause)f(a)h(process)f (to)g(become)i(activated.)k(In)15 b(particular,)g(if)g(there)f(are)i (no)120 1302 y(arrest)c(reasons)e(and)i(the)f(added)g(run)g(reason)g (is)g(first,)g(the)g(process)g(goes)g(from)h(a)g(deactivated)e(state)h (to)g(an)120 1365 y(activated)f(state.)1739 1482 y(Function)-1902 b Fo(process-arrest-reasons)23 b Fk(\()p Fp(PROCESS)13 b Ft(process)p Fk(\))e Ft(=>)g(list)120 1544 y Fs(Returns)19 b(the)h(list)e(of)i(arrest)f(reasons)g(for)h Fp(PROCESS)p Fs(.)h(It)f(is)f(an)h(error)g(if)f Fp(PROCESS)k Fs(is)c(not)g Ft(ilu-)120 1607 y(process:processp)p Fs(.)1739 1724 y(Function)-1902 b Fo(process-disable)23 b Fk(\()p Fp(PROCESS)12 b Ft(process)p Fk(\))120 1786 y Fs(Causes)i Fp(PROCESS)j Fs(to)d(become)g(inactive)f(by)h(removing)f(all)h(of)g(its)f(arrest)h (reasons)f(and)h(all)f(of)h(its)f(run)120 1848 y(reasons.)e(It)g(is)g (an)g(error)h(if)f Fp(PROCESS)k Fs(is)10 b(not)h Ft (ilu-process:processp)p Fs(.)1739 1966 y(Function)-1902 b Fo(process-enable)22 b Fk(\()p Fp(PROCESS)13 b Ft(process)p Fk(\))120 2028 y Fs(Causes)j Fp(PROCESS)k Fs(to)15 b(become)i(active)f (by)g(removing)f(all)h(of)g(its)f(arrest)i(reasons)e(and)h(all)g(of)g (its)f(run)120 2090 y(reasons)10 b(and)h(then)f(giving)f(it)h(a)i (single)d(run)i(reason)f(\(usually)g Ft(:enable)p Fs(\).)h(It)f(is)h (an)g(error)g(if)g Fp(PROCESS)j Fs(is)120 2152 y(not)c Ft(ilu-process:processp)p Fs(.)1739 2270 y(Function)-1902 b Fo(process-revoke-arrest-reason)22 b Fk(\()p Fp(PROCESS)13 b Ft(process)p Fk(\))e Fp(OBJECT)120 2332 y Fs(Removes)h Fp(OBJECT)j Fs(from)e(the)e(list)f(of)i(arrest)f(reasons)g(for)h Fp(PROCESS)p Fs(.)h(It)f(is)f(an)g(error)h(if)g Fp(PROCESS)j Fs(is)120 2394 y(not)d Ft(ilu-process:processp)p Fs(.)k Fp(OBJECT)h Fs(is)12 b(compared)h(to)g(the)g(existing)e(arrest)i (reasons)f(using)g(an)120 2457 y Ft(eq)f Fs(test.)120 2545 y(Revoking)i(an)h(arrest)g(reason)g(may)h(cause)f(a)g(process)g (to)f(become)i(activated.)k(In)14 b(particular,)h(when)e(the)120 2608 y(last)d(arrest)h(reason)f(for)h(a)g(process)f(is)g(removed,)h (the)g(process)f(is)g(\(re-\)activated)g(if)h(it)f(has)g(at)h(least)f (one)g(run)120 2670 y(reason.)p eop %%Page: 305 306 305 305 bop 0 -58 a Fs(Appendix)10 b(D:)g(The)h(ILU)h(Common)f(Lisp)f (Lightweight)f(Process)i(System)675 b(305)1739 183 y(Function)-1902 b Fo(process-revoke-run-reason)22 b Fk(\()p Fp(PROCESS)12 b Ft(process)p Fk(\))f Fp(OBJECT)120 246 y Fs(Removes)f Fp(OBJECT)k Fs(from)c(the)g(list)e(of)i(run)g(reasons)f(for)h Fp(PROCESS)p Fs(.)h(It)f(is)g(an)f(error)i(if)e Fp(PROCESS)14 b Fs(is)9 b(not)120 308 y Ft(ilu-process:processp)p Fs(.)18 b(The)c Fp(OBJECT)k Fs(argument)13 b(is)h(compared)g(to)f(the)h (existing)e(run)i(reasons)120 370 y(using)c(an)h Ft(eq)g Fs(test.)120 457 y(Revoking)e(a)h(run)g(reason)g(may)h(cause)f(a)g (process)g(to)g(become)g(inactive.)g(In)h(particular,)f(when)f(the)h (last)f(run)120 520 y(reason)i(for)g(a)h(process)f(is)f(removed,)i(the) f(process)g(is)f(made)i(inactive)e(\(if)i(it)e(was)h(previously)f (activate\).)1739 632 y(Function)-1902 b Fo(process-run-reasons)23 b Fk(\()p Fp(PROCESS)12 b Ft(process)p Fk(\))120 695 y Fs(Returns)22 b(the)g(list)e(of)j(run)f(reasons)f(for)h Fp(PROCESS)p Fs(.)i(It)e(is)g(an)g(error)h(if)f Fp(PROCESS)j Fs(is)d(not)f Ft(ilu-)120 757 y(process:processp)p Fs(.)0 882 y Fo(D.8.6)26 b(Accessing)15 b(And)g(Modifying)e(The)j(Properties)f (Of)f(A)i(Process)1739 1011 y Fs(Function)-1902 b Fo(process-active-p) 22 b Fk(\()p Fp(PROCESS)12 b Ft(process)p Fk(\))f Ft(=>)g(boolean)120 1073 y Fs(Returns)16 b(non-)p Ft(nil)f Fs(if)h Fp(PROCESS)k Fs(is)15 b(an)h(active)g(process)g(object;)h(that)f(is,)h(a)g(process)e (with)g(no)h(arrest)120 1136 y(reasons)g(and)g(at)h(least)f(one)g(run)h (reason.)27 b(Otherwise,)18 b(this)d(function)g(returns)h Ft(nil)p Fs(.)28 b(It)16 b(is)g(an)h(error)g(if)120 1198 y Fp(PROCESS)e Fs(is)10 b(not)h Ft(ilu-process:processp)p Fs(.)1739 1311 y(Function)-1902 b Fo(process-alive-p)22 b Fk(\()p Fp(PROCESS)12 b Ft(process)p Fk(\))f Ft(=>)h(boolean)120 1373 y Fs(Returns)17 b(non-)p Ft(nil)g Fs(if)h Fp(PROCESS)j Fs(is)c(alive)g(\(that)g(is,)j(has)d(been)h(created)g(but)f(has)g(not)g (been)h(killed\).)120 1435 y(Essentially,)10 b(a)i(process)f(is)g (alive)g(if)h(it)f(is)g(on)g(the)g(list)g(returned)g(by)g Ft(ilu-process:all-processes)p Fs(.)120 1497 y(It)g(is)g(an)g(error)h (if)f Fp(PROCESS)j Fs(is)d(not)g Ft(ilu-process:processp)p Fs(.)1739 1610 y(Function)-1902 b Fo(process-initial-form)21 b Fk(\()p Fp(PROCESS)13 b Ft(process)p Fk(\))e Ft(=>)g(consp)120 1672 y Fs(Returns)j(the)f(initial-form)g(of)h(the)f Ft(process)h Fs(object)f Fp(PROCESS)p Fs(.)j(It)d(is)h(an)g(error)g(if)g Fp(PROCESS)j Fs(is)d(not)120 1735 y Ft(ilu-process:processp)p Fs(.)c(Note)h(that)f(the)h(returned)g(value)g(is)f(not)h(an)g Ft(eval)p Fs(able)g(form.)h(It)f(is)g(merely)120 1797 y(the)18 b Ft(cons)f Fs(of)h(the)g(process's)f(intial)g(function)f (onto)h(a)i(list)d(of)i(the)g(initial)e(arguments)i(passed)f(to)g(the) 120 1859 y(function.)10 b(\(See)i Ft(ilu-process:fork-process)p Fs(.\))1739 1972 y(Function)-1902 b Fo(process-name)23 b Fk(\()p Fp(PROCESS)13 b Ft(process)p Fk(\))e Ft(=>)g(string)120 2034 y Fs(Returns)21 b(the)g(name)h(of)f(the)g Ft(process)g Fs(object)g Fp(PROCESS)p Fs(.)i(It)e(is)g(an)g(error)h(if)f Fp(PROCESS)k Fs(is)c(not)120 2096 y Ft(ilu-process:processp)p Fs(.)e(The)14 b Ft(ilu-process:process-active-p)d Fs(function)i(can)h (be)h(used)120 2159 y(with)10 b Ft(setf)h Fs(to)g(change)g(the)g(name)h (of)f(a)g(process.)1739 2271 y(Function)-1902 b Fo(process-priority)22 b Fk(\()p Fp(PROCESS)13 b Ft(process)p Fk(\))d Ft(=>)i(integer)120 2334 y Fs(Returns)f(the)g(scheduling)f(priority)g(for)i(the)f Ft(process)g Fs(object)g Fp(PROCESS)p Fs(.)i(It)e(is)g(an)h(error)g(if) f Fp(PROCESS)120 2396 y Fs(is)g(not)h Ft(ilu-process:processp)p Fs(.)g(The)g Ft(ilu-process:process-priority)d Fs(function)i(can)h(be) 120 2458 y(used)f(with)f Ft(setf)h Fs(to)g(change)g(the)g(priority)e (of)j(a)f(process.)120 2545 y(When)h(the)f(priorities)f(are)j(set,)f(a) g(small)g(integer)f(is)h(generally)f(used.)i(Process)f(priorities)e (default)h(to)h(zero)120 2608 y(\(0\).)f(Processes)f(with)f(higher)h (priorities)e(are)j(given)e(scheduling)f(preference.)13 b(Priorities)8 b(can)j(be)f(negative)120 2670 y(if)h(a)h(process)e (should)g(run)h(as)g(a)h(background)e(task)g(when)h(nothing)e(else)i (is)g(running.)p eop %%Page: 306 307 306 306 bop 0 -58 a Fs(Appendix)10 b(D:)g(The)h(ILU)h(Common)f(Lisp)f (Lightweight)f(Process)i(System)675 b(306)120 183 y(Note)12 b(that)f(an)i(implementation)e(is)g(free)i(to)f(ignore)g(process)f (priorities.)i(Setting)f(a)g(process's)g(priority)f(is)120 246 y(merely)h(advisory.)g(For)g(this)f(reason,)h(the)f(value)h (returned)f(by)h Ft(ilu-process:process-priority)120 308 y Fs(may)g(not)e(match)i(the)e(most)h(recent)h Ft(setf)f Fs(on)f Ft(ilu-process:process-priority)p Fs(.)1739 433 y(Function)-1902 b Fo(process-quantum)22 b Fk(\()p Fp(PROCESS)12 b Ft(process)p Fk(\))f Ft(=>)g Fk(\()p Ft(or)h(numberp)e(nil)p Fk(\))120 495 y Fs(Returns)i(the)h(quantum,)f(which)g(is)h(the)f (amount)g(of)h(time)g(the)f(scheduler)g(allows)g(a)h(process)f(to)g (run)h(each)120 557 y(time)h(its)e(is)h(rescheduled,)h(for)g(the)f Ft(process)g Fs(object)g Fp(PROCESS)p Fs(.)i(It)f(is)f(an)g(error)h(if) g Fp(PROCESS)j Fs(is)c(not)120 620 y Ft(ilu-process:processp)p Fs(.)28 b(The)17 b Ft(ilu-process:process-quantum)e Fs(function)h(can)h (be)h(used)120 682 y(with)10 b Ft(setf)h Fs(to)g(change)g(the)g (quantum)f(of)i(a)f(process.)120 773 y(The)g(quantum)f(is)h(measured)h (in)e(seconds)h(\(not)f(necessarily)h(integral\).)120 865 y(Note)h(that)g(an)h(implementation)e(is)i(free)g(to)f(ignore)g (process)h(quantums.)i(Setting)c(a)j(quantum)e(is)g(merely)120 927 y(advisory.)h(For)f(this)f(reason,)h(the)g(value)g(returned)f(by)h Ft(ilu-process:process-quantum)d Fs(may)k(not)120 989 y(match)e(the)g(most)g(recent)h Ft(setf)f Fs(on)f Ft (ilu-process:process-quantum)p Fs(.)120 1081 y(The)h(default)g(process) f(quantum)h(is)f(1.)1739 1206 y(Function)-1902 b Fo(process-wait-args) 22 b Fk(\()p Fp(PROCESS)13 b Ft(process)p Fk(\))e Ft(=>)g(list)120 1268 y Fs(Returns)23 b(a)g(list)f(of)h(the)f(arguments)h(being)f (passed)g(to)h(the)f(wait-function)f(of)i(the)g Ft(process)f Fs(ob-)120 1330 y(ject)c Fp(PROCESS)p Fs(.)j(It)d(is)h(an)f(error)i(if) e Fp(PROCESS)k Fs(is)c(not)g Ft(ilu-process:processp)p Fs(.)33 b(\(See)19 b Ft(ilu-)120 1393 y(process:process-wait)p Fs(.\))1739 1518 y(Function)-1902 b Fo(process-wait-function)20 b Fk(\()p Fp(PROCESS)13 b Ft(process)p Fk(\))d Ft(=>)i Fk(\()p Ft(or)f(functionp)f(nil)p Fk(\))120 1580 y Fs(Returns)h(the)g (wait-function)f(of)i(the)f Ft(process)g Fs(object)g Fp(PROCESS)p Fs(.)i(It)f(is)f(an)g(error)h(if)g Fp(PROCESS)j Fs(is)c(not)120 1642 y Ft(ilu-process:processp)p Fs(.)f(\(See)i Ft(ilu-process:process-wait)p Fs(.\))1739 1767 y(Function)-1902 b Fo(process-whostate)22 b Fk(\()p Fp(PROCESS)13 b Ft(process)p Fk(\))e Ft(=>)g(string)120 1830 y Fs(Returns)17 b(the)g(whostate)e(of)j (the)e Ft(process)h Fs(object)f Fp(PROCESS)p Fs(.)j(It)e(is)g(an)g (error)h(if)f Fp(PROCESS)j Fs(is)d(not)120 1892 y Ft (ilu-process:processp)p Fs(.)i(The)14 b Ft (ilu-process:process-whostate)d Fs(function)i(can)h(be)h(used)120 1954 y(with)9 b Ft(setf)h Fs(to)g(change)g(the)g(whostate)f(of)h(a)h (process.)f(\(See)i(also)d Ft(ilu-process:fork-process)f Fs(and)120 2016 y Ft(ilu-process:process-wait)p Fs(.\))1739 2141 y(Function)-1902 b Fo(show-process)23 b Fs(&optional)10 b(\()p Fp(PROCESS)i Ft(process)p Fs(\))f(\()p Fp(STREAM)h Ft(streamp)208 2204 y(cl:*standard-output*)p Fs(\))d(\()p Fp(VERBOSE)j Ft(boolean)24 b(nil)p Fs(\))120 2266 y(Displays)10 b(information)h(about)h(process)g Fp(PROCESS)p Fs(,)h(which)f(may)g(be) h(a)f Ft(process)g Fs(object)f(or)i(the)f(name)120 2328 y(of)g(a)f(process)g(known)g(to)g(the)g(scheduler.)h(If)g Fp(PROCESS)j Fs(is)c(a)h(symbol,)f(it)g(is)g(downcased)f(and)i (converted)120 2391 y(to)e(a)g(string.)g Fp(PROCESS)k Fs(defaults)9 b(to)h(the)f(current)h(process.)h(Output)e(is)g(is)h(to)g Fp(STREAM)p Fs(,)h(which)e(defaults)120 2453 y(to)k(the)g(value)g(of)h Ft(cl:*standard-output*)p Fs(.)j(If)d Fp(VERBOSE)k Fs(is)13 b Ft(nil)g Fs(\(defaults)g(to)g(non-)p Ft(nil)p Fs(\),)h(then)120 2515 y(only)c(non-)p Ft(nil)h Fs(fields)f(are)i(displayed)d(and)i(the)g (process's)g(initial-form)f(is)g(not)h(shown.)0 2653 y Fo(D.8.7)26 b(Miscellaneous)15 b(Process/Scheduler)g(Functions)g(And) f(Macros)p eop %%Page: 307 308 307 307 bop 0 -58 a Fs(Appendix)10 b(D:)g(The)h(ILU)h(Common)f(Lisp)f (Lightweight)f(Process)i(System)675 b(307)1739 183 y(Function)-1902 b Fo(process-allow-schedule)120 246 y Fs(Suspends)16 b(the)g(current)h(process)f(and)h(returns)f(to)h(the)f(scheduler.)28 b(All)16 b(other)h(processes)f(of)h(equal)f(or)120 308 y(higher)10 b(priority)g(have)h(a)h(chance)f(to)g(run)g(before)h (control)e(returns)g(to)h(the)g(current)g(process.)1739 431 y(Function)-1902 b Fo(process-interrupt)21 b Fk(\()p Fp(PROCESS)13 b Ft(process)p Fk(\))e(\()p Fp(FUNCTION)g Ft(function)p Fk(\))g Fs(&rest)g Fp(ARGS)120 493 y Fs(Forces)c Fp(PROCESS)k Fs(to)c(apply)g Fp(FUNCTION)j Fs(to)d Fp(ARGS)i Fs(when)e(it)g(is)g(next)g(scheduled.)g(When)g Fp(FUNCTION)120 556 y Fs(returns,)k Fp(PROCESS)k Fs(resumes)c(execution)f(where)h(it)g (was)g(interrupted.)120 646 y(In)c(general,)h Ft (ilu-process:process-interrupt)d Fs(is)i(run)g(immediately)g(\(that)g (is,)e(when)i Fp(PROCESS)120 709 y Fs(is)13 b(next)g(scheduled\))f(if)i Fp(PROCESS)j Fs(is)12 b(active,)j(even)e(if)g Fp(PROCESS)k Fs(is)c(a)h(process-wait.)j(If)d Fp(PROCESS)120 771 y Fs(is)e(not)f(active,)h Ft(ilu-process:process-interrupt)e Fs(may)i(wait)g(until)f Fp(PROCESS)k Fs(is)d(reactivated)120 833 y(before)f Fp(FUNCTION)16 b Fs(is)11 b(executed.)1782 956 y(Macro)-1900 b Fo(without-scheduling)20 b Fs(&body)10 b Fp(BODY)120 1019 y Fs(Evaluates)g(the)i(forms)f(in)g Fp(BODY)16 b Fs(with)10 b(scheduling)g(turned)h(off.)h(While)f(the)g (current-process)g(is)g(within)120 1081 y(the)16 b(scope)g(of)g Ft(ilu-process:without-scheduling)p Fs(,)f(no)h(other)g(process)g(will) f(run.)26 b(However,)120 1143 y(scheduling)7 b(may)g(be)g(resumed)g(if) g(a)g Ft(ilu-process:process)o(-wait)t Fs(or)g Ft(ilu-process:process-) 120 1205 y(allow-schedule)13 b Fs(is)g(executed)g(within)g(the)g(scope) h(of)f Ft(ilu-process:without-scheduling)p Fs(.)120 1268 y(Most)i(Common)h(Lisp)e(I/O)h(functions)f(as)h(well)g(as)g(the)g (function)f Ft(sleep)h Fs(usually)f(call)h(some)g(form)h(of)120 1330 y Ft(ilu-process:process-allow-scheduling)c Fs(and)j(hence)g(will) f(resume)h(scheduling)e(if)i(called)120 1392 y(within)10 b(the)g(scope)h(of)h(a)f Ft(ilu-process:without-scheduling)p Fs(.)0 1528 y Fo(D.8.8)26 b(Process)16 b(Locks)g(Interface)1807 1668 y Fs(Type)-1901 b Fo(i)23 b Fn(lu-process:process-lock)120 1730 y Fs(The)c(process)f(lock)h(object.)34 b(You)19 b(should)e(access)j(fields)e(of)h(this)f(lock)g(using)g(only)g(the)h (functional)120 1792 y(interface)11 b(listed)f(in)h(this)f(section.) 1739 1916 y(Function)-1902 b Fo(make-process-lock)22 b Fs(&key)12 b(\()p Fp(NAME)f Ft(\(or)g(nil)g(string\))24 b(nil)p Fs(\))12 b Ft(=>)f(process-lock)120 1978 y Fs(Creates)h(and)f (returns)f(a)i Ft(process-lock)e Fs(object)h(with)f Fp(NAME)15 b Fs(as)d(the)e(name)i(of)f(the)g(lock.)1739 2101 y(Function)-1902 b Fo(process-lock)23 b Fk(\()p Fp(LOCK)11 b Ft (ilu-process:process-lock)p Fk(\))e Fs(&optional)208 2163 y(\()p Fp(LOCK-VALUE)h Ft(process)24 b (\(ilu-process:current-process\))p Fs(\))9 b(\()p Fp(WHOSTATE)h Ft(\(or)208 2226 y(nil)h(string\))24 b()p Fs(\))120 2288 y(Grabs)13 b Fp(LOCK)p Fs(,)i(entering)d Fp(LOCK-VALUE)18 b Fs(as)13 b(the)h(lock's)f(locker.)19 b Fp(LOCK-VALUE)e Fs(defaults)c(to)g(the)120 2350 y(current)e(process.) g(It)g(is)g(an)g(error)h(if)f Fp(LOCK)16 b Fs(is)11 b(not)f Ft(ilu-process:process-lock-p)p Fs(.)120 2441 y(If)15 b Fp(LOCK)20 b Fs(is)15 b(already)g(locked,)g(then)g(the)f(current)h (process)g(waits)f(until)f(it)i(is)f(unlocked.)22 b(The)15 b(waiting)120 2503 y(is)g(done)g(using)f Ft(ilu-process:process-wait)p Fs(.)22 b(The)16 b Fp(WHOSTATE)j Fs(argument)c(is)g(a)h(string)e(that) 120 2565 y(is)22 b(used)h(as)g(the)f(whostate)g(of)h(the)f(process)h (if)f(the)h(process)f(is)h(forced)g(to)f(wait;)28 b(defaults)22 b(to)g(an)120 2628 y(implementation-dependent)9 b(string.)p eop %%Page: 308 309 308 308 bop 0 -58 a Fs(Appendix)10 b(D:)g(The)h(ILU)h(Common)f(Lisp)f (Lightweight)f(Process)i(System)675 b(308)1739 183 y(Function)-1902 b Fo(process-lock-locker)22 b Fk(\()p Fp(LOCK)11 b Ft (ilu-process:process-lock)p Fk(\))e Ft(=>)j(t)120 246 y Fs(Returns)f(the)h(current)f(locker)h(of)f Fp(LOCK)p Fs(.)h(It)g(is)f(an)h(error)g(if)f Fp(LOCK)17 b Fs(is)11 b(not)g Ft(ilu-process:process-)120 308 y(lock-p)p Fs(.)g(This)f (function)f(returns)h Ft(nil)h Fs(if)g Fp(LOCK)16 b Fs(is)10 b(currently)g(unlocked,)g(that)g(is,)h(has)g(no)f(locker.)h(This)120 370 y(value)g(is)f Fp(not)15 b Fs(setfable.)c(You)g(should)f(use)h Ft(ilu-process:process-lock)e Fs(to)i(set)f(the)h(locker.)1563 485 y(Setf-able)h(Function)-1902 b Fo(process-lock-name)22 b Fk(\()p Fp(LOCK)12 b Ft(ilu-process:process-lock)p Fk(\))d Fp(=)p Ft(>)i Fk(\()p Ft(or)208 547 y(nil)g(string)p Fk(\))120 609 y Fs(Returns)c(the)g(name)g(associated)g(with)f Fp(LOCK)p Fs(.)h(It)g(i)o(s)g(an)f(error)h(if)g Fp(LOCK)i Fs(is)e(not)g Ft(ilu-process:pro)o(cess-)120 671 y(lock-p)p Fs(.)24 b(The)15 b Ft(ilu-process:process-lock-locker)e Fs(function)h(can)i(be)g(used)f(with)f Ft(setf)i Fs(to)120 734 y(change)11 b(the)g(name)h(of)f(a)h(process)e(lock.)1739 848 y(Function)-1902 b Fo(process-lock-p)22 b Fp(OBJECT)11 b Ft(=>)g(boolean)120 910 y Fs(Returns)j(non-)p Ft(nil)f Fs(if)i Fp(OBJECT)j Fs(is)c(a)g Ft(ilu-process:process-lock)p Fs(.)19 b(Otherwise,)14 b(this)g(function)120 973 y(returns)d Ft(nil)p Fs(.)1739 1087 y(Function)-1902 b Fo(process-unlock)22 b Fk(\()p Fp(LOCK)11 b Ft(ilu-process:process-lock)p Fk(\))e Fs(&optional)208 1149 y(\()p Fp(LOCK-VALUE)g Ft(t)24 b(\(ilu-process:current-process\))p Fs(\))9 b(\()p Fp(ERROR-P)j Ft(boolean)23 b(nil)p Fs(\))120 1212 y(Releases)11 b Fp(LOCK)p Fs(.)h(It)f(is)g(an)g(error)h(if)f Fp(LOCK)16 b Fs(is)11 b(not)f Ft(ilu-process:process-lock-p)p Fs(.)120 1300 y(If)i Fp(LOCK)5 b Fs('s)12 b(locker)g(is)g(not)f Ft(eq)h Fs(to)f Fp(LOCK-VALUE)p Fs(,)h(which)f(defaults)g(to)h(the)g (current)g(process,)g(then)f(an)120 1362 y(error)h(is)e(signalled)g (unless)g Fp(ERROR-P)17 b Fs(is)10 b Ft(nil)h Fs(\(it)g(defaults)f(to)h Ft(t)p Fs(\).)1782 1476 y(Macro)-1900 b Fo(with-process-lock)21 b Fk(\()p Fp(LOCK)12 b Ft(ilu-process:process-lock)p Fk(\))d Fs(&key)208 1539 y(\()p Fp(NORECURSIVE)i Ft(boolean)24 b(nil)p Fs(\))12 b(&body)e Fp(BODY)120 1601 y Fs(Locks)g Fp(LOCK)16 b Fs(for)10 b(the)h(current)f(process)g(and)h(evaluates)f (the)g(forms)h(in)f Fp(BODY)p Fs(.)h(It)g(is)f(an)h(error)g(if)f Fp(LOCK)120 1663 y Fs(is)h(not)f Ft(ilu-process:process-lock-p)p Fs(.)120 1751 y(If)22 b Fp(NORECURSIVE)j Fs(is)c Ft(t)g Fs(\(the)g(default\),)j(and)d(if)g(the)g(current)g(process)f(already)i (owns)e(the)h(lock)120 1813 y(\(determined)15 b(dynamically\),)g(then)f (no)h(action)f(is)g(taken.)23 b(If)15 b Fp(NORECURSIVE)20 b Fs(is)14 b(non-)p Ft(nil)p Fs(,)i(then)e(an)120 1876 y(error)e(is)e(signalled)g(if)h(the)g(current)g(process)g(already)g (owns)f Fp(LOCK)p Fs(.)120 1964 y(If)32 b Fp(LOCK)k Fs(is)31 b(held)f(by)h(another)g(process,)36 b(then)31 b(the)g(current)g (process)g(waits)f(as)i(in)e Ft(ilu-)120 2026 y(process:process-lock)p Fs(,)10 b(which)g(is)h(described)g(earlier)g(in)g(this)f(section.)0 2166 y Fu(D.9)30 b(Handling)14 b(Errors)62 2271 y Fs(Errors)e(in)g (most)g(of)g(the)g(process)g(functions)e(will)h(cause)i(a)f(break.)j (There)e(are)f(no)g(special)g(tricks)f(to)h(handling)f(these)0 2333 y(errors.)62 2421 y(The)16 b Ft(:focus)f Fs(command)h(is)f(an)h (important)e(tool)g(for)i(using)e(the)i(Allegro)e(CL)i(debugger)f(in)g (a)h(multiple-process)0 2483 y(environment.)k(In)15 b(particular,)f(in) g(Allegro)g(CL)g(a)h(new)f(process)g(by)g(default)g(shares)g(its)g (standard)f(input/output)e(\(I/O\))0 2545 y(stream)i(with)g(the)f(Lisp) h(listener.)j(Generally,)d(this)f(is)h(not)f(a)i(problem)f(because)g (the)g(process)f(runs)h(in)g(the)f(background)0 2608 y(and)h(does)g(no)g(I/O.)g(However,)h(if)f(the)g(process)g(enters)g(a)g (break,)h(the)f(debugger)g(needs)g(to)g(use)g(the)f(process's)h (standard)0 2670 y(I/O)e(stream)g(to)f(interact)g(with)g(the)h(user.)g (This)f(could)g(lead)h(to)f(a)h(problem)g(because)g(the)f(debugger)g (I/O)h(from)g(the)g(broken)p eop %%Page: 309 310 309 309 bop 0 -58 a Fs(Appendix)10 b(D:)g(The)h(ILU)h(Common)f(Lisp)f (Lightweight)f(Process)i(System)675 b(309)0 183 y(process)12 b(will)g(be)h(interleaved)f(with)f(the)i(Lisp)f(listener's)f(normal)i (I/O.)g(Specifically,)g(the)f(system)g(will)g(not)g(be)h(able)g(to)0 246 y(determine)e(to)g(which)f(process)h(user)g(input)f(is)h(directed.) 62 340 y(To)f(avoid)g(this)g(situation,)e(Allegro)i(CL)h(has)f(the)g (notion)f(of)i(a)g Fp(focus)f(process)p Fs(.)h(Input)e(coming)h(from)i (the)e(shared)g(Lisp)0 402 y(listener)g(I/O)h(stream)g(is)g(always)f (sent)h(to)g(the)f(focused)h(process.)g(Usually)f(this)g(is)g(the)h (Lisp)f(listener)g(process.)h(However,)0 464 y(if)f(a)g(background)f (process)g(breaks,)h(you)g(can)g(use)f(the)h Ft(:focus)f Fs(command)i(to)e(focus)h(on)f(the)h(broken)f(process)g(and)h(allow)0 526 y(you)15 b(to)g(send)f(input)g(to)h(the)g(debugger)g(running)f(in)h (that)f(process.)24 b(When)15 b(the)g(debugging)e(is)i(complete,)i Ft(:focus)e Fs(is)0 589 y(automatically)10 b(returned)h(to)f(the)h (Lisp)f(listener)h(process.)62 683 y(The)g(following)e(transcript)h (illustrates)g(the)h(use)f(of)i(the)f Ft(:focus)f Fs(command)i(in)f (Allegro)f(CL:)120 777 y Ft(;;;___________________________________)o (___________)o(__________)o(___________)o(____)120 827 y(;;;)25 b(Start)f(out)h(focused)f(on)h(the)f(Lisp)h(listener)f (process.)g(List)h(all)f(processes.)120 877 y()f(:processes) 120 927 y("Initial)g(Lisp)h(Listener")f(is)g(active.)120 976 y(;;;___________________________________)o(___________)o (__________)o(___________)o(____)120 1026 y(;;;)h(Second,)f(start)g(a)h (test)g(process)f(that)g(will)h(enter)f(a)h(break)g(immediately.)120 1076 y()f(\(ilu-process:fork-process)f("test")h(#'error)g ("test)h(break"\))120 1126 y(#)120 1176 y()120 1225 y(;;;___________________________________)o (___________)o(__)120 1275 y(;;;)g(Process)f(test)g(enters)h(a)g (break.)120 1375 y(Error:)f(test)h(break)120 1474 y(;;;)g(Still)f (speaking)g(to)h(the)g(Lisp)f(listener)g(process,)g(list)h(the)g (processes.)120 1524 y([1])g()h(:processes)120 1574 y("test")f(is)h(waiting)f(for)h(terminal)f(input.)120 1624 y("Initial)g(Lisp)h(Listener")f(is)g(active.)120 1674 y()120 1724 y(;;;___________________________________)o (___________)o(__)120 1773 y(;;;)g(Now)f(refocus)h(on)f(the)h(test)f (process.)120 1823 y()f(:focus)h("test")120 1873 y(Focus)f(is)h(now)g(on)g(the)f("test")g(process.)120 1923 y(;;;)50 b(Look)24 b(at)h(stack)f(of)h(test)f(process.)120 1973 y()f(:zoom)120 2022 y(Evaluation)g(stack)g(of)h(process)f ("test":)145 2072 y(->\(EXCL::STM-SY-READ-CHAR)e(#\))195 2122 y(\(PEEK-CHAR)24 b(NIL)g(#)24 b(NIL)h(:EOF)120 2172 y(NIL\))195 2222 y(\(ERROR)f("test)h(break"\))195 2271 y(\(ILU-PROCESS::PROCESS-INITIALIZATIO)o(N-FUNCTION)c(NIL)269 2321 y(#)24 b(\("test)g(break"\)\))120 2371 y(;;;___________________________________)o(___________)o(__)120 2421 y(;;;)h(Kill)f(the)h(test)f(process)h(\(which)f(is)h(the)f (current)h(process\).)120 2471 y()f(:kill)120 2521 y(Do)h(you)f(really)h(want)f(to)h(kill)f(process)h("test")f([n]?)h (y)120 2620 y(;;;)g(Automatic)f(refocus)g(to)h(Lisp)f(listener.)g(Ask)h (listener)f(to)h(list)f(all)h(processes.)120 2670 y(Focus)f(is)h(now)g (on)g(the)f("listener")g(process.)p eop %%Page: 310 311 310 310 bop 0 -58 a Fs(Appendix)10 b(D:)g(The)h(ILU)h(Common)f(Lisp)f (Lightweight)f(Process)i(System)675 b(310)120 183 y Ft()f(:processes)120 233 y("Initial)g(Lisp)h(Listener")f(is)g (active.)62 345 y Fs(For)19 b(more)h(information)d(on)h(the)h(Lisp)e (listener)h(interface)h(and)f(the)h(Lisp)e(debugger,)k(see)e(the)f (manual)h(for)f(the)0 407 y(implementation)8 b(of)i(Common)g(Lisp)e (that)h(you)g(are)h(using.)g(For)g(Allegro)e(CL,)j(refer)f(to)f (chapters)g(4)h(and)f(5)h(of)f Fp([Franz-92])p Fs(.)0 544 y Fu(D.10)30 b(Notes)62 648 y Fs(It)10 b(is)g(possible)e(for)i(a)g (process)g(to)f(do)h(a)g(non-blocking)e(attempt)i(to)f(lock)h(a)g (process)f(lock)h(using)f(the)g(following)f(idiom:)145 735 y Ft(\(ilu-process:without-scheduling)97 b(;)24 b(Make)h(sure)g (this)f(is)h(not)f(interrupted.)170 785 y(\(if)g (\(ilu-process:process-lock-locker)e(LOCK\))j(;)g(Is)f(lock)h(free?)269 835 y(\(ilu-process:process-lock)e(LOCK\)\)\))149 b(;)25 b(Lock)f(is)h(free,)f(grab)h(it.)145 885 y(\(if)g(\(eq)697 b(;)24 b(Did)h(we)g(get)f(the)h(lock)g(for)f(this)h(process?)269 935 y(\(ilu-process:process-lock-locker)d(LOCK\))269 984 y(\(ilu-process:current-process\)\))245 1034 y(\(prog1)622 b(;)24 b(Yes,)h(do)g(A,)f(releasing)g(lock)h(on)g(way)f(out.)294 1084 y(...A...)294 1134 y(\(ilu-process:process-unlock)f(LOCK\)\))195 1184 y(...B...)647 b(;)24 b(No,)h(do)g(B,)g(which)f(does)g(not)h (depend)f(on)120 1233 y(lock.)195 1283 y(\))0 1420 y Fu(D.11)30 b(References)62 1524 y Fp([Franz-92])q Fs(:)19 b Fn(Allegro)28 b(Common)g(Lisp)h(User)f(Guide)p Fs(.)c(Release)16 b(4.1.)23 b(Berkeley,)17 b(CA:)e(Franz)g(Incorporated,)0 1586 y(March)d(1992.)62 1673 y Fp(Bach,)18 b(M.J.)p Fs(,)g Fn(The)30 b(Design)e(of)h(the)h(UNIX)e(Operating)i(System)p Fs(.)24 b(Englewood)14 b(Cliffs,)j(NJ:)d(Prentice-Hall,)0 1736 y(1986.)d(Especially)e(read)j(Chapters)f(6,)g(7,)h(and)f(8.)62 1823 y Fp(Deitel,)23 b(H.M.)f Fn(An)35 b(Introduction)g(to)f(Operating) h(Systems)p Fs(.)40 b(Reading,)24 b(MA:)c(Addison-Wesley,)i(1984.)0 1885 y(Especially)10 b(read)h(Part)h(2.)62 1972 y Fp(Kernighan,)19 b(B.W.)g(and)f(R.)h(Pike.)p Fs(,)i Fn(The)32 b(UNIX)f(Programming)f (Environment)p Fs(.)j(Englewood)16 b(Cliffs,)k(NJ:)0 2035 y(Prentice-Hall,)11 b(1984.)g(Especially)e(read)j(Sections)e(1.4)i (and)f(7.4.)62 2122 y Fp(Tanenbaum,)26 b(A.S.)d Fn(Operating)37 b(Systems:)47 b(Design)36 b(and)g(Implementation)p Fs(.)46 b(Englewood)20 b(Cliffs,)26 b(NJ:)0 2184 y(Prentice-Hall,)11 b(1987.)g(Especially)e(read)j(Chapter)f(2.)p eop %%Page: 311 312 311 311 bop 0 -58 a Fs(Appendix)10 b(E:)g(Porting)h(ILU)g(to)f(Common)i (Lisp)e(Implementations)781 b(311)0 183 y Fq(Appendix)14 b(E)36 b(Porting)14 b(ILU)h(to)g(Common)f(Lisp)g(Implementations)0 362 y Fu(E.1)30 b(Introduction)62 466 y Fs(The)10 b(ILU)f(runtime)h (for)g(Common)g(Lisp)e(is)h(largely)h(written)e(in)h(vanilla)g(Common)h (Lisp.)g(The)g(lisp-implementation-)0 528 y(specific)k(details)g(are)h (confined)f(to)g(a)h(small)g(number)f(of)h(macros)g(and)g(functions)e (which)h(need)g(to)h(be)f(defined.)22 b(\(This)0 590 y(assumes)11 b(that)g(you)h(have)f(a)h(working)f(port)g(of)h(ILU)f(and) h(its)f(C)h(support)e(already)i(on)f(your)g(operating)g(system)g (platform.)0 652 y(If)22 b(not,)h(you)d(will)g(have)i(to)e(begin)g(by)h (doing)f(that.\))41 b(Aside)20 b(from)i(these)f(macros)g(and)g (functions,)i(you)d(do)h(not)0 715 y(require)15 b(anything)f(not)g (specified)h(in)g(the)g(Common)h(Lisp)e(standard.)23 b(You)15 b(do)g(not)g(need)g(Lisp)f(code)i(for)f(TCP/IP)h(or)0 777 y(socket)g(support.)27 b(The)16 b(major)h(work)g(is)f(to)g(write)g (ilu-xxx.lisp,)g(where)h Ft(")p Fs(xxx)p Ft(")f Fs(is)h(the)f (specifier)g(for)h(the)g(particular)0 839 y(implementation)d(of)i (Common)f(Lisp)g(in)g(use,)i(and)e(any)g(necessary)h(xxx-to-C)f(shims)f (in)h(ilu-xxx-skin.c.)23 b(There)16 b(are)0 901 y(a)h(number)g(of)g (things)e(that)h(have)h(to)f(be)h(done)f(in)h(ilu-xxx.lisp.)26 b(They)16 b(can)h(be)g(regarded)g(in)f(three)h(major)g(sections:)0 964 y(providing)f(the)i(ILU)g(notion)e(of)i(foreign-function)e(calls,)k (connecting)d(the)h(Lisp's)e(garbage)j(collector)e(to)g(the)h(ILU)0 1026 y(network)11 b(GC,)h(and)f(providing)f(either)h(a)h(threaded)f(or) g(event-loop)f(model)i(of)f(operation.)g(In)h(addition,)e(there)i(is)f (a)h(small)0 1088 y(hook)e(that)h(has)g(to)f(be)i(provided)e(to)g (convert)h(between)g(character)h(sets.)0 1223 y Fu(E.2)30 b(Providing)13 b(the)i(ILU)g(notion)g(of)g(foreign-function)f(calls.)62 1326 y Fs(Perhaps)g(the)f(trickiest)f(is)g(to)h(provide)g(an)g (implementation)f(of)h(the)g(macro)h Ft(")p Fs(define-c-function)p Ft(")p Fs(.)j(This)12 b(maps)h(the)0 1389 y(ILU)e(notion)f(of)h(a)g (call)g(into)f(C)i(into)e(the)h(native)g(lisp)f(notion.)g Ft(")p Fs(define-c-function)p Ft(")f Fs(has)i(the)g(signature)1782 1498 y(Macro)-1900 b Fo(ilu::define-c-fu)o(ncti)o(on)20 b Fk(\()p Fp(LISP-NAME)12 b Ft(symbol)p Fk(\))f(\()p Fp(DOC-STRING)g Ft(string)p Fk(\))208 1560 y(\()p Fp(C-NAME)g Ft(string)p Fk(\))g(\()p Fp(ARGS)h Ft(list)p Fk(\))f(\()p Fp(RETURN-TYPE)g Ft(keyword)p Fk(\))g Fs(&key)g(\()p Fp(INLINE)208 1622 y Ft(boolean)24 b(cl:nil)p Fs(\))120 1685 y(The)13 b Fp(LISP-NAME)18 b Fs(is)13 b(a)g(symbol)f(which)h(will) f(be)h(the)g(name)h(of)f(the)g(function)f(in)g(Common)i(Lisp.)i(The)120 1747 y Fp(C-NAME)h Fs(is)c(a)g(string)e(which)h(will)f(be)i(the)f (``regular'')h(C)h(name)f(of)f(the)h(C)g(function)e(to)h(be)h(called;)g (that)120 1809 y(is,)k(the)e(name)h(as)g(it)f(would)g(be)h(named)g(in)f (a)h(C)g(program,)h(rather)f(than)f(the)h(name)g(of)g(the)f(symbol)g (for)120 1871 y(the)g(entry)f(point)f(of)i(the)g(function.)21 b Fp(ARGS)c Fs(is)e(a)g(list)f(of)g(arg)h(which)g(describe)f(the)h (signature)e(of)i(the)g(C)120 1934 y(function,)c(where)g(each)h(arg)g (is)f(either)g(a)h(keyword)e(or)i(a)g(2-tuple.)f(If)h(a)f(keyword,)h (the)f(keyword)f(indicates)120 1996 y(the)h(type)g(of)g(the)g (argument.)g(Allowable)f(argument)h(types)f(are)157 2083 y Fr(\017)30 b Ft(:short-cardinal)10 b Fs(\(unsigned-byte)f(16\))157 2157 y Fr(\017)30 b Ft(:cardinal)11 b Fs(\(unsigned-byte)e(32\))157 2230 y Fr(\017)30 b Ft(:short-integer)10 b Fs(\(signed-byte)g(16\))157 2303 y Fr(\017)30 b Ft(:integer)11 b Fs(\(signed-byte)e(32\))157 2377 y Fr(\017)30 b Ft(:short-real)10 b Fs(\(single-float\))157 2450 y Fr(\017)30 b Ft(:real)11 b Fs(\(double-float\))157 2523 y Fr(\017)30 b Ft(:byte)11 b Fs(\(0)g Ft(<)p Fs(=)g(fixnum)g Ft(<)g Fs(256\))157 2597 y Fr(\017)30 b Ft(:boolean)11 b Fs(\(t)g(or)g(nil\))157 2670 y Fr(\017)30 b Ft(:fixnum)11 b Fs(\(-2)p Ft(^)p Fs(27)f Ft(<)p Fs(fixnum)h Ft(<)g Fs(2)p Ft(^)p Fs(27)g(\(about\)\))p eop %%Page: 312 313 312 312 bop 0 -58 a Fs(Appendix)10 b(E:)g(Porting)h(ILU)g(to)f(Common)i (Lisp)e(Implementations)781 b(312)157 183 y Fr(\017)30 b Ft(:string)11 b Fs(\(string\))157 262 y Fr(\017)30 b Ft(:constant-string)10 b Fs(\(string\))157 341 y Fr(\017)30 b Ft(:bytes)11 b(\(vector)g(of)g(\(unsigned-byte)f(8\)\))157 420 y Fr(\017)30 b Ft(:unicode)11 b Fs(\(Unicode)f(if)h(your)g(Lisp)f (supports)g(it,)h(vector)f(of)i(\(unsigned-byte)d(16\))i(otherwise\)) 157 500 y Fr(\017)30 b Ft(:ilu-call)11 b Fs(\(unsigned-byte)e(32\))157 579 y Fr(\017)30 b Ft(:ilu-object)10 b Fs(\(unsigned-byte)f(32\))157 658 y Fr(\017)30 b Ft(:ilu-class)10 b Fs(\(unsigned-byte)f(32\))157 737 y Fr(\017)30 b Ft(:ilu-server)10 b Fs(\(unsigned-byte)f(32\))157 816 y Fr(\017)30 b Ft(:char*)11 b Fs(\(unsigned-byte)e(32\))157 895 y Fr(\017)30 b Ft(:pointer)11 b Fs(\(unsigned-byte)e(32\))120 1016 y(If)18 b(the)f(arg)g(is)g(a)h(2-tuple,)g(the)f(cadr)h(is)f(the)g (type,)i(and)e(the)g(car)h(is)f(the)g(``direction'',)i(which)d(may)i (be)120 1078 y(either)13 b(:in,)h Ft(:out)p Fs(,)g(or)g Ft(:inout)p Fs(.)k(Args)13 b(with)g(no)g(``direction'')g(are)h(by)g (default)f(of)g(direction)g Ft(:in)p Fs(.)18 b(The)120 1140 y Fp(RETURN-TYPE)h Fs(argument)14 b(is)g(a)h(keyword)f(for)h(the)f (return)g(type)g(of)h(the)f(function,)h(which)e(is)h(drawn)120 1202 y(from)e(the)f(same)h(set)f(of)g(keywords)g(as)g(the)g(argument)g (types.)h(Return-types)e(may)i(also)f(use)g(the)g(keyword)120 1265 y(:void,)17 b(which)f(specifies)g(that)h(no)f(value)h(is)f (returned.)28 b(The)17 b Fp(INLINE)k Fs(keyword)16 b(is)g(a)i(boolean)e (value)120 1327 y(which,)11 b(if)f Ft(cl:t)p Fs(,)h(indicates)f(that)g (the)h(necessary)g(type-checking)e(has)i(been)g(assured)f(by)g(the)h (application)120 1389 y(code,)h(and)f(that)f(the)h(C)h(function)e(may)h (be)g(called)g(directly)g(without)e(type-checking)h(the)h(parameters.) 120 1481 y Ft(define-c-function)j Fs(defines)h(a)h(Common)g(Lisp)f (function)f(with)h(a)h(possibly)d(different)i(signature)120 1543 y(from)g(the)f(C)h(function.)20 b(This)13 b(function)g(has)h (arguments)g(which)g(consist)f(of)h(all)g(the)g Ft(:in)g Fs(and)h Ft(:inout)120 1605 y Fs(arguments)9 b(of)h(the)f(C)h (function,)f(in)h(the)f(order)h(in)f(which)g(they)g(occur)h(in)f(the)g (signature)g(of)h(the)f(C)h(function.)120 1668 y(It)15 b(returns)f(possibly)e(multiple)i(values,)h(which)f(consist)f(of)i(the) f(specified)h(return)f(type,)h(if)g(not)f Ft(:void)p Fs(,)120 1730 y(followed)f(by)i(any)f Ft(:out)g Fs(and)h Ft(:inout)f Fs(arguments)g(to)g(the)h(C)g(function,)f(in)h(the)f(order) h(in)f(which)g(they)120 1792 y(occur)d(in)g(the)g(signature)f(of)h(the) g(C)h(function.)120 1884 y Ft(define-c-function)d Fs(assumes)i(that)f (the)g(C)h(function)f(will)f(call)i(back)f(into)g(Common)h(Lisp,)f(and) h(that)120 1946 y(gc)e(may)h(occur)f(during)f(the)h(invocation)f(of)h (the)g(C)h(function.)f(Therefore,)i(any)e(objects)f(passed)g(to)h(C)h (which)120 2008 y(are)k(not)f(values)g(must)h(be)f(registered)g(in)h (some)f(way)h(to)f(prevent)g(them)h(from)g(moving)f(during)g(the)g (call.)120 2070 y(Often)d(this)g(means)g(that)g(the)h(actual)f(call)g (must)g(be)h(surrounded)e(by)h(code)h(which)e(makes)i(static)f(copies)g (of,)120 2133 y(for)j(example,)g(strings,)f(calls)g(the)g(C)h (function,)f(then)g(frees)h(the)f(static)g(copy)g(after)h(the)f(call.)j (In)e(addition,)120 2195 y(when)h(``catching'')h Ft(:out)f Fs(arguments)h(and)f Ft(:inout)h Fs(arguments,)g(it)f(is)h(usually)e (necessary)h(to)h(pass)f(a)120 2257 y(pointer)g(to)i(the)f(appropriate) g(argument,)h(rather)g(than)f(the)g(argument)h(directly.)23 b(Typically)14 b(1-element)120 2319 y(arrays)c(have)g(to)f(be)h (allocated)f(to)h(do)f(this.)h(The)g(Franz)g(ACL)g(implementation)f (uses)g(a)h(resource)g(of)g(arrays)120 2382 y(to)h(minimize)g(consing)f (for)h(this.)120 2473 y(We)h(should)e(probably)h(add)h(another)f (keyword,)h Fp(NO-CALLBACKS)p Fs(,)g(to)f(indicate)g(that)h(the)f(C)i (function)120 2536 y(will)d(not)g(call)h(back)g(into)f(Common)i(Lisp)e (\(and)h(therefore)g(some)g(of)g(the)g(GC)h(protection)d(can)i(be)h (skipped)120 2598 y(when)h(calling)f(this)h(function\).)k(Providing)12 b(for)i Fp(NO-CALLBACKS)h Fs(in)e(your)g(implementation)f(would)120 2660 y(probably)e(be)h(a)h(good)e(idea.)p eop %%Page: 313 314 313 313 bop 0 -58 a Fs(Appendix)10 b(E:)g(Porting)h(ILU)g(to)f(Common)i (Lisp)e(Implementations)781 b(313)0 183 y Fu(E.3)30 b(Network)14 b(Garbage)g(Collection)62 288 y Fs(The)d(Common)h(Lisp-specific)e (runtime)g(must)h(provide)g(three)g(calls)f(which)h(allow)f(the)h (kernel)g(to)g(map)h(the)f(kernel's)0 350 y(C)f(ILU)f(object)g(to)g(a)h (CLOS)g(object.)g(These)g(are)g(register-lisp-object,)e (lookup-registered-lis)o(p-obj)o(ect,)g(and)h(unregister-)0 413 y(lisp-object.)g(The)h(idea)h(behind)e(these)g(is)h(to)g(provide)f (the)h(C)h(runtime)f(with)f(a)i(handle)e(on)h(a)h(CLOS)f(object)g(that) f(is)h(a)h(small)0 475 y(integer)f(that)g(will)f(not)h(be)h(moved)f(by) h(Common)f(Lisp)g(GC,)h(and)g(to)f(provide)f(a)i(layer)g(which)f(weak)g (references)i(can)f(hide)0 537 y(behind.)1739 652 y(Function)-1902 b Fo(ilu::register-lisp-object)19 b Fk(\()p Fp(OBJ)12 b Ft(ilu:ilu-object)p Fk(\))e Fs(&key)h(\()p Fp(REFTYPE)h Ft(keyword)208 715 y Fn(:strong)p Fs(\))f Ft(=>)g(fixnum)120 777 y Fs(The)20 b(OBJ)g(is)g(an)g(ILU)g(CLOS)g(object)f(\(the)h(Franz)h (ACL)f(implementation)f(accepts)h(any)g(Common)120 839 y(Lisp)13 b(value)h(except)g(NIL,)h(but)e(this)g(is)h(only)g(because)g (it)g(uses)f(it)h(internally)f(in)h(`)p Ft(ilu-franz.lisp)p Fs('\).)120 901 y(The)e Fp(REFTYPE)18 b Fs(keyword)11 b(may)i(be)g(either)f(the)g(keyword)g Ft(:weak)g Fs(or)h(the)f(keyword) g Ft(:strong)p Fs(,)h(which)120 964 y(determines)8 b(whether)g(the)h (reference)g(to)f(the)h(object)e(is)i(a)f(weak)h(reference)h(or)e(a)h (strong)f(reference.)k(A)c(weak)120 1026 y(reference)16 b(is)f(one)g(that)g(is)g(not)f(``followed'')h(by)g(the)g(Common)g(Lisp) g(collector.)23 b(The)15 b(returned)g(value)120 1088 y(is)d(a)h(fixnum)f(that)g(can)h(be)g(used)f(with)g Ft (lookup-registered-lisp-object)e Fs(and)i Ft(unregister-)120 1151 y(lisp-object)e Fs(to)h(find)g(the)g(object)f(or)h(remove)h(the)f (reference)h(to)f(the)g(object,)g(respectively.)1739 1266 y(Function)-1902 b Fo(ilu::lookup-registered-)o(lisp-ob)o(ject)20 b Fk(\()p Fp(INDEX)10 b Ft(fixnum)p Fk(\))h Ft(=>)h(ilu:ilu-object)120 1328 y Fs(This)f(function)g(follows)g(the)h(reference)h(indicated)e(by) h Fp(INDEX)k Fs(and)c(returns)g(the)g(object,)g(or)g Ft(cl:nil)g Fs(if)120 1390 y(the)f Fp(INDEX)k Fs(is)c(invalid.)1739 1506 y(Function)-1902 b Fo(ilu::unregister-lisp-obj)o(ect)20 b Fk(\()p Fp(INDEX)11 b Ft(fixnum)p Fk(\))120 1568 y Fs(Causes)g(any)g(reference)i(indicated)d(by)g Fp(INDEX)15 b Fs(to)c(be)g(removed.)1782 1683 y(Macro)-1900 b Fo(ilu::optional-f)o (inal)o(ization)o(-hoo)o(k)20 b Fk(\()p Fp(OBJ)11 b Ft(ilu:ilu-object)p Fk(\))120 1745 y Fs(This)h(is)g(a)h(macro)g(which)f(should)f(be)i (defined)f(in)g(such)g(a)h(way)g(as)f(to)h(indicate)e(a)i(finalization) e(action)h(for)120 1808 y Fp(OBJ)i Fs(when)c(the)g(Common)g(Lisp)f (collector)h(collects)f(it.)h(This)f(finalization)g(action)g(will)g (interact)g(with)g(the)120 1870 y(ILU)14 b(kernel)f(to)g(ensure)h(that) f(remote)h(peers)g(of)f(this)g(Common)h(Lisp)f(will)f(know)h(that)g(it) g(no)g(longer)g(has)120 1932 y(an)g(interest)f(in)g(the)h(object.)j(In) d(addition,)f(the)h(finalization)e(action)h(will)g(be)h(able)g(to)f (prevent)h Fp(OBJ)k Fs(from)120 1994 y(being)10 b(actually)h (collected,)f(should)g(any)h(peer)h(have)f(an)g(active)g(reference)h (to)f(it.)62 2110 y(The)17 b(Franz)g(ACL)g(implementation)e(only)h (allows)g(the)g(collector)g(to)h(run)f(the)h(finalization)e(when)h(it)g (knows)g(that)0 2172 y(no)f(peer)g(has)g(a)g(reference,)j(by)d(keeping) f(the)h(Common)g(Lisp)f(reference)i(to)f(the)g(object)f(as)h(a)h (strong)d(reference)k(until)0 2234 y(the)d(C)h(ILU)f(kernel)g(informs)g (the)g(Common)h(Lisp)f(ILU)g(runtime)g(that)g(no)g(peer)g(has)h(a)f (reference,)j(in)d(which)g(case)g(the)0 2296 y(Common)f(Lisp)e (reference)i(is)f(changed)f(to)h(a)g(weak)h(reference.)i(In)d(time)g (this)f(allows)g(the)h(collector)g(to)f(GC)i(the)f(object,)0 2359 y(and)h(the)g(finalization)e(action)i(is)f(called.)17 b(The)c(action)g(that)f(needs)h(to)g(be)g(taken)g(is)g(``null)f(out'')h (both)f(the)h(pointer)f(from)0 2421 y(the)j(CLOS)h(object)f(to)g(the)g (C)h(object,)h(via)e Ft(\(setf)c(\(ilu-cached-kernel-obj)e(lisp-obj\))i (nil\))p Fs(,)17 b(and)e(``null)0 2483 y(out'')9 b(the)h(reference)h (from)f(the)g(C)g(object)f(to)g(the)h(CLOS)g(object,)g(via)f Ft(\(register-language-specific-object)0 2545 y(\(kernel-obj)h (lisp-obj\))h(0\))p Fs(.)h(See)g(`)p Ft(ilu-franz.lisp)p Fs(',)f Ft(ilu::franz-shutdown-ilu-object)p Fs(,)e(for)i(an)0 2608 y(example.)20 b(The)13 b(Franz)i(ACL)f(example)g(also)f(does)h (these)f(shutdowns)f(in)h(a)h(separate)g(thread,)h(instead)e(of)h (doing)e(them)0 2670 y(directly)f(in)g(the)h(GC)g(finalization)e (process.)j(This)e(is)g(because)h(the)g(shutdown)d(actions)i(may)h (cause)g(arbitrary)g(callbacks)p eop %%Page: 314 315 314 314 bop 0 -58 a Fs(Appendix)10 b(E:)g(Porting)h(ILU)g(to)f(Common)i (Lisp)e(Implementations)781 b(314)0 183 y(into)9 b(Common)i(Lisp,)f (some)h(of)f(which)g(may)h(not)f(occur)g(on)h(the)f(stack)g(of)g(the)g (ACL)h(scheduler,)f(which)g(may)h(invoke)e(the)0 246 y(collector.)62 333 y(If)17 b(you)f(feel)g(that)g(it)f(just)h(isn't)f (possible)f(to)i(hook)f(your)h(Common)h(Lisp)e(collector)g(into)h(the)g (network)f(GC,)i(you)0 395 y(can)c(simply)f(define)h Ft(register-lisp-object)f Fs(to)g(ignore)h(the)g Fp(REFTYPE)k Fs(parameter,)e(and)e(define)g Ft(optional-)0 457 y(finalization-hook)g Fs(to)g(expand)h(to)f(nothing.)18 b(The)c(result)f(will)g(be)h(that)g (no)f(ILU)h(object)f(in)h(your)g(address)f(space)0 519 y(will)g(ever)h(be)h(GC'ed,)g(and)f(that)f(no)h(true)g(instance)f(of)h (a)h(collectible)e(ILU)g(object)h(type)f(referenced)i(by)f(your)g (process)0 582 y(will)h(ever)h(be)f(GC'ed)h(anywhere)g(in)f(its)g(true) g(address)g(space)h(until)e(your)i(Common)g(Lisp)e(image)i(disappears.) 24 b(This)0 644 y(might)10 b(also)h(be)g(a)h(good)e(starting)g(point,)g (just)g(to)h(get)g(the)g(other)f(parts)h(working.)0 773 y Fu(E.4)30 b(Thread)14 b(and/or)h(Event)f(Loops)62 877 y Fs(Every)f(address)f(space)h(into)e(which)h(ILU)h(is)f(loaded)g(is)h (implicitly)d(a)k(server.)i(This)c(is)g(partially)f(because)i(ILU)g (uses)0 939 y(method)g(calls)f(internally,)g(such)h(as)g(pinging)e (garbage)i(collection)e(callbacks,)i(and)g(partially)f(because)h(it)f (provides)g(for)0 1001 y(recursive)i(protocols,)g(in)f(which)h(a)g (``server'')h(might)f(call)g(back)g(to)f(a)i(``client'')f(during)f(the) h(execution)f(of)h(a)h(method)0 1064 y(call.)22 b(This)13 b(means)i(that)f(any)g(implementation)g(of)g(ILU)h(has)f(to)g(provide)g (a)h(way)f(to)g(execute)h(incoming)e(calls;)j(which)0 1126 y(means)11 b(that)f(it)f(has)i(to)f(provide)f(a)i(stack)f(and)g (thread)g(of)h(control)e(in)h(which)g(to)g(execute)h(the)f(``true'')h (code)f(of)g(the)h(method)0 1188 y(call.)g(There)g(are)g(two)e (mechanisms)i(supported)e(by)h(ILU)g(to)g(associate)g(a)g(thread)g(of)h (control)e(with)h(an)g(incoming)f(request,)0 1250 y(threads)14 b(and)h(event)g(loops.)21 b(In)15 b(the)g(thread)g(model,)h(each)f (request)g(is)f(executed)h(in)f(a)i(thread)f(associated)f(with)f (either)0 1313 y(the)h(specific)g(request)f(\(thread-per-request\))h (or)g(the)g(connection)f(on)g(which)h(the)g(thread)f(arrives)h (\(thread-per-client\).)0 1375 y(In)k(the)g(event)g(loop)f(model,)j (one)e(thread)f(of)i(control)e(is)g(multiplexed)g(between)g(all)h(uses) f(by)h(means)h(of)f(calls)f(into)0 1437 y(particular)e(``event)h (handler'')f(routines)g(when)g(some)h(``event'')g(is)f(delivered)g(to)g (the)h(process.)25 b(Typical)14 b(events)h(are)0 1499 y(timer)f(expirations,)f(I/O)h(available)f(on)h(file)f(descriptors,)h (UNIX)g(signals.)k(Other)c(more)g(application-specific)e(events)0 1562 y(are)g(possible,)e(such)g(as)h(X)h(Window)e(System)h(events)f(or) i(XView)e(toolkit)f(events.)62 1649 y(For)15 b(a)h(threaded)e(Common)i (Lisp,)f(the)f(thread)h(model)g(is)f(preferred.)23 b(To)15 b(support)e(this,)j(the)e(implementor)h(of)f(the)0 1711 y(Common)f(Lisp)e(runtime)h(must)g(call)g(the)g(C)h(procedure)f Ft(ilu_SetWaitTech\(\))f Fs(with)h(two)f(C-callable)i(routines)e(that)0 1773 y(provide)j(ways)h(to)g(block)g(the)g(current)g(thread)g(until)f (input)g(or)i(output)e(is)h(available)f(on)h(a)h(particular)f(file)g (descriptor.)0 1836 y(He)21 b(must)f(call)h Ft(ilu_SetMainLoop\(\))e Fs(with)h(a)h(main)f(loop)g(struct)g(that)g(provides)f(NULL)h (procedures)h(for)f(the)0 1898 y Ft(ml_run)p Fs(,)g Ft(ml_exit)p Fs(,)g Ft(ml_register_input)p Fs(,)e(and)g Ft(ml_register_output)f Fs(fields,)j(simple)d(procedures)h(that)0 1960 y(return)d Ft(ilu_FALSE)g Fs(for)h(the)f Ft(ml_unregister_input)f Fs(and)h Ft(ml_unregister_output)f Fs(fields,)i(and)f(three)h(C-)0 2022 y(callable)e(procedures)f(that)g(implement)h(creation,)h(setting,) e(and)h(unsetting)e(of)i(alarms)g(for)g(the)g Ft(ml_create_alarm)p Fs(,)0 2085 y Ft(ml_set_alarm)p Fs(,)d(and)g Ft(ml_unset_alarm)g Fs(fields.)h(Finally,)f(he)g(must)g(provide)g(C-callable)g(procedures)g (to)h(describe)0 2147 y(his)g(thread)g(system's)g(mutex)g(and)h (condition)d(variable)i(system)g(to)g(the)h(ILU)f(C)h(kernel,)g(and)f (register)g(them)h(by)f(calling)0 2209 y Ft(ilu_SetLockTech\(\))p Fs(.)30 b(See)18 b(the)g(Franz)g(ACL)g(implementation)e(for)i(an)g (example)g(of)g(this.)30 b(Note)17 b(that)g(the)g(file)0 2271 y(`)p Ft(ilu-process.lisp)p Fs(')d(provides)g(an)h (implementation-independent)d(veneer)j(over)g(various)f(process)g (systems.)22 b(It)0 2334 y(would)13 b(be)h(useful)f(to)g(extend)h (that,)g(then)f(use)h(it)f(in)h(providing)e(the)h(specific)h(thread)f (mechanisms,)i(rather)f(than)g(using)0 2396 y(your)d(Common)g(Lisp's)f (threads)h(directly.)62 2483 y(For)20 b(an)g(non-threaded)f(Common)h (Lisp,)h(the)e(event)h(loop)e(model)i(is)f(available.)36 b(In)20 b(this,)h(you)e(divide)f(up)i(all)0 2545 y(computation)8 b(in)h(your)f(application)g(into)g(event)h(handlers,)g(separate)g (functions)f(that)h(are)h(run)f(when)g(some)g(event)g(occurs,)0 2608 y(and)i(initialize)f(the)i(system)f(by)g(calling)g(some)g(event)h (handler)f(dispatcher)f(routine,)h(often)h(called)f(the)g(``main)h (loop'')f(of)0 2670 y(the)g(system.)g(ILU)f(provides)g(a)h(default)g (main)g(loop)f(in)g(the)h(kernel,)g(which)f(provides)g(support)f(for)i (two)g(kinds)e(of)i(events:)p eop %%Page: 315 316 315 315 bop 0 -58 a Fs(Appendix)10 b(E:)g(Porting)h(ILU)g(to)f(Common)i (Lisp)e(Implementations)781 b(315)0 183 y(timer)11 b(expiration)f (\(ILU)h(calls)g(timers)g(``alarms''\),)i(and)e(input)f(or)h(output)f (available)g(on)h(a)h(UNIX)f(file)g(descriptor.)f(This)0 246 y(means)i(that)e(handler)h(functions)e(can)j(be)f(registered)g(to)g (be)g(called)g(when)g(an)g(event)g(of)g(one)g(of)h(these)e(types)h (occurs.)g(The)0 308 y(ILU)g(event)h(loop)e(is)h(also)g(``recursive'';) h(this)e(means)i(that)f(event)g(handlers)g(can)h(call)f(back)h(into)e (the)h(main)h(loop)f(to)g(wait)0 370 y(for)g(something)e(to)i(occur.)g (To)g(use)f(the)h(ILU)f(main)h(loop,)f(you)g(must)h(provide)f(mainly)g (a)h(way)g(to)f(invoke)f(the)i(main)g(loop,)0 432 y(probably)f (something)f(like)h Ft(ilu:xxx-main-loop)p Fs(,)g(where)h Ft(")p Fs(xxx)p Ft(")f Fs(is)g(the)h(name)g(of)g(your)f(flavor)h(of)g (Common)g(Lisp.)62 519 y(If)k(the)g(ILU)f(main)h(loop)e(is)i(for)f (some)h(reason)f(not)g(satisfactory,)h(a)g(Common)g (Lisp-runtime-specific)d(main)j(loop)0 582 y(can)e(be)f(substituted)e (via)i(a)g(call)g(to)g(the)g(ILU)h(C)f(kernel)h(routine)e Ft(ilu_SetMainLoop\(\))p Fs(.)i(This)f(is)g(often)f(necessary)i(to)0 644 y(interoperate)7 b(with)h(UI)g(toolkits)e(like)h(XView)h(or)g(Tk)g (which)g(believe)f(that)h(they)f(own)h(the)g(main)g(loop.)i(Note)d (that)h(this)f(main)0 706 y(loop)g(must)g(provide)g(all)g(the)h (functionality)d(provided)i(by)g(the)h(ILU)g(main)f(loop.)j(A)e (less-powerful)e(main)i(loop)f(can)h(be)g(used)0 769 y Fp(in)f(addition)f(to)j Fs(the)e(ILU)g(main)h(loop,)f(by)g(calling)f (the)i(ILU)f(C)h(kernel)f(routine)f Ft(ilu_AddRegisterersToDefault\(\)) p Fs(.)0 831 y(See)12 b(the)f(comments)g(in)g(`)p Fp(ILUSRC)t Ft(/runtime/kernel/iluxport.h)p Fs(')e(for)j(documentation)d(of)i(all)g (of)g(this.)62 918 y(In)20 b(addition)e(to)h(making)g(the)h (appropriate)f(calls)g(into)f(the)i(ILU)f(kernel)h(to)f(set)g(up)h (either)f(threaded)g(mode)h(or)0 980 y(event-loop)10 b(mode,)h(the)g(Common)h(Lisp)e(runtime)h(implementor)g(must)f(provide) h(a)g(few)h(required)e(function)g(calls:)1739 1087 y(Function)-1902 b Fo(ilu::initialize-lock)o(ing)120 1149 y Fs(This)16 b(misnamed)i(function)e(is)h(called)g(by)g(the)g(generic)g(ILU)g (Common)h(Lisp)f(runtime)g(to)f(set)h(up)g(the)120 1211 y(interaction)f(mode,)j(start)d(the)h(scheduler)g(if)g(necessary,)i (and)e(in)f(general)h(do)g(anything)f(necessary)h(to)120 1274 y(initialize)9 b(the)i(Common)h(Lisp-flavor-specific)d(Common)j (Lisp)e(runtime.)1739 1380 y(Function)-1902 b Fo(ilu::setup-new-conn)o (ection-)o(hand)o(ler)20 b Fk(\()p Fp(FN)12 b Ft(function)p Fk(\))e(\()p Fp(SERVER)i Ft(C-pointer)p Fk(\))208 1443 y(\()p Fp(PORT)f Ft(C-pointer)p Fk(\))120 1505 y Fs(This)20 b(is)g(called)h(when)f(a)h(client)f(connects)g(to)h(a)g(kernel)f (server,)k Fp(SERVER)p Fs(,)e(implemented)e(in)g(this)120 1567 y(address)h(space.)41 b(It)21 b(should)e(arrange)j(to)f(apply)f Fp(FN)26 b Fs(to)20 b Ft(\(list)11 b Fp(SERVER)16 b(PORT)t Ft(\))22 b Fs(if)f(a)h(new)f(in-)120 1629 y(coming)f(connection)f(is)g (received)i(on)e Fp(PORT)p Fs(.)i Fp(FN)k Fs(should)19 b(return)h Ft(cl:nil)f Fs(if)i(no)e(handler)h(could)120 1692 y(be)25 b(established,)i(non-)p Ft(cl:nil)d Fs(otherwise.)51 b Fp(SERVER)30 b Fs(is)24 b(the)h(C)g(address)g(of)g(an)g(ILU)f(kernel) 120 1754 y Ft(ilu_Server)p Fs(,)e Fp(PORT)j Fs(is)20 b(the)f(C)i(address)f(of)g(an)g(ILU)h(kernel)f Ft(ilu_Port)p Fs(.)38 b(The)20 b(ILU)g(C)g(kernel)120 1816 y(routine)9 b Ft(ilu_FileDescriptorOfMooringOfPort\(\))e Fs(will)i(return)g(the)h (UNIX)g(file)f(descriptor)g(of)120 1878 y(the)14 b Ft(ilu_Mooring)g Fs(of)h(an)f Ft(ilu_Port)p Fs(.)21 b(In)15 b(threaded)f(Common)h (Lisps,)f(this)g(will)f(typically)g(cause)i(a)120 1941 y(thread)h(to)g(be)g(forked,)i(which)d(will)g(watch)h(for)g (connections)f(to)h(this)f(port.)26 b(In)16 b(event-loop)f(Common)120 2003 y(Lisps,)20 b(this)e(will)h(typically)e(register)i Fp(FN)24 b Fs(as)19 b(an)g(event)g(handler)g(for)g Ft(")p Fs(input)f(available)h(on)f(the)h(file)120 2065 y(descriptor)10 b(of)h(the)g(mooring)g(of)g Fp(PORT)t Ft(")p Fs(.)1739 2172 y(Function)-1902 b Fo(ilu::setup-connection)o(-wat)o(cher)20 b Fk(\()p Fp(FN)12 b Ft(function)p Fk(\))e(\()p Fp(CONN)i Ft(C-pointer)p Fk(\))208 2234 y(\()p Fp(SERVER)f Ft(C-pointer)p Fk(\))120 2296 y Fs(This)20 b(is)h(called)g(when)f(a)i(new)f (connection)f(is)g(setup.)41 b(It)21 b(should)f(arrange)h(things)f(so)g (that)h Fp(FN)26 b Fs(is)120 2359 y(applied)9 b(to)h Ft(\(list)h Fp(CONN)k(SERVER)5 b Ft(\))11 b Fs(whenever)f(input)e(is)i (available)g(on)f Fp(CONN)p Fs(.)i Fp(FN)k Fs(should)8 b(return)120 2421 y(non-)p Ft(cl:nil)16 b Fs(if)h(the)f(input)g(was)h (successfully)e(handled,)j Ft(cl:nil)e Fs(otherwise.)28 b(If)17 b Fp(FN)k Fs(ever)d(returns)120 2483 y Ft(cl:nil)p Fs(,)e(the)f(connection-watcher)f(should)f(be)i(demolished.)23 b Fp(CONN)c Fs(is)c(the)g(C)g(address)g(of)g(an)g(ILU)120 2545 y(kernel)i Ft(ilu_Connection)p Fs(,)h(and)f Fp(SERVER)22 b Fs(is)16 b(the)h(C)h(address)e(of)i(an)f(ILU)g(kernel)g Ft(ilu_Server)p Fs(.)120 2608 y(The)f(ILU)g(C)g(kernel)g(routine)f Ft(ilu_FileDescriptorOfConnection\(\))e Fs(will)i(return)h(the)f(UNIX) 120 2670 y(file)c(descriptor)f(for)h(an)g Ft(ilu_Connection)p Fs(.)g(In)g(threaded)g(Common)g(Lisps,)f(this)g(will)g(typically)g (fork)h(a)p eop %%Page: 316 317 316 316 bop 0 -58 a Fs(Appendix)10 b(E:)g(Porting)h(ILU)g(to)f(Common)i (Lisp)e(Implementations)781 b(316)120 183 y(thread)10 b(which)g(will)f(handle)h(requests)g(coming)g(in)g(on)g(this)g (connection.)g(In)g(event-loop)f(Common)i(Lisps,)120 246 y(this)f(will)g(typically)g(register)h Fp(FN)16 b Fs(as)11 b(an)g(event)g(handler)g(for)h Ft(")p Fs(input)d(available)i (on)g(the)g(file)g(descriptor)f(of)120 308 y(the)h(connection)p Ft(")p Fs(.)0 445 y Fu(E.5)30 b(Converting)14 b(between)g(character)f (sets.)62 549 y Fp(This)d(section)h(is)f(not)h(currently)f(correct,)i (but)f(we)g(are)h(changing)e(the)h(Lisp)f(runtime)h(to)f(make)i(it)f (correct.)62 636 y Fs(ILU)16 b(uses)g(the)g(ISO)g(Latin-1)g(and)g (Unicode)f(\(ISO)i(10646\))e(character)i(sets.)26 b(Common)16 b(Lisp)f(uses)h(a)h(somewhat)0 698 y(different)12 b(version)f(of)h (`character'.)j(To)d(provide)f(for)h(a)h(mapping)e(back)h(and)g(forth)g (between)f(ILU)h(and)g(Common)h(Lisp,)0 760 y(the)e(runtime)g (implementor)f(must)h(provide)f(four)h(macros:)1782 872 y(Macro)-1900 b Fo(ilu::construct-lisp-cha)o(racter-from-u)o(nicode)19 b Fk(\()p Fp(UNICODE)11 b Fk(\()p Ft(unsigned-byte)208 935 y(16)p Fk(\)\)\))g Ft(=>)g(character)1782 1022 y Fs(Macro)-1900 b Fo(ilu::determine-unicode-of)o(-cha)o(racter)20 b Fk(\()p Fp(LISP-CHAR)12 b Ft(character)p Fk(\))f Ft(=>)208 1084 y(Unicode-code)1782 1171 y Fs(Macro)-1900 b Fo (ilu::construct-lisp-cha)o(racter-from-la)o(tin-)o(1)20 b Fk(\()p Fp(LATIN-1-CODE)10 b Fk(\()p Ft(unsigned-byte)208 1233 y(8)p Fk(\)\))h Ft(=>)g(character)1782 1321 y Fs(Macro)-1900 b Fo(ilu::determine-latin-)o(1-of)o(-charact)o(er)20 b Fk(\()p Fp(LISP-CHAR)13 b Ft(character)p Fk(\))d Ft(=>)208 1383 y(ISO-Latin-1-code)62 1470 y Fs(which)h(I)g(trust)f(are)i (self-explanatory.)0 1607 y Fu(E.6)30 b(Support)15 b(for)f(Dynamic)h (Object)f(Creation)62 1711 y Fs(ILU)g(allows)f(the)h(dynamic)g (creation)g(of)g(objects.)20 b(This)13 b(means)i(that)e(a)i(true)f (module)f(can)i(create)g(the)f(true)g(CLOS)0 1773 y(object)g(for)g(an)g (ILU)g(object)g(in)g(a)g(lazy)h(manner,)g(when)f(it)g(is)g(referenced.) 22 b(The)14 b(mechanism)g(for)h(doing)e(this)g(is)g(called)0 1835 y Fp(object)f(tables)p Fs(.)k(An)d(object)f(table)g(consists)f(of) i(2)g(C-callable)g(functions,)f(one)h(to)f(create)i(an)f(object,)g (given)f(its)g(instance)0 1898 y(handle,)d(and)f(one)h(to)f(free)i(any) e(storage)g(associated)g(with)g(the)g(object)g(table.)i(To)f(support)e (this)h(mechanism,)h(the)g(Common)0 1960 y(Lisp)h(port)h(of)g(ILU)g (has)g(to)g(provide)f(the)h(following)e(function:)1739 2072 y(Function)-1902 b Fo(ilu::create-object-t)o(able)20 b Fk(\()p Fp(OBJECT-OF-IH-FN)c Ft(function)p Fk(\))10 b(\()p Fp(FREE-SELF-FN)208 2134 y Ft(function)p Fk(\))g Ft(=>)h(C-pointer)120 2197 y Fs(The)25 b(function)e(accepts)i(two)g (Lisp)f(functions,)j(and)e(returns)f(a)h(pointer)f(to)h(a)g(C)h(struct) e(of)h(type)120 2259 y Ft(ilu_ObjectTable)p Fs(,)h(or)d(the)g(value)h Ft(0)p Fs(,)j(if)c(no)g(object)g(table)g(pointer)f(can)i(be)g (produced.)47 b(The)120 2321 y(function)11 b(will)h(have)g(to)g(call)h (into)e(C)i(space)g(to)f(actually)g(produce)g(the)g(object)g(table.)j (Look)d(at)g(the)h(Franz)120 2383 y(ACL)e(implementation)f(for)h(an)h (example)f(of)g(how)g(to)g(do)f(this.)p eop %%Page: 317 318 317 317 bop 0 -58 a Fs(Appendix)10 b(F:)h(Possible)f(ISL)h(Name)h (Mappings)e(for)i(Target)f(Languages)694 b(317)0 114 y Fq(Appendix)14 b(F)36 b(Possible)14 b(ISL)h(Name)f(Mappings)g(for)h (Target)0 183 y(Languages)62 352 y Fs(This)h(note)h(outlines)e(a)j (proposal)e(for)h(name)h(mappings)e(and)h(restrictions;)h(this)e (proposal)g(is)g(not)h(yet)g(accepted.)0 414 y(\(Thanks)c(to)g (external)g(standards)f(such)i(as)f(CORBA,)i(this)d(proposal)h(cannot)g (be)g(implemented)g(for)h(some)g(languages,)0 477 y(such)c(as)h(ANSI)g (C.\))h Fn(The)25 b(mappings)f(outlined)h(here)g(are)g(not)f (necessarily)g(the)h(ones)f(used)h(in)g(the)g(current)0 539 y(ILU)g(release.)62 632 y Fs(This)20 b(proposal)f(is)h(about)f(how) h(to)g(name)h(things)e(in)g(the)i(various)e(programming)h(languages,)i (in)e(a)h(way)f(that)0 695 y(avoids)13 b(name)j(clashes.)21 b(It)14 b(imposes)g(no)g(restrictions)f(on)h(the)g(ISL)h(source.)21 b(However,)16 b(the)e(mappings)g(will)f(be)i(more)0 757 y(straightforward)c(if)i(the)f(ISL)h(source)f(avoids)g(two)g(things:)g (\(1\))h(two)f(or)g(more)h(concsecutive)f(hyphens)f(in)h(a)h(name,)h (and)0 819 y(\(2\))d(starting)f(an)h(interface)h(or)f(type)g(name)g (with)g(``ilu-'')g(\(in)f(any)h(casing\).)62 913 y(The)h(first)f(step)g (in)g(mapping)g(an)g(ISL)h(to)g(a)g(programming)f(language)g(is)g(to)g (scan)g(type)h(and)f(interface)h(names)g(for)f(the)0 975 y(substring)e(``ilu-'')i(\(in)g(any)g(casing\);)f(wherever)i(it)e (occurs,)i(we)f(insert)f(a)i(trailing)e(digit)f(zero.)62 1069 y(In)16 b(a)g(similar)g(way,)h(we)f(next)f(scan)h(the)f(name)i (for)f(sequences)f(of)h(hyphens.)24 b(Wherever)16 b(two)f(or)h(more)g (hyphens)0 1131 y(appear)11 b(consecutively,)e(the)h(digit)f(zero)i (\(`0'\))g(is)e(inserted)h(after)h(every)f(other)g(one,)h(starting)e (with)g(inserting)g(a)i(zero)g(after)0 1193 y(the)g(second)f(hyphen.)62 1287 y(The)h(following)e(steps)i(assume)g(the)g(first)f(two)h(steps)f (have)h(already)h(been)f(done.)62 1380 y(Where)i(tuples)f Ft(<)p Fs(N1,)h(N2,)g(...)18 b(Nk)p Ft(>)12 b Fs(of)h(ISL)g(names)g (must)f(be)h(mapped)g(into)f(a)h(flat)f(programming)h(namespace,)h(we)0 1442 y(concatenate)d(the)g(ISL)g(names,)h(with)e(a)i(double)e(hyphen)g (\(``--''\))j(inserted)d(between)h(each.)62 1536 y(Where)k(ISL)f(names) h(\(or)f(tuples)f(thereof\))i(must)e(be)i(mapped,)g(together)f(with)f (ILU-chosen)g(names)i(derived)f(from)0 1598 y(the)e(ISL)i(names,)f (into)f(a)h(flat)g(programming)f(namespace,)i(the)f(derived)f(names)h (begin)f(with)g(fixed)g(strings)f(specific)i(to)0 1660 y(the)g(derivation,)f(where)i(the)f(fixed)g(strings)e(begin)h(with)h (``ilu-'')g(\(with)f(any)h(case\),)i(and)e(a)g(double)f(hyphen)g(is)h (inserted)0 1723 y(between)e(the)g(fixed)f(string)g(and)h(the)g(ISL)h (name.)62 1816 y(Where)e(ISL)h(names)f(\(or)g(tuples)e(thereof\),)j (and)f(possibly)d(ILU-chosen)i(names)h(derived)g(from)g(the)g(ISL)g (names,)h(must)0 1879 y(be)i(mapped,)i(together)d(with)g(a)i(fixed)f (set)g(of)g(ILU-chosen)g(names,)h(into)e(a)i(flat)f(programming)g (namespace,)i(the)e(fixed)0 1941 y(ILU-chosen)d(names)i(begin)e(with)g (``ilu-'')i(\(with)e(any)h(case\))h(and)f(do)f(not)h(include)f(a)i (double)e(hyphen.)62 2034 y(The)g(final)g(step)f(is)g(to)h(translate)f (hyphens)g(to)g(underscores,)h(for)g(programming)g(languages)e(that)i (accept)g(underscores)0 2097 y(but)g(not)h(hyphens)f(in)g(names.)62 2190 y(Following)g(is)i(a)h(specification)d(of)i(how)g(names)g(are)h (mapped)f(in)g(each)g(language.)i(The)e(notation)e Ft(")p Fs([N])p Ft(")i Fs(is)g(used)g(to)0 2252 y(denote)f(the)f(application)g (of)h(the)g(first)g(two)f(steps)g(and)h(the)g(last)g(step.)g(Examples)f (of)i Ft(")p Fs([..])p Ft(")g Fs(are:)120 2346 y Ft([Foo])24 b(=>)h(Foo)120 2396 y([foo-bar])f(=>)h(foo-bar)120 2446 y([wait----for---it-])e(=>)i(wait--0--0for--0-it-)120 2495 y([iluminate])f(=>)h(iluminate)120 2545 y([ilu---uli])f(=>)h (ilu-0--0uli)62 2670 y Fs(The)11 b(mappings)f(also)h(use)g(the)g (notation)e Ft(")p Fs([[..]])p Ft(")k Fs(to)d(denote)h(the)g(mapping)f (of)i(a)f(type-reference.)p eop %%Page: 318 319 318 318 bop 0 -58 a Fs(Appendix)10 b(F:)h(Possible)f(ISL)h(Name)h (Mappings)e(for)i(Target)f(Languages)694 b(318)0 183 y Fu(F.1)29 b(C)16 b(mapping)62 290 y Fs([)d(This)e(mapping,)h(while)f (clean,)h(will)f(never)i(be)f(adopted)f(because)h(of)g(the)g(more)g (problematic)g(mapping)f(specified)0 352 y(by)g(the)g(OMG's)g(CORBA)h (document.)f(])62 442 y(Item)h Ft(N)f Fs(from)g(interface)h Ft(I)f Fs(is)f(mapped)h(to)g Ft([I]__[N])p Fs(.)g Ft([[I.N]])f(=)i ([I]__[N])p Fs(;)e Ft([[N]])h(=)g([I]__[N])p Fs(,)g(where)g Ft(I)0 504 y Fs(is)g(the)g(current)g(interface.)62 594 y(An)g(enumerated)h(value)e(named)i Ft(V)p Fs(,)g(of)f(type)f Ft(T)i Fs(in)e(interface)i Ft(I)f Fs(is)g(mapped)g(to)g Ft([I]__[T]__[V])p Fs(.)62 684 y(A)g(declaration)g(of)g(a)h(record)f (type)g Ft(T)g Fs(in)g(interface)g Ft(I)g Fs(with)f(fields)h Ft(F1:TR1)p Fs(,)g(...)h Ft(Fn:TRn)f Fs(is)g(mapped)g(to)120 773 y Ft(typedef)24 b(struct)h({[[TR1]])f(F1;)g(...)h([[TRn]])f(Fn})h ([I]__[T];)62 891 y Fs(A)11 b(declaration)g(of)g(a)h(union)d(type)i Ft(T)g Fs(in)g(interface)g Ft(I)h Fs(of)f(types)f Ft(TR1)p Fs(,)i(...)g Ft(TRn)f Fs(is)g(mapped)g(to)120 981 y Ft(typedef)24 b(enum)h({[[I.T]]__[[TR1]],)e(...)i([[I.T]]__[[TRn]]})e (ilu_tags__[[I.T]];)120 1030 y(typedef)h(struct)h({ilu_tags__[[I.T]])e (tag;)220 1080 y(union)h({)319 1130 y([[TR1]])h([[TR1]];)319 1180 y(...)319 1230 y([[TRn]])g([[TRn]];)220 1279 y(})f(val;)120 1329 y(})h([[I.T]];)62 1447 y Fs(For)16 b(passing)e(exceptions)g (through)g(the)h(method)g(calls)g(in)g(interface)h Ft(I)p Fs(,)h(the)e(following)f(auxiliary)g(declaration)h(is)0 1509 y(generated)c(\(supposing)e(exceptions)h Ft(ER1:TR1)p Fs(,)h(...)h Ft(ER2:TR2)f Fs(are)h(raised\):)120 1599 y Ft(typedef)24 b(struct)h({)220 1649 y(ilu_Exception)e(returnCode;)220 1698 y(union)h({)319 1748 y([[TR1]])h([[ER1]];)319 1798 y(...)319 1848 y([[TRn]])g([[ERn]];)220 1898 y(})f(val;)120 1947 y(})h(ilu_Status__[I];)62 2065 y Fs(An)11 b(object)g(type)f(named) i Ft(T)f Fs(in)g(interface)g Ft(I)g Fs(with)g(methods)f Ft(M1)p Fs(,)i(...)g Ft(Mn)f Fs(maps)h(to)120 2155 y Ft(typedef)24 b(ilu_Ojbect)g([[I.T]];)120 2204 y([result-type-1])g ([I]__[T]__[M1]\([[I.T]])e(ilu_self,)220 2254 y([[arg-type-1-1]])h ([arg-name-1-1],)h(...)220 2304 y([[arg-type-1-k]])f([arg-name-1-k]\);) 120 2354 y(...)0 2501 y Fu(F.2)29 b(C)p Fh(++)15 b Fu(mapping)62 2608 y Fs(Item)d Ft(N)f Fs(from)g(interface)h Ft(I)f Fs(is)f(mapped)h(to)g Ft([I]__[N])p Fs(.)g Ft([[I.N]])f(=)i([I]__[N])p Fs(;)e Ft([[N]])h(=)g([I]__[N])p Fs(,)g(where)g Ft(I)0 2670 y Fs(is)g(the)g(current)g(interface.)p eop %%Page: 319 320 319 319 bop 0 -58 a Fs(Appendix)10 b(F:)h(Possible)f(ISL)h(Name)h (Mappings)e(for)i(Target)f(Languages)694 b(319)62 183 y(A)14 b(declaration)f(of)g(an)h(enumerated)g(type)f(named)h Ft(T)g Fs(in)f(interface)h Ft(I)f Fs(containing)f(values)h Ft(V1)p Fs(,)h(...)20 b Ft(Vn)14 b Fs(is)f(mapped)h(to)0 246 y Ft(typedef)d(enum)g({[V1],)g(...)g([Vn]})f([I]__[T])p Fs(.)62 333 y(Record)i(and)f(union)f(declarations)g(are)i(mapped)f(as)g (for)h(C.)g(The)f(exception)f(status)g(declaration)g(is)h(as)g(for)g (C.)0 472 y Fu(F.3)29 b(Modula-3)15 b(mapping)0 628 y(F.4)29 b(Mapping)16 b(ILU)f(ISL)h(to)f(Modula-3)62 732 y Fs(Version)c(1)g(of)g (ILU)g(supported)f(Modula-3,)h(and)g(this)f(section)g(describes)g(the)h (mapping)g(we)g(worked)g(out)f(for)h(it.)0 858 y Fo(F.4.1)26 b(Names)62 962 y Fs(An)10 b(item)h(named)g Ft(Bar)f Fs(in)g(ISL)h (interface)f Ft(Foo)h Fs(becomes)f(an)h(item)f(named)h Ft(Bar)f Fs(in)g(the)g(Modula-3)g(interface)h Ft(Foo)p Fs(.)g(A)0 1025 y(hyphen)f(in)h(an)g(ISL)h(name)g(becomes)f(an)g (underscore)g(in)g(the)g(corresponding)e(Modula-3)i(name.)0 1151 y Fo(F.4.2)26 b(Types)62 1255 y Fs(ISL)12 b(types)e(appear)i(in)e (Modula-3)h(as)g(follows:)26 1343 y(1.)30 b Ft(SHORT)11 b(INTEGER)g Fs(becomes)g Ft([-32768)g(..)g(32767])p Fs(.)26 1418 y(2.)30 b Ft(INTEGER)11 b Fs(becomes)g Ft(INTEGER)p Fs(.)26 1493 y(3.)30 b Ft(LONG)11 b(INTEGER)g Fs(becomes)210 1568 y Ft(TYPE)25 b(LongInt)f(=)h(RECORD)633 1618 y(high:)g ([-16_80000000)f(..)g(2147483647];)633 1668 y(low)h(:)g(Word.T)f(\(*[0) h(..)49 b(4294967295]*\))584 1718 y(END;)90 1806 y Fs(This)17 b(represents)h(the)g(number)h Ft(high*2^32)10 b(+)h(low)p Fs(.)33 b(We)19 b(always)f(have)g(the)g(invariants)f Ft(-2^31)11 b(<=)g(high)g(<)90 1868 y(2^31)g Fs(and)g Ft(0)g(<=)g(low)h(<)f(2^32)p Fs(,)g(even)g(on)g(systems)f(whose)h (natural)g(word)f(size)h(is)g(greater)h(than)e(32)h(bits.)26 1944 y(4.)30 b Ft(BYTE)11 b Fs(becomes)g Ft([0)h(..)f(255])p Fs(.)26 2019 y(5.)30 b Ft(SHORT)11 b(CARDINAL)g Fs(becomes)g Ft([0)g(..)g(65535])p Fs(.)26 2094 y(6.)30 b Ft(CARDINAL)11 b Fs(becomes)g Ft(Word.T)p Fs(.)26 2169 y(7.)30 b Ft(LONG)11 b(CARDINAL)f Fs(becomes)i Ft(RECORD)e(high,)h(low:)g(Word.T)g(END)p Fs(.)g(This)f(representation)g(works)g(analogously)90 2232 y(to)h(that)f(for)i Ft(LONG)f(CARDINAL)p Fs(.)26 2307 y(8.)30 b Ft(SHORT)11 b(REAL)g Fs(becomes)g Ft(REAL)p Fs(.)26 2382 y(9.)30 b Ft(REAL)11 b Fs(becomes)g Ft(LONGREAL)p Fs(.)3 2457 y(10.)30 b Ft(LONG)11 b(REAL)20 b Fs(becomes)g(an)g(opaque) f(type.)37 b(Values)19 b(of)h(this)f(type)g(can)i(only)d(be)i(handed)g (around;)j(no)d(other)90 2520 y(operations)10 b(are)i(provided,)e(not)g (even)i(equality)d(testing.)h Ft(LONG)h(REAL)g Fs(is)g(not)f(really)h (supported)f(yet.)3 2595 y(11.)30 b Ft(SHORT)11 b(CHARACTER)f Fs(becomes)i Ft(['\\000')f(..)g('\\377'])p Fs(.)3 2670 y(12.)30 b Ft(CHARACTER)11 b Fs(becomes)g Ft([0)g(..)g(65535])p Fs(.)p eop %%Page: 320 321 320 320 bop 0 -58 a Fs(Appendix)10 b(F:)h(Possible)f(ISL)h(Name)h (Mappings)e(for)i(Target)f(Languages)694 b(320)3 183 y(13.)30 b(Variable-length)10 b Ft(ARRAY)p Fs(s)g(of)h Ft(SHORT)g(CHARACTER)g Fs(become)h Ft(TEXT)p Fs(.)3 258 y(14.)30 b(Other)11 b(variable-length)e(arrays)j(become)g Ft(REF)f(ARRAY)g(OF)p Fs(.)3 332 y(15.)30 b(Fixed-length)10 b(arrays)h(of)g Ft(SHORT)g(CHARACTER)g Fs(become)g(arrays)h(of)f Ft(BITS)g(8)g(FOR)g(['\\000')g(..)g('\\377'])p Fs(.)3 407 y(16.)30 b(Fixed)11 b(or)g(variable-length)f Ft(ARRAY)p Fs(s)g(of)h Ft(BYTE)g Fs(become)h(arrays)g(of)f Ft(BITS)g(8)g(FOR)g([0) g(..)h(255])p Fs(.)3 481 y(17.)30 b(No)11 b(other)g(arrays)g(specify)g (packing)f(in)h(the)g(Modula-3.)3 556 y(18.)30 b(A)21 b(fixed)g(length)f(array,)k Ft(ARRAY)11 b(OF)g Fp(L1)p Ft(,)g(...)g Fp(Ln)s Fs(,)24 b(becomes)d Ft(ARRAY)11 b([0)g(..)g Fp(L1)p Ft(-1])g(OF)g(...)g(ARRAY)g([0)g(..)90 618 y Fp(Ln)p Ft(-1])g(OF)p Fs(.)3 693 y(19.)30 b(An)11 b(ISL)g(record)h(becomes)f(a)h(M3)f(record.)3 767 y(20.)30 b(An)11 b(ISL)g(union)f(becomes)i(a)f(M3)h(object)e(type)h(and)g(some)g (subtypes.)f(The)h(ISL)210 842 y Ft(TYPE)25 b Fp(Foo)h Ft(=)f Fp(DiscT)j Ft(UNION)310 892 y Fp(case1)p Ft(:)d Fp(T1)f Ft(=)h Fp(val1-1)p Ft(,)f(...)h Fp(val1-j)g Ft(END,)310 941 y(...)310 991 y Fp(casen)s Ft(:)f Fp(Tn)j Ft(=)e Fp(valn-1)p Ft(,)f(...)h Fp(valn-k)k Ft(END)310 1041 y(END)24 b(OTHERS;)90 1128 y Fs(maps)11 b(to)g(the)g(Modula-3)210 1202 y Ft(TYPE)25 b Fp(Foo)h Ft(=)f(BRANDED)f(OBJECT)h(d:)f Fp(DiscT)29 b Ft(END;)210 1252 y(TYPE)49 b Fp(Foo)r Ft(_)p Fp(case1)25 b Ft(=)g Fp(Foo)i Ft(BRANDED)d(OBJECT)g(v:)h Fp(T1)g Ft(END;)210 1302 y(CONST)f Fp(Foo)r Ft(_)p Fp(case1)p Ft(__Code)h(:)g Fp(DiscT)j Ft(=)d Fp(val1-1)p Ft(;)210 1352 y(...)210 1402 y(TYPE)49 b Fp(Foo)r Ft(_)p Fp(casen)28 b Ft(=)d Fp(Foo)h Ft(BRANDED)f(OBJECT)f(v:)h Fp(Tn)i Ft(END;)210 1452 y(CONST)d Fp(Foo)r Ft(_)p Fp(casen)s Ft(__Code)g(:)h Fp(DiscT)j Ft(=)d Fp(valn-1)p Ft(;)210 1501 y(TYPE)49 b Fp(Foo)r Ft(_OTHERS)25 b(=)f Fp(Foo)j Ft(BRANDED)d(OBJECT)h(END;)210 1551 y(\(*)g(Where)f(every)h Fp(Foo)h Ft(is)f(of)g(one)f(of)h(the)g(subtypes)f(enumerated)g(here,) 285 1601 y(and)g(the)h(tag)g(field)f(\(d\))h(is)f(consistent)g(with)h (the)g(subtype.)f(*\))90 1688 y Fs(The)11 b Fp(Foo)r Ft(_OTHERS)g Fs(subtype)f(appears)h(only)f(for)i(union)e(constructions) f(including)g(the)i Ft(OTHERS)g Fs(keyword.)g(If)g(the)90 1750 y(ISL)h(union)d(has)i(a)h Ft(DEFAULT)f Fs(arm)310 1825 y Fp(cased)5 b Ft(:)24 b Fp(Td)29 b Ft(=)c(DEFAULT)90 1911 y Fs(it)11 b(maps)g(to)g(another)f(subtype)g(in)h(Modula-3:)210 1986 y Ft(TYPE)49 b Fp(Foo)r Ft(_)p Fp(cased)30 b Ft(=)25 b Fp(Foo)h Ft(BRANDED)f(OBJECT)f(v:)h Fp(Td)k Ft(END;)90 2073 y Fs(The)14 b Fp(Foo)r Ft(_)p Fp(casen)s Ft(__Code)f Fs(constants)g(are)h(conveniences)f(for)i(filling)d(in)i(and)g (decoding)f(the)g Ft(d)h Fs(field.)20 b(Note)14 b(that)90 2135 y(code)d(that)g(creates)g(a)h Fp(Foo)h Fs(is)e(responsible)e(for)i (filling)f(in)h(the)g Ft(d)g Fs(field.)3 2210 y(21.)30 b(An)17 b(ISL)g(enumeration)f(becomes)h(a)g(M3)g(enumeration.)28 b(Due)17 b(to)f(the)h(fact)g(that)f(Modula-3)g(offers)h(no)g(way)g(to) 90 2272 y(specify)9 b(the)g(codes)h(used)f(to)g(represent)g(enumerated) h(values,)g(the)f(codes)h(specified)e(in)i(ISL,)g(if)g(any,)g(have)f (no)h(effect)90 2334 y(on)h(the)g(translation.)3 2409 y(22.)30 b(When)9 b(a)g Fp(Foo)i Fs(becomes)e(a)h Fp(Bar)p Fs(,)g(an)f Ft(OPTIONAL)i Fp(Foo)g Fs(becomes)e(a)g Ft(REF)i Fp(Bar)t Fs(,)g(unless)c Fp(Bar)14 b Fs(is)8 b(a)i(subtype)d(of)i Ft(REFANY)p Fs(,)90 2471 y(in)i(which)f(case)i Ft(OPTIONAL)e Fp(Foo)k Fs(becomes)d Fp(Bar)t Fs(;)g Ft(NIL)g Fs(encodes)g(the)g Ft(NULL)g Fs(case.)3 2545 y(23.)30 b(An)7 b(ISL)g(object)g(type)g (becomes)g(a)g(Modula-3)g(object)g(type.)g(The)g(ISL)g(adjectives)g Ft(SINGLETON)p Fs(,)g Ft(DOCUMENTATION)p Fs(,)90 2608 y Ft(COLLECTIBLE)p Fs(,)16 b Ft(OPTIONAL)p Fs(,)h Ft(AUTHENTICATION)p Fs(,)f(and)f Ft(BRAND)g Fs(have)h(no)f(effect)h(on)g(the)f(mapping)g (into)f(the)90 2670 y(Modula-3)d(type)f(system.)p eop %%Page: 321 322 321 321 bop 0 -58 a Fs(Appendix)10 b(F:)h(Possible)f(ISL)h(Name)h (Mappings)e(for)i(Target)f(Languages)694 b(321)90 183 y Ft(OUT)8 b Fs(and)h Ft(INOUT)f Fs(method)g(parameters)h(in)f(ISL)h (become)g Ft(VAR)f Fs(parameters)i(in)e(Modula-3;)g Ft(IN)h Fs(parameters)g(become)90 246 y Ft(VALUE)j Fs(\(by)f(default\))h (parameters.)i(The)e Ft(SIBLING)g Fs(constraint)e(in)h(ISL)i(has)e(no)h (manifestation)f(in)g(the)h(Modula-3)90 308 y(type)f(system.)90 383 y(The)18 b(methods)g(are)i(declared)e(to)g(raise)h(the)f (exceptions)f Ft(IluBasics.Failed)h Fs(and)g Ft(Thread.Alerted)g Fs(in)90 445 y(addition)12 b(to)h(the)g(exceptions)f(declared)i(in)f (the)h(ISL.)g(Exception)e Ft(IluBasics.Failed)g Fs(is)h(used)g(to)h (convey)f(all)90 507 y(the)d(errors)h(that)f(can)g(arise)h(from)g(the)f (RPC)i(mechanism,)f(except)f Ft(Thread.Alerted)p Fs(.)h(Is)f(the)g (surrogate)g(\(and)g(the)90 569 y(other)h(surrogates)f(from)i(the)f (same)g(server?\))h(broken)f(after)g(either)g(of)g(these)g(exceptions)f (is)h(raised?)90 644 y(Because)k(ILU)e(has)h(multiple)f(inheritance)g (\(i.e.,)i(an)f(object)f(type)h(can)g(have)g(more)g(than)g(one)f (direct)h(supertype\),)90 706 y(the)e(Modula-3)g(subtype)f(relation)g (is)h(a)h(sub-relation)e(of)h(the)g(ILU)h(subtype)e(relation.)j(In)e (general,)h(an)g(ILU)f(object)90 769 y(type)g(is)g(mapped)h(to)f(a)h (suite)f(of)g(Modula-3)g(object)g(types,)g(and)h(a)g(cohort)f(of)g (Modula-3)g(objects)g(\(one)g(of)h(each)g(of)90 831 y(the)h(suite)f(of) h(Modula-3)f(types\))h(correspond)f(to)g(one)h(ILU)g(object.)19 b(There)c(will)d(be)j(only)e(one)g(Modula-3)h(object)90 893 y(\(type\))f(when)g(only)f(single-inheritance)f(is)h(used)h(in)g (constructing)e(the)i(ILU)g(object)f(type:)i(when)f(every)h(ancestor)90 955 y(type)9 b(has)g(at)h(most)f(one)g(direct)g(ancestor.)i(Except)e (where)h(the)f(programmer)h(knows)f(this)f(is)h(the)g(case,)i(and)e (plans)g(for)90 1018 y(it)j(to)f(remain)i(so,)f(she)g(must)g(abandon)g (the)f(native)h(Modula-3)g Ft(TYPECASE)p Fs(/)p Ft(NARROW)p Fs(/automatic-wi)o(den)d(facilities)90 1080 y(for)i(explicit)f(calls)h (that)f(invoke)g(the)h(ILU)g(subtype)f(relation.)90 1155 y(To)i(generalize)h(the)f(Modula-3)h Ft(TYPECASE)p Fs(/)p Ft(NARROW)p Fs(/automatic-wi)o(den)d(facilities,)i(the)h(Modula-3)f (object)g(type)90 1217 y Ft(Ilu.Object)e Fs(includes)g(the)h(following) e(method:)210 1292 y Ft(PROCEDURE)24 b(ILU_Qua_Type\(ot:)f (ObjectType\):)h(Object;)90 1379 y Fs(If)12 b(the)g(object)f(has,)i(in) e(ILU,)i(the)e(given)h(object)f(type,)h(the)g(Modula-3)f(object)g(of)h (the)g(appropriate)f(Modula-3)h(type)90 1441 y(is)g(returned;)g (otherwise,)g(NIL)g(is)g(returned.)i(As)e(an)g(added)g(convenience,)g (the)g(Modula-3)g(mapping)g(of)g(interface)90 1503 y Fp(Foo)h Fs(will)d(contain,)h(for)g(each)h(of)f(its)f(object)h(types)f Fp(Bar)t Fs(:)210 1578 y Ft(PROCEDURE)24 b(ILU_Qua_)p Fp(Bar)t Ft(\(x:)g(Ilu.Object\):)g Fp(Bar)t Ft(;)90 1665 y Fs(This)11 b(procedure)h(takes)g(a)h(non-)p Ft(NIL)e Fs(argument.)k(If)d(the)g(argument)g(is,)h(in)e(ILU,)i(an)f(instance)g (of)g Fp(Bar)k Fs(or)d(one)f(of)g(its)90 1728 y(subtypes,)e(the)h (corresponding)e(language-specific)h(object)h(is)f(returned;)h (otherwise,)f Ft(NIL)h Fs(is)g(returned.)0 1852 y Fo(F.4.3)26 b(Exceptions)62 1956 y Fs(ISL)12 b(exceptions)e(are)h(exactly)g(like)g (Modula-3)f(exceptions,)g(and)h(are)h(mapped)g(directly.)0 2081 y Fo(F.4.4)26 b(Example)62 2184 y Fs(Here's)12 b(a)f(sample)g(ISL) h(spec,)f(and)g(the)g(resulting)f(Modula-3)g(mappings:)120 2271 y Ft(INTERFACE)24 b(Foo;)120 2371 y(TYPE)h(String)f(=)h (ilu.CString;)120 2421 y(TYPE)g(UInt)f(=)h(CARDINAL;)120 2521 y(TYPE)g(E1)f(=)h(ENUMERATION)f(val1,)g(val2,)h(val3)f(=)h(40)g (END;)120 2570 y(TYPE)g(R1)f(=)h(RECORD)f(field1)h(:)g(CARDINAL,)f (field2)g(:)h(E1)g(END;)120 2620 y(TYPE)g(FAB)f(=)h(ARRAY)f(OF)h(200)g (BYTE;)120 2670 y(TYPE)g(VAB)f(=)h(SEQUENCE)f(OF)h(BYTE;)p eop %%Page: 322 323 322 322 bop 0 -58 a Fs(Appendix)10 b(F:)h(Possible)f(ISL)h(Name)h (Mappings)e(for)i(Target)f(Languages)694 b(322)120 183 y Ft(TYPE)25 b(FASC)f(=)h(ARRAY)f(OF)h(10)g(SHORT)f(CHARACTER;)120 233 y(TYPE)h(VASC)f(=)h(SEQUENCE)f(OF)h(SHORT)f(CHARACTER;)120 283 y(TYPE)h(FAC)f(=)h(ARRAY)f(OF)h(5)g(CHARACTER;)120 333 y(TYPE)g(VAC)f(=)h(SEQUENCE)f(OF)h(CHARACTER;)120 382 y(TYPE)g(A2)f(=)h(ARRAY)g(OF)f(41,)h(3)g(R1;)120 432 y(TYPE)g(S1)f(=)h(SEQUENCE)f(OF)h(E1;)120 482 y(TYPE)g(U1)f(=)h (UNION)g(R1,)f(A2)h(END;)120 582 y(EXCEPTION)f(Except1)g(:)h(String;) 120 681 y(CONSTANT)f(Zero)h(:)g(CARDINAL)f(=)g(0;)120 781 y(TYPE)h(O1)f(=)h(OBJECT)220 831 y(METHODS)319 881 y(M1\(r1:)g(R1,)f(INOUT)h(v:)f(VASC,)h(OUT)f(s1:)h(S1\):)g(UInt)f (RAISES)g(Except1)h(END,)319 930 y(FUNCTIONAL)f(Hash\(v:)g(VASC\):)h (FASC,)319 980 y(ASYNCHRONOUS)f(Note\(x:)g(LONG)h(REAL\))220 1030 y(END;)62 1173 y Fs(The)11 b(Modula-3)g(mapping:)120 1275 y Ft(INTERFACE)24 b(Foo;)120 1375 y(IMPORT)g(Ilu,)h(IluBasics,)f (Thread;)120 1425 y(IMPORT)g(ilu;)h(<*NOWARN*>)120 1524 y(TYPE)g(UInt)f(=)h(CARDINAL;)120 1574 y(TYPE)g(E1)f(=)h({)170 1624 y(val1,)170 1674 y(val2,)170 1724 y(val3};)120 1773 y(TYPE)g(R1)f(=)h(RECORD)195 1823 y(field1)f(:)h(CARDINAL;)195 1873 y(field2)f(:)h(E1;)120 1923 y(END;)120 1973 y(TYPE)g(VASC)f(=)h (TEXT;)49 b(\(*)25 b(NIL)g(not)f(allowed)g(*\))120 2022 y(TYPE)h(S1)f(=)h(REF)g(ARRAY)f(OF)h(E1;)49 b(\(*)25 b(NIL)g(not)f(allowed)h(*\))120 2072 y(TYPE)g(FASC)f(=)h(ARRAY)f ([0..9])h(OF)f(Ilu.PackedShortChar;)120 2222 y(\(*)h(declaration)f(of)g (M3)h(type)g("Foo.O1")f(from)g(ILU)h(class)f("Foo:O1")49 b(*\))120 2321 y(TYPE)25 b(O1)f(=)h(Ilu.Object)f(OBJECT)170 2371 y(METHODS)220 2421 y(M1)g(\(r1:)h(R1;)g(VAR)f(v:)h(VASC;)f(VAR)h (s1:)g(S1\):)f(UInt)294 2471 y(RAISES)h({IluBasics.Failed,)e (Thread.Alerted,)g(Except1};)220 2521 y(Hash)h(\(v:)h(VASC\):)f(FASC)h (RAISES)f({IluBasics.Failed,)f(Thread.Alerted};)220 2570 y(Note)h(\(x:)h(Ilu.LongReal\))e(RAISES)i({IluBasics.Failed,)e (Thread.Alerted};)170 2620 y(OVERRIDES)220 2670 y(ILU_Get_Type)g(:=)i (ILU_Get_Type_O1)p eop %%Page: 323 324 323 323 bop 0 -58 a Fs(Appendix)10 b(F:)h(Possible)f(ISL)h(Name)h (Mappings)e(for)i(Target)f(Languages)694 b(323)170 183 y Ft(END;)120 283 y(PROCEDURE)24 b(ILU_SBH_To_O1)g(\(sbh:)g(TEXT;)h (mostSpecificTypeID:)e(TEXT)h(:=)h(NIL\):)f(O1)170 333 y(RAISES)g({IluBasics.Failed,)f(Thread.Alerted};)120 432 y(PROCEDURE)h(ILU_Get_Type_O1)g(\(self)g(:)h(Ilu.Object\):)f (Ilu.ObjectType;)120 532 y(PROCEDURE)g(ILU_Qua_O1)g(\(x:)h (Ilu.Object\):)e(O1;)120 632 y(TYPE)i(A2)f(=)h(ARRAY)g([0..40])f(OF)g (ARRAY)h([0..2])f(OF)h(R1;)120 681 y(TYPE)49 b(U1)25 b(=)g(BRANDED)f(OBJECT)h(d:)f(Ilu.ShortInt)g(END;)50 b(\(*)24 b(NIL)h(not)f(allowed)h(*\))120 731 y(TYPE)49 b(U1_R1)174 b(=)25 b(U1)g(BRANDED)f(OBJECT)g(v:)h(R1)g(END;)120 781 y(CONST)f(U1_R1__Code)g(:)h([-32768..32767])f(=)g(0;)120 831 y(TYPE)49 b(U1_A2)174 b(=)25 b(U1)g(BRANDED)f(OBJECT)g(v:)h(A2)g (END;)120 881 y(CONST)f(U1_A2__Code)g(:)h([-32768..32767])f(=)g(1;)120 930 y(TYPE)h(VAC)f(=)h(REF)g(ARRAY)f(OF)h(Ilu.Character;)48 b(\(*)25 b(NIL)g(not)f(allowed)g(*\))120 980 y(TYPE)h(FAC)f(=)h(ARRAY)f ([0..4])h(OF)f(Ilu.Character;)120 1030 y(TYPE)h(VAB)f(=)h(REF)g(ARRAY)f (OF)h(BITS)f(8)h(FOR)g(Ilu.Byte;)49 b(\(*)24 b(NIL)h(not)g(allowed)f (*\))120 1080 y(TYPE)h(FAB)f(=)h(ARRAY)f([0..199])h(OF)f (Ilu.PackedByte;)120 1130 y(TYPE)h(String)f(=)h(TEXT;)49 b(\(*)25 b(NIL)f(not)h(allowed)f(*\))120 1229 y(CONST)g(Zero)h(:)g (CARDINAL)f(=)h(0;)120 1329 y(\(*)g(Exceptions)f(*\))120 1429 y(EXCEPTION)g(Except1)g(\(String\);)120 1528 y(END)h(Foo.)p eop %%Page: 324 325 324 324 bop 0 -58 a Fs(Index)11 b(of)g(Concepts)1548 b(324)0 183 y Fq(Index)15 b(of)f(Concepts)0 368 y Fu(B)0 435 y Ff(barrier)c(call)c Fe(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)15 b Ff(194)0 493 y(Barrier)10 b(Call)e Fe(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)18 b Ff(10)0 551 y(Batcher)5 b Fe(:)g(:)h(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(52)0 609 y(Batching)t Fe(:)5 b(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)13 b Ff(11)0 667 y(Batching)8 b(in)i(C)g Fe(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(52)0 725 y(Building)9 b(an)g(Application)f(for)i(CORBA)f(2.0)g(C)p Fd(++)i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(99)0 860 y Fu(C)0 927 y Ff(C)9 b(identifier)i(tailoring)s Fe(:)6 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)12 b Ff(53)0 985 y(C)d(Libraries)g(and)g(Linking)h Fe(:)c(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)20 b Ff(56)0 1043 y(C)9 b(mapping)f(for)i (RECORD)g Fe(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)19 b Ff(37)0 1101 y(C)9 b(mapping)f(for)i(UNION)f Fe(:)d(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)18 b Ff(38)0 1159 y(C)9 b(method)g(arguments)f Fe(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)19 b Ff(39)0 1217 y(C)9 b(methods)f Fe(:)d(:)h(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)17 b Ff(39)0 1275 y(C)9 b(object)g(implementation)d Fe(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)15 b Ff(43)0 1333 y(C)9 b(object)g(type)g(inheritance)t Fe(:)t(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)13 b Ff(42)0 1391 y(C)c(Parameter)g(Passing)f(Considerations)d Fe(:)t(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)14 b Ff(45)0 1450 y(C)9 b(sequence)e(mappings)i Fe(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)20 b Ff(35)0 1508 y(C)9 b(utility)i(API)e Fe(:)d(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Ff(56)0 1566 y Fd(c-stubber)6 b Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(52)0 1624 y(C)p Fd(++)c Ff(Classes)e(Produced)f(for)j(an)e(Object) h(for)h(CORBA)f(2.0)g(C)p Fd(++)83 1682 y Fe(:)d(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)18 b Ff(92)0 1740 y Fd(c++-stubb)q(er)8 b Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)16 b Ff(122)0 1798 y(Call)10 b(Order)f(Preservation)c Fe(:)g(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)14 b Ff(10)0 1856 y(Call)c(Order)f(Preservation)f(in)i(C)h Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)21 b Ff(52)0 1914 y(changes)7 b(from)j(1.7)f(to)g(1.8)c Fe(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)14 b Ff(256)0 1973 y(changes)7 b(from)j(1.8)f(to)g (2.0alpha1)e Fe(:)t(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)16 b Ff(255)0 2031 y(changes)7 b(from)j(2.0alpha10)d(to)i(2.0alpha11)d Fe(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)15 b Ff(251)0 2089 y(changes)7 b(from)j(2.0alpha11)d(to)i(2.0alpha12)s Fe(:)c(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)13 b Ff(249,)8 b(250)0 2147 y(changes)f(from)j(2.0alpha7)d(to)j(2.0alpha8)e Fe(:)t(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)17 b Ff(254)0 2205 y(changes)7 b(from)j(2.0alpha8)d(to)j(2.0alpha9)e Fe(:)t(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)17 b Ff(253)0 2263 y(changes)7 b(from)j(2.0alpha9)d(to)j(2.0alpha10) d Fe(:)t(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) 16 b Ff(252)0 2321 y(Class)8 b(Library)d Fe(:)i(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(2)0 2379 y(Client)10 b Fe(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)19 b Ff(4)0 2438 y(Client)10 b(Basics)e(for)h(CORBA)h(2.0)f(C)p Fd(++)c Fe(:)h(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)14 b Ff(102)0 2496 y(Common)8 b(Lisp)h(Servers)c Fe(:)g(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(153)0 2554 y(Common)8 b(Lisp)h(True)g(Modules)e Fe(:)e(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)16 b Ff(153)0 2612 y(Condition)9 b(variable)f Fe(:)d(:)h(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)17 b Ff(190)0 2670 y(connection)7 b Fe(:)t(:)f(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)17 b Ff(5)1015 368 y(Connection)s Fe(:)5 b(:)h(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)12 b Ff(9)1015 426 y(Connection)c(mutex)h Fe(:)e(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)19 b Ff(188)1015 484 y(CORBA)7 b Fe(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)17 b Ff(12)1015 542 y(CORBA)10 b(2.0)f(C)p Fd(++)h Ff(Considerations)e Fe(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)19 b Ff(115)1015 601 y(CORBA)10 b(naming)e(for)i(C)5 b Fe(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(33)1015 659 y(Correspondence)7 b(between)g(C)p Fd(++)k Ff(Types)c(and)h(Kernel)h(Type)t Fe(:)d(:)g(:)g(:)14 b Ff(92)1015 717 y Fd(cpp2-stu)q(bb)q(er)6 b Fe(:)j(:)d(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(99)1015 775 y(Custom)9 b(Surrogates)f(for)i(CORBA)f(2.0)g(C)p Fd(++)c Fe(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)14 b Ff(97)1015 906 y Fu(D)1015 973 y Fd(dbx)f Fe(:)6 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)21 b Ff(229)1015 1031 y(Deadlock)8 b(avoidance)t Fe(:)t(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)13 b Ff(189)1015 1089 y(default)d(protocol)s Fe(:)5 b(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)12 b Ff(208)1015 1147 y(default)e(transport)d Fe(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)17 b Ff(208)1015 1205 y(Dynamic)9 b(Invocation)f(Interface)h Fe(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)19 b Ff(12)1015 1263 y(Dynamic)9 b(Server)g(Interface)e Fe(:)e(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) 16 b Ff(12)1015 1395 y Fu(E)1015 1461 y Ff(Error)6 b Fe(:)i(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)16 b Ff(11)1015 1519 y(Exception)t Fe(:)5 b(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(11)1015 1577 y(Exceptions)6 b Fe(:)t(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)15 b Ff(94)1015 1708 y Fu(G)1015 1775 y Ff(Garbage)8 b(collection)f Fe(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)17 b Ff(9)1015 1833 y Fd(gdb)c Fe(:)6 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)21 b Ff(229)1015 1891 y Fd(gss)11 b Ff(transport)e(filter)j Fe(:)6 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(211)1015 1949 y(GSS)9 b(transport)h(filter)h Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(217)1015 2081 y Fu(I)1015 2147 y Ff(ILU)10 b(and)e(C)h Fe(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)18 b Ff(32)1015 2205 y(ILU)10 b(and)e(Common)h(Lisp)e Fe(:)e(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)16 b Ff(149)1015 2263 y(ILU)10 b(and)e(CORBA)g Fe(:)e(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)18 b Ff(32)1015 2321 y(ILU)10 b(and)e(Java)t Fe(:)d(:)h(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(125)1015 2379 y(ILU)c(and)e(Python)i Fe(:)c(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)21 b Ff(71)1015 2438 y(ILU)10 b(and)e(Scheme)t Fe(:)d(:)h(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)13 b Ff(160)1015 2496 y(ILU)d(and)e(the)h(CORBA)g(C)p Fd(++)h Ff(mapping)d Fe(:)e(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)16 b Ff(116)1015 2554 y(ilu.isl)t Fe(:)7 b(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(25)1015 2612 y Fd(ilu)p 1083 2612 12 2 v 15 w(Serializ)q(er)f Ff(\(Python)8 b(LSR)h(class\))f Fe(:)d(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)18 b Ff(83)1015 2670 y(iluCppRuntime)9 b(-)h(Character)f(Utilities,)i(CORBA)e(2.0)g(C)p Fd(++)j Fe(:)6 b(:)20 b Ff(105)p eop %%Page: 325 326 325 325 bop 0 -58 a Fs(Index)11 b(of)g(Concepts)1548 b(325)0 183 y Ff(iluCppRuntime)9 b(-)h(File)f(Descriptor)g(Budget,)g (CORBA)g(2.0)g(C)p Fd(++)82 241 y Fe(:)d(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)17 b Ff(106)0 299 y(iluCppRuntime)9 b(-)h(Memory)f(Management,) e(CORBA)i(2.0)g(C)p Fd(++)82 358 y Fe(:)d(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)17 b Ff(106)0 416 y(iluCppRuntime)9 b(-)h(String)f(Binding)g (Handle)f(Utilities,)j(CORBA)e(2.0)75 474 y(C)p Fd(++)e Fe(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)16 b Ff(105)0 532 y(iluCppRuntime)9 b(Initialization,)h(CORBA)f(2.0)g(C)p Fd(++)t Fe(:)e(:)g(:)f(:)g(:)g(:) g(:)g(:)g(:)13 b Ff(103)0 590 y(iluCppRuntime,)c(CORBA)g(2.0)g(C)p Fd(++)i Fe(:)6 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)19 b Ff(103)0 648 y(iluGSS,)10 b(CORBA)f(2.0)g(C)p Fd(++)s Fe(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)12 b Ff(113)0 706 y(iluMainLoop,)d(CORBA)g(2.0)g(C)p Fd(++)i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)19 b Ff(113)0 764 y Fd(ilumkmf)12 b Fe(:)6 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)18 b Ff(261)0 823 y(iluObject)9 b(-)h(Accessors,)d(CORBA)i(2.0)g(C)p Fd(++)e Fe(:)h(:)e(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)16 b Ff(110)0 881 y(iluObject)9 b(-)h(Creation)f(and)f(Destruction,)h(CORBA)h(2.0)f(C)p Fd(++)d Fe(:)h(:)15 b Ff(108)0 939 y(iluObject)9 b(-)h(Informational,)g (CORBA)f(2.0)g(C)p Fd(++)d Fe(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)15 b Ff(110)0 997 y(iluObject)9 b(-)h(Object)f(Publication,)g (CORBA)g(2.0)g(C)p Fd(++)s Fe(:)e(:)f(:)g(:)g(:)h(:)f(:)g(:)12 b Ff(109)0 1055 y(iluObject)d(-)h(Reference)e(Counting,)h(CORBA)g(2.0)g (C)p Fd(++)i Fe(:)6 b(:)g(:)g(:)g(:)g(:)19 b Ff(111)0 1113 y(iluObject,)10 b(CORBA)f(2.0)g(C)p Fd(++)c Fe(:)i(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)14 b Ff(108)0 1171 y(iluObjectTable,)9 b(CORBA)g(2.0)g(C)p Fd(++)c Fe(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)14 b Ff(111)0 1229 y(iluPassport,)9 b(CORBA)g(2.0)g(C)p Fd(++)f Fe(:)f(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)17 b Ff(112)0 1287 y Fd(ilusb)6 b Fe(:)i(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(183)0 1346 y(iluServer)9 b(-)h(Default)f(Accessors,)f(CORBA)h(2.0) g(C)p Fd(++)f Fe(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)17 b Ff(107)0 1404 y(iluServer)9 b(-)h(Setup)f(and)f(Destruction,)h(CORBA)g(2.0)g(C)p Fd(++)t Fe(:)d(:)g(:)g(:)g(:)13 b Ff(107)0 1462 y(iluServer,)d(CORBA)f (2.0)g(C)p Fd(++)d Fe(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(106)0 1520 y(Implementation)9 b(Repository)s Fe(:)c(:)h(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)12 b Ff(12)0 1578 y(Inheritence)c(from)i (CORBA::Object)5 b Fe(:)h(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)14 b Ff(95)0 1636 y(Interface)6 b Fe(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)15 b Ff(2)0 1694 y(Interface)9 b(Repository)t Fe(:)c(:)h(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)13 b Ff(12)0 1752 y(ISL)c(Asynchronous)e(Methods)f Fe(:)t(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)15 b Ff(94)0 1810 y(ISL)9 b(Collectible)h(Objects)c Fe(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)15 b Ff(95)0 1869 y(ISL)9 b(Functional)g(Methods)f Fe(:)d(:)h(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)18 b Ff(95)0 1927 y(ISL)9 b(Specific)g(Mappings)f(for)i(CORBA)f(2.0)g(C)p Fd(++)f Fe(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)17 b Ff(91)0 1985 y(ISL)9 b(to)h(IDL)f(Correspondences)d(for)k(CORBA)f(2.0)g (C)p Fd(++)f Fe(:)f(:)f(:)g(:)g(:)g(:)g(:)17 b Ff(90)0 2043 y Fd(islscan)12 b Fe(:)6 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)18 b Ff(228)0 2166 y Fu(J)0 2233 y Ff(Just-in-time)10 b(objects)f Fe(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) 20 b Ff(8)0 2356 y Fu(K)0 2422 y Ff(kernel)9 b(server)f Fe(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(5)0 2545 y Fu(L)0 2612 y Ff(L1)7 b Fe(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)16 b Ff(189)0 2670 y(L2)7 b Fe(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)16 b Ff(189)1015 183 y(Language-Specific)7 b(Runtime)f Fe(:)f(:)h(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(264)1015 241 y Fd(lisp-stu)q(bb)q(er)5 b Fe(:)k(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(153)1015 299 y(Locking)8 b(comment)i Fe(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)20 b Ff(190)1015 358 y(Locking)8 b(order)f Fe(:)f(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)16 b Ff(189)1015 416 y(LSR)11 b Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)20 b Ff(264)1015 535 y Fu(M)1015 602 y Ff(Main)10 b(Invariant)g Fe(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)20 b Ff(189)1015 660 y(Main)10 b(Remnant)f Fe(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)20 b Ff(189)1015 718 y(Mapping)9 b(Details)g(for)h(CORBA)f(2.0)g(C)p Fd(++)c Fe(:)i(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(93)1015 776 y(Mapping)9 b(ISL)g(exceptions)e(to)j(Modula-3)e(exceptions)h Fe(:)d(:)g(:)g(:)g(:)g(:)h(:)20 b Ff(321)1015 834 y(Mapping)9 b(ISL)g(names)f(to)h(C)h(identifiers)d Fe(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)17 b Ff(33)1015 892 y(Mapping)9 b(ISL)g(names)f(to)h(C)p Fd(++)h Ff(names)s Fe(:)5 b(:)h(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)13 b Ff(116)1015 950 y(Mapping)c(ISL)g (names)f(to)h(Modula-3)g(names)e Fe(:)e(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)17 b Ff(319)1015 1008 y(Mapping)9 b(ISL)g(names)f(to)h(Python)g(symbols)d Fe(:)t(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)15 b Ff(71)1015 1066 y(Mapping)9 b(ISL)g(types)f(to)i(Modula-3)e(types)f Fe(:)e(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)16 b Ff(319)1015 1125 y(Mapping)9 b(to)g(Modula-3)f Fe(:)e(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)17 b Ff(319)1015 1183 y(Modula-3)9 b(mapping)f(example)t Fe(:)d(:)h(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) 13 b Ff(321)1015 1241 y(Module)6 b Fe(:)f(:)h(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)15 b Ff(2)1015 1299 y(Mutex)5 b Fe(:)h(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)14 b Ff(188)1015 1357 y(Mutex)9 b(acquire)c Fe(:)g(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)14 b Ff(188)1015 1415 y(Mutex)9 b(enter)c Fe(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)15 b Ff(188)1015 1473 y(Mutex)9 b(exit)d Fe(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)16 b Ff(188)1015 1531 y(Mutex)9 b(invariant)i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)20 b Ff(188)1015 1589 y(Mutex)9 b(release)f Fe(:)d(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)17 b Ff(188)1015 1709 y Fu(N)1015 1775 y Ff(Name)9 b(Service)d Fe(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)15 b Ff(11,)9 b(182)1015 1833 y(Non-connection)f(mutex)h Fe(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)19 b Ff(188)1015 1892 y(Notify)10 b(a)f(condition)g(variable)c Fe(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(190)1015 2011 y Fu(O)1015 2077 y Ff(Object)5 b Fe(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)14 b Ff(4)1015 2135 y(Object)9 b(Activation)h(for)f (CORBA)g(2.0)g(C)p Fd(++)c Fe(:)j(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)15 b Ff(98)1015 2194 y(Object)9 b(lock)g Fe(:)d(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(188)1015 2252 y(object)9 b(table)i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)20 b Ff(8)1015 2310 y(Object)9 b(Tables)f(for)i(CORBA)f(2.0)g(C)p Fd(++)g Fe(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)19 b Ff(96)1015 2368 y(Optionals)9 b(for)h(CORBA)f(2.0)g(C)p Fd(++)d Fe(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)16 b Ff(93)1015 2487 y Fu(P)1015 2554 y Ff(pipeline)10 b Fe(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(194)1015 2612 y(Pipelining)t Fe(:)6 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)13 b Ff(9)1015 2670 y(port)8 b Fe(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)17 b Ff(5)p eop %%Page: 326 327 326 326 bop 0 -58 a Fs(Index)11 b(of)g(Concepts)1548 b(326)0 183 y Ff(Portability)9 b(and)f(Mapping)f(Variations)i(for)g (CORBA)f(2.0)g(C)p Fd(++)d Fe(:)i(:)13 b Ff(95)0 241 y(Program)c(Instance)f Fe(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(2)0 299 y(protocol)8 b Fe(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)17 b Ff(194)0 407 y Fu(R)0 474 y Ff(Relevant)8 b(examples)g(for)i(CORBA)f(2.0)g(C)p Fd(++)c Fe(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(102)0 532 y(relocating)9 b(protocol)e Fe(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)17 b Ff(8)0 590 y(Running)8 b(the)h(Stubber)g(for)h(CORBA)f(2.0)g(C)p Fd(++)h Fe(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(99)0 648 y(Runtime)9 b(Classes)e(for)j(CORBA)f(2.0)g(C)p Fd(++)t Fe(:)f(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)13 b Ff(102)0 756 y Fu(S)0 823 y Ff(Security)c(for)h(CORBA)f (2.0)g(C)p Fd(++)f Fe(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)18 b Ff(99)0 881 y(serialization)9 b(guarantee)t Fe(:)c(:)h(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)13 b Ff(194)0 939 y(Serialization)c (Guarantee)e Fe(:)t(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)16 b Ff(10)0 997 y(Serializer)6 b Fe(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)15 b Ff(10,)9 b(52)0 1055 y(Server)d Fe(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)16 b Ff(4)0 1113 y(Server)9 b(Basics)f(for)i(CORBA)f(2.0)g (C)p Fd(++)i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)19 b Ff(100)0 1171 y(server)9 b(relocation)e Fe(:)e(:)h(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)17 b Ff(8)0 1229 y(Servers)8 b(and)h(Ports)g(for)h(CORBA)f(2.0)g(C)p Fd(++)f Fe(:)f(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)17 b Ff(96)0 1287 y(sibling)t Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(8)0 1346 y(Simple)9 b(Binding)t Fe(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)13 b Ff(182)0 1404 y(Simple)c(Binding)g(\(intro\))t Fe(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)13 b Ff(11)0 1462 y(Simple)c(Binding)g(for)h (CORBA)f(2.0)g(C)p Fd(++)t Fe(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)13 b Ff(98)0 1520 y(Singleton)c(Object)g(Type)d Fe(:)t(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)15 b Ff(6)0 1578 y(Static)9 b(Initialization)i (for)f(CORBA)f(2.0)g(C)p Fd(++)c Fe(:)h(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(99)0 1636 y(string)9 b(binding)g(handle)f(\(SBH\))d Fe(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)15 b Ff(6)1015 183 y(String)10 b(Binding)f(Handle)f(Manipulation)h (for)h(CORBA)f(2.0)g(C)p Fd(++)1099 241 y Fe(:)d(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)18 b Ff(98)1015 299 y(stub)9 b(generator)e Fe(:)e(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)16 b Ff(264)1015 358 y(stubber)7 b Fe(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)17 b Ff(264)1015 416 y(Stubber)9 b(Generated)f(Files)h (for)h(CORBA)f(2.0)g(C)p Fd(++)g Fe(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)18 b Ff(100)1015 474 y Fd(sunrpcrm)13 b Ff(transport)c(filter)c Fe(:)j(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(210)1015 532 y(Surrogate)9 b(object)g Fe(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)18 b Ff(5)1015 590 y(surrogate)9 b(server)t Fe(:)c(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)13 b Ff(5)1015 698 y Fu(T)1015 764 y Ff(Tailoring)d(C)p Fd(++)g Ff(names)s Fe(:)5 b(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)12 b Ff(123)1015 823 y Fd(tcp)f Ff(transport)e(endpoint)e Fe(:)e(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)16 b Ff(209)1015 881 y(Thread)9 b(Synchronization)f Fe(:)e(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(188)1015 939 y(Threading)8 b(for)i(CORBA)f(2.0)g(C)p Fd(++)j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)21 b Ff(97)1015 997 y(True)9 b(object)t Fe(:)c(:)i(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)13 b Ff(4)1015 1055 y(true)d(server)f Fe(:)d(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(5)1015 1163 y Fu(U)1015 1229 y Fd(udp)11 b Ff(transport)e (endpoint)e Fe(:)e(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)16 b Ff(210)1015 1287 y(Unions)9 b(for)h(CORBA)f(2.0)g(C)p Fd(++)f Fe(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)18 b Ff(93)1015 1346 y(Using)9 b(ILU)h(modules)e(From)h(C)d Fe(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)16 b Ff(54)1015 1404 y(Using)9 b(imake)g Fe(:)d(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)19 b Ff(261)1015 1512 y Fu(W)1015 1578 y Fd(w3mux)12 b Ff(transport)d(filter)c Fe(:)j(:)e(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)14 b Ff(211)1015 1636 y(Wait)c(on)f(a)g (condition)g(variable)s Fe(:)c(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)12 b Ff(190)p eop %%Page: 327 328 327 327 bop 0 -58 a Fs(Index)11 b(of)g(Functions,)f(Variables,)h (Methods,)g(and)g(Types)948 b(327)0 183 y Fq(Index)15 b(of)f(Functions,)g(Variables,)g(Methods,)g(and)h(Types)0 368 y Fu(\()0 435 y Fd(\(cl:make-)q(in)q(sta)q(nc)q(e)d('ilu:ilu)q(-t)q (rue)q(-o)q(bje)q(ct)q(\))75 493 y(\(Lisp)f(LSR)g(method\))h Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Ff(158)0 551 y Fd(\(cl:make-)q(in) q(sta)q(nc)q(e)12 b('ilu:ker)q(ne)q(l-s)q(er)q(ver)q(\))75 609 y(\(Lisp)f(LSR)g(method\))h Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Ff(157)0 667 y Fd(\(ilu:ping)13 b(ilu:ilu-o)q(bj)q(ect)q(\))g(\(Lisp) e(LSR)g(inst)75 725 y(meth\))i Fe(:)6 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)20 b Ff(159)p 4 842 18 3 v 2 909 12 2 v 13 909 a Fd(duplicat)q(e\()q(\))12 b(\(Python)h(LSR)d(method)i(on)75 967 y(CORBA.Obje)q(ct)q(\))c Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)17 b Ff(88)p 2 1025 V 13 1025 a Fd(get)p 81 1025 V 15 w(implement)q(at)q (io)q(n\(\))c(\(Python)f(LSR)f(method)h(on)75 1083 y(CORBA.Obje)q(ct)q (\))c Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)17 b Ff(88)p 2 1141 V 13 1141 a Fd(get)p 81 1141 V 15 w(interface)q(\(\))c (\(Python)f(LSR)f(method)h(on)75 1199 y(CORBA.Obje)q(ct)q(\))c Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)17 b Ff(88)p 2 1257 V 13 1257 a Fd(hash\(\))12 b(\(Python)h(LSR)d(method)i (on)e(CORBA.Obj)q(ec)q(t\))83 1315 y Fe(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)18 b Ff(88)p 2 1373 V 13 1373 a Fd(is)p 59 1373 V 15 w(a\(\))10 b(\(Python)j(LSR)d(method)i(on)e(CORBA.Obj)q (ec)q(t\))83 1432 y Fe(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)18 b Ff(88)p 2 1490 V 13 1490 a Fd(is)p 59 1490 V 15 w(equivalent)q(\(\)) 13 b(\(Python)f(LSR)f(method)h(on)75 1548 y(CORBA.Obje)q(ct)q(\))c Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)17 b Ff(88)p 2 1606 V 13 1606 a Fd(is)p 59 1606 V 15 w(nil\(\))11 b(\(Python)h(LSR)f(method)h(on)e(CORBA.Obj)q(ec)q(t\))83 1664 y Fe(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)18 b Ff(88)p 2 1722 V 13 1722 a Fd(non)p 81 1722 V 15 w(existent\()q(\))13 b(\(Python)f(LSR)e(method)i(on)75 1780 y(CORBA.Obje)q(ct)q(\))c Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)17 b Ff(88)p 2 1838 V 13 1838 a Fd(release\()q(\))c(\(Python)f(LSR)e (method)i(on)75 1896 y(CORBA.Obje)q(ct)q(\))c Fe(:)h(:)d(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)17 b Ff(88)0 2013 y Fu(A)0 2080 y Fd(ANSI)p 90 2080 V 15 w(C)p 127 2080 V 14 w(COMMAND)12 b(\(imake)g(var\))6 b Fe(:)i(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(261)0 2138 y Fd(AutoImpor)q(t)d (\(Python)h(LSR)d(fn\))t Fe(:)e(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(81)0 2255 y Fu(C)0 2321 y Fd(CallerIde)q(nt)q(ity)f(\(Python)f(LSR)f(fn\))h Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(82)0 2379 y Fd(CORBA.Ini)q(ti)q(alR)q(ef)q(ere)q(nc)q(es)13 b(\(Python)f(LSR)75 2438 y(variable\))h Fe(:)7 b(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)19 b Ff(88)0 2496 y Fd(CORBA.Inv)q(al)q(idN)q(am)q(e)12 b(\(Python)h(LSR)d(exc\))f Fe(:)f(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)18 b Ff(88)0 2554 y Fd(CORBA.Obj)q(ec)q(t)12 b(\(Python)h(LSR)d(class\))e Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)17 b Ff(88)0 2612 y Fd(CORBA.Obj)q(ec)q(t.)p 291 2612 V 17 w(duplicate)c(\(Python)f(LSR)f(method\))83 2670 y Fe(:)6 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)18 b Ff(88)1015 368 y Fd(CORBA.Ob)q(je)q(ct.)p 1306 368 V 17 w(get)p 1388 368 V 15 w(implement)q(at)q(ion)13 b(\(Python)1090 426 y(LSR)e(method\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)21 b Ff(88)1015 484 y Fd(CORBA.Ob)q(je)q(ct.)p 1306 484 V 17 w(get)p 1388 484 V 15 w(interface)13 b(\(Python)f(LSR)1090 542 y(method\))7 b Fe(:)i(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)17 b Ff(88)1015 601 y Fd(CORBA.Ob)q(je)q(ct.)p 1306 601 V 17 w(hash)11 b(\(Python)i(LSR)d(method\))k Fe(:)6 b(:)g(:)g(:)21 b Ff(88)1015 659 y Fd(CORBA.Ob)q(je)q(ct.)p 1306 659 V 17 w(is)p 1366 659 V 15 w(a)9 b(\(Python)k(LSR)d(method\))d Fe(:)i(:)d(:)g(:)g(:)17 b Ff(88)1015 717 y Fd(CORBA.Ob)q(je)q(ct.)p 1306 717 V 17 w(is)p 1366 717 V 15 w(equivalent)c(\(Python)f(LSR)1090 775 y(method\))7 b Fe(:)i(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)17 b Ff(88)1015 833 y Fd(CORBA.Ob)q(je)q(ct.)p 1306 833 V 17 w(is)p 1366 833 V 15 w(nil)10 b(\(Python)i(LSR)f(method\))i Fe(:)6 b(:)20 b Ff(88)1015 891 y Fd(CORBA.Ob)q(je)q(ct.)p 1306 891 V 17 w(non)p 1388 891 V 15 w(existent)13 b(\(Python)f(LSR)1090 949 y(method\))7 b Fe(:)i(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)17 b Ff(88)1015 1007 y Fd(CORBA.Ob)q(je)q(ct.)p 1306 1007 V 17 w(release)c(\(Python)f(LSR)e (method\))1099 1066 y Fe(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) 18 b Ff(88)1015 1124 y Fd(CORBA.OR)q(B)13 b(\(Python)f(LSR)e(class\))e Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)17 b Ff(89)1015 1182 y Fd(CORBA.OR)q(B.)q(obj)q(ec)q(t)p 1373 1182 V 17 w(to)p 1434 1182 V 14 w(string)12 b(\(Python)g(LSR)1090 1240 y(method\))7 b Fe(:)i(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)17 b Ff(89)1015 1298 y Fd(CORBA.OR)q(B.)q(res)q(ol)q(ve)p 1396 1298 V 17 w(initial)p 1566 1298 V 16 w(referenc)q(es)1090 1356 y(\(Python)12 b(LSR)f(method\))5 b Fe(:)k(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(89)1015 1414 y Fd(CORBA.OR)q(B.)q(str)q(in)q(g)p 1373 1414 V 17 w(to)p 1434 1414 V 14 w(object)d(\(Python)g(LSR)1090 1472 y(method\))7 b Fe(:)i(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)17 b Ff(89)1015 1530 y Fd(CORBA.OR)q(B)p 1216 1530 V 17 w(init)11 b(\(Python)h(LSR)f (function\))d Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)18 b Ff(89)1015 1589 y Fd(CORBA)p 1127 1589 V 16 w(Object)12 b(\(C)e(LSR)h(type\))s Fe(:)d(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)13 b Ff(39)1015 1647 y Fd(CORBA)p 1127 1647 V 16 w(Object)p 1275 1647 V 16 w(duplicate)g(\(C)d(LSR)h (function\))5 b Fe(:)k(:)d(:)g(:)14 b Ff(60)1015 1705 y Fd(CORBA)p 1127 1705 V 16 w(Object)p 1275 1705 V 16 w(hash)d(\(C)f(LSR)h(function\))f Fe(:)f(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)19 b Ff(60)1015 1763 y Fd(CORBA)p 1127 1763 V 16 w(Object)p 1275 1763 V 16 w(is)p 1335 1763 V 14 w(a)10 b(\(C)g(LSR)h(function\))6 b Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)15 b Ff(61)1015 1821 y Fd(CORBA)p 1127 1821 V 16 w(Object)p 1275 1821 V 16 w(is)p 1335 1821 V 14 w(equivale)q(nt)e(\(C)d(LSR)h (function\))1099 1879 y Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)18 b Ff(61)1015 1937 y Fd(CORBA)p 1127 1937 V 16 w(Object)p 1275 1937 V 16 w(is)p 1335 1937 V 14 w(nil)11 b(\(C)f(LSR)h(function\))e Fe(:)g(:)d(:)g(:)g(:)g(:)g(:)g(:)18 b Ff(61)1015 1995 y Fd(CORBA)p 1127 1995 V 16 w(Object)p 1275 1995 V 16 w(non)p 1357 1995 V 15 w(existent)12 b(\(C)f(LSR)f (function\))1099 2053 y Fe(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)18 b Ff(61)1015 2112 y Fd(CORBA)p 1127 2112 V 16 w(Object)p 1275 2112 V 16 w(release)12 b(\(C)e(LSR)h(function\))i Fe(:)6 b(:)g(:)h(:)f(:)g(:)19 b Ff(60)1015 2170 y Fd(CORBA)p 1127 2170 V 16 w(ORB)p 1209 2170 V 15 w(init)11 b(\(C)f(LSR)g(function) q(\))f Fe(:)g(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Ff(56)1015 2228 y Fd(CORBA)p 1127 2228 V 16 w(ORB)p 1209 2228 V 15 w(list)p 1312 2228 V 15 w(initial)p 1481 2228 V 16 w(services)13 b(\(C)d(LSR)1090 2286 y(function)q(\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)20 b Ff(57)1015 2344 y Fd(CORBA)p 1127 2344 V 16 w(ORB)p 1209 2344 V 15 w(object)p 1356 2344 V 16 w(to)p 1416 2344 V 14 w(string)12 b(\(C)e(LSR)h(function\))1099 2402 y Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)18 b Ff(61)1015 2460 y Fd(CORBA)p 1127 2460 V 16 w(ORB)p 1209 2460 V 15 w(resolve)p 1378 2460 V 16 w(initial)p 1548 2460 V 16 w(referenc)q(es)13 b(\(C)d(LSR)1090 2518 y(function)q(\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)20 b Ff(62)1015 2577 y Fd(CORBA)p 1127 2577 V 16 w(ORB)p 1209 2577 V 15 w(string)p 1356 2577 V 16 w(to)p 1416 2577 V 14 w(object)12 b(\(C)e(LSR)h(function\)) 1099 2635 y Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)18 b Ff(61)p eop %%Page: 328 329 328 328 bop 0 -58 a Fs(Index)11 b(of)g(Functions,)f(Variables,)h (Methods,)g(and)g(Types)948 b(328)0 183 y Fd(CPLUSPLUS)p 201 183 12 2 v 17 w(COMMAND)12 b(\(imake)g(var\))h Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(263)0 241 y Fd(CPlusPlus)q(Pr)q(ogr)q(am)q(Tar)q(ge)q(t)12 b(\(imake\))6 b Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)14 b Ff(263)0 299 y Fd(CProgramT)q(ar)q(get)f(\(imake\))g Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)19 b Ff(262)0 358 y Fd(CreateAla)q(rm)13 b(\(Python)f(LSR)f(fn\))g Fe(:)6 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(82)0 416 y Fd(CreateLoo)q(pH)q (and)q(le)13 b(\(Python)f(LSR)f(fn\))5 b Fe(:)j(:)e(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)15 b Ff(82)0 474 y Fd(CreatePas)q(sp)q(ort)e (\(Python)f(LSR)f(fn\))h Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)20 b Ff(82)0 532 y Fd(CreatePip)q(el)q(ine)13 b(\(Python)f(LSR)f(fn\))h Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)20 b Ff(82)0 590 y Fd(CreateSer)q(ve)q(r)12 b(\(Python)h(LSR)d(fn\))e Fe(:)f(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)17 b Ff(82)0 707 y Fu(D)0 774 y Fd(DefaultSe)q(rv)q(er)c(\(Python)f(LSR)f(fn\))5 b Fe(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)14 b Ff(83)0 832 y Fd(DepObject)q(Ta)q(rge)q(t)f(\(imake\))t Fe(:)8 b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) 14 b Ff(262,)8 b(263)0 890 y Fd(DoSoon)k(\(Python)g(LSR)f(fn\))c Fe(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)16 b Ff(83)0 1007 y Fu(E)0 1073 y Fd(ex)p 46 1073 V 14 w(CORBA)p 170 1073 V 16 w(InvalidNa)q(me)d (\(C)d(LSR)g(exceptio)q(n\))e Fe(:)h(:)d(:)g(:)g(:)16 b Ff(56)0 1131 y Fd(ExitMainL)q(oo)q(p)c(\(Python)h(LSR)d(fn\))e Fe(:)f(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)17 b Ff(83)0 1249 y Fu(F)0 1315 y Fd(FALSE)11 b(\(Python)i(LSR)d(const\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)19 b Ff(83)0 1373 y Fd(FineTime)13 b(\(Python)f(LSR)f(fn\))g Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(83)0 1431 y Fd(FineTime)p 179 1431 V 17 w(Now)10 b(\(Python)j(LSR)d(fn\))t Fe(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)13 b Ff(84)0 1489 y Fd(FineTimeR)q(at)q(e)f(\(Python)h(LSR)d (const\))e Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)17 b Ff(84)0 1547 y Fd(FormSBH)12 b(\(Python)h(LSR)d(fn\))t Fe(:)d(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)13 b Ff(84)0 1665 y Fu(G)0 1731 y Fd(GetFDBudg)q(et)g(\(Python)f(LSR)f(fn\))g Fe(:)6 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(84)0 1789 y Fd(GetPasspo)q(rt)13 b(\(Python)f(LSR)f(fn\))g Fe(:)6 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)20 b Ff(84)0 1847 y Fd(GetPipeli)q(ne)13 b(\(Python)f(LSR)f(fn\))g Fe(:)6 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)20 b Ff(84)0 1905 y Fd(GetSerial)q(iz)q(er)13 b(\(Python)f(LSR)f (fn\))5 b Fe(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)14 b Ff(84)0 2022 y Fu(I)0 2089 y Fd(i)5 b Fe(:)i(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)15 b Ff(301,)8 b(307)0 2147 y Fc(I)p 18 2147 V 17 w(T2)p 77 2147 V 17 w Fd(Create)j(\(C)g(stub)g(function\)) e Fe(:)g(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) 18 b Ff(36)0 2205 y Fd(ilu:*call)q(er)q(-id)q(en)q(tit)q(y*)13 b(\(Lisp)e(LSR)g(var\))i Fe(:)6 b(:)g(:)g(:)g(:)20 b Ff(158)0 2263 y Fd(ilu:*debu)q(g-)q(unc)q(au)q(ght)q(-c)q(on)q(dit)q (io)q(ns*)13 b(\(Lisp)f(LSR)75 2321 y(var\))6 b Fe(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)14 b Ff(158)0 2379 y Fd(ilu:ilu-c)q(la)q(ss-)q(in)q(fo)f(\(Lisp)e (LSR)g(inst)g(meth\))g Fe(:)c(:)18 b Ff(157)0 2438 y Fd(ilu:initi)q(al)q(ize)q(-i)q(lu)13 b(\(Lisp)e(LSR)g(fn\))5 b Fe(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(158)0 2496 y Fd(ilu:looku)q(p)e(\(Lisp)g(LSR)f(fn\))e Fe(:)e(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)18 b Ff(159)0 2554 y Fd(ilu:objec)q(t)13 b Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(162)0 2612 y Fd(ilu:objec)q(t)12 b(\(Guile)g(LSR)f(class\))c Fe(:)h(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)16 b Ff(162)0 2670 y Fd(ilu:publi)q(sh)d(\(Lisp)e(LSR)g(fn\))6 b Fe(:)i(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)15 b Ff(158)1015 183 y Fd(ilu:regi)q(st)q(er-)q(cu)q(st)q (om-)q(su)q(rro)q(ga)q(te)e(\(Lisp)e(LSR)g(fn\))1098 241 y Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)17 b Ff(158)1015 299 y Fd(ilu:sbh-)q(>i)q(nst)q(an)q(ce)c(\(Lisp)e(LSR)g (fn\))c Fe(:)h(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)17 b Ff(159)1015 358 y Fd(ilu:stat)q(us)c Fe(:)6 b(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)19 b Ff(163)1015 416 y Fd(ilu:stat)q(us)13 b(\(Guile)f(LSR)e(class\))d Fe(:)i(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)16 b Ff(163)1015 474 y Fd(ilu:with)q(dr)q(aw)d(\(Lisp)e(LSR)g(fn\))t Fe(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)13 b Ff(158)1015 532 y Fd(ILU)p 1083 532 V 15 w(C)p 1120 532 V 14 w(AcquireGS)q(SC)q(red)q(Fo)q(rN)q(ame)g(\(C)d(LSR) h(function\))1099 590 y Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)18 b Ff(64)1015 648 y Fd(ILU)p 1083 648 V 15 w(C)p 1120 648 V 14 w(AcquireGS)q(SI)q(den)q(ti)q(ty)13 b(\(C)d(LSR)h (function\))1099 706 y Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)18 b Ff(64)1015 764 y Fd(ILU)p 1083 764 V 15 w(C)p 1120 764 V 14 w(AcquireSu)q(nR)q(PCA)q(ut)q(hU)q(nix)q(Id)q(ent)q(it)q (y)12 b(\(C)f(LSR)1090 823 y(function)q(\))i Fe(:)6 b(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(64)1015 881 y Fd(ILU)p 1083 881 V 15 w(C)p 1120 881 V 14 w(AddIdenti)q(ty)13 b(\(C)d(LSR)h(function\))f Fe(:)f(:)d(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)19 b Ff(62)1015 939 y Fd(ILU)p 1083 939 V 15 w(C)p 1120 939 V 14 w(AddPort)12 b(\(C)e(LSR)h (function\))k Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)21 b Ff(67)1015 997 y Fd(ILU)p 1083 997 V 15 w(C)p 1120 997 V 14 w(Any)p 1200 997 V 15 w(Create)12 b(\(C)e(LSR)g(function) q(\))e Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)17 b Ff(34)1015 1055 y Fd(ILU)p 1083 1055 V 15 w(C)p 1120 1055 V 14 w(Any)p 1200 1055 V 15 w(Duplicate)c(\(C)d(LSR)h(function\))e Fe(:)g(:)d(:)g(:)g(:)g(:)g(:)g(:)18 b Ff(35)1015 1113 y Fd(ILU)p 1083 1113 V 15 w(C)p 1120 1113 V 14 w(Any)p 1200 1113 V 15 w(TypeCode)12 b(\(C)f(LSR)f(function)q(\))k Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)21 b Ff(35)1015 1171 y Fd(ILU)p 1083 1171 V 15 w(C)p 1120 1171 V 14 w(Any)p 1200 1171 V 15 w(Value)11 b(\(C)f(LSR)h(function\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)20 b Ff(35)1015 1229 y Fd(ILU)p 1083 1229 V 15 w(C)p 1120 1229 V 14 w(Batcher)12 b(\(C)e(LSR)h(type\))5 b Fe(:)j(:)e(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(52)1015 1287 y Fd(ILU)p 1083 1287 V 15 w(C)p 1120 1287 V 14 w(CallerIde)q(nt)q(ity)e(\(C)d(LSR)h(function\))i Fe(:)6 b(:)g(:)h(:)f(:)g(:)19 b Ff(65)1015 1346 y Fd(ILU)p 1083 1346 V 15 w(C)p 1120 1346 V 14 w(Class)11 b(\(C)g(LSR)f(type\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(39)1015 1404 y Fd(ILU)p 1083 1404 V 15 w(C)p 1120 1404 V 14 w(ClassID)12 b(\(C)e(LSR)h (function\))k Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)21 b Ff(57)1015 1462 y Fd(ILU)p 1083 1462 V 15 w(C)p 1120 1462 V 14 w(ClassName)13 b(\(C)d(LSR)h(function\))c Fe(:)i(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)16 b Ff(57)1015 1520 y Fd(ILU)p 1083 1520 V 15 w(C)p 1120 1520 V 14 w(ClassReco)q(rd)q(OfI)q(ns)q(ta)q(nce)d(\(C)d(LSR)h (function\))1099 1578 y Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)18 b Ff(57)1015 1636 y Fd(ILU)p 1083 1636 V 15 w(C)p 1120 1636 V 14 w(CreateBat)q(ch)q(er)13 b(\(C)d(LSR)h(function\))i Fe(:)6 b(:)g(:)g(:)20 b Ff(52,)9 b(65)1015 1694 y Fd(ILU)p 1083 1694 V 15 w(C)p 1120 1694 V 14 w(CreateObj)q(ec)q(tTa)q(bl)q(e)j (\(C)f(LSR)f(function)q(\))j Fe(:)6 b(:)20 b Ff(68)1015 1752 y Fd(ILU)p 1083 1752 V 15 w(C)p 1120 1752 V 14 w(CreatePas)q(sp)q (ort)13 b(\(C)d(LSR)h(function\))i Fe(:)6 b(:)g(:)h(:)f(:)g(:)19 b Ff(62)1015 1810 y Fd(ILU)p 1083 1810 V 15 w(C)p 1120 1810 V 14 w(CreatePip)q(el)q(ine)13 b(\(C)d(LSR)h(function\))d Fe(:)h(:)d(:)17 b Ff(52,)9 b(66)1015 1869 y Fd(ILU)p 1083 1869 V 15 w(C)p 1120 1869 V 14 w(CreateSer)q(ia)q(liz)q(at)q(io)q (nCo)q(nt)q(ext)k(\(C)d(LSR)1090 1927 y(function)q(\))e Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)17 b Ff(52,)9 b(65)1015 1985 y Fd(ILU)p 1083 1985 V 15 w(C)p 1120 1985 V 14 w(CreateSur)q(ro)q(gat)q(eO)q(bj)q(ect)k(\(C)d(LSR)h (function\))1099 2043 y Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)18 b Ff(60)1015 2101 y Fd(ILU)p 1083 2101 V 15 w(C)p 1120 2101 V 14 w(CreateTru)q(eO)q(bje)q(ct)13 b(\(C)d(LSR)h(function\)) 5 b Fe(:)k(:)d(:)g(:)14 b Ff(58)1015 2159 y Fd(ILU)p 1083 2159 V 15 w(C)p 1120 2159 V 14 w(DecodeGSS)q(Id)q(ent)q(it)q(y)e (\(C)f(LSR)f(function)q(\))j Fe(:)6 b(:)20 b Ff(63)1015 2217 y Fd(ILU)p 1083 2217 V 15 w(C)p 1120 2217 V 14 w(DestroyPa)q(ss)q (por)q(t)13 b(\(C)d(LSR)g(function)q(\))d Fe(:)i(:)d(:)g(:)g(:)17 b Ff(65)1015 2275 y Fd(ILU)p 1083 2275 V 15 w(C)p 1120 2275 V 14 w(DisplayId)q(en)q(tit)q(y)c(\(C)d(LSR)g(function)q(\))d Fe(:)i(:)d(:)g(:)g(:)17 b Ff(63)1015 2334 y Fd(ILU)p 1083 2334 V 15 w(C)p 1120 2334 V 14 w(ENVIRONME)q(NT)c(\(C)d(LSR)h (macro\))e Fe(:)f(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Ff(69)1015 2392 y Fd(ILU)p 1083 2392 V 15 w(C)p 1120 2392 V 14 w(EXCEPTION)p 1333 2392 V 17 w(FREE)11 b(\(C)f(LSR)h(macro\)) 5 b Fe(:)k(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(70)1015 2450 y Fd(ILU)p 1083 2450 V 15 w(C)p 1120 2450 V 14 w(EXCEPTION)p 1333 2450 V 17 w(ID)10 b(\(C)h(LSR)f(macro\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)20 b Ff(70)1015 2508 y Fd(ILU)p 1083 2508 V 15 w(C)p 1120 2508 V 14 w(EXCEPTION)p 1333 2508 V 17 w(VALUE)12 b(\(C)e(LSR)g (macro\))k Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)21 b Ff(70)1015 2566 y Fd(ILU)p 1083 2566 V 15 w(C)p 1120 2566 V 14 w(FindIdent)q(it)q(y)12 b(\(C)f(LSR)f(function\))e Fe(:)g(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)16 b Ff(62)p eop %%Page: 329 330 329 329 bop 0 -58 a Fs(Index)11 b(of)g(Functions,)f(Variables,)h (Methods,)g(and)g(Types)948 b(329)0 183 y Fd(ILU)p 68 183 12 2 v 15 w(C)p 105 183 V 14 w(FindILUCla)q(ss)q(ByT)q(yp)q(eID)13 b(\(C)d(LSR)h(function\))83 241 y Fe(:)6 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)18 b Ff(57)0 299 y Fd(ILU)p 68 299 V 15 w(C)p 105 299 V 14 w(FindILUCla)q(ss)q(ByT)q(yp)q(eNa)q(me)13 b(\(C)d(LSR)75 358 y(function\))j Fe(:)7 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)19 b Ff(57)0 416 y Fd(ILU)p 68 416 V 15 w(C)p 105 416 V 14 w(FindObject)13 b(\(C)d(LSR)h(function\))t Fe(:)e(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)12 b Ff(59)0 474 y Fd(ILU)p 68 474 V 15 w(C)p 105 474 V 14 w(FINISH)p 251 474 V 16 w(MAIN)p 355 474 V 15 w(THREAD)f(\(C)g(LSR)f(function)75 532 y(macro\))i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)19 b Ff(66)0 590 y Fd(ILU)p 68 590 V 15 w(C)p 105 590 V 14 w(FormSBH)12 b(\(C)e(LSR)h(function\))k Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)21 b Ff(59)0 648 y Fd(ILU)p 68 648 V 15 w(C)p 105 648 V 14 w(GetBatcher)q(Co)q(nte)q(xt)13 b(\(C)d(LSR)h(function\))6 b Fe(:)j(:)15 b Ff(52,)75 706 y(66)0 764 y Fd(ILU)p 68 764 V 15 w(C)p 105 764 V 14 w(GetPasspor)q(tC)q(ont)q(ex)q(t)d(\(C)f (LSR)f(function\))83 823 y Fe(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)18 b Ff(65)0 881 y Fd(ILU)p 68 881 V 15 w(C)p 105 881 V 14 w(GetPipelin)q(eC)q(ont)q(ex)q(t)12 b(\(C)f(LSR)f (function\))81 939 y Fe(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)15 b Ff(52,)9 b(66)0 997 y Fd(ILU)p 68 997 V 15 w(C)p 105 997 V 14 w(GetSeriali)q(za)q(tio)q(nC)q(ont)q(ex)q(t)j(\(C)f(LSR)75 1055 y(function\))d Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)17 b Ff(52,)9 b(65)0 1113 y Fd(ILU)p 68 1113 V 15 w(C)p 105 1113 V 14 w(GSSNameToS)q(tr)q(ing)k(\(C)d(LSR)h (function\))d Fe(:)h(:)d(:)g(:)g(:)16 b Ff(63)0 1171 y Fd(ILU)p 68 1171 V 15 w(C)p 105 1171 V 14 w(IdentityIn)q(fo)d(\(C)d (LSR)h(function\))c Fe(:)i(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)16 b Ff(62)0 1229 y Fd(ILU)p 68 1229 V 15 w(C)p 105 1229 V 14 w(IDOfObject)d(\(C)d(LSR)h(function\))t Fe(:)e(:)d(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)12 b Ff(59)0 1287 y Fd(ILU)p 68 1287 V 15 w(C)p 105 1287 V 14 w(IDOfServer)h(\(C)d(LSR)h(function\))t Fe(:)e(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)12 b Ff(67)0 1346 y Fd(ILU)p 68 1346 V 15 w(C)p 105 1346 V 14 w(Initialize)q(Se)q(rve)q(r)h(\(C)d(LSR)g(function)q(\))5 b Fe(:)j(:)e(:)g(:)14 b Ff(67)0 1404 y Fd(ILU)p 68 1404 V 15 w(C)p 105 1404 V 14 w(LookupObje)q(ct)f(\(C)d(LSR)h(function\))c Fe(:)i(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)16 b Ff(60)0 1462 y Fd(ILU)p 68 1462 V 15 w(C)p 105 1462 V 14 w(NO)p 163 1462 V 14 w(EXCEPTION)d(\(C)d(LSR)h(macro\))i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(69)0 1520 y Fd(ILU)p 68 1520 V 15 w(C)p 105 1520 V 14 w(OBJECT)11 b(\(C)g(LSR)f(macro\))k Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)20 b Ff(39,)9 b(69)0 1578 y Fd(ILU)p 68 1578 V 15 w(C)p 105 1578 V 14 w(Object)i(\(C)g(LSR)f(type\))e Fe(:)g(:)e(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)17 b Ff(39)0 1636 y Fd(ILU)p 68 1636 V 15 w(C)p 105 1636 V 14 w(PingObject)c(\(C)d(LSR)h(function\))t Fe(:)e(:)d(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)12 b Ff(61)0 1694 y Fd(ILU)p 68 1694 V 15 w(C)p 105 1694 V 14 w(Pipeline)g(\(C)e(LSR)h(type\))i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)20 b Ff(52)0 1752 y Fd(ILU)p 68 1752 V 15 w(C)p 105 1752 V 14 w(PublishObj)q(ec)q(t)12 b(\(C)e(LSR)h(function\))5 b Fe(:)k(:)d(:)g(:)g(:)g(:)g(:)g(:)13 b Ff(59)0 1810 y Fd(ILU)p 68 1810 V 15 w(C)p 105 1810 V 14 w(PushBatche)q(r)f(\(C)f (LSR)f(function)q(\))d Fe(:)i(:)d(:)g(:)g(:)g(:)g(:)16 b Ff(52,)9 b(66)0 1869 y Fd(ILU)p 68 1869 V 15 w(C)p 105 1869 V 14 w(RegisterCu)q(st)q(omS)q(ur)q(rog)q(at)q(eT)q(ype)k(\(C) d(LSR)75 1927 y(function\))j Fe(:)7 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)19 b Ff(58)0 1985 y Fd(ILU)p 68 1985 V 15 w(C)p 105 1985 V 14 w(ReleaseBat)q(ch)q(er)13 b(\(C)d(LSR)g(function)q(\))e Fe(:)g(:)f(:)16 b Ff(52,)9 b(65)0 2043 y Fd(ILU)p 68 2043 V 15 w(C)p 105 2043 V 14 w(ReleasePip)q(el)q(ine)k(\(C)d(LSR)h(function\))6 b Fe(:)i(:)14 b Ff(52,)9 b(66)0 2101 y Fd(ILU)p 68 2101 V 15 w(C)p 105 2101 V 14 w(ReleaseSer)q(ia)q(liz)q(er)k(\(C)d(LSR)h (function\))6 b Fe(:)j(:)15 b Ff(52,)75 2159 y(65)0 2217 y Fd(ILU)p 68 2217 V 15 w(C)p 105 2217 V 14 w(Run)10 b(\(C)g(LSR)h(function\))6 b Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)14 b Ff(67)0 2275 y Fd(ILU)p 68 2275 V 15 w(C)p 105 2275 V 14 w(SBHOfObjec)q(t)e (\(C)f(LSR)f(function)q(\))f Fe(:)g(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) 18 b Ff(59)0 2334 y Fd(ILU)p 68 2334 V 15 w(C)p 105 2334 V 14 w(SBHToObjec)q(t)12 b(\(C)f(LSR)f(function)q(\))f Fe(:)g(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Ff(59)0 2392 y Fd(ILU)p 68 2392 V 15 w(C)p 105 2392 V 14 w(Serializer)13 b(\(C)d(LSR)h(type\))5 b Fe(:)j(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)15 b Ff(52)0 2450 y Fd(ILU)p 68 2450 V 15 w(C)p 105 2450 V 14 w(Server)c(\(C)g(LSR)f(type\))e Fe(:)g(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)17 b Ff(49)0 2508 y Fd(ILU)p 68 2508 V 15 w(C)p 105 2508 V 14 w(ServerRelo)q(ca)q(teP)q(ro)q(c)8 b Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)17 b Ff(68)0 2566 y Fd(ILU)p 68 2566 V 15 w(C)p 105 2566 V 14 w(ServerRelo)q(ca)q(teP)q(ro)q(c)12 b(\(C)f(LSR)f(proc)h(type\))83 2624 y Fe(:)6 b(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)18 b Ff(68)1015 183 y Fd(ILU)p 1083 183 V 15 w(C)p 1120 183 V 14 w(SET)p 1200 183 V 15 w(SUCCESSFUL)13 b(\(C)d(LSR)h(macro\))5 b Fe(:)k(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) 15 b Ff(70)1015 241 y Fd(ILU)p 1083 241 V 15 w(C)p 1120 241 V 14 w(SetBatche)q(rC)q(ont)q(ex)q(t)d(\(C)f(LSR)f(function)q(\))c Fe(:)i(:)15 b Ff(52,)1090 299 y(66)1015 358 y Fd(ILU)p 1083 358 V 15 w(C)p 1120 358 V 14 w(SetPasspo)q(rt)q(Con)q(te)q(xt)e (\(C)d(LSR)h(function\))1099 416 y Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)18 b Ff(65)1015 474 y Fd(ILU)p 1083 474 V 15 w(C)p 1120 474 V 14 w(SetPipeli)q(ne)q(Con)q(te)q(xt)13 b(\(C)d(LSR)h(function\))1096 532 y Fe(:)6 b(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)16 b Ff(52,)9 b(66)1015 590 y Fd(ILU)p 1083 590 V 15 w(C)p 1120 590 V 14 w(SetSerial)q(iz)q(ati)q(on)q(Co)q(nte)q(xt)k (\(C)d(LSR)1090 648 y(function)q(\))e Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)17 b Ff(52,)9 b(65)1015 706 y Fd(ILU)p 1083 706 V 15 w(C)p 1120 706 V 14 w(SetServer)q(Re)q(loc)q (at)q(io)q(nPr)q(oc)k(\(C)d(LSR)1090 764 y(function)q(\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)20 b Ff(68)1015 823 y Fd(ILU)p 1083 823 V 15 w(C)p 1120 823 V 14 w(SUCCESSFU)q(L)13 b(\(C)d(LSR)g(macro\))k Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)21 b Ff(70)1015 881 y Fd(ILU)p 1083 881 V 15 w(C)p 1120 881 V 14 w(SYSTEM)p 1266 881 V 16 w(EXCEPTION)13 b(\(C)d(LSR)h(macro\)) d Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)18 b Ff(70)1015 939 y Fd(ILU)p 1083 939 V 15 w(C)p 1120 939 V 14 w(USE)p 1200 939 V 15 w(OS)p 1259 939 V 14 w(THREADS)12 b(\(C)e(LSR)h(function) i(macro\))1099 997 y Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)18 b Ff(66)1015 1055 y Fd(ILU)p 1083 1055 V 15 w(C)p 1120 1055 V 14 w(USER)p 1222 1055 V 15 w(EXCEPTION)13 b(\(C)d(LSR)h(macro\))5 b Fe(:)k(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) 15 b Ff(69)1015 1113 y Fd(ILU)p 1083 1113 V 15 w(C)p 1120 1113 V 14 w(WithdrawO)q(bj)q(ect)e(\(C)d(LSR)h(function\))i Fe(:)6 b(:)g(:)h(:)f(:)g(:)19 b Ff(60)1015 1171 y Fd(ilu)p 1083 1171 V 15 w(Passport)13 b(\(Python)f(LSR)f(class\))t Fe(:)d(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(82)1015 1229 y Fd(ilu)p 1083 1229 V 15 w(Pipeline)f(\(Python)f (LSR)f(class\))t Fe(:)d(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)14 b Ff(82)1015 1287 y Fd(ilu)p 1083 1287 V 15 w(Server)e(\(Python)g (LSR)f(class\))h Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)19 b Ff(82)1015 1346 y Fd(ilu)p 1083 1346 V 15 w(tcp)p 1164 1346 V 15 w(GetStats)13 b(\(C)d(kernel)i(function\))t Fe(:)d(:)d(:)g(:)g(:)g(:)g(:)h(:)13 b Ff(69)1015 1404 y Fd(ilu)p 1083 1404 V 15 w(tcp)p 1164 1404 V 15 w(Initializ)q(eSt)q (at)q(s)f(\(C)f(kernel)g(function)q(\))1099 1462 y Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)18 b Ff(69)1015 1520 y Fd(ilu)p 1083 1520 V 15 w(tcp)p 1164 1520 V 15 w(SetDefaul)q(tBu)q(ff)q(er)q(siz)q(e)13 b(\(C)d(kernel)1090 1578 y(function)q(\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(69)1015 1636 y Fd(ILUCPlus)q(Pl)q(usP)q (ro)q(gr)q(amT)q(ar)q(get)13 b(\(imake\))6 b Fe(:)j(:)d(:)g(:)g(:)g(:)h (:)f(:)15 b Ff(263)1015 1694 y Fd(ILUCPlus)q(Pl)q(usT)q(ar)q(ge)q(t)d (\(imake\))c Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)17 b Ff(263)1015 1752 y Fd(iluCppRu)q(nt)q(ime)q(::)q(il)q (uAd)q(dI)q(nit)q(ia)q(li)q(zat)q(io)q(nFu)q(nc)q(ti)q(on)1090 1810 y(\(CORBA)12 b(2.0)f(C++)f(LSR)h(function\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(104)1015 1869 y Fd(iluCppRu)q(nt)q(ime)q(::)q(il)q(uCh)q(ar)q(act)q(er)q(St)q (rin)q(gC)q(opy)1090 1927 y(\(CORBA)12 b(2.0)f(C++)f(LSR)h(function\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(105)1015 1985 y Fd(iluCppRu)q(nt)q(ime)q(::)q(il)q(uCh)q(ar)q(act) q(er)q(St)q(rin)q(gD)q(upl)q(ic)q(at)q(e)1090 2043 y(\(CORBA)12 b(2.0)f(C++)f(LSR)h(function\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)20 b Ff(105)1015 2101 y Fd(iluCppRu)q(nt)q(ime)q(::)q (il)q(uCh)q(ar)q(act)q(er)q(St)q(rin)q(gE)q(qua)q(l)1090 2159 y(\(CORBA)12 b(2.0)f(C++)f(LSR)h(function\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(105)1015 2217 y Fd(iluCppRu)q(nt)q(ime)q(::)q(il)q(uCh)q(ar)q(act)q(er)q(St)q (rin)q(gL)q(eng)q(th)1090 2275 y(\(CORBA)12 b(2.0)f(C++)f(LSR)h (function\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(105)1015 2334 y Fd(iluCppRu)q(nt)q(ime)q(::)q(il)q(uCh)q(ar)q(Str) q(in)q(gF)q(rom)q(Sh)q(ort)q(Ch)q(ar)q(Str)q(in)q(g)1090 2392 y(\(CORBA)12 b(2.0)f(C++)f(LSR)h(function\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(105)1015 2450 y Fd(iluCppRu)q(nt)q(ime)q(::)q(il)q(uCh)q(ar)q(Str)q(in)q(gS)q (hor)q(tC)q(har)q(St)q(ri)q(ngE)q(qu)q(al)1090 2508 y(\(CORBA)12 b(2.0)f(C++)f(LSR)h(function\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)20 b Ff(105)1015 2566 y Fd(iluCppRu)q(nt)q(ime)q(::)q (il)q(uFo)q(rm)q(SBH)13 b(\(CORBA)f(2.0)f(C++)f(LSR)1090 2624 y(function)q(\))f Fe(:)g(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)19 b Ff(105)p eop %%Page: 330 331 330 330 bop 0 -58 a Fs(Index)11 b(of)g(Functions,)f(Variables,)h (Methods,)g(and)g(Types)948 b(330)0 183 y Fd(iluCppRun)q(ti)q(me:)q(:i) q(luF)q(or)q(mS)q(BHU)q(si)q(ngC)q(on)q(ta)q(ctI)q(nf)q(o)75 241 y(\(CORBA)12 b(2.0)e(C++)h(LSR)f(function)q(\))j Fe(:)6 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(105)0 299 y Fd(iluCppRun)q(ti)q(me:)q(:i)q(luF)q(re)q(e)12 b(\(CORBA)g(2.0)f(C++)g(LSR)75 358 y(function\))f Fe(:)f(:)d(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)18 b Ff(106)0 416 y Fd(iluCppRun)q(ti)q(me:)q(:i)q(luG)q(et)q(FD)q(Bud)q(ge)q(t)12 b(\(CORBA)g(2.0)75 474 y(C++)e(LSR)h(function\))i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Ff(106)0 532 y Fd(iluCppRun)q(ti)q(me:) q(:i)q(luI)q(ni)q(ti)q(ali)q(ze)13 b(\(CORBA)f(2.0)e(C++)75 590 y(LSR)g(function)q(\))5 b Fe(:)k(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)14 b Ff(103)0 648 y Fd(iluCppRun)q(ti)q(me:)q(:i)q(luM)q(al) q(lo)q(c)e(\(CORBA)g(2.0)f(C++)f(LSR)75 706 y(function\))g Fe(:)f(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)18 b Ff(106)0 764 y Fd(iluCppRun)q(ti)q(me:)q(:i)q(luP)q(ar)q(se)q(SBH)q (\(C)q(ORB)q(A)13 b(2.0)d(C++)75 823 y(LSR)g(function)q(\))5 b Fe(:)k(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(106)0 881 y Fd(iluCppRun)q(ti)q(me:)q(:i)q(luS)q(et)q(FD)q(Bud)q (ge)q(t)e(\(CORBA)g(2.0)75 939 y(C++)e(LSR)h(function\))i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Ff(106)0 997 y Fd(iluCppRun)q(ti)q (me:)q(:i)q(luS)q(et)q(Fo)q(rkP)q(ro)q(ced)q(ur)q(e)12 b(\(CORBA)75 1055 y(2.0)e(C++)h(LSR)f(function)q(\))c Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)14 b Ff(104)0 1113 y Fd(iluCppRun)q(ti)q(me:)q(:i)q(luS) q(et)q(No)q(nNa)q(ti)q(veT)q(hr)q(ea)q(dID)q(Fu)q(nct)q(io)q(n)75 1171 y(\(CORBA)e(2.0)e(C++)h(LSR)f(function)q(\))j Fe(:)6 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(104)0 1229 y Fd(iluCppRun)q(ti)q(me:)q(:i)q(luS)q(et)q(Su)q(rro)q(ga)q(teC)q (re)q(at)q(or)75 1287 y(\(CORBA)12 b(2.0)e(C++)h(LSR)f(function)q(\))j Fe(:)6 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(104)0 1346 y Fd(ILUCProgr)q(am)q(Tar)q(ge)q(t)12 b(\(imake\))i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)19 b Ff(262)0 1404 y Fd(ILUCTarge)q(t)12 b(\(imake\))t Fe(:)d(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)12 b Ff(262)0 1462 y Fd(iluForkPr)q(oc)h(\(CORBA)f(2.0)e(C++)h(LSR)g (typedef\))d Fe(:)g(:)f(:)16 b Ff(104)0 1520 y Fd(IluGenera)q(lE)q(rro) q(r)d(\(Python)f(LSR)e(exc\))5 b Fe(:)k(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)15 b Ff(85)0 1578 y Fd(iluGSS::i)q(lu)q(Acq)q(ui)q(reG)q(SS) q(Cr)q(edF)q(or)q(Nam)q(e)e(\(CORBA)75 1636 y(2.0)d(C++)h(LSR)f (function)q(\))c Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)14 b Ff(113)0 1694 y Fd(iluGSS::i)q(lu)q (Acq)q(ui)q(reG)q(SS)q(Id)q(ent)q(it)q(y)e(\(CORBA)g(2.0)75 1752 y(C++)e(LSR)h(function\))i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Ff(113)0 1810 y Fd(iluGSS::i)q(lu)q(Dec)q(od)q(eGS)q(SI)q(de)q(nti)q (ty)13 b(\(CORBA)f(2.0)e(C++)75 1869 y(LSR)g(function)q(\))5 b Fe(:)k(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(113)0 1927 y Fd(iluGSS::i)q(lu)q(GSS)q(Na)q(meT)q(oS)q(tr)q(ing)f (\(CORBA)f(2.0)f(C++)75 1985 y(LSR)f(function)q(\))5 b Fe(:)k(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(113)0 2043 y Fd(IluInstHa)q(nd)q(le)f(\(Python)f(inst)f(var\))d Fe(:)g(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)17 b Ff(89)0 2101 y Fd(iluMainLo)q(op)q(::i)q(lu)q(Cle)q(ar)q(Al)q(arm)c (\(CORBA)f(2.0)f(C++)75 2159 y(LSR)f(function)q(\))5 b Fe(:)k(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(114)0 2217 y Fd(iluMainLo)q(op)q(::i)q(lu)q(Cre)q(at)q(eA)q(lar)q (m)f(\(CORBA)e(2.0)g(C++)75 2275 y(LSR)f(function)q(\))5 b Fe(:)k(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(114)0 2334 y Fd(iluMainLo)q(op)q(::i)q(lu)q(Def)q(au)q(lt)q(Loo)q (pC)q(lea)q(rA)q(la)q(rm)75 2392 y(\(CORBA)e(2.0)e(C++)h(LSR)f (function)q(\))j Fe(:)6 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(115)0 2450 y Fd(iluMainLo)q(op)q(::i)q(lu)q(Def)q(au)q(lt)q(Loo)q (pC)q(rea)q(te)q(Al)q(arm)75 2508 y(\(CORBA)12 b(2.0)e(C++)h(LSR)f (function)q(\))j Fe(:)6 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(115)0 2566 y Fd(iluMainLo)q(op)q(::i)q(lu)q(Def)q(au)q(lt)q(Loo)q (pD)q(est)q(ro)q(yA)q(lar)q(m)75 2624 y(\(CORBA)12 b(2.0)e(C++)h(LSR)f (function)q(\))j Fe(:)6 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(115)1015 183 y Fd(iluMainL)q(oo)q(p::)q(il)q(uD)q(efa)q(ul)q(tLo)q (op)q(Se)q(tAl)q(ar)q(m)12 b(\(CORBA)1090 241 y(2.0)f(C++)f(LSR)h (function\))6 b Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(115)1015 299 y Fd(iluMainL)q(oo)q(p::)q(il)q(uD)q(est)q(ro)q(yAl)q(ar)q(m)d(\(CORBA)g (2.0)f(C++)1090 358 y(LSR)g(function\))6 b Fe(:)j(:)d(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)14 b Ff(114)1015 416 y Fd(iluMainL)q(oo)q(p::)q (il)q(uE)q(xit)f(\(CORBA)f(2.0)f(C++)f(LSR)1090 474 y(function)q(\))f Fe(:)g(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(113)1015 532 y Fd(iluMainL)q(oo)q(p::)q(il)q(uG)q(etM)q(ai)q(nLo)q (op)13 b(\(CORBA)f(2.0)e(C++)1090 590 y(LSR)h(function\))6 b Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)14 b Ff(115)1015 648 y Fd(iluMainL)q(oo)q(p::)q(il)q(uR)q(egi)q(st)q(erI)q (np)q(ut)q(Han)q(dl)q(er)1090 706 y(\(CORBA)e(2.0)f(C++)f(LSR)h (function\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(113)1015 764 y Fd(iluMainL)q(oo)q(p::)q(il)q(uR)q(egi)q(st)q(erO)q (ut)q(pu)q(tHa)q(nd)q(ler)1090 823 y(\(CORBA)12 b(2.0)f(C++)f(LSR)h (function\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(114)1015 881 y Fd(iluMainL)q(oo)q(p::)q(il)q(uR)q(un)13 b(\(CORBA)f(2.0)e(C++)h(LSR)1090 939 y(function)q(\))e Fe(:)g(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(113)1015 997 y Fd(iluMainL)q(oo)q(p::)q(il)q(uS)q(etA)q(la)q(rm)13 b(\(CORBA)f(2.0)e(C++)h(LSR)1090 1055 y(function)q(\))e Fe(:)g(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(114)1015 1113 y Fd(iluMainL)q(oo)q(p::)q(il)q(uS)q(etF)q(in)q(eTi) q(me)q(Fr)q(omN)q(ow)13 b(\(CORBA)1090 1171 y(2.0)e(C++)f(LSR)h (function\))6 b Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(114)1015 1229 y Fd(iluMainL)q(oo)q(p::)q(il)q(uS)q(etM)q(ai)q(nLo)q(op)e(\(CORBA)f (2.0)e(C++)1090 1287 y(LSR)h(function\))6 b Fe(:)j(:)d(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)14 b Ff(114)1015 1346 y Fd(iluMainL)q(oo)q(p::) q(il)q(uU)q(nRe)q(gi)q(ste)q(rI)q(np)q(utH)q(an)q(dle)q(r)1090 1404 y(\(CORBA)e(2.0)f(C++)f(LSR)h(function\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(113)1015 1462 y Fd(iluMainL)q(oo)q(p::)q(il)q(uU)q(nRe)q(gi)q(ste)q(rO)q(ut)q (put)q(Ha)q(ndl)q(er)1090 1520 y(\(CORBA)12 b(2.0)f(C++)f(LSR)h (function\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(114)1015 1578 y Fd(iluNonNa)q(ti)q(veT)q(hr)q(ea)q(dID)q(Fu)q(nct) q(io)q(n)12 b(\(CORBA)g(2.0)f(C++)1090 1636 y(LSR)g(typedef\))d Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)17 b Ff(104)1015 1694 y Fd(iluObjec)q(t:)q(:)p 1261 1694 12 2 v 17 w(duplicate)c(\(CORBA)e(2.0)g(C++)g(LSR)1090 1752 y(function)q(\))e Fe(:)g(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)19 b Ff(111)1015 1810 y Fd(iluObjec)q(t:)q(:)p 1261 1810 V 17 w(is)p 1322 1810 V 14 w(equivalen)q(t)12 b(\(CORBA)g(2.0)f(C++)f(LSR)1090 1869 y(function)q(\))f Fe(:)g(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(110)1015 1927 y Fd(iluObjec)q(t:)q(:)p 1261 1927 V 17 w(narrow)11 b(\(CORBA)h(2.0)f(C++)f(LSR)1090 1985 y(function)q(\))f Fe(:)g(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)19 b Ff(111)1015 2043 y Fd(iluObjec)q(t:)q(:~i)q(lu)q (Ob)q(jec)q(t)13 b(\(CORBA)e(2.0)g(C++)g(LSR)1090 2101 y(function)q(\))e Fe(:)g(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)19 b Ff(109)1015 2159 y Fd(iluObjec)q(t:)q(:il)q(uC)q (la)q(ssI)q(d)13 b(\(CORBA)e(2.0)g(C++)g(LSR)1090 2217 y(function)q(\))e Fe(:)g(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)19 b Ff(111)1015 2275 y Fd(iluObjec)q(t:)q(:il)q(uC)q (la)q(ssN)q(am)q(e)12 b(\(CORBA)g(2.0)f(C++)f(LSR)1090 2334 y(function)q(\))f Fe(:)g(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)19 b Ff(111)1015 2392 y Fd(iluObjec)q(t:)q(:il)q (uD)q(ea)q(cti)q(va)q(te)13 b(\(CORBA)f(2.0)e(C++)h(LSR)1090 2450 y(function)q(\))e Fe(:)g(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)19 b Ff(109)1015 2508 y Fd(iluObjec)q(t:)q(:il)q (uD)q(ec)q(rem)q(en)q(tRe)q(fe)q(re)q(nce)q(Co)q(unt)1090 2566 y(\(CORBA)12 b(2.0)f(C++)f(LSR)h(function\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(111)p eop %%Page: 331 332 331 331 bop 0 -58 a Fs(Index)11 b(of)g(Functions,)f(Variables,)h (Methods,)g(and)g(Types)948 b(331)0 183 y Fd(iluObject)q(::)q(ilu)q(Ge) q(tRe)q(fe)q(re)q(nce)q(Co)q(unt)13 b(\(CORBA)f(2.0)75 241 y(C++)e(LSR)h(function\))i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Ff(111)0 299 y Fd(iluObject)q(::)q(ilu)q(Ge)q(tSe)q(rv)q(er)13 b(\(CORBA)f(2.0)e(C++)h(LSR)75 358 y(function\))f Fe(:)f(:)d(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)18 b Ff(110)0 416 y Fd(iluObject)q(::)q(ilu)q(Id)13 b(\(CORBA)f(2.0)e(C++)h(LSR)75 474 y(function\))f Fe(:)f(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)18 b Ff(110)0 532 y Fd(iluObject)q(::)q(ilu)q(In)q(cre) q(me)q(nt)q(Ref)q(er)q(enc)q(eC)q(ou)q(nt)75 590 y(\(CORBA)12 b(2.0)e(C++)h(LSR)f(function)q(\))j Fe(:)6 b(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)19 b Ff(111)0 648 y Fd(iluObject)q(::)q(ilu)q(In)q(Sam) q(eS)q(er)q(ver)13 b(\(CORBA)f(2.0)f(C++)75 706 y(LSR)f(function)q(\))5 b Fe(:)k(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(110)0 764 y Fd(iluObject)q(::)q(ilu)q(Is)q(Col)q(le)q(ct)q(ibl)q (eO)q(bje)q(ct)f(\(CORBA)75 823 y(2.0)d(C++)h(LSR)f(function)q(\))c Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)14 b Ff(110)0 881 y Fd(iluObject)q(::)q(ilu)q(Ke)q(rne)q (lO)q(bj)q(ect)q(Un)q(lin)q(ke)q(d)e(\(CORBA)75 939 y(2.0)e(C++)h(LSR)f (function)q(\))c Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)14 b Ff(109)0 997 y Fd(iluObject)q(::)q (ilu)q(Lo)q(oku)q(p)f(\(CORBA)e(2.0)g(C++)g(LSR)75 1055 y(function\))f Fe(:)f(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)18 b Ff(109)0 1113 y Fd(iluObject)q(::)q(ilu)q(Ob)q(jec)q (t)13 b(\(CORBA)e(2.0)g(C++)g(LSR)75 1171 y(function\))f Fe(:)f(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)18 b Ff(108)0 1229 y Fd(iluObject)q(::)q(ilu)q(Ob)q(jec)q(tT)q(oI)q(ORS)q (tr)q(ing)13 b(\(CORBA)f(2.0)75 1287 y(C++)e(LSR)h(function\))i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Ff(110)0 1346 y Fd(iluObject)q(::)q(ilu)q(Ob)q(jec)q(tT)q(oS)q(tri)q(ng)13 b(\(CORBA)f(2.0)e(C++)75 1404 y(LSR)g(function)q(\))5 b Fe(:)k(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(110)0 1462 y Fd(iluObject)q(::)q(ilu)q(Ob)q(jec)q(tT)q(oU)q(RLS)q (tr)q(ing)f(\(CORBA)f(2.0)75 1520 y(C++)e(LSR)h(function\))i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Ff(110)0 1578 y Fd(iluObject)q(::)q(ilu)q(Pi)q(ng)13 b(\(CORBA)f(2.0)e(C++)h(LSR)75 1636 y(function\))f Fe(:)f(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)18 b Ff(110)0 1694 y Fd(iluObject)q(::)q(ilu)q(Pu)q (bli)q(sh)13 b(\(CORBA)f(2.0)e(C++)h(LSR)75 1752 y(function\))f Fe(:)f(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)18 b Ff(109)0 1810 y Fd(iluObject)q(::)q(ilu)q(Se)q(rve)q(rI)q(d)12 b(\(CORBA)g(2.0)f(C++)g(LSR)75 1869 y(function\))f Fe(:)f(:)d(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)18 b Ff(110)0 1927 y Fd(iluObject)q(::)q(ilu)q(St)q(rin)q(gT)q(oO)q(bje)q (ct)13 b(\(CORBA)f(2.0)e(C++)75 1985 y(LSR)g(function)q(\))5 b Fe(:)k(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(108)0 2043 y Fd(iluObject)q(::)q(ilu)q(Wi)q(thd)q(ra)q(w)e (\(CORBA)g(2.0)f(C++)g(LSR)75 2101 y(function\))f Fe(:)f(:)d(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)18 b Ff(109)0 2159 y Fd(IluObject)q(ID)13 b(\(Python)f(inst)f(meth\))i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(89)0 2217 y Fd(iluObject)q(Ta)q(ble)q(::)q(~il)q(uO)q(bj)q(ect)q (Ta)q(ble)13 b(\(CORBA)f(2.0)75 2275 y(C++)e(LSR)h(function\))i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Ff(112)0 2334 y Fd(iluObject)q(Ta)q(ble)q(::)q(ilu)q(Ge)q(tS)q(erv)q(er)13 b(\(CORBA)f(2.0)e(C++)75 2392 y(LSR)g(function)q(\))5 b Fe(:)k(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(111)0 2450 y Fd(iluObject)q(Ta)q(ble)q(::)q(ilu)q(Ob)q(je)q(ctO)q (fI)q(nst)q(an)q(ce)q(Han)q(dl)q(e)75 2508 y(\(CORBA)e(2.0)e(C++)h(LSR) f(function)q(\))j Fe(:)6 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(111)0 2566 y Fd(iluPasspo)q(rt)q(::~)q(il)q(uPa)q(ss)q(po)q(rt)13 b(\(CORBA)f(2.0)e(C++)h(LSR)75 2624 y(function\))f Fe(:)f(:)d(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)18 b Ff(112)1015 183 y Fd(iluPassp)q(or)q(t::)q(il)q(uA)q(ddI)q(de)q(nti)q (ty)13 b(\(CORBA)f(2.0)e(C++)1090 241 y(LSR)h(function\))6 b Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)14 b Ff(112)1015 299 y Fd(iluPassp)q(or)q(t::)q(il)q(uC)q(opy)q(Id)q(ent)q (it)q(y)e(\(CORBA)g(2.0)f(C++)1090 358 y(LSR)g(function\))6 b Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)14 b Ff(112)1015 416 y Fd(iluPassp)q(or)q(t::)q(il)q(uF)q(ind)q(Id)q(ent)q (it)q(y)e(\(CORBA)g(2.0)f(C++)1090 474 y(LSR)g(function\))6 b Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)14 b Ff(112)1015 532 y Fd(iluPassp)q(or)q(t::)q(il)q(uG)q(etC)q(al)q(ler)q (Pa)q(ss)q(por)q(t)f(\(CORBA)1090 590 y(2.0)e(C++)f(LSR)h(function\))6 b Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)15 b Ff(112)1015 648 y Fd(iluPassp)q(or)q(t::)q(il)q (uG)q(etI)q(lu)q(Pas)q(sp)q(or)q(t)d(\(CORBA)g(2.0)1090 706 y(C++)f(LSR)f(function)q(\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(112)1015 764 y Fd(iluPassp)q(or)q(t::)q(il)q(uG)q(etP)q(as)q(spo)q (rt)13 b(\(CORBA)f(2.0)e(C++)1090 823 y(LSR)h(function\))6 b Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)14 b Ff(112)1015 881 y Fd(iluPassp)q(or)q(t::)q(il)q(uP)q(ass)q(po)q(rt)f (\(CORBA)f(2.0)e(C++)h(LSR)1090 939 y(function)q(\))e Fe(:)g(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(112)1015 997 y Fd(iluPassp)q(or)q(t::)q(il)q(uS)q(etP)q(as)q(spo)q (rt)13 b(\(CORBA)f(2.0)e(C++)1090 1055 y(LSR)h(function\))6 b Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)14 b Ff(112)1015 1113 y Fd(iluPFunc)q(ti)q(onI)q(ni)q(ti)q(ali)q(ze)q(r)e (\(CORBA)g(2.0)f(C++)f(LSR)1090 1171 y(typedef\))t Fe(:)f(:)d(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)13 b Ff(104)1015 1229 y Fd(iluPFunc)q(ti)q(onS)q(ur)q(ro)q(gat)q(eC)q(rea) q(to)q(r)f(\(CORBA)g(2.0)f(C++)1090 1287 y(LSR)g(typedef\))d Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)17 b Ff(104)1015 1346 y Fd(IluProto)q(co)q(lEr)q(ro)q(r)12 b(\(Python)h(LSR)d(exc\))j Fe(:)6 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) 21 b Ff(85)1015 1404 y Fd(IluPubli)q(sh)13 b(\(Python)f(inst)f(meth\))5 b Fe(:)j(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(89)1015 1462 y Fd(IluSBH)d(\(Python)h(inst)e(meth\))c Fe(:)h(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)17 b Ff(89)1015 1520 y Fd(IluServe)q(r)c(\(Python)f (inst)f(var\))h Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)20 b Ff(89)1015 1578 y Fd(iluServe)q(r:)q(:~i)q(lu) q(Se)q(rve)q(r)13 b(\(CORBA)e(2.0)g(C++)g(LSR)1090 1636 y(function)q(\))e Fe(:)g(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)19 b Ff(107)1015 1694 y Fd(iluServe)q(r:)q(:il)q(uA)q (dd)q(Por)q(t)13 b(\(CORBA)e(2.0)g(C++)g(LSR)1090 1752 y(function)q(\))e Fe(:)g(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)19 b Ff(107)1015 1810 y Fd(iluServe)q(r:)q(:il)q(uG)q (et)q(Def)q(au)q(ltP)q(ro)q(to)q(col)13 b(\(CORBA)1090 1869 y(2.0)e(C++)f(LSR)h(function\))6 b Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(107)1015 1927 y Fd(iluServe)q(r:)q(:il)q(uG)q(et)q(Def)q(au)q(ltS) q(er)q(ve)q(r)d(\(CORBA)g(2.0)1090 1985 y(C++)f(LSR)f(function)q(\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(108)1015 2043 y Fd(iluServe)q(r:)q(:il)q(uG)q(et)q(Def)q(au)q(ltT)q(ra)q(ns)q(por)q (t)13 b(\(CORBA)1090 2101 y(2.0)e(C++)f(LSR)h(function\))6 b Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)15 b Ff(108)1015 2159 y Fd(iluServe)q(r:)q(:il)q(uR)q (un)e(\(CORBA)f(2.0)e(C++)h(LSR)1090 2217 y(function)q(\))e Fe(:)g(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(107)1015 2275 y Fd(iluServe)q(r:)q(:il)q(uS)q(er)q(ver)13 b(\(CORBA)f(2.0)f(C++)f(LSR)1090 2334 y(function)q(\))f Fe(:)g(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(107)1015 2392 y Fd(iluServe)q(r:)q(:il)q(uS)q(et)q(Def)q(au)q(ltP) q(ro)q(to)q(col)13 b(\(CORBA)1090 2450 y(2.0)e(C++)f(LSR)h(function\))6 b Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)15 b Ff(107)1015 2508 y Fd(iluServe)q(r:)q(:il)q(uS)q (et)q(Def)q(au)q(ltS)q(er)q(ve)q(r)d(\(CORBA)g(2.0)1090 2566 y(C++)f(LSR)f(function)q(\))j Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)19 b Ff(108)p eop %%Page: 332 333 332 332 bop 0 -58 a Fs(Index)11 b(of)g(Functions,)f(Variables,)h (Methods,)g(and)g(Types)948 b(332)0 183 y Fd(iluServer)q(::)q(ilu)q(Se) q(tDe)q(fa)q(ul)q(tTr)q(an)q(spo)q(rt)13 b(\(CORBA)75 241 y(2.0)d(C++)h(LSR)f(function)q(\))c Fe(:)j(:)d(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)14 b Ff(108)0 299 y Fd(IluTypeID)f(\(Python)f(inst)f(meth\))d Fe(:)g(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)17 b Ff(89)0 358 y Fd(IluTypeNa)q(me)c(\(Python)f(instance)h(meth\))c Fe(:)f(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)18 b Ff(89)0 416 y Fd(IluUnimpl)q(em)q(ent)q(ed)q(Met)q(ho)q(dE)q(rro)q(r)13 b(\(Python)f(LSR)75 474 y(exc\))6 b Fe(:)i(:)e(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)16 b Ff(85)0 532 y Fd(IluUnknow)q(nT)q(ype)q(ID)q(Err)q(or)d(\(Python)f (LSR)f(exc\))6 b Fe(:)i(:)e(:)g(:)16 b Ff(85)0 590 y Fd(IluWithdr)q(aw)d(\(Python)f(inst)f(meth\))i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(89)0 648 y Fd(Interface)q(Ta)q(rge)q(t)13 b(\(imake\))t Fe(:)8 b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) 14 b Ff(262,)8 b(263)0 706 y Fd(IOROfObje)q(ct)13 b(\(Python)f(LSR)f (fn\))g Fe(:)6 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)20 b Ff(85)0 814 y Fu(L)0 881 y Fd(LOCAL)p 112 881 12 2 v 16 w(INCLUDES)12 b(\(imake)g(var\))7 b Fe(:)h(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)17 b Ff(261,)8 b(263)0 939 y Fd(LongReal)13 b(\(Python)f(LSR)f(fn\))g Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)19 b Ff(85)0 997 y Fd(LookupObj)q(ec)q(t)12 b(\(Python)h(LSR)d(fn\))e Fe(:)f(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)17 b Ff(85)0 1105 y Fu(N)0 1171 y Fd(NormalObj)q(ec)q(tRu)q(le)c(\(imake\))g Fe(:)6 b(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)19 b Ff(261,)8 b(263)0 1279 y Fu(O)0 1346 y Fd(Object)t Fe(:)h(:)d(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)13 b Ff(88)0 1404 y Fd(ObjectOfS)q(BH)g(\(Python)f(LSR)f(fn\))g Fe(:)6 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)20 b Ff(85)0 1462 y Fd(ObjectTar)q(ge)q(t)12 b(\(imake\))t Fe(:)d(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)13 b Ff(262,)8 b(263)0 1520 y Fc(objtype)p 117 1520 V 130 1520 V 28 w Fd(CreateFro)q(mS)q(BH)13 b(\(C)d(objtype)i(static)75 1578 y(method\))7 b Fe(:)i(:)d(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)16 b Ff(41)0 1636 y Fc(objtype)p 117 1636 V 130 1636 V 28 w Fd(CreateTru)q(e)d(\(C)d(objtype)i(static)g(method\))83 1694 y Fe(:)6 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)18 b Ff(41)0 1752 y Fc(objtype)p 117 1752 V 130 1752 V 28 w Fd(MakeClass)13 b(\(C)d(objtype)j(static)e(method\))83 1810 y Fe(:)6 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)18 b Ff(40)0 1869 y Fc(objtype)p 117 1869 V 130 1869 V 28 w Fd(MSType)12 b(\(C)e(objtype)i(static)g(value\))t Fe(:)d(:)d(:)g(:)g (:)g(:)13 b Ff(41)0 1927 y Fc(objtype)p 117 1927 V 130 1927 V 28 w Fd(OTCreateT)q(ru)q(e)f(\(C)f(objtype)h(static)75 1985 y(method\))7 b Fe(:)i(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)16 b Ff(41)0 2043 y Fc(objtype)p 117 2043 V 130 2043 V 28 w Fd(SetDefaul)q(tC)q(la)q(ss)d(\(C)d(objtype) i(static)75 2101 y(method\))7 b Fe(:)i(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)16 b Ff(40)0 2159 y Fc(objtype)p 117 2159 V 130 2159 V 28 w Fd(SetDefaul)q(tC)q(la)q (ssF)q(in)q(ali)q(za)q(ti)q(on)d(\(C)75 2217 y(objtype)f(static)g (method\))5 b Fe(:)k(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(40)0 2275 y Fd(ORB)t Fe(:)7 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)13 b Ff(89)1015 183 y Fu(P)1015 250 y Fd(ParseSBH)g(\(Python)f(LSR)f(fn\)) g Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)20 b Ff(85)1015 370 y Fu(R)1015 436 y Fd(Register)q(Cu)q(sto)q(mS)q(ur)q(rog)q(at)q(e)12 b(\(Python)h(LSR)d(fn\))t Fe(:)d(:)f(:)14 b Ff(85)1015 495 y Fd(Register)q(In)q(put)q(Ha)q(nd)q(ler)f(\(Python)f(LSR)f(fn\))s Fe(:)d(:)e(:)g(:)g(:)g(:)g(:)13 b Ff(86)1015 553 y Fd(Register)q(Ou)q (tpu)q(tH)q(an)q(dle)q(r)g(\(Python)f(LSR)e(fn\))f Fe(:)f(:)e(:)g(:)g (:)19 b Ff(86)1015 611 y Fd(RunMainL)q(oo)q(p)12 b(\(Python)h(LSR)d (fn\))i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)20 b Ff(86)1015 731 y Fu(S)1015 798 y Fc(seqtype)p 1135 798 V 14 w Fd(Append)12 b(\(C)e(seq)h(method\))t Fe(:)e(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)14 b Ff(36)1015 856 y Fc(seqtype)p 1135 856 V 14 w Fd(Every)e(\(C)e(seq)g(method\))d Fe(:)i(:)d(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)17 b Ff(36)1015 914 y Fc(seqtype)p 1135 914 V 14 w Fd(Free)11 b(\(C)f(seq)h(method\))h Fe(:)6 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)19 b Ff(37)1015 972 y Fc(seqtype)p 1135 972 V 14 w Fd(Init)11 b(\(C)f(seq)h(method\))h Fe(:)6 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)19 b Ff(36)1015 1030 y Fc(seqtype)p 1135 1030 V 14 w Fd(Length)12 b(\(C)e(seq)h(method\))t Fe(:)e(:)d(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(36)1015 1088 y Fc(seqtype)p 1135 1088 V 14 w Fd(Nth)d(\(C)f(seq)h (method\))t Fe(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)13 b Ff(36)1015 1146 y Fc(seqtype)p 1135 1146 V 14 w Fd(Pop)e(\(C)f(seq)h(method\))t Fe(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)13 b Ff(36)1015 1204 y Fc(seqtype)p 1135 1204 V 14 w Fd(Push)e(\(C)f(seq)h(method\))h Fe(:)6 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)19 b Ff(36)1015 1263 y Fd(SetCallo)q(ut)q(Exc)q(ep)q(ti)q (onH)q(an)q(dle)q(r)13 b(\(Python)f(LSR)e(fn\))1099 1321 y Fe(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)18 b Ff(86)1015 1379 y Fd(SetDebug)q(Le)q(vel)13 b(\(Python)f(LSR)f(fn\))5 b Fe(:)i(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(86)1015 1437 y Fd(SetFDBud)q(ge)q(t)d(\(Python)h(LSR)d(fn\))i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)20 b Ff(86)1015 1495 y Fd(SetMainL)q(oo)q(p)12 b(\(Python)h(LSR)d (fn\))i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)20 b Ff(87)1015 1553 y Fd(SetPassp)q(or)q(t)12 b(\(Python)h(LSR)d(fn\))i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(87)1015 1611 y Fd(SetPipel)q(in)q(e)12 b(\(Python)h(LSR)d(fn\))i Fe(:)6 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(87)1015 1669 y Fd(SetSeria)q(li)q(zer)13 b(\(Python)f(LSR)f(fn\))5 b Fe(:)i(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)15 b Ff(87)1015 1790 y Fu(T)1015 1856 y Fd(TCPStati)q(st)q(ics)e(\(Python) f(LSR)f(fn\))5 b Fe(:)i(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)15 b Ff(87)1015 1914 y Fd(Threaded)q(Op)q(era)q(ti)q(on)e (\(Python)f(LSR)f(fn\))h Fe(:)6 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Ff(87)1015 1972 y Fd(TRUE)11 b(\(Python)i(LSR)d(const\))t Fe(:)f(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)14 b Ff(87)1015 2030 y Fd(TypeID)e(\(Python) h(LSR)d(fn\))d Fe(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)16 b Ff(87)1015 2089 y Fd(TypeName)d(\(Python)f(LSR)f(fn\))g Fe(:)6 b(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)20 b Ff(88)1015 2209 y Fu(V)1015 2275 y Fd(Version)13 b(\(Python)f(LSR)f (const\))t Fe(:)e(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)14 b Ff(88)p eop %%Page: 333 334 333 333 bop 0 -58 a Fs(Index)11 b(of)g(Functions,)f(Variables,)h (Methods,)g(and)g(Types)948 b(333)62 183 y(This)10 b(Page)i (Intentionally)d(Left)i(``Blank''.)p eop %%Page: -1 335 -1 334 bop 1937 -58 a Fs(i)0 183 y Fq(Table)15 b(of)f(Contents)0 358 y Fu(1)60 b(ILU)15 b(Concepts)7 b Fb(:)j(:)g(:)h(:)f(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) h(:)22 b Fu(2)149 435 y Fs(1.1)46 b(What)11 b(ILU)g(Does)6 b Fa(:)g(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)16 b Fs(2)149 498 y(1.2)46 b(How)10 b(ILU)i(Works)7 b Fa(:)f(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) 17 b Fs(2)149 560 y(1.3)46 b(Core)11 b(ILU)h(Concepts)g Fa(:)7 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)23 b Fs(4)299 622 y(1.3.1)45 b(Objects)10 b Fa(:)c(:)h(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)20 b Fs(4)448 684 y(1.3.1.1)46 b(Kernel)11 b(Servers)i Fa(:)8 b(:)f(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fs(5)448 747 y(1.3.1.2)46 b(Subtyping)9 b(\(interface)j(inheritance\))e Fa(:)c(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)21 b Fs(5)448 809 y(1.3.1.3)46 b(Subtype)10 b(Relationships)c Fa(:)f(:)i(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)16 b Fs(5)448 871 y(1.3.1.4)46 b(Singleton)9 b(Object)i(Types)5 b Fa(:)h(:)i(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)15 b Fs(6)448 934 y(1.3.1.5)46 b(Instantiation)5 b Fa(:)t(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)15 b Fs(6)448 996 y(1.3.1.6)46 b(String)10 b(Binding)g(Handle)j Fa(:)8 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)24 b Fs(7)448 1058 y(1.3.1.7)46 b(Siblings)12 b Fa(:)7 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)24 b Fs(7)448 1120 y(1.3.1.8)46 b(Object)10 b(Tables)h(\(or,)h(Just-in-Time)d(Objects\))i Fa(:)d(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)22 b Fs(8)448 1183 y(1.3.1.9)46 b(Server)12 b(Relocation)6 b Fa(:)g(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)16 b Fs(8)299 1245 y(1.3.2)45 b(Garbage)12 b(Collection)f Fa(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)23 b Fs(9)299 1307 y(1.3.3)45 b(Connections)6 b Fa(:)g(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)16 b Fs(9)299 1369 y(1.3.4)45 b(Pipelining)6 b Fa(:)f(:)i(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)16 b Fs(9)299 1432 y(1.3.5)45 b(Call)11 b(Order)h(Preservation)h Fa(:)7 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)25 b Fs(10)299 1494 y(1.3.6)45 b(Batching)6 b Fa(:)h(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)17 b Fs(11)299 1556 y(1.3.7)45 b(Simple)11 b(Binding)5 b Fa(:)h(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)16 b Fs(11)299 1618 y(1.3.8)45 b(Error)12 b(Signalling)d Fa(:)e(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) 23 b Fs(11)149 1681 y(1.4)46 b(ILU)11 b(and)g(OMG)g(CORBA)g Fa(:)d(:)f(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)22 b Fs(12)0 1805 y Fu(2)60 b(Defining)14 b(Interfaces)i Fb(:)10 b(:)h(:)f(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b Fu(13)149 1883 y Fs(2.1)46 b(General)11 b(Syntax)g(of)g(ISL)5 b Fa(:)i(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)16 b Fs(13)299 1945 y(2.1.1)45 b(Identifiers)5 b Fa(:)h(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)16 b Fs(13)299 2008 y(2.1.2)45 b(Reserved)12 b(Words)c Fa(:)e(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)19 b Fs(14)149 2070 y(2.2)46 b(Statement)11 b(Syntax)f Fa(:)c(:)i(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)21 b Fs(14)299 2132 y(2.2.1)45 b(The)11 b(Interface)h(Header)6 b Fa(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)17 b Fs(14)299 2194 y(2.2.2)45 b(Type)11 b(Declarations)f Fa(:)e(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)23 b Fs(15)448 2257 y(2.2.2.1)46 b(Primitive)10 b(types)g Fa(:)c(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)21 b Fs(15)448 2319 y(2.2.2.2)46 b(Constructor)10 b(overview)h Fa(:)6 b(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)22 b Fs(16)448 2381 y(2.2.2.3)46 b(Array)11 b(Declarations)5 b Fa(:)h(:)h(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)16 b Fs(16)448 2444 y(2.2.2.4)46 b(Sequence)11 b(Declarations)g Fa(:)6 b(:)h(:)g(:)h(:)f(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) 22 b Fs(16)448 2506 y(2.2.2.5)46 b(Generalized)11 b(Array)g (Declarations)f Fa(:)c(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)21 b Fs(17)448 2568 y(2.2.2.6)46 b(Record)11 b(Declarations)g Fa(:)c(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)23 b Fs(17)448 2630 y(2.2.2.7)46 b(Union)10 b(Declarations)h Fa(:)6 b(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)22 b Fs(18)p eop %%Page: -2 336 -2 335 bop 1925 -58 a Fs(ii)448 42 y(2.2.2.8)46 b(Optional)9 b(Declarations)f Fa(:)e(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)19 b Fs(19)448 104 y(2.2.2.9)46 b(Enumeration)10 b(Declarations)h Fa(:)6 b(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)22 b Fs(19)448 166 y(2.2.2.10)46 b(Object)10 b(Type)h(Declarations)i Fa(:)7 b(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)25 b Fs(20)448 228 y(2.2.2.11)46 b(Fixed-point)9 b(Declarations)i Fa(:)6 b(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)22 b Fs(22)299 291 y(2.2.3)45 b(Exception)10 b(Declarations)d Fa(:)e(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)18 b Fs(23)299 353 y(2.2.4)45 b(Constant)10 b(Declarations)e Fa(:)e(:)h(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)19 b Fs(24)448 415 y(2.2.4.1)46 b(Integer,)11 b(Cardinal,)g(and)g(Byte)h (Constants)c Fa(:)d(:)i(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) 19 b Fs(24)448 477 y(2.2.4.2)46 b(Real)11 b(Constants)g Fa(:)6 b(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)22 b Fs(24)448 540 y(2.2.4.3)46 b(ilu.CString)10 b(Constants)h Fa(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fs(24)448 602 y(2.2.4.4)46 b(Examples)10 b(of)i(Constants)d Fa(:)c(:)i(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)20 b Fs(25)149 664 y(2.3)46 b(ilu.isl)7 b Fa(:)f(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)18 b Fs(25)149 726 y(2.4)46 b(Using)10 b(OMG)h(IDL)g(with)f(ILU)t Fa(:)e(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)15 b Fs(26)299 789 y(2.4.1)45 b(Translation)5 b Fa(:)g(:)i(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)16 b Fs(26)448 851 y(2.4.1.1)46 b(Anonymous)9 b(types)k Fa(:)7 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)24 b Fs(26)448 913 y(2.4.1.2)46 b(Topmodules)9 b(mode)f Fa(:)g(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)19 b Fs(27)448 976 y(2.4.1.3)46 b(Imports)11 b(mode)g Fa(:)c(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)22 b Fs(27)448 1038 y(2.4.1.4)46 b(Unsupported)9 b(constructs)j Fa(:)7 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)24 b Fs(27)299 1100 y(2.4.2)45 b(Manual)11 b(Invocation)f(of)h Ft(idl2isl)f Fa(:)d(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)21 b Fs(27)149 1162 y(2.5)46 b(ISL)11 b(Grammar)j Fa(:)7 b(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fs(28)0 1287 y Fu(3)60 b(Using)15 b(ILU)g(with)g(Standard)g(C)f Fb(:)c(:)g(:)h(:)f (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)h(:)f(:)g(:)g(:)29 b Fu(32)149 1365 y Fs(3.1)46 b(Introduction)7 b Fa(:)t(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)18 b Fs(32)149 1427 y(3.2)46 b(The)11 b(ISL)g(Mapping)g(to)g(C)i Fa(:)7 b(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)24 b Fs(33)299 1489 y(3.2.1)45 b(Names)5 b Fa(:)i(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)16 b Fs(33)299 1551 y(3.2.2)45 b(Interface)7 b Fa(:)h(:)f(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)h(:)f(:)18 b Fs(33)299 1614 y(3.2.3)45 b(Basic)12 b(Types)7 b Fa(:)e(:)j(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)18 b Fs(33)299 1676 y(3.2.4)45 b(Constants)8 b Fa(:)e(:)h(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)19 b Fs(34)299 1738 y(3.2.5)45 b(Strings)10 b(and)h(Characters)j Fa(:)8 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)25 b Fs(34)299 1801 y(3.2.6)45 b(Pickles)11 b(and)g(Typecodes)g Fa(:)6 b(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) 22 b Fs(34)299 1863 y(3.2.7)45 b(Constructed)10 b(Types)e Fa(:)e(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)19 b Fs(35)448 1925 y(3.2.7.1)46 b(Enumeration)10 b Fa(:)c(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)21 b Fs(35)448 1987 y(3.2.7.2)46 b(Array)14 b Fa(:)7 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)25 b Fs(35)448 2050 y(3.2.7.3)46 b(Sequence)10 b Fa(:)d(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)21 b Fs(35)448 2112 y(3.2.7.4)46 b(Record)11 b Fa(:)d(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)22 b Fs(37)448 2174 y(3.2.7.5)46 b(Union)10 b Fa(:)c(:)h(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)21 b Fs(38)448 2236 y(3.2.7.6)46 b(Optional)8 b Fa(:)d(:)i(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)19 b Fs(39)299 2299 y(3.2.8)45 b(Object)11 b(Types)c Fa(:)f(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)18 b Fs(39)448 2361 y(3.2.8.1)46 b(Surrogate)11 b(and)g(True)g(Objects)d Fa(:)e(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)19 b Fs(39)448 2423 y(3.2.8.2)46 b(Interface)12 b(Inheritance)e Fa(:)c(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)21 b Fs(42)448 2485 y(3.2.8.3)46 b(Accessing)10 b(the)h(String)f(Binding)g(Handle,)h(IOR,)h(or)f(Object)g(ID)545 2548 y Fa(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)17 b Fs(43)p eop %%Page: -3 337 -3 336 bop 1912 -58 a Fs(iii)448 42 y(3.2.8.4)46 b(Distinguish)o(ing)8 b(Between)j(Local)g(and)g(Remote)h(Instances)545 104 y Fa(:)7 b(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)17 b Fs(43)448 166 y(3.2.8.5)46 b(Object)10 b(Implementation)e Fa(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)19 b Fs(43)448 228 y(3.2.8.6)46 b(Methods)8 b Fa(:)e(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)19 b Fs(44)448 291 y(3.2.8.7)46 b(Parameter)12 b(Passing)f(Considerations) f Fa(:)5 b(:)i(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)21 b Fs(45)448 353 y(3.2.8.8)46 b(Exceptions)6 b Fa(:)f(:)j(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)17 b Fs(46)448 415 y(3.2.8.9)46 b(Garbage)11 b(Collection)f(of)h(C)h (Instances)6 b Fa(:)h(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)17 b Fs(49)299 477 y(3.2.9)45 b(Issues)11 b(in)f(Mapping)h(OMG)g(IDL)g(to)g(C)c Fa(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)18 b Fs(49)149 540 y(3.3)46 b(Access)11 b(to)g(Standard)f(ILU)i (Features)f Fa(:)6 b(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)22 b Fs(49)299 602 y(3.3.1)45 b(Servers)12 b(and)f(Ports)f Fa(:)c(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)21 b Fs(49)448 664 y(3.3.1.1)46 b(Object)10 b(Tables)h Fa(:)c(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)22 b Fs(49)448 726 y(3.3.1.2)46 b(Server)12 b(Relocation)t Fa(:)6 b(:)i(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)16 b Fs(50)299 789 y(3.3.2)45 b(Threading)10 b(and)h(Event)g(Loops)c Fa(:)e(:)j(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)18 b Fs(50)299 851 y(3.3.3)45 b(Custom)11 b(Records)d Fa(:)f(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)19 b Fs(51)299 913 y(3.3.4)45 b(Custom)11 b(Surrogates)5 b Fa(:)i(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)16 b Fs(51)299 976 y(3.3.5)45 b(String)11 b(Binding)f(Handle)g(Formation)t Fa(:)d(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)15 b Fs(51)299 1038 y(3.3.6)45 b(Simple)11 b(Binding)5 b Fa(:)h(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)16 b Fs(51)299 1100 y(3.3.7)45 b(Identities)10 b(and)h(Passports)5 b Fa(:)g(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)16 b Fs(51)299 1162 y(3.3.8)45 b(Pipelining)10 b(in)g(C)h Fa(:)d(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fs(52)299 1225 y(3.3.9)45 b(Call)11 b(Order)h(Preservation)e(in)h(C)f Fa(:)d(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)21 b Fs(52)299 1287 y(3.3.10)45 b(Batching)10 b(in)h(C)g Fa(:)d(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fs(52)149 1349 y(3.4)46 b(Building)9 b(C/ILU)i(Applications)t Fa(:)5 b(:)i(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)15 b Fs(52)299 1411 y(3.4.1)45 b(Using)10 b(the)h(ILU)g(C)h(Stubber)f Fa(:)c(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fs(52)448 1474 y(3.4.1.1)46 b(Command-line)11 b(Options)t Fa(:)5 b(:)j(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)15 b Fs(53)448 1536 y(3.4.1.2)46 b(Tailoring)9 b(Identifier)i(Names)5 b Fa(:)i(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)16 b Fs(53)299 1598 y(3.4.2)45 b(Using)10 b(ILU)h(Modules)g(From)h(C)f Fa(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fs(54)299 1660 y(3.4.3)45 b(Implementing)11 b(an)g(ILU)g(Module)g (With)f(C)t Fa(:)e(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)15 b Fs(54)299 1723 y(3.4.4)45 b(Libraries)11 b(and)g(Linking)g Fa(:)5 b(:)i(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fs(56)149 1785 y(3.5)46 b(ILU)11 b(C)g(API)d Fa(:)g(:)f(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)19 b Fs(56)299 1847 y(3.5.1)45 b(General)6 b Fa(:)h(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)17 b Fs(56)299 1910 y(3.5.2)45 b(Type)11 b(Manipulation)t Fa(:)5 b(:)i(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)15 b Fs(57)299 1972 y(3.5.3)45 b(Object)11 b(Manipulation)f Fa(:)5 b(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)21 b Fs(58)299 2034 y(3.5.4)45 b(Identity)10 b(Functions)h Fa(:)c(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)24 b Fs(62)299 2096 y(3.5.5)45 b(Call)11 b(Management)h(Functions)e(in)g(C)e Fa(:)g(:)g(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)19 b Fs(65)299 2159 y(3.5.6)45 b(Server)12 b(Manipulation)e Fa(:)d(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fs(66)299 2221 y(3.5.7)45 b(CORBA)12 b(Compatibility)d(Macros)d Fa(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)17 b Fs(69)0 2345 y Fu(4)60 b(Using)15 b(ILU)g(with)g(Python)6 b Fb(:)j(:)i(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)21 b Fu(71)149 2423 y Fs(4.1)46 b(Introduction)7 b Fa(:)t(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)18 b Fs(71)149 2485 y(4.2)46 b(The)11 b(ISL)g(Mapping)g(to)g(Python)t Fa(:)6 b(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)15 b Fs(71)299 2548 y(4.2.1)45 b(Names)5 b Fa(:)i(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)16 b Fs(71)299 2610 y(4.2.2)45 b(Interface)7 b Fa(:)h(:)f(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)18 b Fs(71)p eop %%Page: -4 338 -4 337 bop 1915 -58 a Fs(iv)299 42 y(4.2.3)45 b(Basic)12 b(Types)7 b Fa(:)e(:)j(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)18 b Fs(71)448 104 y(4.2.3.1)46 b(Constant)6 b Fa(:)g(:)h(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)17 b Fs(71)299 166 y(4.2.4)45 b(Strings)13 b Fa(:)7 b(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)25 b Fs(72)299 228 y(4.2.5)45 b(Pickles)11 b(and)g(Typecodes)g Fa(:)6 b(:)h(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fs(72)299 291 y(4.2.6)45 b(Constructed)10 b(Types)e Fa(:)e(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)19 b Fs(72)448 353 y(4.2.6.1)46 b(Enumeration)10 b Fa(:)c(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)21 b Fs(72)448 415 y(4.2.6.2)46 b(Array)14 b Fa(:)7 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)25 b Fs(73)448 477 y(4.2.6.3)46 b(Sequence)10 b Fa(:)d(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)21 b Fs(73)448 540 y(4.2.6.4)46 b(Record)11 b Fa(:)d(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)22 b Fs(73)448 602 y(4.2.6.5)46 b(Union)10 b Fa(:)c(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)21 b Fs(73)448 664 y(4.2.6.6)46 b(Optional)8 b Fa(:)d(:)i(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)19 b Fs(73)299 726 y(4.2.7)45 b(Object)11 b(Types)c Fa(:)f(:)h(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)18 b Fs(74)448 789 y(4.2.7.1)46 b(Surrogate)11 b(and)g(True)g(Object)g(Types)6 b Fa(:)g(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)17 b Fs(74)448 851 y(4.2.7.2)46 b(Methods,)11 b(Parameters,)h(and)f(Exceptions)c Fa(:)f(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Fs(74)448 913 y(4.2.7.3)46 b(Garbage)11 b(Collection)f(and)h (COLLECTIBLE)6 b Fa(:)g(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)17 b Fs(75)149 976 y(4.3)46 b(Access)11 b(to)g(standard)f(ILU)h(features)e Fa(:)e(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)20 b Fs(75)299 1038 y(4.3.1)45 b(Servers)12 b(and)f(Ports)f Fa(:)c(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)21 b Fs(75)448 1100 y(4.3.1.1)46 b(Object)10 b(Tables)h Fa(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)22 b Fs(75)448 1162 y(4.3.1.2)46 b(Server)12 b(Relocation)t Fa(:)6 b(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)16 b Fs(75)299 1225 y(4.3.2)45 b(Threading)10 b(and)h(Event)g(Loops)c Fa(:)e(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)18 b Fs(76)448 1287 y(4.3.2.1)46 b(Animating)10 b(Servers)d Fa(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Fs(76)448 1349 y(4.3.2.2)46 b(Using)10 b(Alarms)h Fa(:)c(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)22 b Fs(76)299 1411 y(4.3.3)45 b(Custom)11 b(Records)d Fa(:)f(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)19 b Fs(76)299 1474 y(4.3.4)45 b(String)11 b(Binding)f(Handle)g(Formation)t Fa(:)d(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) 15 b Fs(77)299 1536 y(4.3.5)45 b(Simple)11 b(Binding)5 b Fa(:)h(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)16 b Fs(77)299 1598 y(4.3.6)45 b(Principal)11 b(Identities)e(and)i(Passports)d Fa(:)e(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)19 b Fs(78)149 1660 y(4.4)46 b(Building)9 b(Python/ILU)h(Applications)5 b Fa(:)g(:)i(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)17 b Fs(78)299 1723 y(4.4.1)45 b(Stub)11 b(Generation)f Fa(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)21 b Fs(78)448 1785 y(4.4.1.1)46 b(Command-line)11 b(Options)t Fa(:)5 b(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) 15 b Fs(78)299 1847 y(4.4.2)45 b(Implementing)11 b(an)g(ILU)g(module)g (in)f(Python)5 b Fa(:)i(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)16 b Fs(79)448 1910 y(4.4.2.1)46 b(Implementation)10 b(Inheritance)d Fa(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Fs(79)448 1972 y(4.4.2.2)46 b(Exporting)9 b(Objects)i Fa(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)23 b Fs(79)299 2034 y(4.4.3)45 b(Using)10 b(an)h(ILU)h(module)e(in)h (Python)d Fa(:)e(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)19 b Fs(80)299 2096 y(4.4.4)45 b(CORBA)12 b(Support)f(in)f(Python)g Fa(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)21 b Fs(80)299 2159 y(4.4.5)45 b(Freezing)12 b(a)f(Python)f(Application)f (Containing)h(ILU)i Fa(:)c(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)24 b Fs(80)149 2221 y(4.5)46 b(Python/ILU)9 b(API)j(Reference)h Fa(:)7 b(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)23 b Fs(81)299 2283 y(4.5.1)45 b(Identifiers)10 b(Exported)g(From)i(Module)f Ft(ilu)j Fa(:)7 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)25 b Fs(81)299 2345 y(4.5.2)45 b(Identifiers)10 b(Exported)g(from)i(the)f Ft(CORBA)g Fs(Module)g Fa(:)c(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)22 b Fs(88)299 2408 y(4.5.3)45 b(Methods)11 b(and)g(Attributes)e(of)i(ILU)g(Objects)h Fa(:)7 b(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)24 b Fs(89)p eop %%Page: -5 339 -5 338 bop 1927 -58 a Fs(v)0 42 y Fu(5)60 b(Using)15 b(ILU)g(with)g(CORBA)g(2.0)f(C)p Fh(++)c Fb(:)h(:)f(:)g(:)g(:)h(:)f(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)25 b Fu(90)149 119 y Fs(5.1)46 b(Warning)9 b Fa(:)d(:)i(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)20 b Fs(90)149 182 y(5.2)46 b(Introduction)7 b Fa(:)t(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)18 b Fs(90)149 244 y(5.3)46 b(Mapping)10 b(ILU)h(ISL)h(to)f(C)p Ft(++)6 b Fa(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)17 b Fs(90)299 306 y(5.3.1)45 b(ISL)12 b(to)f(IDL)g(Correspondences)c Fa(:)e(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)18 b Fs(90)299 369 y(5.3.2)45 b(ISL)12 b(Specific)f(Mappings)d Fa(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)20 b Fs(91)299 431 y(5.3.3)45 b(Correspondence)11 b(between)g(C)p Ft(++)g Fs(Types)g(and)g(Kernel)g(Types)e Fa(:)d(:)h(:)g(:)h(:)f(:)g(:)20 b Fs(92)299 493 y(5.3.4)45 b(C)p Ft(++)12 b Fs(Classes)e(Produced)i(for)f(an)g(Object)f Fa(:)c(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)21 b Fs(92)299 555 y(5.3.5)45 b(Misc.)12 b(Mapping)e(Details)g Fa(:)d(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)21 b Fs(93)448 618 y(5.3.5.1)46 b(Unions)11 b Fa(:)6 b(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)22 b Fs(93)448 680 y(5.3.5.2)46 b(Optionals)9 b Fa(:)c(:)i(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)20 b Fs(93)448 742 y(5.3.5.3)46 b(Exceptions)6 b Fa(:)f(:)j(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)17 b Fs(94)448 804 y(5.3.5.4)46 b(ISL)11 b(Asynchronous)e(Methods)j Fa(:)7 b(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)24 b Fs(94)448 867 y(5.3.5.5)46 b(ISL)11 b(Functional)f(Methods)c Fa(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)17 b Fs(95)448 929 y(5.3.5.6)46 b(ISL)11 b(Collectible)f(Objects)j Fa(:)7 b(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)25 b Fs(95)448 991 y(5.3.5.7)46 b(Inheritence)11 b(from)g(CORBA::Object)f Fa(:)d(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)21 b Fs(95)448 1053 y(5.3.5.8)46 b(Portability)9 b(and)i(Mapping)g (Variations)c Fa(:)e(:)i(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)18 b Fs(95)149 1116 y(5.4)46 b(Concepts)t Fa(:)6 b(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)15 b Fs(96)299 1178 y(5.4.1)45 b(Servers)12 b(and)f(Ports)f Fa(:)c(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)21 b Fs(96)299 1240 y(5.4.2)45 b(Object)11 b(Tables)g Fa(:)c(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)23 b Fs(96)299 1303 y(5.4.3)45 b(Threading)5 b Fa(:)h(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)16 b Fs(97)299 1365 y(5.4.4)45 b(Custom)11 b(Surrogates)5 b Fa(:)i(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)16 b Fs(97)299 1427 y(5.4.5)45 b(String)11 b(Binding)f(Handle)g(Manipulation)d Fa(:)e(:)i(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)18 b Fs(98)299 1489 y(5.4.6)45 b(Simple)11 b(Binding)5 b Fa(:)h(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)16 b Fs(98)299 1552 y(5.4.7)45 b(Object)11 b(Activation)c Fa(:)e(:)i(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)18 b Fs(98)299 1614 y(5.4.8)45 b(Security)12 b Fa(:)7 b(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)23 b Fs(99)299 1676 y(5.4.9)45 b(Static)11 b(Initialization)5 b Fa(:)g(:)i(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)16 b Fs(99)149 1738 y(5.5)46 b(Building)9 b(an)i(Application)g Fa(:)5 b(:)i(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)22 b Fs(99)299 1801 y(5.5.1)45 b(Running)10 b(the)h(Stubber)g Fa(:)c(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fs(99)299 1863 y(5.5.2)45 b(Stubber)11 b(Generated)g(Files)e Fa(:)d(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)19 b Fs(100)299 1925 y(5.5.3)45 b(Server)12 b(Basics)h Fa(:)7 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fs(100)299 1987 y(5.5.4)45 b(Client)11 b(Basics)c Fa(:)f(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)17 b Fs(102)149 2050 y(5.6)46 b(Relevant)11 b(examples)6 b Fa(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)17 b Fs(102)149 2112 y(5.7)46 b(Runtime)11 b(Classes)6 b Fa(:)g(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)17 b Fs(102)299 2174 y(5.7.1)45 b(Overview)7 b Fa(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)18 b Fs(103)299 2237 y(5.7.2)45 b(iluCppRuntime)7 b Fa(:)f(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Fs(103)448 2299 y(5.7.2.1)46 b(iluCppRuntime)9 b(-)j(Initialization)d (Related)f Fa(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)19 b Fs(103)448 2361 y(5.7.2.2)46 b(iluCppRuntime)9 b(-)j(Character)g (Utilities)e Fa(:)d(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) 23 b Fs(105)448 2423 y(5.7.2.3)46 b(iluCppRuntime)9 b(-)j(String)e (Binding)g(Handle)h(Utilities)6 b Fa(:)t(:)i(:)16 b Fs(105)448 2486 y(5.7.2.4)46 b(iluCppRuntime)9 b(-)j(File)f(Descriptor)f(Budget)h Fa(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)22 b Fs(106)448 2548 y(5.7.2.5)46 b(iluCppRuntime)9 b(-)j(Memory)g(Management)7 b Fa(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)18 b Fs(106)299 2610 y(5.7.3)45 b(iluServer)13 b Fa(:)8 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)h(:)f(:)24 b Fs(106)p eop %%Page: -6 340 -6 339 bop 1915 -58 a Fs(vi)448 42 y(5.7.3.1)46 b(iluServer)11 b(-)g(Setup)g(and)g(Destruction)h Fa(:)7 b(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)25 b Fs(107)448 104 y(5.7.3.2)46 b(iluServer)11 b(-)g(Default)g(Accessors)f Fa(:)c(:)h(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)20 b Fs(107)299 166 y(5.7.4)45 b(iluObject)11 b Fa(:)c(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)23 b Fs(108)448 228 y(5.7.4.1)46 b(iluObject)9 b(-)j(Creation)f(and)g(Destruction)6 b Fa(:)f(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)17 b Fs(108)448 291 y(5.7.4.2)46 b(iluObject)9 b(-)j(Object)e(Publication) t Fa(:)c(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)15 b Fs(109)448 353 y(5.7.4.3)46 b(iluObject)9 b(-)j(Accessors)f Fa(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)22 b Fs(110)448 415 y(5.7.4.4)46 b(iluObject)9 b(-)j(Informational)d Fa(:)d(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)20 b Fs(110)448 477 y(5.7.4.5)46 b(iluObject)9 b(-)j(Reference)g(Counting)f Fa(:)c(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)23 b Fs(111)299 540 y(5.7.5)45 b(iluObjectTable)11 b Fa(:)5 b(:)i(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)22 b Fs(111)299 602 y(5.7.6)45 b(iluPassport)6 b Fa(:)f(:)j(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)17 b Fs(112)299 664 y(5.7.7)45 b(iluGSS)11 b Fa(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)22 b Fs(113)299 726 y(5.7.8)45 b(iluMainLoop)7 b Fa(:)f(:)h(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)18 b Fs(113)149 789 y(5.8)46 b(CORBA)12 b(2.0)f(C)p Ft(++)g Fs(Considerations)f Fa(:)5 b(:)i(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)20 b Fs(115)299 851 y(5.8.1)45 b(ORB)p 531 851 14 3 v 17 w(init)10 b Fa(:)e(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)22 b Fs(115)0 976 y Fu(6)60 b(Using)15 b(ILU)g(with)g(C)p Fh(++)c Fb(:)f(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)26 b Fu(116)149 1053 y Fs(6.1)46 b(Introduction)6 b Fa(:)t(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)16 b Fs(116)149 1116 y(6.2)46 b(Mapping)10 b(ILU)h(ISL)h(to)f(C)p Ft(++)5 b Fa(:)i(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)15 b Fs(116)299 1178 y(6.2.1)45 b(Names)14 b Fa(:)7 b(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)24 b Fs(116)299 1240 y(6.2.2)45 b(Types)11 b Fa(:)c(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)22 b Fs(117)448 1302 y(6.2.2.1)46 b(Sequence)11 b(types)6 b Fa(:)g(:)h(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)17 b Fs(117)299 1365 y(6.2.3)45 b(Object)11 b(types)h Fa(:)7 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)24 b Fs(117)299 1427 y(6.2.4)45 b(Exceptions)6 b Fa(:)f(:)j(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)17 b Fs(117)299 1489 y(6.2.5)45 b(Constants)7 b Fa(:)f(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Fs(117)299 1551 y(6.2.6)45 b(Examples)7 b Fa(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)18 b Fs(117)149 1614 y(6.3)46 b(Using)10 b(an)h(ILU)g(module)g(from)g(C)p Ft(++)5 b Fa(:)j(:)f(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)16 b Fs(119)149 1676 y(6.4)46 b(Implementing)10 b(an)h(ILU)g (Module)g(in)g(C)p Ft(++)c Fa(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)17 b Fs(120)299 1738 y(6.4.1)45 b(Servers)9 b Fa(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)19 b Fs(120)299 1801 y(6.4.2)45 b(Event)11 b(dispatching)t Fa(:)5 b(:)i(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)15 b Fs(121)299 1863 y(6.4.3)45 b(Publishing)10 b Fa(:)5 b(:)i(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)20 b Fs(122)149 1925 y(6.5)46 b(ILU)11 b(API)g(for)h(C)p Ft(++)e Fa(:)d(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)21 b Fs(122)149 1987 y(6.6)46 b(Generating)10 b(ILU)h(stubs)f(for)h(C)p Ft(++)5 b Fa(:)i(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)15 b Fs(122)299 2050 y(6.6.1)45 b(Tailoring)10 b(C)p Ft(++)h Fs(Names)e Fa(:)f(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)20 b Fs(123)149 2112 y(6.7)46 b(Threading)t Fa(:)6 b(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)15 b Fs(123)149 2174 y(6.8)46 b(Other)11 b(ILU)g(Considerations)e(For)i(C)p Ft(++)f Fa(:)d(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) 20 b Fs(124)299 2236 y(6.8.1)45 b(Libraries)11 b(and)g(Linking)f Fa(:)5 b(:)i(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)21 b Fs(124)299 2299 y(6.8.2)45 b(Initialization)9 b(order)f Fa(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)19 b Fs(124)299 2361 y(6.8.3)45 b(Makefiles)6 b Fa(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)17 b Fs(124)p eop %%Page: -7 341 -7 340 bop 1902 -58 a Fs(vii)0 42 y Fu(7)60 b(Using)15 b(ILU)g(with)g(Java)9 b Fb(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)h(:)f(:)g(:)24 b Fu(125)149 119 y Fs(7.1)46 b(Introduction)6 b Fa(:)t(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)16 b Fs(125)299 182 y(7.1.1)45 b(ILU)11 b(and)g(CORBA)c Fa(:)h(:)g(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Fs(125)149 244 y(7.2)46 b(The)11 b(ISL)g(Mapping)g(to)g(Java)c Fa(:)f(:)i(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)18 b Fs(125)299 306 y(7.2.1)45 b(Names)14 b Fa(:)7 b(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)24 b Fs(125)299 369 y(7.2.2)45 b(Interface)6 b Fa(:)i(:)f(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)17 b Fs(126)299 431 y(7.2.3)45 b(Basic)12 b(Types)5 b Fa(:)h(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)16 b Fs(126)448 493 y(7.2.3.1)46 b(Constant)5 b Fa(:)h(:)h(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)16 b Fs(126)299 555 y(7.2.4)45 b(Strings)11 b Fa(:)d(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)23 b Fs(126)299 618 y(7.2.5)45 b(Pickles)11 b(and)g(Typecodes)f Fa(:)c(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)21 b Fs(126)299 680 y(7.2.6)45 b(Constructed)10 b(Types)d Fa(:)f(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)17 b Fs(126)448 742 y(7.2.6.1)46 b(Enumeration)9 b Fa(:)d(:)h(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)20 b Fs(126)448 804 y(7.2.6.2)46 b(Array)12 b Fa(:)c(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)23 b Fs(126)448 867 y(7.2.6.3)46 b(Sequence)9 b Fa(:)e(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)20 b Fs(126)448 929 y(7.2.6.4)46 b(Record)10 b Fa(:)d(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)21 b Fs(127)448 991 y(7.2.6.5)46 b(Union)9 b Fa(:)c(:)j(:)f(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)20 b Fs(127)448 1053 y(7.2.6.6)46 b(Optional)6 b Fa(:)f(:)j(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)17 b Fs(127)299 1116 y(7.2.7)45 b(Object)11 b(Types)5 b Fa(:)h(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)16 b Fs(127)448 1178 y(7.2.7.1)46 b(Surrogate)11 b(and)g(True)g(Object)g(Types)5 b Fa(:)h(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) 16 b Fs(127)448 1240 y(7.2.7.2)46 b(Methods,)11 b(Parameters,)h(and)f (Exceptions)6 b Fa(:)f(:)i(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)17 b Fs(127)448 1303 y(7.2.7.3)46 b(Java)11 b(Garbage)g(Collection,)f (Distributed)f(Garbage)539 1365 y(Collection,)h(and/or)h(COLLECTIBLE)5 b Fa(:)i(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)16 b Fs(127)299 1427 y(7.2.8)45 b(How)11 b(to)g(make)h(your)e (idl)h(Java)g(friendly)6 b Fa(:)g(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)17 b Fs(128)149 1489 y(7.3)46 b(Access)11 b(to)g(standard)f(ILU)h (features)d Fa(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)19 b Fs(129)299 1552 y(7.3.1)45 b(Servers)12 b(and)f(Ports)e Fa(:)d(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)19 b Fs(129)448 1614 y(7.3.1.1)46 b(True)11 b(Servers)f Fa(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)20 b Fs(129)448 1676 y(7.3.1.2)46 b(Object)10 b(Tables)g Fa(:)c(:)h(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)20 b Fs(130)299 1738 y(7.3.2)45 b(Threading)10 b(and)h(Event)g(Loops)5 b Fa(:)h(:)h(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)16 b Fs(130)299 1801 y(7.3.3)45 b(Custom)11 b(Records)c Fa(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)17 b Fs(130)299 1863 y(7.3.4)45 b(Custom)11 b(Surrogates)t Fa(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)15 b Fs(130)299 1925 y(7.3.5)45 b(String)11 b(Binding)f(Handle)g(Formation)j Fa(:)7 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fs(130)299 1987 y(7.3.6)45 b(Simple)11 b(Binding)t Fa(:)6 b(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)15 b Fs(130)299 2050 y(7.3.7)45 b(Principal)11 b(Identities)e(and)i(Passports)c Fa(:)f(:)h(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)17 b Fs(131)149 2112 y(7.4)46 b(Building)9 b(ILU)i(for)h(Java)f(Applications)c Fa(:)t(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)18 b Fs(131)299 2174 y(7.4.1)45 b(Java)11 b(Administrivia)e(Without)h(ILU)i Fa(:)7 b(:)h(:)f(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)24 b Fs(131)448 2237 y(7.4.1.1)46 b(Packages)11 b Fa(:)d(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)22 b Fs(133)448 2299 y(7.4.1.2)46 b(Summary)8 b Fa(:)f(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)18 b Fs(133)299 2361 y(7.4.2)45 b(Stub)11 b(Generation)e Fa(:)d(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)20 b Fs(134)448 2423 y(7.4.2.1)46 b(Problems)11 b(and)g(Solutions)g Fa(:)5 b(:)i(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)22 b Fs(135)448 2486 y(7.4.2.2)46 b(Java)11 b(Compilation)c Fa(:)e(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)18 b Fs(135)448 2548 y(7.4.2.3)46 b(Execution)12 b Fa(:)7 b(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)25 b Fs(135)448 2610 y(7.4.2.4)46 b(Debugging)5 b Fa(:)g(:)i(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)16 b Fs(136)p eop %%Page: -8 342 -8 341 bop 1889 -58 a Fs(viii)448 42 y(7.4.2.5)46 b(Debugging)9 b(native)i(ILU)g(code)i Fa(:)7 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)24 b Fs(136)299 104 y(7.4.3)45 b(Implementing)11 b(an)g(ILU)g(module)g(in)f(Java)e Fa(:)f(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)19 b Fs(137)299 166 y(7.4.4)45 b(Hints)10 b(about)g(implicit)g(registration)e Fa(:)d(:)j(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)19 b Fs(137)448 228 y(7.4.4.1)46 b(Implementation)10 b(Inheritance)c Fa(:)g(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)17 b Fs(137)448 291 y(7.4.4.2)46 b(Exporting)9 b(Objects)i Fa(:)6 b(:)h(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)22 b Fs(137)299 353 y(7.4.5)45 b(Using)10 b(an)h(ILU)h(module)e(in)h(Java)f Fa(:)d(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)21 b Fs(137)149 415 y(7.5)46 b(Notes)10 b(for)h(ILU)h(for)f (Java)g(in)g(applets)e Fa(:)d(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)20 b Fs(138)149 477 y(7.6)46 b(Notes)10 b(for)h(Java)h(on)e(particular)h(architectures)6 b Fa(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)17 b Fs(138)299 540 y(7.6.1)45 b(Notes)11 b(for)g(Java)g(on)g(Windows)6 b Fa(:)f(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)17 b Fs(138)299 602 y(7.6.2)45 b(Notes)11 b(for)g(Java)g(on)g(Linux)e Fa(:)c(:)i(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)19 b Fs(139)299 664 y(7.6.3)45 b(Native)11 b(threads)f(versus)h(green)g (threads)6 b Fa(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)17 b Fs(139)299 726 y(7.6.4)45 b(Java)11 b(releases)e Fa(:)f(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)20 b Fs(139)149 789 y(7.7)46 b(ILU)11 b(for)g(Java)g(Reference)5 b Fa(:)k(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)16 b Fs(139)299 851 y(7.7.1)45 b(javadoc)11 b(documentation)c Fa(:)e(:)i(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)17 b Fs(139)448 913 y(7.7.1.1)46 b(Bugs)9 b Fa(:)d(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)20 b Fs(139)448 976 y(7.7.1.2)46 b(Build)10 b(of)h(the)g(javadoc)g (documentation)g Fa(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)23 b Fs(140)299 1038 y(7.7.2)45 b(Description)10 b(of)h(Java)g (classes)h Fa(:)7 b(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)24 b Fs(140)448 1100 y(7.7.2.1)46 b(CORBA)12 b(Exceptions)e Fa(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)23 b Fs(140)448 1162 y(7.7.2.2)46 b(Holder)10 b(classes)5 b Fa(:)h(:)h(:)h(:)f(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)15 b Fs(141)448 1225 y(7.7.2.3)46 b(CORBA)12 b(classes)e Fa(:)c(:)h(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)20 b Fs(142)448 1287 y(7.7.2.4)46 b(Basic)11 b(environment)f(classes)e Fa(:)e(:)i(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)18 b Fs(143)448 1349 y(7.7.2.5)46 b(ILU)11 b(exceptions)6 b Fa(:)f(:)i(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)17 b Fs(143)448 1411 y(7.7.2.6)46 b(ILU)11 b(public)f(classes)e Fa(:)e(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)18 b Fs(144)448 1474 y(7.7.2.7)46 b(Internal)11 b(or)g(esoteric)f(classes) d Fa(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)18 b Fs(145)149 1536 y(7.8)46 b(Full)10 b(Custom)h(Mapping)d Fa(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)19 b Fs(146)448 1598 y(7.8.0.1)46 b(Stubbing)12 b Fa(:)7 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)25 b Fs(147)448 1660 y(7.8.0.2)46 b(Runtime)11 b(features)g Fa(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)22 b Fs(147)448 1723 y(7.8.0.3)46 b(Transmitting)9 b(arbitrary)i(java)g (objects)h Fa(:)7 b(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)24 b Fs(148)0 1847 y Fu(8)60 b(Using)15 b(ILU)g(with)g(Common)g (Lisp)5 b Fb(:)10 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)20 b Fu(149)149 1925 y Fs(8.1)46 b(Introduction)6 b Fa(:)t(:)h(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)16 b Fs(149)149 1987 y(8.2)46 b(The)11 b(ISL)g(Mapping)g(to)g(Common)g(Lisp)c Fa(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)18 b Fs(149)299 2050 y(8.2.1)45 b(Names)14 b Fa(:)7 b(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)24 b Fs(149)299 2112 y(8.2.2)45 b(Interface)6 b Fa(:)i(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)17 b Fs(149)299 2174 y(8.2.3)45 b(Basic)12 b(Types)5 b Fa(:)h(:)h(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)16 b Fs(150)448 2236 y(8.2.3.1)46 b(Constant)5 b Fa(:)h(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)16 b Fs(150)299 2299 y(8.2.4)45 b(Strings)11 b Fa(:)d(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)23 b Fs(150)299 2361 y(8.2.5)45 b(Pickles)11 b(and)g(Typecodes)f Fa(:)c(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)21 b Fs(150)299 2423 y(8.2.6)45 b(Constructed)10 b(Types)d Fa(:)f(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)17 b Fs(151)448 2485 y(8.2.6.1)46 b(Enumeration)9 b Fa(:)d(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)20 b Fs(151)448 2548 y(8.2.6.2)46 b(Array)12 b Fa(:)c(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)23 b Fs(151)448 2610 y(8.2.6.3)46 b(Sequence)9 b Fa(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)20 b Fs(151)p eop %%Page: -9 343 -9 342 bop 1915 -58 a Fs(ix)448 42 y(8.2.6.4)46 b(Record)10 b Fa(:)d(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)21 b Fs(151)448 104 y(8.2.6.5)46 b(Union)9 b Fa(:)c(:)j(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)20 b Fs(151)448 166 y(8.2.6.6)46 b(Optional)6 b Fa(:)f(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)17 b Fs(151)299 228 y(8.2.7)45 b(Object)11 b(Types)5 b Fa(:)h(:)i(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f (:)g(:)16 b Fs(151)448 291 y(8.2.7.1)46 b(Surrogate)11 b(and)g(True)g(Object)g(Types)5 b Fa(:)h(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)16 b Fs(152)448 353 y(8.2.7.2)46 b(Methods,)11 b(Parameters,)h(and)f(Exceptions)6 b Fa(:)f(:)i(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)17 b Fs(152)448 415 y(8.2.7.3)46 b(Garbage)11 b(Collection)f(and)h(COLLECTIBLE)5 b Fa(:)h(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)15 b Fs(152)149 477 y(8.3)46 b(Access)11 b(to)g(standard)f(ILU)h(features)d Fa(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)19 b Fs(152)299 540 y(8.3.1)45 b(Servers)12 b(and)f(Ports)e Fa(:)d(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)19 b Fs(152)448 602 y(8.3.1.1)46 b(Object)10 b(Tables)g Fa(:)c(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)h(:)f(:)20 b Fs(152)448 664 y(8.3.1.2)46 b(Server)12 b(Relocation)g Fa(:)7 b(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)24 b Fs(152)299 726 y(8.3.2)45 b(Threading)10 b(and)h(Event)g(Loops)5 b Fa(:)h(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)16 b Fs(152)299 789 y(8.3.3)45 b(Custom)11 b(Records)c Fa(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)17 b Fs(152)299 851 y(8.3.4)45 b(Custom)11 b(Surrogates)t Fa(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)15 b Fs(152)299 913 y(8.3.5)45 b(String)11 b(Binding)f(Handle)g(Formation) j Fa(:)7 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fs(152)299 976 y(8.3.6)45 b(Simple)11 b(Binding)t Fa(:)6 b(:)h(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)15 b Fs(152)299 1038 y(8.3.7)45 b(Principal)11 b(Identities)e(and)i (Passports)c Fa(:)f(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)17 b Fs(153)149 1100 y(8.4)46 b(Building)9 b(Common)j(Lisp/ILU)d(Applications)g Fa(:)c(:)i(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)19 b Fs(153)299 1162 y(8.4.1)45 b(Stub)11 b(Generation)e Fa(:)d(:)h(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)20 b Fs(153)299 1225 y(8.4.2)45 b(Implementing)11 b(an)g(ILU)g(module)g (in)f(Common)i(Lisp)c Fa(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)19 b Fs(153)448 1287 y(8.4.2.1)46 b(Implementation)10 b(Inheritance)c Fa(:)g(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)17 b Fs(154)448 1349 y(8.4.2.2)46 b(Exporting)9 b(Objects)i Fa(:)6 b(:)h(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)22 b Fs(154)448 1411 y(8.4.2.3)46 b(Debugging)5 b Fa(:)g(:)i(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)16 b Fs(155)299 1474 y(8.4.3)45 b(Using)10 b(an)h(ILU)h(module)e(in)h(Common)h(Lisp)f Fa(:)6 b(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)22 b Fs(155)299 1536 y(8.4.4)45 b(Dumping)10 b(an)i(image)f(with)f(ILU)5 b Fa(:)i(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)15 b Fs(155)299 1598 y(8.4.5)45 b(Notes)11 b(for)g(Microsoft)g(Windows)e(Users)g Fa(:)d(:)i(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)19 b Fs(156)448 1660 y(8.4.5.1)46 b(Installation)9 b(on)h(the)h(MS)h (Windows)e(platform)g Fa(:)c(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)20 b Fs(156)448 1723 y(8.4.5.2)46 b(Allegro)10 b(3.0.1)h(Needs)g Ft(ilu:run-main-loop)e Fa(:)d(:)h(:)g(:)g(:)g(:)h(:)19 b Fs(156)299 1785 y(8.4.6)45 b(The)11 b(Portable)g(DEFSYSTEM)h(Module)c Fa(:)e(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)19 b Fs(156)299 1847 y(8.4.7)45 b(ILU)11 b(Common)h(Lisp)e(Lightweight)f(Processes)c Fa(:)h(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)15 b Fs(156)299 1910 y(8.4.8)45 b(Porting)10 b(ILU)i(to)e(a)i(New)f (Common)h(Lisp)e(Implementation)d Fa(:)e(:)j(:)f(:)g(:)g(:)g(:)h(:)17 b Fs(157)149 1972 y(8.5)46 b(Common)11 b(Lisp/ILU)f(API)h(Reference)5 b Fa(:)k(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)16 b Fs(157)0 2096 y Fu(9)60 b(Using)15 b(ILU)g(with)g(Scheme)f(\(Guile\)) i Fb(:)10 b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)33 b Fu(160)149 2174 y Fs(9.1)46 b(Introduction)6 b Fa(:)t(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)16 b Fs(160)149 2236 y(9.2)46 b(The)11 b(ISL)g(Mapping)g(to)g(Scheme)6 b Fa(:)h(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)16 b Fs(160)299 2299 y(9.2.1)45 b(Names)14 b Fa(:)7 b(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)24 b Fs(160)299 2361 y(9.2.2)45 b(Basic)12 b(Types)5 b Fa(:)h(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)16 b Fs(160)448 2423 y(9.2.2.1)46 b(Constant)5 b Fa(:)h(:)h(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)16 b Fs(160)299 2485 y(9.2.3)45 b(Strings)11 b Fa(:)d(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)23 b Fs(161)299 2548 y(9.2.4)45 b(Pickles)11 b(and)g(Typecodes)f Fa(:)c(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)21 b Fs(161)299 2610 y(9.2.5)45 b(Constructed)10 b(Types)d Fa(:)f(:)h(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)17 b Fs(161)p eop %%Page: -10 344 -10 343 bop 1927 -58 a Fs(x)448 42 y(9.2.5.1)46 b(Enumeration)9 b Fa(:)d(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)20 b Fs(161)448 104 y(9.2.5.2)46 b(Array)12 b Fa(:)c(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)23 b Fs(161)448 166 y(9.2.5.3)46 b(Sequence)9 b Fa(:)e(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)20 b Fs(161)448 228 y(9.2.5.4)46 b(Record)10 b Fa(:)d(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)21 b Fs(161)448 291 y(9.2.5.5)46 b(Union)9 b Fa(:)c(:)j(:)f(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)20 b Fs(161)448 353 y(9.2.5.6)46 b(Optional)6 b Fa(:)f(:)j(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)17 b Fs(161)299 415 y(9.2.6)45 b(Object)11 b(Types)5 b Fa(:)h(:)i(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)h(:)f(:)g(:)16 b Fs(162)448 477 y(9.2.6.1)46 b(Surrogate)11 b(and)g(True)g(Object)g(Types)5 b Fa(:)h(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)16 b Fs(162)448 540 y(9.2.6.2)46 b(Methods,)11 b(Parameters,)h(and)f(Exceptions)6 b Fa(:)f(:)i(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)17 b Fs(163)448 602 y(9.2.6.3)46 b(Garbage)11 b(Collection)f(and)h(COLLECTIBLE)5 b Fa(:)h(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)15 b Fs(164)149 664 y(9.3)46 b(Access)11 b(to)g(standard)f(ILU)h(features)d Fa(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)19 b Fs(164)299 726 y(9.3.1)45 b(Servers)12 b(and)f(Ports)e Fa(:)d(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)19 b Fs(164)448 789 y(9.3.1.1)46 b(Object)10 b(Tables)g Fa(:)c(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)h(:)f(:)20 b Fs(164)299 851 y(9.3.2)45 b(Threading)10 b(and)h(Event)g(Loops)5 b Fa(:)h(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)16 b Fs(164)299 913 y(9.3.3)45 b(Custom)11 b(Records)c Fa(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)17 b Fs(164)299 976 y(9.3.4)45 b(String)11 b(Binding)f(Handle)g(Formation)j Fa(:)7 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fs(164)299 1038 y(9.3.5)45 b(Simple)11 b(Binding)t Fa(:)6 b(:)h(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)15 b Fs(164)299 1100 y(9.3.6)45 b(Principal)11 b(Identities)e(and)i (Passports)c Fa(:)f(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)17 b Fs(164)149 1162 y(9.4)46 b(Building)9 b(Scheme/ILU)j(Applications)7 b Fa(:)t(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)18 b Fs(164)299 1225 y(9.4.1)45 b(Initialization)9 b(order)f Fa(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)19 b Fs(164)299 1287 y(9.4.2)45 b(ILU-YASOS)7 b Fa(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Fs(165)299 1349 y(9.4.3)45 b(Where)12 b(to)e(get)h(Guile)g(1.2)g(and)g(SLIB)d Fa(:)g(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)19 b Fs(165)299 1411 y(9.4.4)45 b(Stub)11 b(Generation)e Fa(:)d(:)h(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)20 b Fs(165)299 1474 y(9.4.5)45 b(Implementing)11 b(an)g(ILU)g(module)g (in)f(Scheme)d Fa(:)h(:)f(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)17 b Fs(165)448 1536 y(9.4.5.1)46 b(Implementation)10 b(Inheritance)c Fa(:)g(:)i(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)17 b Fs(165)448 1598 y(9.4.5.2)46 b(Exporting)9 b(Objects)i Fa(:)6 b(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)22 b Fs(165)299 1660 y(9.4.6)45 b(Using)10 b(an)h(ILU)h(module)e(in)h (Scheme)e Fa(:)f(:)f(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)20 b Fs(165)149 1723 y(9.5)46 b(Scheme/ILU)11 b(API)h(Reference)i Fa(:)8 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)24 b Fs(165)0 1847 y Fu(10)60 b(Using)15 b(ILU)g(with)g(Microsoft)f(Windows)e Fb(:)e(:)g(:)h(:)f(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)27 b Fu(168)149 1925 y Fs(10.1)45 b(Prerequisites)11 b(for)g(using)f(ILU)h(with)f (Microsoft)h(Windows)d Fa(:)d(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)19 b Fs(168)299 1987 y(10.1.1)45 b(Using)10 b(ILU)h(applications)e(on)i(Windows)e(NT)i(and)g(Windows)f(95)g Fa(:)c(:)21 b Fs(168)299 2050 y(10.1.2)45 b(Prerequisite)10 b(software)h(to)g(use)g(AND)g(develop)f(ILU)h(applications)e(on)390 2112 y(Windows)g(NT)i(and)g(95.)5 b Fa(:)i(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)15 b Fs(168)149 2174 y(10.2)45 b(Installation)t Fa(:)5 b(:)j(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)15 b Fs(169)149 2236 y(10.3)45 b(Building)10 b(ILU)j Fa(:)8 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)24 b Fs(169)299 2299 y(10.3.1)45 b(Lisp)5 b Fa(:)h(:)h(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)15 b Fs(170)299 2361 y(10.3.2)45 b(Java)5 b Fa(:)i(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)15 b Fs(170)299 2423 y(10.3.3)45 b(Python)11 b Fa(:)6 b(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)22 b Fs(172)149 2485 y(10.4)45 b(Building)10 b(the)h(examples)i Fa(:)7 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)24 b Fs(172)149 2548 y(10.5)45 b(Running)10 b(the)h(examples)t Fa(:)c(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)15 b Fs(173)149 2610 y(10.6)45 b(Developing)10 b(Windows)f(Applications)g(with)h(ILU)f Fa(:)f(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)20 b Fs(173)p eop %%Page: -11 345 -11 344 bop 1915 -58 a Fs(xi)299 42 y(10.6.1)45 b(All)10 b(Applications)5 b Fa(:)g(:)i(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)16 b Fs(173)299 104 y(10.6.2)45 b(Windows)10 b(\(non-console\))f(Applications)e Fa(:)e(:)i(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)18 b Fs(174)299 166 y(10.6.3)45 b(Message)11 b(Loop)h Fa(:)7 b(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fs(174)149 228 y(10.7)45 b(Windows)10 b(and)h(the)g(ILU)p 683 228 14 3 v 16 w(DEBUG)g(settings)5 b Fa(:)g(:)i(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)16 b Fs(174)299 291 y(10.7.1)45 b(WINIO)6 b Fa(:)h(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)17 b Fs(175)149 353 y(10.8)45 b(Misc.)5 b Fa(:)j(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)16 b Fs(176)299 415 y(10.8.1)45 b(Python)10 b(1.4)h(support)f(-)i(details)7 b Fa(:)e(:)i(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)17 b Fs(176)299 477 y(10.8.2)45 b(Alternative)10 b(Binding)g(Service)i Fa(:)c(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)23 b Fs(176)299 540 y(10.8.3)45 b(Borland)11 b(C)h Fa(:)7 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)22 b Fs(177)149 602 y(10.9)45 b(Files)11 b(in)g(the)g (distribution)5 b Fa(:)g(:)i(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)17 b Fs(178)0 726 y Fu(11)60 b(Binding)14 b(Names)h(in)g(ILU)10 b Fb(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)25 b Fu(182)149 804 y Fs(11.1)45 b(Introduction)t Fa(:)6 b(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)15 b Fs(182)149 867 y(11.2)45 b(ILU)12 b(Simple)f(Binding)g Fa(:)5 b(:)i(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)21 b Fs(182)299 929 y(11.2.1)45 b(Listing)9 b(the)i(Registered)g(Objects)f Fa(:)e(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)22 b Fs(182)299 991 y(11.2.2)45 b(Using)10 b(Shared)i(Files)e(for)i(Simple)f(Binding)t Fa(:)6 b(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)15 b Fs(182)299 1053 y(11.2.3)45 b(Using)10 b(an)h(ILU)g(Service)h(for)f(Simple)h(Binding)d Fa(:)c(:)i(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)19 b Fs(183)149 1116 y(11.3)45 b(CORBA)12 b(CosNaming)5 b Fa(:)i(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)16 b Fs(184)0 1240 y Fu(12)60 b(Threads)14 b(and)h(Event)g(Loops)8 b Fb(:)i(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)23 b Fu(186)149 1318 y Fs(12.1)45 b(Multi-Threaded)11 b(Programs)g Fa(:)c(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fs(186)299 1380 y(12.1.1)45 b(Multi-Threaded)10 b(Programming)i(in)e(C)f Fa(:)f(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)20 b Fs(186)299 1443 y(12.1.2)45 b(Multi-Threaded)10 b(Programming)i(in)e(Python)g Fa(:)d(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)21 b Fs(187)299 1505 y(12.1.3)45 b(Multi-Threaded)10 b(Programming)i(in)e (C)p Ft(++)t Fa(:)e(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)15 b Fs(187)299 1567 y(12.1.4)45 b(Thread)11 b(Synchronization)d Fa(:)d(:)i(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)19 b Fs(188)149 1629 y(12.2)45 b(Single-Threaded)11 b(Programs)j Fa(:)7 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)25 b Fs(190)299 1692 y(12.2.1)45 b(ILU)11 b(Main)g(Loop)g(Functional)f (Spec)g Fa(:)d(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)21 b Fs(191)299 1754 y(12.2.2)45 b(Using)10 b(ILU's)h(Default)g(Main)g(Loop)g Fa(:)c(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)23 b Fs(191)299 1816 y(12.2.3)45 b(Using)10 b(an)h(External)g(Main)g(Loop)6 b Fa(:)g(:)h(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)17 b Fs(191)299 1878 y(12.2.4)45 b(A)11 b(Hybrid)f(Aproach)c Fa(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)17 b Fs(191)149 1941 y(12.3)45 b(Threadedness)11 b(in)f(Distributed)f(Systems)i Fa(:)c(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fs(192)0 2065 y Fu(13)60 b(Protocols)13 b(and)i(Transports)d Fb(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)27 b Fu(194)149 2143 y Fs(13.1)45 b(Protocols)11 b Fa(:)6 b(:)h(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)21 b Fs(194)299 2205 y(13.1.1)45 b(The)11 b(Abstract)f(ILU)h(Message)h(Protocol)d Fa(:)d(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)h(:)f(:)19 b Fs(194)448 2268 y(13.1.1.1)46 b(Messages)6 b Fa(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)17 b Fs(195)448 2330 y(13.1.1.2)46 b(Parameter)12 b(Types)f Fa(:)d(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)23 b Fs(195)299 2392 y(13.1.2)45 b(The)11 b(ONC)g(RPC)i(Protocol)7 b Fa(:)e(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)17 b Fs(196)448 2454 y(13.1.2.1)46 b(Message)11 b(Mappings)f Fa(:)5 b(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)20 b Fs(197)448 2517 y(13.1.2.2)46 b(Mapping)10 b(of)h(Standard)g(Types)g Fa(:)d(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)23 b Fs(197)299 2579 y(13.1.3)45 b(The)11 b(Xerox)g(Courier)g(Protocol)g Fa(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)22 b Fs(198)448 2641 y(13.1.3.1)46 b(Message)11 b(Mappings)f(--)i(Courier)f(Layer)g(3)f Fa(:)d(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)20 b Fs(199)p eop %%Page: -12 346 -12 345 bop 1902 -58 a Fs(xii)448 42 y(13.1.3.2)46 b(Mapping)10 b(of)h(Standard)g(Types)g(--)g(Courier)g(Layer)h(2)g Fa(:)7 b(:)g(:)23 b Fs(199)299 104 y(13.1.4)45 b(The)11 b(OMG)g(Internet)g(Inter-Orb)g(Protocol)g(\(IIOP\))e Fa(:)f(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)20 b Fs(200)448 166 y(13.1.4.1)46 b(Message)11 b(Mappings)f(--)i(GIOP)f Fa(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)22 b Fs(201)448 228 y(13.1.4.2)46 b(Mapping)10 b(of)h(Standard)g(Types)g(--)g(GIOP)j Fa(:)7 b(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)24 b Fs(201)299 291 y(13.1.5)45 b(The)11 b(Hyper)g(Text)g(Transfer)g(Protocol)f(\()p Ft(HTTP)p Fs(\))d Fa(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)18 b Fs(202)299 353 y(13.1.6)45 b(The)11 b(World)g(Wide)f(Web)i (HTTP-NG)e(Protocol)h(\(w3ng\))f Fa(:)c(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:) 21 b Fs(208)299 415 y(13.1.7)45 b(The)11 b(Default)g(Protocol)f(and)h (Transport)h Fa(:)c(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)24 b Fs(208)149 477 y(13.2)45 b(Transports)9 b Fa(:)d(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)20 b Fs(208)299 540 y(13.2.1)45 b(TCP)14 b Fa(:)7 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)24 b Fs(209)299 602 y(13.2.2)45 b(UDP)10 b Fa(:)d(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)20 b Fs(210)299 664 y(13.2.3)45 b(SunRPC)12 b(Record)g(Marking)h Fa(:)7 b(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)24 b Fs(210)299 726 y(13.2.4)45 b(World)10 b(Wide)h(Web)g(Consortium)g(MUX)g(Transport)f Fa(:)e(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)22 b Fs(211)299 789 y(13.2.5)45 b(Generic)11 b(Security)g(Service)h(\(GSS\)) c Fa(:)f(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)19 b Fs(211)0 913 y Fu(14)60 b(Security)9 b Fb(:)f(:)i(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:) 23 b Fu(212)149 991 y Fs(14.1)45 b(Identities)10 b Fa(:)e(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fs(212)149 1053 y(14.2)45 b(Communications)10 b(Security)h Fa(:)c(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)22 b Fs(214)448 1116 y(14.2.0.1)46 b(Kernel)11 b(Servers)f Fa(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)20 b Fs(216)448 1178 y(14.2.0.2)46 b(Creating)10 b(Ports)t Fa(:)e(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)15 b Fs(216)448 1240 y(14.2.0.3)46 b(Client)10 b(Connections)g(to)g (Ports)c Fa(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)16 b Fs(216)448 1302 y(14.2.0.4)46 b(Calls)8 b Fa(:)e(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)18 b Fs(217)149 1365 y(14.3)45 b(Using)10 b(the)h(GSS)h(Transport)e(Filter)t Fa(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)15 b Fs(217)299 1427 y(14.3.1)45 b(GSS)12 b(Namespace)g(Schemes)d Fa(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)19 b Fs(219)299 1489 y(14.3.2)45 b(GSS)12 b(Security)f(Schemes)c Fa(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Fs(219)0 1614 y Fu(15)60 b(ILU)15 b(Customization)d Fb(:)d(:)i(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) 27 b Fu(220)149 1692 y Fs(15.1)45 b(Introduction)t Fa(:)6 b(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)15 b Fs(220)149 1754 y(15.2)45 b(Event)11 b(Loops)f(and)h(Threads)5 b Fa(:)h(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)16 b Fs(220)149 1816 y(15.3)45 b(RPC)13 b(Protocols)d(and)h(Data)g(Transport)f(Mechanisms)k Fa(:)7 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)25 b Fs(221)299 1878 y(15.3.1)45 b(RPC)12 b(Protocols)f Fa(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)22 b Fs(221)299 1941 y(15.3.2)45 b(Transport)10 b(Filters)t Fa(:)d(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)15 b Fs(222)149 2003 y(15.4)45 b(Object)11 b(Incarnation)f(Procedures)i Fa(:)7 b(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)23 b Fs(223)149 2065 y(15.5)45 b(Object)11 b(URLs)6 b Fa(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) 17 b Fs(223)149 2127 y(15.6)45 b(Identity)10 b(Types)5 b Fa(:)h(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)16 b Fs(224)149 2190 y(15.7)45 b(Malloc)12 b(Failure)f(Recovery)g Fa(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)21 b Fs(225)149 2252 y(15.8)45 b(Error)12 b(Reporting)f Fa(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)23 b Fs(225)149 2314 y(15.9)45 b(Debugging)10 b(Interfaces)h Fa(:)c(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fs(226)p eop %%Page: -13 347 -13 346 bop 1889 -58 a Fs(xiii)0 42 y Fu(16)60 b(Debugging)14 b(ILU)h(Programs)6 b Fb(:)j(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)20 b Fu(227)149 119 y Fs(16.1)45 b(C)p Ft(++)12 b Fs(static)e(instance)h (initialization)s Fa(:)5 b(:)i(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)15 b Fs(227)149 182 y(16.2)45 b(ILU)12 b(trace)f(debugging)d Fa(:)d(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)19 b Fs(227)149 244 y(16.3)45 b(Debugging)10 b(ISL)c Fa(:)h(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)17 b Fs(228)299 306 y(16.3.1)45 b(Use)11 b(of)g Ft(islscan)i Fa(:)7 b(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)24 b Fs(228)299 369 y(16.3.2)45 b(The)11 b(ISLDEBUG)g(environment)f (variable)5 b Fa(:)i(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)16 b Fs(228)149 431 y(16.4)45 b(Bug)12 b(Reporting)e(and)h(Comments)g Fa(:)c(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fs(228)149 493 y(16.5)45 b(Use)11 b(of)h Ft(gdb)h Fa(:)7 b(:)g(:)h(:)f(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)24 b Fs(228)149 555 y(16.6)45 b(Error)12 b(handling)g Fa(:)7 b(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)25 b Fs(229)299 618 y(16.6.1)45 b(Decoding)10 b(reportable)h(consistency)e(check)j(failures)d Fa(:)d(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)19 b Fs(231)149 680 y(16.7)45 b(Common)12 b(Problems)f(-)h(Questions)e Fa(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) 23 b Fs(231)0 804 y Fu(17)60 b(Installation)14 b(of)h(ILU)7 b Fb(:)j(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)22 b Fu(234)149 882 y Fs(17.1)45 b(Installing)10 b(on)g(a)i(Windows)d(NT)i(or)h(95)e(System)5 b Fa(:)i(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)16 b Fs(234)149 945 y(17.2)45 b(Installing)10 b(on)g(a)i(UNIX)f(System)i Fa(:)7 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)24 b Fs(234)299 1007 y(17.2.1)45 b(Prerequisites)8 b Fa(:)e(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)19 b Fs(234)299 1069 y(17.2.2)45 b(Unpacking)10 b(the)h(Distribution)c Fa(:)e(:)i(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)19 b Fs(236)299 1131 y(17.2.3)45 b(For)11 b(the)g(Impatient)d Fa(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)19 b Fs(236)299 1194 y(17.2.4)45 b(Real)12 b(Configuration)d Fa(:)f(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)22 b Fs(237)448 1256 y(17.2.4.1)46 b(Configuration)9 b(Options)i Fa(:)5 b(:)i(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)22 b Fs(237)448 1318 y(17.2.4.2)46 b(Manual)11 b(Fixups)f(for)h(Threading) d Fa(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)19 b Fs(240)299 1380 y(17.2.5)45 b(Building)6 b Fa(:)f(:)i(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)17 b Fs(241)299 1443 y(17.2.6)45 b(Environment)10 b(Variables)5 b Fa(:)h(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)16 b Fs(243)299 1505 y(17.2.7)45 b(Testing)10 b(the)h(Build)d Fa(:)e(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)19 b Fs(244)299 1567 y(17.2.8)45 b(Notes)10 b(on)h(Specific)h(Systems)t Fa(:)6 b(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)15 b Fs(246)448 1629 y(17.2.8.1)46 b(AIX)11 b(4.2)f Fa(:)d(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)21 b Fs(246)448 1692 y(17.2.8.2)46 b(HP/UX)6 b Fa(:)g(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)17 b Fs(246)448 1754 y(17.2.8.3)46 b(DEC)11 b(ALPHA)g(with)f(OSF)i(OS)f Fa(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)22 b Fs(246)448 1816 y(17.2.8.4)46 b(SunOS)11 b(4.1.x)f Fa(:)c(:)h(:)h(:)f(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)20 b Fs(246)149 1879 y(17.3)45 b(Examples)7 b Fa(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)18 b Fs(246)149 1941 y(17.4)45 b(Name)12 b(Servers)d Fa(:)f(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)h(:)19 b Fs(248)149 2003 y(17.5)45 b(Documentation)7 b Fa(:)f(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)18 b Fs(248)149 2065 y(17.6)45 b(Mailing)11 b(Lists)5 b Fa(:)g(:)i(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)16 b Fs(248)149 2128 y(17.7)45 b(Changes)8 b Fa(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)19 b Fs(249)299 2190 y(17.7.1)45 b(Changes)11 b(from)h(2.0alpha12)e(to)g(2.0alpha13)5 b Fa(:)h(:)h(:)g(:)h(:)f(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)15 b Fs(249)299 2252 y(17.7.2)45 b(Changes)11 b(from)h(2.0alpha11)e(to)g (2.0alpha12)5 b Fa(:)h(:)h(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)15 b Fs(250)299 2314 y(17.7.3)45 b(Changes)11 b(from)h(2.0alpha10)e(to)g(2.0alpha11)5 b Fa(:)h(:)h(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)15 b Fs(251)299 2377 y(17.7.4)45 b(Changes)11 b(from)h(2.0alpha9)e(to)h(2.0alpha10)6 b Fa(:)g(:)h(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)17 b Fs(252)299 2439 y(17.7.5)45 b(Changes)11 b(from)h(2.0alpha8)e(to)h (2.0alpha9)c Fa(:)f(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Fs(253)299 2501 y(17.7.6)45 b(Changes)11 b(from)h(2.0alpha7)e(to)h(2.0alpha8)c Fa(:)f(:)h(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Fs(254)299 2563 y(17.7.7)45 b(Changes)11 b(from)h(1.8)f(to)g (2.0alpha)e Fa(:)c(:)j(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)19 b Fs(255)299 2626 y(17.7.8)45 b(Changes)11 b(from)h(1.7)f(to)g(1.8)c Fa(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Fs(256)p eop %%Page: -14 348 -14 347 bop 1892 -58 a Fs(xiv)299 42 y(17.7.9)45 b(Changes)11 b(from)h(1.6.4-p9)e(to)h(1.7)f Fa(:)e(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)21 b Fs(256)149 104 y(17.8)45 b(Bug)12 b(Reporting)e(and)h (Comments)g Fa(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)22 b Fs(257)299 166 y(17.8.1)45 b(Known)10 b(Bugs)h(and)g(Gotchas)e Fa(:)d(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)20 b Fs(257)299 228 y(17.8.2)45 b(Reporting)10 b(Bugs)i Fa(:)c(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fs(258)0 353 y Fu(18)60 b(Multiple)14 b(Languages)g(In)i(One)e(Address)h(Space)g Fb(:)10 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)30 b Fu(259)149 431 y Fs(18.1)45 b(Dueling)10 b(Runtimes)h Fa(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fs(259)149 493 y(18.2)45 b(Module)11 b(Initialization)5 b Fa(:)g(:)i(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)16 b Fs(259)149 555 y(18.3)45 b(Finding)10 b(Objects)h Fa(:)c(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fs(260)0 680 y Fu(19)60 b(Using)15 b(Imake)f(with)h(ILU)d Fb(:)f(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)h(:)f(:)g(:)g(:)27 b Fu(261)149 758 y Fs(19.1)45 b(Creating)11 b(`)p Ft(Makefile)p Fs('s)g(from)h(`)p Ft(Imakefile)p Fs('s)e Fa(:)c(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)21 b Fs(261)149 820 y(19.2)45 b(ANSI)12 b(C)g(Usage)f Fa(:)6 b(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)21 b Fs(261)299 882 y(19.2.1)45 b(ANSI)11 b(C)h(ILU)f Ft(imake)g Fs(Macros)d Fa(:)g(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)19 b Fs(261)149 944 y(19.3)45 b(C)p Ft(++)12 b Fs(Usage)t Fa(:)7 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)15 b Fs(262)299 1007 y(19.3.1)45 b(C)p Ft(++)11 b Fs(ILU)h Ft(imake)e Fs(Macros)i Fa(:)c(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)22 b Fs(263)0 1131 y Fu(Appendix)15 b(A)60 b(How)15 b(to)f(Create)g(ILU)h(Support)g(for)f(a)h(Programming) 120 1193 y(Language)g Fb(:)9 b(:)h(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fu(264)149 1271 y Fs(A.1)46 b(Defining)10 b(the)h(Mapping)g Fa(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fs(264)299 1334 y(A.1.1)45 b(Object)11 b(References)5 b Fa(:)j(:)g(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)16 b Fs(265)299 1396 y(A.1.2)45 b(Storage)12 b(Management)d Fa(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)20 b Fs(265)299 1458 y(A.1.3)45 b(Control)11 b(Flow)f Fa(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)21 b Fs(266)299 1520 y(A.1.4)45 b(Any)11 b(and)g(TypeCode)5 b Fa(:)h(:)h(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)15 b Fs(267)149 1583 y(A.2)46 b(Designing)9 b(Runtime)i(Operation)g Fa(:)6 b(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)21 b Fs(267)149 1645 y(A.3)46 b(Writing)10 b(the)g(Stub)h(Generator)6 b Fa(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)17 b Fs(268)149 1707 y(A.4)46 b(Writing)10 b(the)g(LSR)j Fa(:)7 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fs(268)299 1769 y(A.4.1)45 b(Control)11 b(Structure)g(Options)c Fa(:)e(:)i(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Fs(269)299 1832 y(A.4.2)45 b(The)11 b(Main)h(Sequence)f(-)h(How)e (Calls)h(are)h(Handled)f(on)f(the)h(Client)g(and)390 1894 y(Server)h(Sides)5 b Fa(:)i(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)16 b Fs(269)299 1956 y(A.4.3)45 b(Object)11 b(Management)d Fa(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)19 b Fs(269)448 2018 y(A.4.3.1)46 b(Discussion)11 b Fa(:)5 b(:)i(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)22 b Fs(269)448 2081 y(A.4.3.2)46 b(Life)11 b(Cycle)t Fa(:)d(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)15 b Fs(272)448 2143 y(A.4.3.3)46 b(Automatically)9 b(Managed)j(Objects)c Fa(:)e(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)18 b Fs(273)448 2205 y(A.4.3.4)46 b(Explicitly)9 b(Managed)i(Objects)d Fa(:)e(:)h(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)18 b Fs(275)448 2268 y(A.4.3.5)46 b(Hybrid)10 b(Schemes)h Fa(:)d(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)22 b Fs(276)299 2330 y(A.4.4)45 b(Server)12 b(Management)d Fa(:)f(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)20 b Fs(277)299 2392 y(A.4.5)45 b(Call-Specific)12 b(MetaObjects)f Fa(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) 22 b Fs(278)299 2454 y(A.4.6)45 b(Errors)5 b Fa(:)i(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)15 b Fs(278)299 2517 y(A.4.7)45 b(Internal)11 b(Consistency)f(Checks)j Fa(:)7 b(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)24 b Fs(278)299 2579 y(A.4.8)45 b(Debugging)11 b Fa(:)6 b(:)h(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)22 b Fs(279)299 2641 y(A.4.9)45 b(Fine)12 b(Grain)e(Time)h Fa(:)d(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)22 b Fs(279)p eop %%Page: -15 349 -15 348 bop 1905 -58 a Fs(xv)299 42 y(A.4.10)45 b(FD)12 b(Budget)e Fa(:)c(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)21 b Fs(279)299 104 y(A.4.11)45 b(Supporting)9 b(Multiple)h(Languages)h(in)f (One)i(Runtime)t Fa(:)6 b(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)15 b Fs(279)299 166 y(A.4.12)45 b(Type)11 b(Information)f Fa(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)21 b Fs(279)299 228 y(A.4.13)45 b(Simple)11 b(Binding)f(Service)5 b Fa(:)i(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)15 b Fs(280)299 291 y(A.4.14)45 b(Security)11 b(Support)d Fa(:)e(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)19 b Fs(280)299 353 y(A.4.15)45 b(SBH)12 b(schemes)t Fa(:)7 b(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)15 b Fs(280)299 415 y(A.4.16)45 b(Pickle)11 b(Support)c Fa(:)f(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)17 b Fs(280)448 477 y(A.4.16.1)46 b(The)11 b(Kernel)g(Interface)h(to)e(Pickle)c Fa(:)i(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)17 b Fs(280)448 540 y(A.4.16.2)46 b(Pickles)10 b(and)h(the)g(CORBA)h(IIOP)e Fa(:)e(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)21 b Fs(282)0 664 y Fu(Appendix)15 b(B)60 b(The)14 b(TIM)i(Documentation)e(Language)d Fb(:)e(:)h(:)g(:)g(:)h(:)f(:)g(:)g (:)h(:)25 b Fu(283)149 742 y Fs(B.1)46 b(Introduction)10 b Fa(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)23 b Fs(283)149 804 y(B.2)46 b(Extensions)9 b(to)i(GNU)g(Texinfo)f Fa(:)c(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)21 b Fs(284)299 867 y(B.2.1)46 b(TIM)12 b(Domain-Independent)d(Format)14 b Fa(:)7 b(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)24 b Fs(284)299 929 y(B.2.2)46 b(Defining)10 b(Domain-Specific)h(Markup)g (Commands)g(With)g Ft(@)p Fs(timmacro)398 991 y Fa(:)c(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) 19 b Fs(284)149 1053 y(B.3)46 b(TIM)12 b(Tools)5 b Fa(:)h(:)h(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)16 b Fs(284)149 1116 y(B.4)46 b(Markup)12 b(Commands)f(used)g(with)f(ILU)e Fa(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)19 b Fs(285)0 1240 y Fu(Appendix)c(C)60 b(The)15 b(ILU)g(Common)g(Lisp)f (Portable)g(DEFSYSTEM)120 1302 y(Module)i Fb(:)11 b(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)32 b Fu(287)149 1380 y Fs(C.1)46 b(Pathname)12 b(Support)7 b Fa(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)18 b Fs(291)0 1505 y Fu(Appendix)d(D)60 b(The)15 b(ILU)g(Common)g(Lisp)f (Lightweight)g(Process)120 1567 y(System)c Fb(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)h(:)f(:)25 b Fu(293)149 1645 y Fs(D.1)46 b(Introduction)11 b Fa(:)t(:)d(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)21 b Fs(293)149 1707 y(D.2)46 b(Overview)10 b(Of)i(The)f(ILU)g(CL)g(Process)h(Model)7 b Fa(:)f(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)18 b Fs(293)299 1769 y(D.2.1)45 b(The)11 b(Scheduler)h(Process)6 b Fa(:)h(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)17 b Fs(294)299 1832 y(D.2.2)45 b(States)11 b(Of)h(Processes)5 b Fa(:)h(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)15 b Fs(294)299 1894 y(D.2.3)45 b(Removing)11 b(Or)g(Killing)f(Processes)5 b Fa(:)i(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) 16 b Fs(294)299 1956 y(D.2.4)45 b(Properties)11 b(Of)g(Processes)c Fa(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)18 b Fs(295)299 2018 y(D.2.5)45 b(Process)12 b(Locks)e Fa(:)e(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)22 b Fs(295)149 2081 y(D.3)46 b(Functional)10 b(Overview)h Fa(:)6 b(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fs(296)149 2143 y(D.4)46 b(Implementation)10 b(Architecture)h Fa(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)22 b Fs(296)149 2205 y(D.5)46 b(General)11 b(Limitations)g Fa(:)5 b(:)i(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fs(297)149 2268 y(D.6)46 b(How)11 b(To)f(Use)h(The)g(ILU)h(CL)f (Process)g(Interface)e Fa(:)f(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)20 b Fs(297)149 2330 y(D.7)46 b(How)11 b(To)f(Program)i(The)f(ILU)g(CL)h (Process)f(Interface)6 b Fa(:)i(:)f(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)17 b Fs(298)149 2392 y(D.8)46 b(The)11 b(ILU)g(CL)g(Process)h(Interface)d Fa(:)f(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)20 b Fs(301)299 2454 y(D.8.1)45 b(The)11 b(Process)h(Object)6 b Fa(:)g(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)17 b Fs(301)299 2517 y(D.8.2)45 b(Querying)10 b(The)h(Status)g(Of)g(The)g(Scheduler)g(And)g(All)g(Processes)c Fa(:)g(:)g(:)18 b Fs(302)299 2579 y(D.8.3)45 b(Starting)11 b(And)f(Killing)f(Processes)k Fa(:)7 b(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) 24 b Fs(302)299 2641 y(D.8.4)45 b(Waiting)10 b(A)h(Process)h Fa(:)c(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)23 b Fs(303)p eop %%Page: -16 350 -16 349 bop 1892 -58 a Fs(xvi)299 42 y(D.8.5)45 b(Activating)10 b(And)g(Deactivating)g(Processes)e Fa(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)19 b Fs(304)299 104 y(D.8.6)45 b(Accessing)11 b(And)f(Modifying)g(The)h(Properties)g (Of)g(A)g(Process)e Fa(:)e(:)h(:)f(:)g(:)20 b Fs(305)299 166 y(D.8.7)45 b(Miscellaneous)10 b(Process/Scheduler)h(Functions)f (And)g(Macros)f Fa(:)e(:)h(:)f(:)19 b Fs(306)299 228 y(D.8.8)45 b(Process)12 b(Locks)e(Interface)c Fa(:)i(:)f(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)17 b Fs(307)149 291 y(D.9)46 b(Handling)9 b(Errors)d Fa(:)h(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)17 b Fs(308)149 353 y(D.10)46 b(Notes)8 b Fa(:)e(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)19 b Fs(310)149 415 y(D.11)46 b(References)11 b Fa(:)c(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)21 b Fs(310)0 540 y Fu(Appendix)15 b(E)60 b(Porting)13 b(ILU)j(to)e(Common)h(Lisp)g(Implementations)130 602 y Fb(:)10 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h (:)f(:)g(:)g(:)25 b Fu(311)149 680 y Fs(E.1)46 b(Introduction)11 b Fa(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)24 b Fs(311)149 742 y(E.2)46 b(Providing)9 b(the)i(ILU)g(notion)f (of)h(foreign-function)e(calls.)d Fa(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)17 b Fs(311)149 804 y(E.3)46 b(Network)10 b(Garbage)h(Collection)t Fa(:)6 b(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) h(:)f(:)g(:)15 b Fs(313)149 867 y(E.4)46 b(Thread)11 b(and/or)f(Event)h(Loops)c Fa(:)f(:)h(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)18 b Fs(314)149 929 y(E.5)46 b(Converting)10 b(between)g(character)i(sets.)d Fa(:)f(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)20 b Fs(316)149 991 y(E.6)46 b(Support)10 b(for)h(Dynamic)g(Object)g (Creation)t Fa(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)15 b Fs(316)0 1116 y Fu(Appendix)g(F)59 b(Possible)14 b(ISL)i(Name)e (Mappings)i(for)e(Target)120 1178 y(Languages)i Fb(:)10 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)h(:)f(:)31 b Fu(317)149 1256 y Fs(F.1)46 b(C)12 b(mapping)6 b Fa(:)g(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)17 b Fs(318)149 1318 y(F.2)46 b(C)p Ft(++)12 b Fs(mapping)g Fa(:)6 b(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)22 b Fs(318)149 1380 y(F.3)46 b(Modula-3)11 b(mapping)g Fa(:)d(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)23 b Fs(319)149 1443 y(F.4)46 b(Mapping)11 b(ILU)g(ISL)g(to)g (Modula-3)t Fa(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)15 b Fs(319)299 1505 y(F.4.1)46 b(Names)12 b Fa(:)7 b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)23 b Fs(319)299 1567 y(F.4.2)46 b(Types)10 b Fa(:)c(:)h(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)20 b Fs(319)299 1629 y(F.4.3)46 b(Exceptions)5 b Fa(:)g(:)i(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h (:)15 b Fs(321)299 1692 y(F.4.4)46 b(Example)5 b Fa(:)h(:)h(:)h(:)f(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)15 b Fs(321)0 1816 y Fu(Index)g(of)g (Concepts)9 b Fb(:)h(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)24 b Fu(324)0 1956 y(Index)15 b(of)g(Functions,)f(Variables,)g(Methods,)h(and)g (Types)10 b Fb(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)h(:)24 b Fu(327)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF .