%! %%BoundingBox: (atend) %%Pages: (atend) %%DocumentFonts: (atend) %%EndComments % % FrameMaker PostScript Prolog 3.0, for use with FrameMaker 3.0 % Copyright (c) 1986,87,89,90,91 by Frame Technology Corporation. % All rights reserved. % % Known Problems: % Due to bugs in Transcript, the 'PS-Adobe-' is omitted from line 1 /FMversion (3.0) def % Set up Color vs. Black-and-White /FMPrintInColor systemdict /colorimage known systemdict /currentcolortransfer known or def % Uncomment this line to force b&w on color printer % /FMPrintInColor false def /FrameDict 195 dict def systemdict /errordict known not {/errordict 10 dict def errordict /rangecheck {stop} put} if % The readline in 23.0 doesn't recognize cr's as nl's on AppleTalk FrameDict /tmprangecheck errordict /rangecheck get put errordict /rangecheck {FrameDict /bug true put} put FrameDict /bug false put mark % Some PS machines read past the CR, so keep the following 3 lines together! currentfile 5 string readline 00 0000000000 cleartomark errordict /rangecheck FrameDict /tmprangecheck get put FrameDict /bug get { /readline { /gstring exch def /gfile exch def /gindex 0 def { gfile read pop dup 10 eq {exit} if dup 13 eq {exit} if gstring exch gindex exch put /gindex gindex 1 add def } loop pop gstring 0 gindex getinterval true } def } if /FMVERSION { FMversion ne { /Times-Roman findfont 18 scalefont setfont 100 100 moveto (FrameMaker version does not match postscript_prolog!) dup = show showpage } if } def /FMLOCAL { FrameDict begin 0 def end } def /gstring FMLOCAL /gfile FMLOCAL /gindex FMLOCAL /orgxfer FMLOCAL /orgproc FMLOCAL /organgle FMLOCAL /orgfreq FMLOCAL /yscale FMLOCAL /xscale FMLOCAL /manualfeed FMLOCAL /paperheight FMLOCAL /paperwidth FMLOCAL /FMDOCUMENT { array /FMfonts exch def /#copies exch def FrameDict begin 0 ne dup {setmanualfeed} if /manualfeed exch def /paperheight exch def /paperwidth exch def /yscale exch def /xscale exch def currenttransfer cvlit /orgxfer exch def currentscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def setpapername manualfeed {true} {papersize} ifelse {manualpapersize} {false} ifelse {desperatepapersize} if end } def /pagesave FMLOCAL /orgmatrix FMLOCAL /landscape FMLOCAL /FMBEGINPAGE { FrameDict begin /pagesave save def 3.86 setmiterlimit /landscape exch 0 ne def landscape { 90 rotate 0 exch neg translate pop } {pop pop} ifelse xscale yscale scale /orgmatrix matrix def gsave } def /FMENDPAGE { grestore pagesave restore end showpage } def /FMFONTDEFINE { FrameDict begin findfont ReEncode 1 index exch definefont FMfonts 3 1 roll put end } def /FMFILLS { FrameDict begin array /fillvals exch def end } def /FMFILL { FrameDict begin fillvals 3 1 roll put end } def /FMNORMALIZEGRAPHICS { newpath 0.0 0.0 moveto 1 setlinewidth 0 setlinecap 0 0 0 sethsbcolor 0 setgray } bind def /fx FMLOCAL /fy FMLOCAL /fh FMLOCAL /fw FMLOCAL /llx FMLOCAL /lly FMLOCAL /urx FMLOCAL /ury FMLOCAL /FMBEGINEPSF { end /FMEPSF save def /showpage {} def FMNORMALIZEGRAPHICS [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall fx fy translate rotate fw urx llx sub div fh ury lly sub div scale llx neg lly neg translate } bind def /FMENDEPSF { FMEPSF restore FrameDict begin } bind def FrameDict begin /setmanualfeed { %%BeginFeature *ManualFeed True statusdict /manualfeed true put %%EndFeature } def /max {2 copy lt {exch} if pop} bind def /min {2 copy gt {exch} if pop} bind def /inch {72 mul} def /pagedimen { paperheight sub abs 16 lt exch paperwidth sub abs 16 lt and {/papername exch def} {pop} ifelse } def /papersizedict FMLOCAL /setpapername { /papersizedict 14 dict def papersizedict begin /papername /unknown def /Letter 8.5 inch 11.0 inch pagedimen /LetterSmall 7.68 inch 10.16 inch pagedimen /Tabloid 11.0 inch 17.0 inch pagedimen /Ledger 17.0 inch 11.0 inch pagedimen /Legal 8.5 inch 14.0 inch pagedimen /Statement 5.5 inch 8.5 inch pagedimen /Executive 7.5 inch 10.0 inch pagedimen /A3 11.69 inch 16.5 inch pagedimen /A4 8.26 inch 11.69 inch pagedimen /A4Small 7.47 inch 10.85 inch pagedimen /B4 10.125 inch 14.33 inch pagedimen /B5 7.16 inch 10.125 inch pagedimen end } def /papersize { papersizedict begin /Letter {lettertray letter} def /LetterSmall {lettertray lettersmall} def /Tabloid {11x17tray 11x17} def /Ledger {ledgertray ledger} def /Legal {legaltray legal} def /Statement {statementtray statement} def /Executive {executivetray executive} def /A3 {a3tray a3} def /A4 {a4tray a4} def /A4Small {a4tray a4small} def /B4 {b4tray b4} def /B5 {b5tray b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end /FMdicttop countdictstack 1 add def statusdict begin stopped end countdictstack -1 FMdicttop {pop end} for } def /manualpapersize { papersizedict begin /Letter {letter} def /LetterSmall {lettersmall} def /Tabloid {11x17} def /Ledger {ledger} def /Legal {legal} def /Statement {statement} def /Executive {executive} def /A3 {a3} def /A4 {a4} def /A4Small {a4small} def /B4 {b4} def /B5 {b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end stopped } def /desperatepapersize { statusdict /setpageparams known { paperwidth paperheight 0 1 statusdict begin {setpageparams} stopped pop end } if } def /savematrix { orgmatrix currentmatrix pop } bind def /restorematrix { orgmatrix setmatrix } bind def /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul exch dup mul add sqrt def /freq dpi 18.75 div 8 div round dup 0 eq {pop 1} if 8 mul dpi exch div def /sangle 1 0 dmatrix defaultmatrix dtransform exch atan def /DiacriticEncoding [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /.notdef /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef /yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown /exclamdown /logicalnot /.notdef /florin /.notdef /.notdef /guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron ] def /ReEncode { dup length dict begin { 1 index /FID ne {def} {pop pop} ifelse } forall 0 eq {/Encoding DiacriticEncoding def} if currentdict end } bind def /graymode true def /bwidth FMLOCAL /bpside FMLOCAL /bstring FMLOCAL /onbits FMLOCAL /offbits FMLOCAL /xindex FMLOCAL /yindex FMLOCAL /x FMLOCAL /y FMLOCAL /setpattern { /bwidth exch def /bpside exch def /bstring exch def /onbits 0 def /offbits 0 def freq sangle landscape {90 add} if {/y exch def /x exch def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer offbits offbits onbits add div FMsetgray /graymode false def } bind def /grayness { FMsetgray graymode not { /graymode true def orgxfer cvx settransfer orgfreq organgle orgproc cvx setscreen } if } bind def /HUE FMLOCAL /SAT FMLOCAL /BRIGHT FMLOCAL /Colors FMLOCAL FMPrintInColor { /HUE 0 def /SAT 0 def /BRIGHT 0 def % array of arrays Hue and Sat values for the separations [HUE BRIGHT] /Colors [[0 0 ] % black [0 0 ] % white [0.00 1.0] % red [0.37 1.0] % green [0.60 1.0] % blue [0.50 1.0] % cyan [0.83 1.0] % magenta [0.16 1.0] % comment / yellow ] def /BEGINBITMAPCOLOR { BITMAPCOLOR} def /BEGINBITMAPCOLORc { BITMAPCOLORc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUECOLOR } def /BEGINBITMAPTRUECOLORc { BITMAPTRUECOLORc } def /K { Colors exch get dup 0 get /HUE exch store 1 get /BRIGHT exch store HUE 0 eq BRIGHT 0 eq and {1.0 SAT sub setgray} {HUE SAT BRIGHT sethsbcolor} ifelse } def /FMsetgray { /SAT exch 1.0 exch sub store HUE 0 eq BRIGHT 0 eq and {1.0 SAT sub setgray} {HUE SAT BRIGHT sethsbcolor} ifelse } bind def } { /BEGINBITMAPCOLOR { BITMAPGRAY} def /BEGINBITMAPCOLORc { BITMAPGRAYc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUEGRAY } def /BEGINBITMAPTRUECOLORc { BITMAPTRUEGRAYc } def /FMsetgray {setgray} bind def /K { pop } def } ifelse /normalize { transform round exch round exch itransform } bind def /dnormalize { dtransform round exch round exch idtransform } bind def /lnormalize { 0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop } bind def /H { lnormalize setlinewidth } bind def /Z { setlinecap } bind def /fillvals FMLOCAL /X { fillvals exch get dup type /stringtype eq {8 1 setpattern} {grayness} ifelse } bind def /V { gsave eofill grestore } bind def /N { stroke } bind def /M {newpath moveto} bind def /E {lineto} bind def /D {curveto} bind def /O {closepath} bind def /n FMLOCAL /L { /n exch def newpath normalize moveto 2 1 n {pop normalize lineto} for } bind def /Y { L closepath } bind def /x1 FMLOCAL /x2 FMLOCAL /y1 FMLOCAL /y2 FMLOCAL /rad FMLOCAL /R { /y2 exch def /x2 exch def /y1 exch def /x1 exch def x1 y1 x2 y1 x2 y2 x1 y2 4 Y } bind def /RR { /rad exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def newpath x1 y1 rad add moveto x1 y2 x2 y2 rad arcto x2 y2 x2 y1 rad arcto x2 y1 x1 y1 rad arcto x1 y1 x1 y2 rad arcto closepath 16 {pop} repeat } bind def /C { grestore gsave R clip } bind def /FMpointsize FMLOCAL /F { FMfonts exch get FMpointsize scalefont setfont } bind def /Q { /FMpointsize exch def F } bind def /T { moveto show } bind def /RF { rotate 0 ne {-1 1 scale} if } bind def /TF { gsave moveto RF show grestore } bind def /P { moveto 0 32 3 2 roll widthshow } bind def /PF { gsave moveto RF 0 32 3 2 roll widthshow grestore } bind def /S { moveto 0 exch ashow } bind def /SF { gsave moveto RF 0 exch ashow grestore } bind def /B { moveto 0 32 4 2 roll 0 exch awidthshow } bind def /BF { gsave moveto RF 0 32 4 2 roll 0 exch awidthshow grestore } bind def /G { gsave newpath normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath fill grestore } bind def /A { gsave savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch normalize 2 index 2 div sub exch 3 index 2 div add exch translate scale 0.0 0.0 1.0 5 3 roll arc restorematrix stroke grestore } bind def /x FMLOCAL /y FMLOCAL /w FMLOCAL /h FMLOCAL /xx FMLOCAL /yy FMLOCAL /ww FMLOCAL /hh FMLOCAL /FMsaveobject FMLOCAL /FMoptop FMLOCAL /FMdicttop FMLOCAL /BEGINPRINTCODE { /FMdicttop countdictstack 1 add def /FMoptop count 4 sub def /FMsaveobject save def userdict begin /showpage {} def FMNORMALIZEGRAPHICS 3 index neg 3 index neg translate } bind def /ENDPRINTCODE { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMsaveobject restore } bind def /gn { 0 { 46 mul cf read pop 32 sub dup 46 lt {exit} if 46 sub add } loop add } bind def /str FMLOCAL /cfs { /str sl string def 0 1 sl 1 sub {str exch val put} for str def } bind def /ic [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx} {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx} {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh} {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh} {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl} {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl} {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl} {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl} ] def /sl FMLOCAL /val FMLOCAL /ws FMLOCAL /im FMLOCAL /bs FMLOCAL /cs FMLOCAL /len FMLOCAL /pos FMLOCAL /ms { /sl exch def /val 255 def /ws cfs /im cfs /val 0 def /bs cfs /cs cfs } bind def 400 ms /ip { is 0 cf cs readline pop { ic exch get exec add } forall pop } bind def /wh { /len exch def /pos exch def ws 0 len getinterval im pos len getinterval copy pop pos len } bind def /bl { /len exch def /pos exch def bs 0 len getinterval im pos len getinterval copy pop pos len } bind def /s1 1 string def /fl { /len exch def /pos exch def /val cf s1 readhexstring pop 0 get def pos 1 pos len add 1 sub {im exch val put} for pos len } bind def /hx { 3 copy getinterval cf exch readhexstring pop pop } bind def /h FMLOCAL /w FMLOCAL /d FMLOCAL /lb FMLOCAL /bitmapsave FMLOCAL /is FMLOCAL /cf FMLOCAL /wbytes { dup 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } bind def /BEGINBITMAPBWc { 1 {} COMMONBITMAPc } bind def /BEGINBITMAPGRAYc { 8 {} COMMONBITMAPc } bind def /BEGINBITMAP2BITc { 2 {} COMMONBITMAPc } bind def /COMMONBITMAPc { /r exch def /d exch def gsave translate rotate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def r /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {ip} image bitmapsave restore grestore } bind def /BEGINBITMAPBW { 1 {} COMMONBITMAP } bind def /BEGINBITMAPGRAY { 8 {} COMMONBITMAP } bind def /BEGINBITMAP2BIT { 2 {} COMMONBITMAP } bind def /COMMONBITMAP { /r exch def /d exch def gsave translate rotate scale /h exch def /w exch def /bitmapsave save def r /is w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop} image bitmapsave restore grestore } bind def /proc1 FMLOCAL /proc2 FMLOCAL /newproc FMLOCAL /Fmcc { /proc2 exch cvlit def /proc1 exch cvlit def /newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx } bind def /ngrayt 256 array def /nredt 256 array def /nbluet 256 array def /ngreent 256 array def /gryt FMLOCAL /blut FMLOCAL /grnt FMLOCAL /redt FMLOCAL /indx FMLOCAL /cynu FMLOCAL /magu FMLOCAL /yelu FMLOCAL /k FMLOCAL /u FMLOCAL /colorsetup { currentcolortransfer /gryt exch def /blut exch def /grnt exch def /redt exch def 0 1 255 { /indx exch def /cynu 1 red indx get 255 div sub def /magu 1 green indx get 255 div sub def /yelu 1 blue indx get 255 div sub def /k cynu magu min yelu min def /u k currentundercolorremoval exec def nredt indx 1 0 cynu u sub max sub redt exec put ngreent indx 1 0 magu u sub max sub grnt exec put nbluet indx 1 0 yelu u sub max sub blut exec put ngrayt indx 1 k currentblackgeneration exec sub gryt exec put } for {255 mul cvi nredt exch get} {255 mul cvi ngreent exch get} {255 mul cvi nbluet exch get} {255 mul cvi ngrayt exch get} setcolortransfer {pop 0} setundercolorremoval {} setblackgeneration } bind def /tran FMLOCAL /fakecolorsetup { /tran 256 string def 0 1 255 {/indx exch def tran indx red indx get 77 mul green indx get 151 mul blue indx get 28 mul add add 256 idiv put} for currenttransfer {255 mul cvi tran exch get 255.0 div} exch Fmcc settransfer } bind def /BITMAPCOLOR { /d 8 def gsave translate rotate scale /h exch def /w exch def /bitmapsave save def colorsetup /is w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop} {is} {is} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPCOLORc { /d 8 def gsave translate rotate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def colorsetup /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {ip} {is} {is} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLORc { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def ws 0 w getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {ip} {gip} {bip} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLOR { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop } { cf gis readhexstring pop } { cf bis readhexstring pop } true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUEGRAYc { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def ws 0 w getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {ip gip bip w gray} image bitmapsave restore grestore } bind def /ww FMLOCAL /r FMLOCAL /g FMLOCAL /b FMLOCAL /i FMLOCAL /gray { /ww exch def /b exch def /g exch def /r exch def 0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul b i get .114 mul add add r i 3 -1 roll floor cvi put } for r } bind def /BITMAPTRUEGRAY { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop cf gis readhexstring pop cf bis readhexstring pop w gray} image bitmapsave restore grestore } bind def /BITMAPGRAY { 8 {fakecolorsetup} COMMONBITMAP } bind def /BITMAPGRAYc { 8 {fakecolorsetup} COMMONBITMAPc } bind def /ENDBITMAP { } bind def end /ALDsave FMLOCAL /ALDmatrix matrix def ALDmatrix currentmatrix pop /StartALD { /ALDsave save def savematrix ALDmatrix setmatrix } bind def /InALD { restorematrix } bind def /DoneALD { ALDsave restore } bind def %%EndProlog %%BeginSetup (3.0) FMVERSION 1 1 612 792 0 1 10 FMDOCUMENT 0 0 /Times-Bold FMFONTDEFINE 1 1 /Symbol FMFONTDEFINE 2 0 /Times-BoldItalic FMFONTDEFINE 3 0 /Times-Roman FMFONTDEFINE 4 0 /Helvetica FMFONTDEFINE 5 0 /Times-Italic FMFONTDEFINE 32 FMFILLS 0 0 FMFILL 1 0.1 FMFILL 2 0.3 FMFILL 3 0.5 FMFILL 4 0.7 FMFILL 5 0.9 FMFILL 6 0.97 FMFILL 7 1 FMFILL 8 <0f1e3c78f0e1c387> FMFILL 9 <0f87c3e1f0783c1e> FMFILL 10 FMFILL 11 FMFILL 12 <8142241818244281> FMFILL 13 <03060c183060c081> FMFILL 14 <8040201008040201> FMFILL 16 1 FMFILL 17 0.9 FMFILL 18 0.7 FMFILL 19 0.5 FMFILL 20 0.3 FMFILL 21 0.1 FMFILL 22 0.03 FMFILL 23 0 FMFILL 24 FMFILL 25 FMFILL 26 <3333333333333333> FMFILL 27 <0000ffff0000ffff> FMFILL 28 <7ebddbe7e7dbbd7e> FMFILL 29 FMFILL 30 <7fbfdfeff7fbfdfe> FMFILL %%EndSetup %%Page: "1" 1 %%BeginPaperSize: Letter %%EndPaperSize 612 792 0 FMBEGINPAGE 108 74.02 540 74.02 2 L 7 X 0 K V 0.25 H 2 Z 0 X N 423 45 540 63 R 7 X V 0 10 Q 0 X (1 of 9) 516.68 56.33 T 108 45 415.38 63 R 7 X V 0 X (2/5/93 02:12 pm) 108 56.33 T 108 747 540 747 2 L 7 X V 3 H 0 X N 108 87.98 540 689.98 R 7 X V 0 24 Q 0 X -1.2 (ANDF Featur) 192.9 673.98 S -1.2 (es and Bene\336ts) 321.16 673.98 S 0 12 Q (Dr) 281.58 603.98 T (. N. E. Peeling) 294.46 603.98 T (TDF Pr) 267.16 587.98 T (oject Manager) 306.58 587.98 T (DRA Malvern. UK) 275.54 571.98 T (British Cr) 239.75 539.98 T (own Copyright) 291.83 539.98 T 1 F (\323) 371.79 539.98 T 0 F ( 1992) 381.27 539.98 T 108 444.95 540 447.98 C 108 446.46 576 446.46 2 L 0.25 H 2 Z 0 X 0 K N 0 0 612 792 C 2 16 Q 0 X 0 K (1. Introduction) 108 453.31 T 3 14 Q (In mid 1991 the Open Software Foundation \050OSF\051 announced that they) 126 421.62 T (had selected DRA's TDF as the base technology for their Architecture) 108 405.62 T (Neutral Distribution Format \050ANDF\051. OSF is working closely with UNIX) 108 389.62 T (Systems Laboratories \050USL\051 who have announced their intention to) 108 373.62 T (commercialize and distribute TDF so that Independent Software V) 108 357.62 T (endors) 479.51 357.62 T (\050ISVs\051 can produce a single version of their product in TDF which will then) 108 341.62 T (work on any UNIX SVR4.2 system, regardless of which processor SVR4.2) 108 325.62 T (is running on. TDF is also a central part of a lar) 108 309.62 T (ge European collaborative) 373.56 309.62 T (project called the Open Microprocessor systems Initiative \050OMI\051 which is) 108 293.62 T (developing new European microprocessor systems \050hardware and software\051.) 108 277.62 T (DRA and OSF are involved in a $14 million project in OMI which is) 108 261.62 T (dedicated to further developing TDF/ANDF) 108 245.62 T (.) 354.04 245.62 T (ANDF \050the concept\051 and TDF \050the technology\051 have attracted signi\336cant) 126 217.62 T (support since OSF \336rst announced their Request for T) 108 201.62 T (echnology \050RFT\051 for) 409.38 201.62 T (an ANDF) 108 185.62 T (. OSF's vision was to use ANDF to unlock the unful\336lled promise) 161.67 185.62 T (of Open Systems: that all Open System applications should run on all Open) 108 169.62 T (System platforms. The central idea is that the user could buy a shrink-) 108 153.62 T (wrapped application in ANDF form and install it on any compliant Open) 108 137.62 T (System platform.) 108 121.62 T FMENDPAGE %%EndPage: "1" 2 %%Page: "2" 2 612 792 0 FMBEGINPAGE 0 10 Q 0 X 0 K (ANDF Featur) 108 56.33 T (es and Bene\336ts) 166.94 56.33 T 108 72 540 72 2 L 7 X V 0.25 H 2 Z 0 X N 108 750.02 540 750.02 2 L 7 X V 0 Z 0 X N 477 45 540 63 R 7 X V 0 X (2 of 9) 516.68 56.33 T 108 726.98 540 742.18 R 7 X V 0 8 Q 0 X (Featur) 108 736.84 T (es and Bene\336ts for Softwar) 130.95 736.84 T (e Developers) 222.74 736.84 T 108 81 540 720 R 7 X V 3 14 Q 0 X (ANDF is the most speculative technology that OSF has sought. The) 126 710.67 T (RFT) 108 694.67 T (s for Motif, DCE and DME have been technically challenging, but the) 132.68 694.67 T (desired properties of these technologies and their likely impact on the) 108 678.67 T (computing industry have been clear from the start. W) 108 662.67 T (ith ANDF the features) 406.27 662.67 T (and bene\336ts have emer) 108 646.67 T (ged over a period of time.) 236.37 646.67 T 108 586.98 540 590 C 108 588.49 576 588.49 2 L 0.25 H 2 Z 0 X 0 K N 0 0 612 792 C 2 16 Q 0 X 0 K (2. Features and Bene\336ts for Software Developers) 108 595.33 T 0 14 Q (2.1 Featur) 108 561.64 T (es of ANDF) 169.15 561.64 T 3 F ( The central tenet of ANDF is that it should allow the creation of a lar) 126 533.64 T (ge) 516.3 533.64 T (portfolio of shrink-wrapped applications in ANDF which can be moved) 108 517.64 T (from one architecture to another) 108 501.64 T (. ANDF is not just a distribution format. It) 287.52 501.64 T (of) 108 485.64 T (fers features to help ISVs create new shrink-wrapped applications and) 119.4 485.64 T (allows existing semi-portable applications to be recast into shrink wrapped) 108 469.64 T (form.) 108 453.64 T (Before describing what ANDF has to of) 126 425.64 T (fer it is worth examining why) 349.58 425.64 T (porting existing applications is so time consuming.) 108 409.64 T (Ef) 126 381.64 T (\336ciency and functionality of applications are of great importance to) 138.96 381.64 T (ISVs. W) 108 365.64 T (riting strictly portable \322lowest common denominator\323 code is) 155.63 365.64 T (usually not acceptable. What often happens is that the ISV creates a) 108 349.64 T (\322mutable\323 application which through the use of \050often complex\051 conditional) 108 333.64 T (compilation creates an ef) 108 317.64 T (\336cient variant of the application for each tar) 248.02 317.64 T (get.) 493.74 317.64 T (This creates an elaborate set of headers which usually has to be modi\336ed) 108 301.64 T (each time a new tar) 108 285.64 T (get is considered. The modi\336cation of such headers is) 216.54 285.64 T (something of a black art because the headers do not de\336ne a clean) 108 269.64 T (portability interface \050indeed it is dif) 108 253.64 T (\336cult and sometimes impossible to) 307.11 253.64 T (construct such an interface within the con\336nes of C\051. Once the headers have) 108 237.64 T (been modi\336ed, the application is compiled to native code for the new tar) 108 221.64 T (get,) 513.08 221.64 T (exposing the ISV to frequent problems from inconsistent interpretations of) 108 205.64 T (C and compiler bugs.) 108 189.64 T (ANDF can represent an architecture neutral description of the) 126 161.64 T (application which abstracts a clean portability interface. This architecture) 108 145.64 T (neutral version can be shipped to the tar) 108 129.64 T (get where ef) 331.19 129.64 T (\336cient architecture) 400.09 129.64 T (speci\336c pieces of ANDF are substituted which satisfy the form and) 108 113.64 T (semantics of the portability interface. The substitution creates an) 108 97.64 T FMENDPAGE %%EndPage: "2" 3 %%Page: "3" 3 612 792 0 FMBEGINPAGE 0 10 Q 0 X 0 K (ANDF Featur) 108 56.33 T (es and Bene\336ts) 166.94 56.33 T 108 72 540 72 2 L 7 X V 0.25 H 2 Z 0 X N 108 750.02 540 750.02 2 L 7 X V 0 Z 0 X N 477 45 540 63 R 7 X V 0 X (3 of 9) 516.68 56.33 T 108 726.98 540 742.18 R 7 X V 0 8 Q 0 X (Featur) 108 736.84 T (es and Bene\336ts for Softwar) 130.95 736.84 T (e Developers) 222.74 736.84 T 108 81 540 720 R 7 X V 3 14 Q 0 X (architecture speci\336c ANDF version of the application which is then) 108 710.67 T (translated into machine code.) 108 694.67 T (DRA's TDF technology provides a C compilation environment which) 126 666.67 T (handles ANSI C \050and other common dialects\051 with an extension called) 108 650.67 T 4 12 Q (#pragma token) 108 634.67 T 3 14 Q (, which allows the portability interface to be expressed in a) 188 634.67 T (single set of architecture neutral headers. This compilation environment) 108 618.67 T (need be the only compilation environment that the ISV uses. DRA is) 108 602.67 T (optimizing its design for the needs of an ISV creating shrink wrapped) 108 586.67 T (applications.) 108 570.67 T (It must be stressed that ANDF is not a \322magic bullet\323. It does not,) 126 542.67 T (cannot, and should not mandate portability) 108 526.67 T (. This means that ANDF is not a) 346.5 526.67 T (magical solution to the problems of legacy software. Y) 108 510.67 T (ou cannot just run a) 414 510.67 T (non-portable application through the TDF technology and expect to produce) 108 494.67 T (a portable ANDF version. However) 108 478.67 T (, ANDF allows an application to be) 307.56 478.67 T (recast into a shrink wrapped form. There is as yet limited experience as to) 108 462.67 T (how much ef) 108 446.67 T (fort a software developer should expect to have to expend in) 180.8 446.67 T (such a recasting. OSF's experience shrink wrapping Informix's W) 108 430.67 T (ingz \050TM\051) 474.26 430.67 T (product and DRA's experience shrink wrapping public domain applications) 108 414.67 T (suggests that the creation of a shrink-wrapped version of an application) 108 398.67 T (takes roughly the same amount of time as doing a port to a new platform.) 108 382.67 T (Once an application has been shrink-wrapped, its ability to run on a given) 108 366.67 T (platform is constrained only by the availability on that platform of) 108 350.67 T (implementations of all the portability interfaces which the application) 108 334.67 T (requires) 108 318.67 T 0 F (2.2 Bene\336ts of ANDF for all Softwar) 108 288.67 T (e Developers) 324.21 288.67 T 3 F (The bene\336ts to software developers of using the TDF technology are) 126 260.67 T (primarily reductions in porting costs, but ANDF should also reduce testing) 108 244.67 T (costs. It is unlikely that when software developers start to use ANDF that) 108 228.67 T (they would be happy to ship a shrink-wrapped product without speci\336c) 108 212.67 T (platform testing. However) 108 196.67 T (, testing costs are related to the number of) 254.72 196.67 T (problems encountered during testing, and an application shrink-wrapped) 108 180.67 T (using ANDF should fail such tests much less frequently - the whole shrink-) 108 164.67 T (wrapping process makes porting a much simpler process and the use of a) 108 148.67 T (single compiler front-end will reduce exposure to inconsistent) 108 132.67 T (interpretations of language semantics and compiler bugs.) 108 116.67 T FMENDPAGE %%EndPage: "3" 4 %%Page: "4" 4 612 792 0 FMBEGINPAGE 0 10 Q 0 X 0 K (ANDF Featur) 108 56.33 T (es and Bene\336ts) 166.94 56.33 T 108 72 540 72 2 L 7 X V 0.25 H 2 Z 0 X N 108 750.02 540 750.02 2 L 7 X V 0 Z 0 X N 477 45 540 63 R 7 X V 0 X (4 of 9) 516.68 56.33 T 108 726.98 540 742.18 R 7 X V 0 8 Q 0 X (Featur) 108 736.84 T (es and Bene\336ts for Softwar) 130.95 736.84 T (e Developers) 222.74 736.84 T 108 81 540 720 R 7 X V 3 14 Q 0 X (Software developers will have a much freer choice of implementation) 126 710.67 T (language. Provided an appropriate producer exists for the chosen language) 108 694.67 T (the ANDF produced by it can be installed on any machine with a ANDF) 108 678.67 T (installer and the appropriate libraries. This means that a software developer) 108 662.67 T (is not dependent on compilers being available for the chosen) 108 646.67 T (implementation language on all the computers the application is intended to) 108 630.67 T (run on. T) 108 614.67 T (o ISVs this may make it easier to move to C++. T) 158.71 614.67 T (o certain users it) 436.25 614.67 T (may mean that special-purpose languages are less expensive to support \050e.g.) 108 598.67 T (Ada for the defence community\051. T) 108 582.67 T (o or) 305.19 582.67 T (ganizations with legacy software) 327.09 582.67 T (written in now unfashionable languages it may provide a means of) 108 566.67 T (supporting legacy languages at much lower cost.) 108 550.67 T (At the current time the only compiler front-end for TDF is for C \050ANSI) 126 522.67 T (and other dialects\051. A great deal of ef) 108 506.67 T (fort has gone into ensuring that ANDF) 316.01 506.67 T (can be used as an intermediate language in \322conventional\323 compilers for) 108 490.67 T (languages other than C. Implementing the C front-end for TDF exposed a) 108 474.67 T (number of issues that related to the production of architecture-neutral) 108 458.67 T (ANDF) 108 442.67 T (. There are parts of the semantic de\336nition of C, such as the precise) 144.97 442.67 T (de\336nition of some integer promotions, which depend on the tar) 108 426.67 T (get. In) 460.63 426.67 T (addition, ANSI C was extended with the) 108 410.67 T 4 12 Q (#pragma token) 338.08 410.67 T 3 14 Q (facility to allow) 421.41 410.67 T (software developers access to TDF's features for describing portability) 108 394.67 T (interfaces. These issues have been satisfactorily resolved for C, but a similar) 108 378.67 T (exercise would have to undertaken for other languages if they are intended) 108 362.67 T (for use in producing shrink-wrapped applications.) 108 346.67 T (ANDF may also reduce software developers' maintenance costs. For) 126 318.67 T (example it will be possible to have one port and product for a) 108 302.67 T (manufacturer's operating system that should work on all future releases of) 108 286.67 T (that operating system.) 108 270.67 T 0 F (2.3 The ISV\325) 108 240.67 T (s Perspective) 183.28 240.67 T 3 F (The ISV can look forward to reductions in porting, testing and) 126 212.67 T (maintenance costs. This may allow ISVs to economically provide their) 108 196.67 T (products on more platforms and may reduce the time it takes to provide a) 108 180.67 T (product on a new platform.) 108 164.67 T 0 F (2.4 The Users' Perspective) 108 134.67 T 3 F (Many user or) 126 106.67 T (ganizations develop their own proprietary software within) 200.35 106.67 T (their own MIS departments. The MIS departments will derive the same) 108 90.67 T FMENDPAGE %%EndPage: "4" 5 %%Page: "5" 5 612 792 0 FMBEGINPAGE 0 10 Q 0 X 0 K (ANDF Featur) 108 56.33 T (es and Bene\336ts) 166.94 56.33 T 108 72 540 72 2 L 7 X V 0.25 H 2 Z 0 X N 108 750.02 540 750.02 2 L 7 X V 0 Z 0 X N 477 45 540 63 R 7 X V 0 X (5 of 9) 516.68 56.33 T 108 726.98 540 742.18 R 7 X V 0 8 Q 0 X (TDF Overview) 108 736.84 T 108 81 540 720 R 7 X V 3 14 Q 0 X (bene\336ts as the ISVs for their own software development and deployment) 108 710.67 T (within their corporate structure.) 108 694.67 T 0 F (2.5 The System V) 108 664.67 T (endors' Perspective) 210.87 664.67 T 3 F (System V) 126 636.67 T (endors are often lar) 179.26 636.67 T (ge software developers and vendors to their) 287.4 636.67 T (clients. There are however additional bene\336ts to System V) 108 620.67 T (endors:) 434.05 620.67 T (\245) 108 592.67 T (applications in ANDF can easily be reinstalled. It is therefore less impor-) 121.54 592.67 T (tant to maintain binary compatibility in operating system updates. The) 121.54 576.67 T (key requirement will be for System V) 121.54 560.67 T (endors to maintain the consistent im-) 331.39 560.67 T (plementation of portability interfaces.) 121.54 544.67 T (\245) 108 516.67 T (ANDF will insulate customers and ISVs from the precise de\336nition of) 121.54 516.67 T -0.04 (ABIs allowing ABIs to evolve more easily e.g. addition of superscaling or) 121.54 500.67 P (the move to 64 bit.) 121.54 484.67 T (\245) 108 456.67 T (ISV product availability in ANDF will make it easier to introduce a new) 121.54 456.67 T (architecture because customers demand application availability\321System) 121.54 440.67 T (V) 121.54 424.67 T (endors currently spend lar) 130.09 424.67 T (ge amounts of money ensuring application) 275.55 424.67 T (availability on their platforms.) 121.54 408.67 T 108 348.98 540 352 C 108 350.49 576 350.49 2 L 0.25 H 2 Z 0 X 0 K N 0 0 612 792 C 2 16 Q 0 X 0 K (3. TDF Overview) 108 357.33 T 3 14 Q (The purpose of this section is to give a high-level technical overview of) 126 325.64 T (TDF) 108 309.64 T (. The section is included because the reader is probably curious about) 133.31 309.64 T (what TDF looks like. It also provides some substantiation for the remarks) 108 293.64 T (about portability made in earlier sections, as well as answering some) 108 277.64 T (common technical worries about ANDF\321such as the issue of whether TDF) 108 261.64 T (will degrade the run-time performance of applications.) 108 245.64 T (TDF represents an evolution of compiler intermediate languages. It) 126 217.64 T (ful\336ls some of the promise of earlier \050failed\051 attempts to create a \322universal\323) 108 201.64 T (compiler intermediate language. In this scenario if there are n programming) 108 185.64 T (languages and m machines then instead of needing the product of) 108 169.64 T 5 F (n) 477.57 169.64 T 3 F ( and) 484.56 169.64 T 5 F (m) 511.76 169.64 T 3 F (compilers one only needs the sum \050) 108 153.64 T 5 F (n+m) 306.2 153.64 T 3 F (\051 \322half compilers\323. OSF refers to) 332.74 153.64 T (the) 108 137.64 T 5 F (n) 128.6 137.64 T 3 F (front-ends which compile the programming languages into ANDF as) 139.09 137.64 T (producers, and the) 108 121.64 T 5 F (m) 214.47 121.64 T 3 F ( back-ends which translate ANDF into the machine) 224.57 121.64 T (code of the dif) 108 105.64 T (ferent machines are referred to as installers.) 188.96 105.64 T FMENDPAGE %%EndPage: "5" 6 %%Page: "6" 6 612 792 0 FMBEGINPAGE 0 10 Q 0 X 0 K (ANDF Featur) 108 56.33 T (es and Bene\336ts) 166.94 56.33 T 108 72 540 72 2 L 7 X V 0.25 H 2 Z 0 X N 108 750.02 540 750.02 2 L 7 X V 0 Z 0 X N 477 45 540 63 R 7 X V 0 X (6 of 9) 516.68 56.33 T 108 726.98 540 742.18 R 7 X V 0 8 Q 0 X (TDF Overview) 108 736.84 T 108 81 540 720 R 7 X V 3 14 Q 0 X (TDF is not a pseudo-code which represents machine instructions for) 126 710.67 T (some abstract stack or register computer) 108 694.67 T (. Instead it is a tree-structured) 333 694.67 T (intermediate language \050IL\051 containing abstractions for common) 108 678.67 T (programming language concepts such a data structures, procedures,) 108 662.67 T (numbers, conditionals, loops, labels, jumps etc. These abstractions have) 108 646.67 T (been carefully designed so as to be able to accommodate the particular) 108 630.67 T (variants found in dif) 108 614.67 T (ferent programming languages. For distribution the) 221.62 614.67 T (TDF tree is \322\337attened\323 into a compactly encoded stream of bits. Although) 108 598.67 T (there have been language speci\336c intermediate languages at the TDF level) 108 582.67 T (before \050e.g. Diana for Ada\051, no-one before has attempted to design a multi-) 108 566.67 T (lingual IL at such a level.) 108 550.67 T (In a producer which compiles from a programming language to TDF) 126 522.67 T (,) 509.6 522.67 T (very little information is lost. The only signi\336cant loss is syntactic sugar) 108 506.67 T (such as identi\336er names - which are kept separately for debugging purposes) 108 490.67 T (but need not be distributed with a shrink wrapped application. The aim was) 108 474.67 T (to keep information useful to code optimizations in the installers, but to lose) 108 458.67 T -0.01 (information useful for reverse engineering. The syntactic sugar \050which is the) 108 442.67 P (only information that cannot be recovered from a binary\051 is of no use to) 108 426.67 T (code optimizers and so is discarded.) 108 410.67 T (The following subsections will examine dif) 126 382.67 T (ferent aspects of TDF -) 368.65 382.67 T (architecture neutrality; run-time performance of applications; ease of) 108 366.67 T (implementing new installers; and the representation of portability interfaces.) 108 350.67 T 0 F (3.1 TDF: Ar) 108 320.67 T (chitectur) 181.19 320.67 T (e Neutrality / Run-time Performance of Applica-) 234.56 320.67 T (tions) 108 304.67 T 3 F (Because TDF abstracts programming languages it does not favor any) 126 276.67 T (particular architecture. The preservation of optimization information means) 108 260.67 T (that if a good compiler for C can be implemented for an architecture then a) 108 244.67 T (TDF installer can be implemented which provides as good performance) 108 228.67 T (when used as the back-end of the C to TDF producer) 108 212.67 T (.) 403.34 212.67 T (TDF has a totally symbolic representation of memory which allows) 126 184.67 T (installers to choose a storage layout appropriate for the tar) 108 168.67 T (get. By contrast,) 433 168.67 T (most existing ILs assume a particular storage model and the front-end needs) 108 152.67 T (to be modi\336ed to generate dif) 108 136.67 T (ferent IL for any machine with a new storage) 272.91 136.67 T (layout.) 108 120.67 T FMENDPAGE %%EndPage: "6" 7 %%Page: "7" 7 612 792 0 FMBEGINPAGE 0 10 Q 0 X 0 K (ANDF Featur) 108 56.33 T (es and Bene\336ts) 166.94 56.33 T 108 72 540 72 2 L 7 X V 0.25 H 2 Z 0 X N 108 750.02 540 750.02 2 L 7 X V 0 Z 0 X N 477 45 540 63 R 7 X V 0 X (7 of 9) 516.68 56.33 T 108 726.98 540 742.18 R 7 X V 0 8 Q 0 X (TDF Overview) 108 736.84 T 108 81 540 720 R 7 X V 0 14 Q 0 X (3.2 TDF: Ease of Implementing New Installers) 108 710.67 T 3 F (The TDF technology is designed to allow new high-performance) 126 682.67 T (installers to be implemented economically) 108 666.67 T (. T) 344.16 666.67 T (o achieve this as many) 358.73 666.67 T (optimizations as possible, both universally applicable optimizations and) 108 650.67 T (machine speci\336c ones, are carried out as TDF-to-TDF transformations. This) 108 634.67 T (means that TDF has to be able to represent the output of commonly used) 108 618.67 T (optimizations, which necessitated the provision of low level as well as high) 108 602.67 T (level features. This transformational software is portable and can provide as) 108 586.67 T (much as 70% of the code of a new installer) 108 570.67 T (. This installer technology has) 348.54 570.67 T (allowed DRA and OSF to provide installers for many of today's widely used) 108 554.67 T (microprocessor architectures \0503/486, SP) 108 538.67 T (ARC, MIPS, 680x0, V) 330.55 538.67 T (AX are) 456.24 538.67 T (complete with RS6000 in development\051.) 108 522.67 T (As a measure of the ef) 126 494.67 T (fort to produce a new installer: Using DRA's) 251.24 494.67 T (model implementation as a basis, the SP) 108 478.67 T (ARC installer was implemented by) 332.54 478.67 T (a DRA contractor to a level where it equals the performance of the best C) 108 462.67 T (compilers on a SUN SparcStation in approximately a staf) 108 446.67 T (f-year) 428.76 446.67 T (. The) 461.39 446.67 T (implementation was performed by an experienced compiler writer who was) 108 430.67 T (familiar with SP) 108 414.67 T (ARC but who had not worked with TDF before. The) 198.45 414.67 T (implementation was produced at a site remote from DRA with less than a) 108 398.67 T (week's consultancy from DRA.) 108 382.67 T 0 F (3.3 TDF: Repr) 108 352.67 T (esentation of Portability Interfaces) 195.19 352.67 T 3 F (TDF contains a notion called \322tokenization\323. This is the ability of TDF) 126 324.67 T (to represent program as a TDF tree any part of which can be represented by) 108 308.67 T (a symbol called a \322token\323. The token can represent any part of the program) 108 292.67 T (detail \050e.g. a type, a part of a type, a procedure, a macro, an expression or) 108 276.67 T (part of an expression, etc.\051 which is architecture speci\336c. After distribution) 108 260.67 T (the token can have an appropriate architecture speci\336c piece of TDF tree) 108 244.67 T (supplied as its de\336nition. T) 108 228.67 T (oken substitution produces an architecture) 259.01 228.67 T (speci\336c TDF representation of the application which can be translated into) 108 212.67 T (the machine code of the tar) 108 196.67 T (get by the appropriate TDF installer) 259.68 196.67 T (.) 459.82 196.67 T (T) 126 168.67 T (okenization is the key to TDF's representation of the interfaces required) 133.57 168.67 T (for portability) 108 152.67 T (. These might be established APIs such as Posix, XPG3,) 185.21 152.67 T (SVID3, the AES etc. or they might be interfaces created by an ISV) 108 136.67 T (. An) 480.8 136.67 T (ISV's interface might abstract some low-level machine-speci\336c) 108 120.67 T (manipulation which needs to be appropriately substituted on each tar) 108 104.67 T (get in) 492.87 104.67 T (order to achieve some added functionality or performance. An ISV's) 108 88.67 T FMENDPAGE %%EndPage: "7" 8 %%Page: "8" 8 612 792 0 FMBEGINPAGE 0 10 Q 0 X 0 K (ANDF Featur) 108 56.33 T (es and Bene\336ts) 166.94 56.33 T 108 72 540 72 2 L 7 X V 0.25 H 2 Z 0 X N 108 750.02 540 750.02 2 L 7 X V 0 Z 0 X N 477 45 540 63 R 7 X V 0 X (8 of 9) 516.68 56.33 T 108 726.98 540 742.18 R 7 X V 0 8 Q 0 X (TDF Overview) 108 736.84 T 108 81 540 720 R 7 X V 3 14 Q 0 X (interface may also contain functions that are outside the coverage of widely) 108 710.67 T (available APIs. The ISV will then have to decide how to make) 108 694.67 T (implementations of token de\336nition libraries, which implement the ISV's) 108 678.67 T (interface, available on all the dif) 108 662.67 T (ferent tar) 288.82 662.67 T (get platforms. It may be that ISVs) 339.46 662.67 T (sell implementations of their interfaces separately) 108 646.67 T (, or it may be that) 385.72 646.67 T (implementations for a wide variety of platforms are included with the) 108 630.67 T (shrink-wrapped applications.) 108 614.67 T (The technique of token substitution has an impact on the relationship) 126 586.67 T (between the user) 108 570.67 T (, the ISV) 201.47 570.67 T (, the de\336ners of APIs, and the implementors of) 249.8 570.67 T (APIs.) 108 554.67 T (Consider the process of updating the implementations of interfaces. In) 126 526.67 T (the current software market the binary of an ISV's product will have bound) 108 510.67 T (into it a particular implementation of its interfaces, be that a particular) 108 494.67 T (version of X-W) 108 478.67 T (indows, or library calls from a particular version of an) 195.26 478.67 T (operating system \050etc.\051. In the TDF world the application contains tokens) 108 462.67 T (for interfacing to system interfaces and during installation the user's) 108 446.67 T (environment supplies implementations that meet the interface standards) 108 430.67 T (expected by the application. At a later date the user can reinstall the) 108 414.67 T (application with later versions of \050say\051 the operating system or X-W) 108 398.67 T (indows,) 489.05 398.67 T (provided the new implementations implement the same functional) 108 382.67 T (speci\336cation expected by the application.) 108 366.67 T (The) 126 338.67 T 4 12 Q (#pragma token) 151.26 338.67 T 3 14 Q ( extension to C can be used by API de\336ners to) 231.25 338.67 T (produce machine-readable architecture neutral C headers for their standards.) 108 322.67 T (The C to TDF producer uses the information provided by the) 108 306.67 T 4 12 Q (#pragma token) 452.71 306.67 T 3 14 Q (syntax to do some validation checks on API implementations - these checks) 108 290.67 T (have already shown up a number of latent errors in existing API) 108 274.67 T (implementations.) 108 258.67 T (It is impossible within an overview document such as this to give much) 126 230.67 T (more in the way of details as to how tokenization works. Other documents) 108 214.67 T (will give full details of tokenization and examples of its use.) 108 198.67 T FMENDPAGE %%EndPage: "8" 9 %%Page: "9" 9 612 792 0 FMBEGINPAGE 0 10 Q 0 X 0 K (ANDF Featur) 108 56.33 T (es and Bene\336ts) 166.94 56.33 T 108 72 540 72 2 L 7 X V 0.25 H 2 Z 0 X N 108 750.02 540 750.02 2 L 7 X V 0 Z 0 X N 477 45 540 63 R 7 X V 0 X (9 of 9) 516.68 56.33 T 108 726.98 540 742.18 R 7 X V 0 8 Q 0 X (Conclusions) 108 736.84 T 108 81 540 720 R 7 X V 108 700.98 540 704 C 108 702.49 576 702.49 2 L 0.25 H 2 Z 0 X 0 K N 0 0 612 792 C 2 16 Q 0 X 0 K (4. Conclusions) 108 709.33 T 3 14 Q (TDF is the \336rst technology speci\336cally designed to support the shrink-) 126 677.64 T (wrapping of applications. This document has described how ISVs, users and) 108 661.64 T (System V) 108 645.64 T (endors might bene\336t from the technology) 161.26 645.64 T (, and has related those) 392.37 645.64 T (bene\336ts to particular features of the TDF technology) 108 629.64 T (. A number of other) 401.27 629.64 T (documents are being produced which will explore the TDF technology in) 108 613.64 T (greater detail.) 108 597.64 T 0 12 Q (For further information please contact:) 216 536.98 T (Dr) 216 504.98 T (. Nic Peeling) 228.88 504.98 T (internet: peeling%hermes.mod.uk@r) 216 490.98 T (elay) 407.82 490.98 T (.mod.uk) 427.82 490.98 T (janet: peeling@uk.mod.hermes) 216 476.98 T (fax: +44 684 894303) 216 462.98 T FMENDPAGE %%EndPage: "9" 10 %%Trailer %%BoundingBox: 0 0 612 792 %%Pages: 9 1 %%DocumentFonts: Times-Bold %%+ Symbol %%+ Times-BoldItalic %%+ Times-Roman %%+ Helvetica %%+ Times-Italic