%!PS-Adobe-3.0 %%BoundingBox: (atend) %%Pages: (atend) %%PageOrder: (atend) %%DocumentFonts: (atend) %%Creator: Frame 5.0 %%DocumentData: Clean7Bit %%EndComments %%BeginProlog % % Frame ps_prolog 5.0, for use with Frame 5.0 products % This ps_prolog file is Copyright (c) 1986-1995 Frame Technology % Corporation. All rights reserved. This ps_prolog file may be % freely copied and distributed in conjunction with documents created % using FrameMaker, FrameMaker/SGML and FrameViewer as long as this % copyright notice is preserved. % % FrameMaker users specify the proper paper size for each print job in the % "Print" dialog's "Printer Paper Size" "Width" and "Height~ fields. If the % printer that the PS file is sent to does not support the requested paper % size, or if there is no paper tray of the proper size currently installed, % then the job will not be printed. The following flag, if set to true, will % cause the job to print on the default paper in such cases. /FMAllowPaperSizeMismatch false def % % Frame products normally print colors as their true color on a color printer % or as shades of gray, based on luminance, on a black-and white printer. The % following flag, if set to true, forces all non-white colors to print as pure % black. This has no effect on bitmap images. /FMPrintAllColorsAsBlack false def % % Frame products can either set their own line screens or use a printer's % default settings. Three flags below control this separately for no % separations, spot separations and process separations. If a flag % is true, then the default printer settings will not be changed. If it is % false, Frame products will use their own settings from a table based on % the printer's resolution. /FMUseDefaultNoSeparationScreen true def /FMUseDefaultSpotSeparationScreen true def /FMUseDefaultProcessSeparationScreen false def % % For any given PostScript printer resolution, Frame products have two sets of % screen angles and frequencies for printing process separations, which are % recomended by Adobe. The following variable chooses the higher frequencies % when set to true or the lower frequencies when set to false. This is only % effective if the appropriate FMUseDefault...SeparationScreen flag is false. /FMUseHighFrequencyScreens true def % % The following is a set of predefined optimal frequencies and angles for various % common dpi settings. This is taken from "Advances in Color Separation Using % PostScript Software Technology," from Adobe Systems (3/13/89 P.N. LPS 0043) % and corrolated with information which is in various PPD (4.0) files. % % The "dpiranges" figure is the minimum dots per inch device resolution which % can support this setting. The "low" and "high" values are controlled by the % setting of the FMUseHighFrequencyScreens flag above. The "TDot" flags control % the use of the "Yellow Triple Dot" feature whereby the frequency id divided by % three, but the dot function is "trippled" giving a block of 3x3 dots per cell. % % PatFreq is a compromise pattern frequency for ps Level 2 printers which is close % to the ideal WYSIWYG pattern frequency of 9 repetitions/inch but does not beat % (too badly) against the screen frequencies of any separations for that DPI. /dpiranges [ 2540 2400 1693 1270 1200 635 600 0 ] def /CMLowFreqs [ 100.402 94.8683 89.2289 100.402 94.8683 66.9349 63.2456 47.4342 ] def /YLowFreqs [ 95.25 90.0 84.65 95.25 90.0 70.5556 66.6667 50.0 ] def /KLowFreqs [ 89.8026 84.8528 79.8088 89.8026 84.8528 74.8355 70.7107 53.033 ] def /CLowAngles [ 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 ] def /MLowAngles [ 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 ] def /YLowTDot [ true true false true true false false false ] def /CMHighFreqs [ 133.87 126.491 133.843 108.503 102.523 100.402 94.8683 63.2456 ] def /YHighFreqs [ 127.0 120.0 126.975 115.455 109.091 95.25 90.0 60.0 ] def /KHighFreqs [ 119.737 113.137 119.713 128.289 121.218 89.8026 84.8528 63.6395 ] def /CHighAngles [ 71.5651 71.5651 71.5651 70.0169 70.0169 71.5651 71.5651 71.5651 ] def /MHighAngles [ 18.4349 18.4349 18.4349 19.9831 19.9831 18.4349 18.4349 18.4349 ] def /YHighTDot [ false false true false false true true false ] def /PatFreq [ 10.5833 10.0 9.4055 10.5833 10.0 10.5833 10.0 9.375 ] def % % PostScript Level 2 printers contain an "Accurate Screens" feature which can % improve process separation rendering at the expense of compute time. This % flag is ignored by PostScript Level 1 printers. /FMUseAcccurateScreens true def % % The following PostScript procedure defines the spot function that Frame % products will use for process separations. You may un-comment-out one of % the alternative functions below, or use your own. % % Dot function /FMSpotFunction {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1 sub } {dup mul exch dup mul add 1 exch sub }ifelse } def % % Line function % /FMSpotFunction { pop } def % % Elipse function % /FMSpotFunction { dup 5 mul 8 div mul exch dup mul exch add % sqrt 1 exch sub } def % % /FMversion (5.0) def /fMLevel1 /languagelevel where {pop languagelevel} {1} ifelse 2 lt def /FMPColor fMLevel1 { false /colorimage where {pop pop true} if } { true } ifelse def /FrameDict 400 dict def systemdict /errordict known not {/errordict 10 dict def errordict /rangecheck {stop} put} if % The readline in PS 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 } bind def } if /FMshowpage /showpage load def /FMquit /quit load def /FMFAILURE { dup = flush FMshowpage /Helvetica findfont 12 scalefont setfont 72 200 moveto show 72 220 moveto show FMshowpage FMquit } def /FMVERSION { FMversion ne { (Frame product version does not match ps_prolog! Check installation;) (also check ~/fminit and ./fminit for old versions) FMFAILURE } if } def /FMBADEPSF { (Adobe's PostScript Language Reference Manual, 2nd Edition, section H.2.4) (says your EPS file is not valid, as it calls X ) dup dup (X) search pop exch pop exch pop length 5 -1 roll putinterval FMFAILURE } def /fmConcatProcs { /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 }def FrameDict begin [ /ALDsave /FMdicttop /FMoptop /FMpointsize /FMsaveobject /b /bitmapsave /blut /bpside /bs /bstring /bwidth /c /cf /cs /cynu /depth /edown /fh /fillvals /fw /fx /fy /g /gfile /gindex /grnt /gryt /gstring /height /hh /i /im /indx /is /k /kk /landscape /lb /len /llx /lly /m /magu /manualfeed /n /offbits /onbits /organgle /orgbangle /orgbfreq /orgbproc /orgbxfer /orgfreq /orggangle /orggfreq /orggproc /orggxfer /orgmatrix /orgproc /orgrangle /orgrfreq /orgrproc /orgrxfer /orgxfer /pagesave /paperheight /papersizedict /paperwidth /pos /pwid /r /rad /redt /sl /str /tran /u /urx /ury /val /width /width /ws /ww /x /x1 /x2 /xindex /xpoint /xscale /xx /y /y1 /y2 /yelu /yindex /ypoint /yscale /yy ] { 0 def } forall /FmBD {bind def} bind def systemdict /pdfmark known { /fMAcrobat true def /FmPD /pdfmark load def /FmPT /show load def currentdistillerparams /CoreDistVersion get 2000 ge { /FmPD2 /pdfmark load def /FmPA { mark exch /Dest exch 5 3 roll /View [ /XYZ null 6 -2 roll FmDC exch pop null] /DEST FmPD }FmBD } { /FmPD2 /cleartomark load def /FmPA {pop pop pop}FmBD } ifelse } { /fMAcrobat false def /FmPD /cleartomark load def /FmPD2 /cleartomark load def /FmPT /pop load def /FmPA {pop pop pop}FmBD } ifelse /FmDC { transform fMDefaultMatrix itransform cvi exch cvi exch }FmBD /FmBx { dup 3 index lt {3 1 roll exch} if 1 index 4 index lt {4 -1 roll 3 1 roll exch 4 1 roll} if }FmBD /FMnone 0 def /FMcyan 1 def /FMmagenta 2 def /FMyellow 3 def /FMblack 4 def /FMcustom 5 def /fMNegative false def /FrameSepIs FMnone def /FrameSepBlack 0 def /FrameSepYellow 0 def /FrameSepMagenta 0 def /FrameSepCyan 0 def /FrameSepRed 1 def /FrameSepGreen 1 def /FrameSepBlue 1 def /FrameCurGray 1 def /FrameCurPat null def /FrameCurColors [ 0 0 0 1 0 0 0 ] def /FrameColorEpsilon .001 def /eqepsilon { sub dup 0 lt {neg} if FrameColorEpsilon le } bind def /FrameCmpColorsCMYK { 2 copy 0 get exch 0 get eqepsilon { 2 copy 1 get exch 1 get eqepsilon { 2 copy 2 get exch 2 get eqepsilon { 3 get exch 3 get eqepsilon } {pop pop false} ifelse }{pop pop false} ifelse } {pop pop false} ifelse } bind def /FrameCmpColorsRGB { 2 copy 4 get exch 0 get eqepsilon { 2 copy 5 get exch 1 get eqepsilon { 6 get exch 2 get eqepsilon }{pop pop false} ifelse } {pop pop false} ifelse } bind def /RGBtoCMYK { 1 exch sub 3 1 roll 1 exch sub 3 1 roll 1 exch sub 3 1 roll 3 copy 2 copy le { pop } { exch pop } ifelse 2 copy le { pop } { exch pop } ifelse dup dup dup 6 1 roll 4 1 roll 7 1 roll sub 6 1 roll sub 5 1 roll sub 4 1 roll } bind def /CMYKtoRGB { dup dup 4 -1 roll add 5 1 roll 3 -1 roll add 4 1 roll add 1 exch sub dup 0 lt {pop 0} if 3 1 roll 1 exch sub dup 0 lt {pop 0} if exch 1 exch sub dup 0 lt {pop 0} if exch } bind def /FrameSepInit { 1.0 RealSetgray } bind def /FrameSetSepColor { /FrameSepBlue exch def /FrameSepGreen exch def /FrameSepRed exch def /FrameSepBlack exch def /FrameSepYellow exch def /FrameSepMagenta exch def /FrameSepCyan exch def /FrameSepIs FMcustom def setCurrentScreen } bind def /FrameSetCyan { /FrameSepBlue 1.0 def /FrameSepGreen 1.0 def /FrameSepRed 0.0 def /FrameSepBlack 0.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 1.0 def /FrameSepIs FMcyan def setCurrentScreen } bind def /FrameSetMagenta { /FrameSepBlue 1.0 def /FrameSepGreen 0.0 def /FrameSepRed 1.0 def /FrameSepBlack 0.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 1.0 def /FrameSepCyan 0.0 def /FrameSepIs FMmagenta def setCurrentScreen } bind def /FrameSetYellow { /FrameSepBlue 0.0 def /FrameSepGreen 1.0 def /FrameSepRed 1.0 def /FrameSepBlack 0.0 def /FrameSepYellow 1.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 0.0 def /FrameSepIs FMyellow def setCurrentScreen } bind def /FrameSetBlack { /FrameSepBlue 0.0 def /FrameSepGreen 0.0 def /FrameSepRed 0.0 def /FrameSepBlack 1.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 0.0 def /FrameSepIs FMblack def setCurrentScreen } bind def /FrameNoSep { /FrameSepIs FMnone def setCurrentScreen } bind def /FrameSetSepColors { FrameDict begin [ exch 1 add 1 roll ] /FrameSepColors exch def end } bind def /FrameColorInSepListCMYK { FrameSepColors { exch dup 3 -1 roll FrameCmpColorsCMYK { pop true exit } if } forall dup true ne {pop false} if } bind def /FrameColorInSepListRGB { FrameSepColors { exch dup 3 -1 roll FrameCmpColorsRGB { pop true exit } if } forall dup true ne {pop false} if } bind def /RealSetgray /setgray load def /RealSetrgbcolor /setrgbcolor load def /RealSethsbcolor /sethsbcolor load def end /setgray { FrameDict begin FrameSepIs FMnone eq { RealSetgray } { FrameSepIs FMblack eq { RealSetgray } { FrameSepIs FMcustom eq FrameSepRed 0 eq and FrameSepGreen 0 eq and FrameSepBlue 0 eq and { RealSetgray } { 1 RealSetgray pop } ifelse } ifelse } ifelse end } bind def /setrgbcolor { FrameDict begin FrameSepIs FMnone eq { RealSetrgbcolor } { 3 copy [ 4 1 roll ] FrameColorInSepListRGB { FrameSepBlue eq exch FrameSepGreen eq and exch FrameSepRed eq and { 0 } { 1 } ifelse } { FMPColor { RealSetrgbcolor currentcmykcolor } { RGBtoCMYK } ifelse FrameSepIs FMblack eq {1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse RealSetgray } ifelse end } bind def /sethsbcolor { FrameDict begin FrameSepIs FMnone eq { RealSethsbcolor } { RealSethsbcolor currentrgbcolor setrgbcolor } ifelse end } bind def FrameDict begin /setcmykcolor where { pop /RealSetcmykcolor /setcmykcolor load def } { /RealSetcmykcolor { 4 1 roll 3 { 3 index add 0 max 1 min 1 exch sub 3 1 roll} repeat RealSetrgbcolor pop } bind def } ifelse userdict /setcmykcolor { FrameDict begin FrameSepIs FMnone eq { RealSetcmykcolor } { 4 copy [ 5 1 roll ] FrameColorInSepListCMYK { FrameSepBlack eq exch FrameSepYellow eq and exch FrameSepMagenta eq and exch FrameSepCyan eq and { 0 } { 1 } ifelse } { FrameSepIs FMblack eq {1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse RealSetgray } ifelse end } bind put fMLevel1 { /patScreenDict 7 dict dup begin <0f1e3c78f0e1c387> [ 45 { pop } {exch pop} .5 2 sqrt] FmBD <0f87c3e1f0783c1e> [ 135 { pop } {exch pop} .5 2 sqrt] FmBD [ 0 { pop } dup .5 2 ] FmBD [ 90 { pop } dup .5 2 ] FmBD <8142241818244281> [ 45 { 2 copy lt {exch} if pop} dup .75 2 sqrt] FmBD <03060c183060c081> [ 45 { pop } {exch pop} .875 2 sqrt] FmBD <8040201008040201> [ 135 { pop } {exch pop} .875 2 sqrt] FmBD end def } { /patProcDict 5 dict dup begin <0f1e3c78f0e1c387> { 3 setlinewidth -1 -1 moveto 9 9 lineto stroke 4 -4 moveto 12 4 lineto stroke -4 4 moveto 4 12 lineto stroke} bind def <0f87c3e1f0783c1e> { 3 setlinewidth -1 9 moveto 9 -1 lineto stroke -4 4 moveto 4 -4 lineto stroke 4 12 moveto 12 4 lineto stroke} bind def <8142241818244281> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke -1 -1 moveto 9 9 lineto stroke } bind def <03060c183060c081> { 1 setlinewidth -1 -1 moveto 9 9 lineto stroke 4 -4 moveto 12 4 lineto stroke -4 4 moveto 4 12 lineto stroke} bind def <8040201008040201> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke -4 4 moveto 4 -4 lineto stroke 4 12 moveto 12 4 lineto stroke} bind def end def /patDict 15 dict dup begin /PatternType 1 def /PaintType 2 def /TilingType 3 def /BBox [ 0 0 8 8 ] def /XStep 8 def /YStep 8 def /PaintProc { begin patProcDict bstring known { patProcDict bstring get exec } { 8 8 true [1 0 0 -1 0 8] bstring imagemask } ifelse end } bind def end def } ifelse /combineColor { FrameSepIs FMnone eq { graymode fMLevel1 or not { [/Pattern [/DeviceCMYK]] setcolorspace FrameCurColors 0 4 getinterval aload pop FrameCurPat setcolor } { FrameCurColors 3 get 1.0 ge { FrameCurGray RealSetgray } { fMAcrobat not FMPColor graymode and and { 0 1 3 { FrameCurColors exch get 1 FrameCurGray sub mul } for RealSetcmykcolor } { 4 1 6 { FrameCurColors exch get graymode { 1 exch sub 1 FrameCurGray sub mul 1 exch sub } { 1.0 lt {FrameCurGray} {1} ifelse } ifelse } for RealSetrgbcolor } ifelse } ifelse } ifelse } { FrameCurColors 0 4 getinterval aload FrameColorInSepListCMYK { FrameSepBlack eq exch FrameSepYellow eq and exch FrameSepMagenta eq and exch FrameSepCyan eq and FrameSepIs FMcustom eq and { FrameCurGray } { 1 } ifelse } { FrameSepIs FMblack eq {FrameCurGray 1.0 exch sub mul 1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop FrameCurGray 1.0 exch sub mul 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse graymode fMLevel1 or not { [/Pattern [/DeviceGray]] setcolorspace FrameCurPat setcolor } { graymode not fMLevel1 and { dup 1 lt {pop FrameCurGray} if } if RealSetgray } ifelse } ifelse } bind def /savematrix { orgmatrix currentmatrix pop } bind def /restorematrix { orgmatrix setmatrix } bind def /fMDefaultMatrix matrix defaultmatrix def /fMatrix2 matrix def /dpi 72 0 fMDefaultMatrix dtransform dup mul exch dup mul add sqrt def /freq dpi dup 72 div round dup 0 eq {pop 1} if 8 mul div def /sangle 1 0 fMDefaultMatrix dtransform exch atan def sangle fMatrix2 rotate fMDefaultMatrix fMatrix2 concatmatrix dup 0 get /sflipx exch def 3 get /sflipy exch def /screenIndex { 0 1 dpiranges length 1 sub { dup dpiranges exch get 1 sub dpi le {exit} {pop} ifelse } for } bind def /getCyanScreen { FMUseHighFrequencyScreens { CHighAngles CMHighFreqs} {CLowAngles CMLowFreqs} ifelse screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load } bind def /getMagentaScreen { FMUseHighFrequencyScreens { MHighAngles CMHighFreqs } {MLowAngles CMLowFreqs} ifelse screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load } bind def /getYellowScreen { FMUseHighFrequencyScreens { YHighTDot YHighFreqs} { YLowTDot YLowFreqs } ifelse screenIndex dup 3 1 roll get 3 1 roll get { 3 div {2 { 1 add 2 div 3 mul dup floor sub 2 mul 1 sub exch} repeat FMSpotFunction } } {/FMSpotFunction load } ifelse 0.0 exch } bind def /getBlackScreen { FMUseHighFrequencyScreens { KHighFreqs } { KLowFreqs } ifelse screenIndex get 45.0 /FMSpotFunction load } bind def /getSpotScreen { getBlackScreen } bind def /getCompositeScreen { getBlackScreen } bind def /FMSetScreen fMLevel1 { /setscreen load }{ { 8 dict begin /HalftoneType 1 def /SpotFunction exch def /Angle exch def /Frequency exch def /AccurateScreens FMUseAcccurateScreens def currentdict end sethalftone } bind } ifelse def /setDefaultScreen { FMPColor { orgrxfer cvx orggxfer cvx orgbxfer cvx orgxfer cvx setcolortransfer } { orgxfer cvx settransfer } ifelse orgfreq organgle orgproc cvx setscreen } bind def /setCurrentScreen { FrameSepIs FMnone eq { FMUseDefaultNoSeparationScreen { setDefaultScreen } { getCompositeScreen FMSetScreen } ifelse } { FrameSepIs FMcustom eq { FMUseDefaultSpotSeparationScreen { setDefaultScreen } { getSpotScreen FMSetScreen } ifelse } { FMUseDefaultProcessSeparationScreen { setDefaultScreen } { FrameSepIs FMcyan eq { getCyanScreen FMSetScreen } { FrameSepIs FMmagenta eq { getMagentaScreen FMSetScreen } { FrameSepIs FMyellow eq { getYellowScreen FMSetScreen } { getBlackScreen FMSetScreen } ifelse } ifelse } ifelse } ifelse } ifelse } ifelse } bind def end /FMDOCUMENT { array /FMfonts exch def /#copies exch def FrameDict begin 0 ne /manualfeed exch def /paperheight exch def /paperwidth exch def 0 ne /fMNegative exch def 0 ne /edown exch def /yscale exch def /xscale exch def fMLevel1 { manualfeed {setmanualfeed} if /FMdicttop countdictstack 1 add def /FMoptop count def setpapername manualfeed {true} {papersize} ifelse {manualpapersize} {false} ifelse {desperatepapersize} {false} ifelse {papersizefailure} if count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for } {2 dict dup /PageSize [paperwidth paperheight] put manualfeed {dup /ManualFeed manualfeed put} if {setpagedevice} stopped {papersizefailure} if } ifelse FMPColor { currentcolorscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def cvlit /orgbproc exch def /orgbangle exch def /orgbfreq exch def cvlit /orggproc exch def /orggangle exch def /orggfreq exch def cvlit /orgrproc exch def /orgrangle exch def /orgrfreq exch def currentcolortransfer fMNegative { 1 1 4 { pop { 1 exch sub } fmConcatProcs 4 1 roll } for 4 copy setcolortransfer } if cvlit /orgxfer exch def cvlit /orgbxfer exch def cvlit /orggxfer exch def cvlit /orgrxfer exch def } { currentscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def currenttransfer fMNegative { { 1 exch sub } fmConcatProcs dup settransfer } if cvlit /orgxfer exch def } ifelse end } def /FMBEGINPAGE { FrameDict begin /pagesave save def 3.86 setmiterlimit /landscape exch 0 ne def landscape { 90 rotate 0 exch dup /pwid exch def neg translate pop }{ pop /pwid exch def } ifelse edown { [-1 0 0 1 pwid 0] concat } if 0 0 moveto paperwidth 0 lineto paperwidth paperheight lineto 0 paperheight lineto 0 0 lineto 1 setgray fill 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 dup array /fillvals exch def dict /patCache exch def end } def /FMFILL { FrameDict begin fillvals 3 1 roll put end } def /FMNORMALIZEGRAPHICS { newpath 1 setlinewidth 0 setlinecap 0 0 0 sethsbcolor 0 setgray } bind def /FMBEGINEPSF { end /FMEPSF save def /showpage {} def % See Adobe's "PostScript Language Reference Manual, 2nd Edition", page 714. % "...the following operators MUST NOT be used in an EPS file:" (emphasis ours) /banddevice {(banddevice) FMBADEPSF} def /clear {(clear) FMBADEPSF} def /cleardictstack {(cleardictstack) FMBADEPSF} def /copypage {(copypage) FMBADEPSF} def /erasepage {(erasepage) FMBADEPSF} def /exitserver {(exitserver) FMBADEPSF} def /framedevice {(framedevice) FMBADEPSF} def /grestoreall {(grestoreall) FMBADEPSF} def /initclip {(initclip) FMBADEPSF} def /initgraphics {(initgraphics) FMBADEPSF} def /quit {(quit) FMBADEPSF} def /renderbands {(renderbands) FMBADEPSF} def /setglobal {(setglobal) FMBADEPSF} def /setpagedevice {(setpagedevice) FMBADEPSF} def /setshared {(setshared) FMBADEPSF} def /startjob {(startjob) FMBADEPSF} def /lettertray {(lettertray) FMBADEPSF} def /letter {(letter) FMBADEPSF} def /lettersmall {(lettersmall) FMBADEPSF} def /11x17tray {(11x17tray) FMBADEPSF} def /11x17 {(11x17) FMBADEPSF} def /ledgertray {(ledgertray) FMBADEPSF} def /ledger {(ledger) FMBADEPSF} def /legaltray {(legaltray) FMBADEPSF} def /legal {(legal) FMBADEPSF} def /statementtray {(statementtray) FMBADEPSF} def /statement {(statement) FMBADEPSF} def /executivetray {(executivetray) FMBADEPSF} def /executive {(executive) FMBADEPSF} def /a3tray {(a3tray) FMBADEPSF} def /a3 {(a3) FMBADEPSF} def /a4tray {(a4tray) FMBADEPSF} def /a4 {(a4) FMBADEPSF} def /a4small {(a4small) FMBADEPSF} def /b4tray {(b4tray) FMBADEPSF} def /b4 {(b4) FMBADEPSF} def /b5tray {(b5tray) FMBADEPSF} def /b5 {(b5) FMBADEPSF} def FMNORMALIZEGRAPHICS [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall fx fw 2 div add fy fh 2 div add translate rotate fw 2 div neg fh 2 div neg translate fw urx llx sub div fh ury lly sub div scale llx neg lly neg translate /FMdicttop countdictstack 1 add def /FMoptop count def } bind def /FMENDEPSF { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMEPSF restore FrameDict begin } bind def FrameDict begin /setmanualfeed { %%BeginFeature *ManualFeed True statusdict /manualfeed true put %%EndFeature } bind 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 } bind def /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 } bind 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 statusdict begin stopped end } bind 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 } bind def /desperatepapersize { statusdict /setpageparams known { paperwidth paperheight 0 1 statusdict begin {setpageparams} stopped end } {true} ifelse } bind def /papersizefailure { FMAllowPaperSizeMismatch not { (The requested paper size is not available in any currently-installed tray) (Edit the PS file to "FMAllowPaperSizeMismatch true" to use default tray) FMFAILURE } if } 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 FMPColor { /BEGINBITMAPCOLOR { BITMAPCOLOR} def /BEGINBITMAPCOLORc { BITMAPCOLORc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUECOLOR } def /BEGINBITMAPTRUECOLORc { BITMAPTRUECOLORc } def /BEGINBITMAPCMYK { BITMAPCMYK } def /BEGINBITMAPCMYKc { BITMAPCMYKc } def } { /BEGINBITMAPCOLOR { BITMAPGRAY} def /BEGINBITMAPCOLORc { BITMAPGRAYc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUEGRAY } def /BEGINBITMAPTRUECOLORc { BITMAPTRUEGRAYc } def /BEGINBITMAPCMYK { BITMAPCMYKGRAY } def /BEGINBITMAPCMYKc { BITMAPCMYKGRAYc } def } ifelse /K { FMPrintAllColorsAsBlack { dup 1 eq 2 index 1 eq and 3 index 1 eq and not {7 {pop} repeat 0 0 0 1 0 0 0} if } if FrameCurColors astore pop combineColor } bind def /graymode true def fMLevel1 { /fmGetFlip { fMatrix2 exch get mul 0 lt { -1 } { 1 } ifelse } FmBD } if /setPatternMode { fMLevel1 { 2 index patScreenDict exch known { pop pop patScreenDict exch get aload pop freq mul 5 2 roll fMatrix2 currentmatrix 1 get 0 ne { 3 -1 roll 90 add 3 1 roll sflipx 1 fmGetFlip sflipy 2 fmGetFlip neg mul } { sflipx 0 fmGetFlip sflipy 3 fmGetFlip mul } ifelse 0 lt {exch pop} {pop} ifelse fMNegative { {neg} fmConcatProcs } if bind systemdict /setscreen get exec /FrameCurGray exch def } { /bwidth exch def /bpside exch def /bstring exch def /onbits 0 def /offbits 0 def freq sangle landscape {90 add} if {/ypoint exch def /xpoint exch def /xindex xpoint 1 add 2 div bpside mul cvi def /yindex ypoint 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 fMNegative {not} if {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen offbits offbits onbits add div fMNegative {1.0 exch sub} if /FrameCurGray exch def } ifelse } { pop pop dup patCache exch known { patCache exch get } { dup patDict /bstring 3 -1 roll put patDict 9 PatFreq screenIndex get div dup matrix scale makepattern dup patCache 4 -1 roll 3 -1 roll put } ifelse /FrameCurGray 0 def /FrameCurPat exch def } ifelse /graymode false def combineColor } bind def /setGrayScaleMode { graymode not { /graymode true def fMLevel1 { setCurrentScreen } if } if /FrameCurGray exch def combineColor } bind def /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 /PFill { graymode fMLevel1 or not { gsave 1 setgray eofill grestore } if } bind def /PStroke { graymode fMLevel1 or not { gsave 1 setgray stroke grestore } if stroke } bind def /X { fillvals exch get dup type /stringtype eq {8 1 setPatternMode} {setGrayScaleMode} ifelse } bind def /V { PFill gsave eofill grestore } bind def /Vclip { clip } bind def /Vstrk { currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /N { PStroke } bind def /Nclip { strokepath clip newpath } bind def /Nstrk { currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /M {newpath moveto} bind def /E {lineto} bind def /D {curveto} bind def /O {closepath} bind def /L { /n exch def newpath normalize moveto 2 1 n {pop normalize lineto} for } bind def /Y { L closepath } bind def /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 /rarc {rad arcto } bind def /RR { /rad exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def mark newpath { x1 y1 rad add moveto x1 y2 x2 y2 rarc x2 y2 x2 y1 rarc x2 y1 x1 y1 rarc x1 y1 x1 y2 rarc closepath } stopped {x1 y1 x2 y2 R} if cleartomark } bind def /RRR { /rad exch def normalize /y4 exch def /x4 exch def normalize /y3 exch def /x3 exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def newpath normalize moveto mark { x2 y2 x3 y3 rarc x3 y3 x4 y4 rarc x4 y4 x1 y1 rarc x1 y1 x2 y2 rarc closepath } stopped {x1 y1 x2 y2 x3 y3 x4 y4 newpath moveto lineto lineto lineto closepath} if cleartomark } bind def /C { grestore gsave R clip setCurrentScreen } bind def /CP { grestore gsave Y clip setCurrentScreen } bind def /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 PFill fill grestore } bind def /Gstrk { 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 currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /Gclip { newpath savematrix normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath clip newpath restorematrix } bind def /GG { gsave newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath PFill fill grestore } bind def /GGclip { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath clip newpath restorematrix } bind def /GGstrk { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath restorematrix currentlinewidth exch setlinewidth PStroke setlinewidth } 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 PStroke grestore } bind def /Aclip { newpath savematrix normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath strokepath clip newpath restorematrix } bind def /Astrk { Gstrk } bind def /AA { gsave savematrix newpath 3 index 2 div add exch 4 index 2 div sub exch normalize 3 index 2 div sub exch 4 index 2 div add exch translate rotate scale 0.0 0.0 1.0 5 3 roll arc restorematrix PStroke grestore } bind def /AAclip { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath strokepath clip newpath restorematrix } bind def /AAstrk { GGstrk } bind def /BEGINPRINTCODE { /FMdicttop countdictstack 1 add def /FMoptop count 7 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 /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 /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 /rip { bis ris copy pop is 0 cf cs readline pop { ic exch get exec add } forall pop pop ris gis copy pop dup is exch cf cs readline pop { ic exch get exec add } forall pop pop gis bis copy pop dup add is exch cf cs readline pop { ic exch get exec add } forall pop } bind def /rip4 { kis cis copy pop is 0 cf cs readline pop { ic exch get exec add } forall pop pop cis mis copy pop dup is exch cf cs readline pop { ic exch get exec add } forall pop pop mis yis copy pop dup dup add is exch cf cs readline pop { ic exch get exec add } forall pop pop yis kis copy pop 3 mul is exch 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 /wbytes { dup dup 8 gt { pop 8 idiv mul } { 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } ifelse } bind def /BEGINBITMAPBWc { 1 {} COMMONBITMAPc } bind def /BEGINBITMAPGRAYc { 8 {} COMMONBITMAPc } bind def /BEGINBITMAP2BITc { 2 {} COMMONBITMAPc } bind def /COMMONBITMAPc { /cvtProc exch def /depth exch def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /lb width depth wbytes def sl lb lt {lb ms} if /bitmapsave save def cvtProc /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def width height depth [width 0 0 height neg 0 height] {ip} image bitmapsave restore grestore } bind def /BEGINBITMAPBW { 1 {} COMMONBITMAP } bind def /BEGINBITMAPGRAY { 8 {} COMMONBITMAP } bind def /BEGINBITMAP2BIT { 2 {} COMMONBITMAP } bind def /COMMONBITMAP { /cvtProc exch def /depth exch def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /bitmapsave save def cvtProc /is width depth wbytes string def /cf currentfile def width height depth [width 0 0 height neg 0 height] {cf is readhexstring pop} image bitmapsave restore grestore } bind def /ngrayt 256 array def /nredt 256 array def /nbluet 256 array def /ngreent 256 array def fMLevel1 { /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 /kk cynu magu min yelu min def /u kk currentundercolorremoval exec def % /u 0 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 kk 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 } { /colorSetup2 { [ /Indexed /DeviceRGB 255 {dup red exch get 255 div exch dup green exch get 255 div exch blue exch get 255 div} ] setcolorspace } bind def } ifelse /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 fmConcatProcs settransfer } bind def /BITMAPCOLOR { /depth 8 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /bitmapsave save def fMLevel1 { colorsetup /is width depth wbytes string def /cf currentfile def width height depth [width 0 0 height neg 0 height] {cf is readhexstring pop} {is} {is} true 3 colorimage } { colorSetup2 /is width depth wbytes string def /cf currentfile def 7 dict dup begin /ImageType 1 def /Width width def /Height height def /ImageMatrix [width 0 0 height neg 0 height] def /DataSource {cf is readhexstring pop} bind def /BitsPerComponent depth def /Decode [0 255] def end image } ifelse bitmapsave restore grestore } bind def /BITMAPCOLORc { /depth 8 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /lb width depth wbytes def sl lb lt {lb ms} if /bitmapsave save def fMLevel1 { colorsetup /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def width height depth [width 0 0 height neg 0 height] {ip} {is} {is} true 3 colorimage } { colorSetup2 /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def 7 dict dup begin /ImageType 1 def /Width width def /Height height def /ImageMatrix [width 0 0 height neg 0 height] def /DataSource {ip} bind def /BitsPerComponent depth def /Decode [0 255] def end image } ifelse bitmapsave restore grestore } bind def /BITMAPTRUECOLORc { /depth 24 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /lb width depth wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /ris im 0 width getinterval def /gis im width width getinterval def /bis im width 2 mul width getinterval def ws 0 lb getinterval is copy pop /cf currentfile def width height 8 [width 0 0 height neg 0 height] {width rip pop ris} {gis} {bis} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPCMYKc { /depth 32 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /lb width depth wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /cis im 0 width getinterval def /mis im width width getinterval def /yis im width 2 mul width getinterval def /kis im width 3 mul width getinterval def ws 0 lb getinterval is copy pop /cf currentfile def width height 8 [width 0 0 height neg 0 height] {width rip4 pop cis} {mis} {yis} {kis} true 4 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLOR { gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /bitmapsave save def /is width string def /gis width string def /bis width string def /cf currentfile def width height 8 [width 0 0 height neg 0 height] { cf is readhexstring pop } { cf gis readhexstring pop } { cf bis readhexstring pop } true 3 colorimage bitmapsave restore grestore } bind def /BITMAPCMYK { gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /bitmapsave save def /is width string def /mis width string def /yis width string def /kis width string def /cf currentfile def width height 8 [width 0 0 height neg 0 height] { cf is readhexstring pop } { cf mis readhexstring pop } { cf yis readhexstring pop } { cf kis readhexstring pop } true 4 colorimage bitmapsave restore grestore } bind def /BITMAPTRUEGRAYc { /depth 24 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /lb width depth wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /ris im 0 width getinterval def /gis im width width getinterval def /bis im width 2 mul width getinterval def ws 0 lb getinterval is copy pop /cf currentfile def width height 8 [width 0 0 height neg 0 height] {width rip pop ris gis bis width gray} image bitmapsave restore grestore } bind def /BITMAPCMYKGRAYc { /depth 32 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /lb width depth wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /cis im 0 width getinterval def /mis im width width getinterval def /yis im width 2 mul width getinterval def /kis im width 3 mul width getinterval def ws 0 lb getinterval is copy pop /cf currentfile def width height 8 [width 0 0 height neg 0 height] {width rip pop cis mis yis kis width cgray} image bitmapsave restore grestore } bind def /cgray { /ww exch def /k exch def /y exch def /m exch def /c exch def 0 1 ww 1 sub { /i exch def c i get m i get y i get k i get CMYKtoRGB .144 mul 3 1 roll .587 mul 3 1 roll .299 mul add add c i 3 -1 roll floor cvi put } for c } bind def /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 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /bitmapsave save def /is width string def /gis width string def /bis width string def /cf currentfile def width height 8 [width 0 0 height neg 0 height] { cf is readhexstring pop cf gis readhexstring pop cf bis readhexstring pop width gray} image bitmapsave restore grestore } bind def /BITMAPCMYKGRAY { gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /bitmapsave save def /is width string def /yis width string def /mis width string def /kis width string def /cf currentfile def width height 8 [width 0 0 height neg 0 height] { cf is readhexstring pop cf mis readhexstring pop cf yis readhexstring pop cf kis readhexstring pop width cgray} image bitmapsave restore grestore } bind def /BITMAPGRAY { 8 {fakecolorsetup} COMMONBITMAP } bind def /BITMAPGRAYc { 8 {fakecolorsetup} COMMONBITMAPc } bind def /ENDBITMAP { } bind def end /ALDmatrix matrix def ALDmatrix currentmatrix pop /StartALD { /ALDsave save def savematrix ALDmatrix setmatrix } bind def /InALD { restorematrix } bind def /DoneALD { ALDsave restore } bind def /I { setdash } bind def /J { [] 0 setdash } bind def %%EndProlog %%BeginSetup (5.0) FMVERSION 1 1 0 0 612 792 0 1 15 FMDOCUMENT 0 0 /Times-Roman FMFONTDEFINE 1 0 /Times-Bold FMFONTDEFINE 2 0 /Courier FMFONTDEFINE 3 1 /Symbol FMFONTDEFINE 4 0 /Courier-Bold 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 [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] [ 0 0 0 0.3 0.7 0.7 0.7] [ 0 0 0 0.1 0.9 0.9 0.9] 9 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K J 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 105.86 93.29 537.86 93.29 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (UNIX is re) 106.57 79.05 T (gistered trademark in the United States and other countries, e) 141.99 79.05 T (xclusi) 337.39 79.05 T (v) 356.31 79.05 T (ely licensed through X/Open Compan) 360.19 79.05 T (y) 481.39 79.05 T (, Ltd.) 484.87 79.05 T (Sun, Sun Microsystems, the Sun Logo, Ja) 106.57 69.05 T (v) 239.97 69.05 T (a, Ja) 243.77 69.05 T (v) 257.83 69.05 T (aBeans and Ja) 261.63 69.05 T (v) 306.79 69.05 T (aScript are trademarks or re) 310.59 69.05 T (gistered trademarks of Sun Microsystems,) 399.32 69.05 T (Inc. in the United States and other countries) 106.57 59.05 T 0 24 Q (Tcl and Ja) 208.42 704 T (v) 306.58 704 T (a Inte) 317.98 704 T (gration) 371.59 704 T 1 12 Q (Ray J) 290.92 664 T (ohnson) 320.4 664 T 0 F (Sun Microsystems Laboratories) 247.67 632 T (901 San Antonio, MS UMTV) 234.1 616 T (-29-232) 375.91 616 T (P) 259.42 600 T (alo Alto, CA 94303-4900) 265.91 600 T 2 F (rjohnson@eng.sun.com) 252 584 T 0 F (February 3, 1998) 282.84 552 T 1 F (Abstract) 301.67 526 T 0 10 Q (This paper describes the moti) 144 513.33 T (v) 261.51 513.33 T (ations and strate) 266.26 513.33 T (gies behind our group\325) 331.1 513.33 T (s ef) 421.37 513.33 T (forts to inte) 435.28 513.33 T (grate) 481.24 513.33 T (the Tcl and Ja) 144 501.33 T (v) 199.62 501.33 T (a programming languages. From the Ja) 204.37 501.33 T (v) 360.26 501.33 T (a perspecti) 365.01 501.33 T (v) 407.8 501.33 T (e, we wish to create a) 412.65 501.33 T (po) 144 489.33 T (werful scripting solution for Ja) 153.75 489.33 T (v) 276.87 489.33 T (a applications and operating en) 281.62 489.33 T (vironments. From the) 405.64 489.33 T (Tcl perspecti) 144 477.33 T (v) 195.68 477.33 T (e, we w) 200.53 477.33 T (ant to allo) 231.25 477.33 T (w for cross-platform Tcl e) 271 477.33 T (xtensions and le) 375.82 477.33 T (v) 440.01 477.33 T (erage the use-) 444.86 477.33 T (ful features and user community Ja) 144 465.33 T (v) 284.05 465.33 T (a has to of) 288.8 465.33 T (fer) 329.93 465.33 T (. W) 340.48 465.33 T (e are speci\336cally focusing on Ja) 354.12 465.33 T (v) 481.39 465.33 T (a) 486.14 465.33 T (tasks lik) 144 453.33 T (e Ja) 176.96 453.33 T (v) 192.03 453.33 T (a Bean manipulation, where a scripting solution is preferable to using) 196.78 453.33 T -0.03 (straight Ja) 144 441.33 P -0.03 (v) 184.6 441.33 P -0.03 (a code. Our goal is to create a syner) 189.35 441.33 P -0.03 (gy between Tcl and Ja) 331.95 441.33 P -0.03 (v) 421.06 441.33 P -0.03 (a, similar to that of) 425.81 441.33 P -0.29 (V) 144 429.33 P -0.29 (isual Basic and V) 150.62 429.33 P -0.29 (isual C++ on the Microsoft desktop, which mak) 219.41 429.33 P -0.29 (es both languages more) 408.52 429.33 P (po) 144 417.33 T (werful together than the) 153.75 417.33 T (y are indi) 249.41 417.33 T (vidually) 286.93 417.33 T (.) 319.06 417.33 T 1 16 Q (1 Intr) 108 351.33 T (oduction) 155.26 351.33 T 0 12 Q (In the simplest of terms, the goal of our project is to mak) 108 324 T (e Tcl the scripting language for) 380.86 324 T (the Ja) 108 310 T (v) 135.42 310 T (a) 141.12 310 T 3 F (\324) 146.45 310 T 0 F ( platform. W) 157.13 310 T (e en) 217.82 310 T (vision a dual language architecture where Tcl and Ja) 237 310 T (v) 488.69 310 T (a w) 494.39 310 T (ork) 511.26 310 T (together in a seamless w) 108 296 T (ay) 225.19 296 T (. Tcl and Ja) 235.74 296 T (v) 290.82 296 T (a are v) 296.52 296 T (ery well suited for this inte) 328.32 296 T (gration. In f) 457.13 296 T (act,) 514 296 T (both languages share man) 108 282 T (y of the same design goals such as platform independence and) 232.13 282 T -0.18 (the ability to run untrusted code. This white paper points out man) 108 268 P -0.18 (y of the reasons wh) 419.83 268 P -0.18 (y Tcl) 512.36 268 P (and Ja) 108 254 T (v) 138.08 254 T (a inte) 143.78 254 T (gration will mak) 169.93 254 T (e both languages more po) 249.14 254 T (werful.) 372.16 254 T -0.3 (Despite the languages shared philosophies, it is important to note that these tw) 108 228 P -0.3 (o languages) 480.61 228 P (ha) 108 214 T (v) 119.09 214 T (e historically had v) 124.91 214 T (ery dif) 216.38 214 T (ferent uses. The Tcl[1] scripting language is a classic script-) 247.74 214 T (ing language, ideal for embedding into other applications. Tcl started out in the UNIX) 108 200 T 3 F (\322) 520.94 200 T 0 F (w) 108 186 T (orld as a w) 116.54 186 T (ay to easily create tools with a command line interf) 168.74 186 T (ace. Tcl w) 414.25 186 T (as \336rst intro-) 463.78 186 T (duced in 1990 by its creator) 108 172 T (, John Ousterhout, a professor at U.C. Berk) 241.16 172 T (ele) 448.68 172 T (y) 462.49 172 T (. In 1994, the) 467.71 172 T (Tcl project mo) 108 158 T (v) 178.48 158 T (ed from Berk) 184.3 158 T (ele) 248.16 158 T (y to Sun Microsystems Laboratories where ports to the) 261.97 158 T (Macintosh and W) 108 144 T (indo) 192.84 144 T (ws platforms were started. The goal w) 213.88 144 T (as to mak) 397.38 144 T (e Tcl a cross-plat-) 443.26 144 T (form scripting language. T) 108 130 T (oday) 235.02 130 T (, with some 500,000 users, Tcl is one of the most popular) 257.57 130 T (cross-platform scripting languages.) 108 116 T FMENDPAGE %%EndPage: "1" 1 %%Page: "2" 2 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] [ 0 0 0 0.3 0.7 0.7 0.7] [ 0 0 0 0.1 0.9 0.9 0.9] 9 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (February 3, 1998) 108 42.62 T (Tcl and Ja) 285.47 42.62 T (v) 318.19 42.62 T (a Inte) 321.99 42.62 T (gration) 339.86 42.62 T (2) 536 42.62 T 0 12 Q (Ja) 108 712 T (v) 117.76 712 T (a[2], on the other hand, is a ne) 123.46 712 T (w twist on the classic 3rd generation programming lan-) 268.79 712 T -0.19 (guage \0503GL\051. While the Tcl project w) 108 698 P -0.19 (as just getting underw) 288.35 698 P -0.19 (ay) 393.32 698 P -0.19 (, Ja) 403.87 698 P -0.19 (v) 419.43 698 P -0.19 (a, created at Sun Micro-) 425.13 698 P (systems by James Gosling, started to mak) 108 684 T (e its incredible introduction. Ja) 308.21 684 T (v) 456.29 684 T (a soon became) 461.99 684 T (the biggest entry of a ne) 108 670 T (w programming language the industry has e) 223.34 670 T (v) 433.68 670 T (er seen. It w) 439.5 670 T (asn\325) 498.02 670 T (t) 517.8 670 T (long before people were questioning the role of Tcl with respect to Ja) 108 656 T (v) 441.02 656 T (a. This question) 446.72 656 T (w) 108 642 T (as dif) 116.54 642 T (\336cult to answer at \336rst \050we had to learn Ja) 142.57 642 T (v) 343.3 642 T (a to really answer the question\051. Ho) 349 642 T (w-) 519.66 642 T (e) 108 628 T (v) 113.03 628 T (er) 118.85 628 T (, it w) 127.69 628 T (as ob) 151.91 628 T (vious that the languages were nothing alik) 176.72 628 T (e. Tcl w) 379.25 628 T (as geared for small) 418.12 628 T (scripts, rapid application de) 108 614 T (v) 240.35 614 T (elopment \050RAD\051, and dynamic en) 246.17 614 T (vironments. Ja) 408.66 614 T (v) 478.42 614 T (a w) 484.12 614 T (as) 500.99 614 T (geared for programming lar) 108 600 T (ger more comple) 240.74 600 T (x applications. It is only no) 321.88 600 T (w that man) 452.24 600 T (y IS) 505.39 600 T -0.26 (de) 108 586 P -0.26 (v) 119.03 586 P -0.26 (elopers and other customers of Ja) 124.85 586 P -0.26 (v) 283.61 586 P -0.26 (a are seeing the need for a scripting language within) 289.31 586 P (the Ja) 108 572 T (v) 135.42 572 T (a platform. W) 141.12 572 T (e aim to pro) 207.14 572 T (vide that.) 264.62 572 T -0.22 (The goal of our project, ho) 108 546 P -0.22 (we) 235.22 546 P -0.22 (v) 248.91 546 P -0.22 (er) 254.73 546 P -0.22 (, is much more than just pro) 263.57 546 P -0.22 (viding another language alter-) 396.37 546 P (nati) 108 532 T (v) 125.7 532 T (e for the Ja) 131.52 532 T (v) 184.26 532 T (a platform. Rather) 189.96 532 T (, we aim to create a tight syner) 277.13 532 T (gy between Tcl and) 424.21 532 T -0.36 (Ja) 108 518 P -0.36 (v) 117.76 518 P -0.36 (a. The idea is to create an architecture where the de) 123.46 518 P -0.36 (v) 365.78 518 P -0.36 (eloper can use the right tool for the) 371.6 518 P (right job) 108 504 T (. The architecture is a dual-language en) 148.52 504 T (vironment that is meant to support tw) 336.98 504 T (o) 516.86 504 T (v) 108 490 T (ery dif) 113.82 490 T (ferent communities of de) 145.18 490 T (v) 265.19 490 T (elopers. Ja) 271.01 490 T (v) 321.42 490 T (a should be used for creating components,) 327.12 490 T (frame) 108 476 T (w) 135.68 476 T (orks, and other core technology that requires writing lar) 144.23 476 T (ge detailed systems. Tcl) 411.62 476 T -0.09 (should be used as glue code, a control language, or other smaller tasks that require a good) 108 462 P -0.28 (deal of dynamism or high-le) 108 448 P -0.28 (v) 242.57 448 P -0.28 (el control. But most importantly the de) 248.39 448 P -0.28 (v) 432.76 448 P -0.28 (eloper can communi-) 438.58 448 P (cate seamlessly between the tw) 108 434 T (o languages. The result is that together Ja) 257.84 434 T (v) 456.24 434 T (a and Tcl are) 461.94 434 T (more po) 108 420 T (werful than the) 147.36 420 T (y are indi) 219.83 420 T (vidually) 264.85 420 T (.) 303.41 420 T (Our current deli) 108 394 T (v) 184.34 394 T (erable technologies include four items. Jacl is a 100% Ja) 190.16 394 T (v) 461.21 394 T (a implementa-) 466.91 394 T (tion of Tcl. Tcl Blend allo) 108 380 T (ws the \050C based\051 Tcl interpreter to load and interact with the) 233.03 380 T (Ja) 108 366 T (v) 117.76 366 T (a VM and vice v) 123.46 366 T (ersa. The Ja) 203.26 366 T (v) 259.99 366 T (a P) 265.69 366 T (ackage, which is part of both Jacl and Tcl Blend, pro-) 280.51 366 T -0.14 (vides the communication between Tcl and Ja) 108 352 P -0.14 (v) 322.88 352 P -0.14 (a. Finally we are w) 328.58 352 P -0.14 (orking on a Tcl Bean for) 419.54 352 P (Ja) 108 338 T (v) 117.76 338 T (a) 123.46 338 T 3 F (\324) 128.78 338 T 0 F ( Studio) 139.46 338 T 3 F (\324) 173.81 338 T 0 F ( that adds the po) 184.49 338 T (wer of Tcl for connecting Studio beans. W) 262.85 338 T (e discuss each) 466.51 338 T -0.41 (of these projects in greater detail later in this paper) 108 324 P -0.41 (. W) 347.3 324 P -0.41 (e also suggest that you check out our) 363.27 324 P (home page[3] for the most up-to-date information about our projects.) 108 310 T (The rest of this paper is outlined in the follo) 108 284 T (wing w) 318.68 284 T (ay: Section) 354.23 284 T (2 discusses the v) 410.89 284 T (arious) 490.92 284 T (moti) 108 270 T (v) 129.71 270 T (ations behind our project from dif) 135.41 270 T (ferent perspecti) 297.42 270 T (v) 371.42 270 T (es. Section) 377.24 270 T (3 focuses on the Ja) 432.24 270 T (v) 522.65 270 T (a) 528.35 270 T (P) 108 256 T (ackage and the syner) 114.49 256 T (gy we attain by inte) 214.57 256 T (grating Ja) 309.05 256 T (v) 355.8 256 T (a and Tcl. Section) 361.5 256 T (4 discusses some) 451.15 256 T (possible applications of this technology) 108 242 T (. Our implementation strate) 297.22 242 T (gy and current plans) 429.02 242 T (are outlined in Section) 108 228 T (5. Finally) 219.32 228 T (, Section) 264.55 228 T (6 discusses related w) 309.55 228 T (ork and Section) 410.41 228 T (7 wraps) 488.74 228 T (things up.) 108 214 T 1 16 Q (2 Moti) 108 173.33 T (v) 156.72 173.33 T (ations) 164.56 173.33 T 0 12 Q (This section discusses the v) 108 146 T (arious moti) 240.36 146 T (v) 294.4 146 T (ations for inte) 300.1 146 T (grating the Tcl and Ja) 366.58 146 T (v) 470.32 146 T (a program-) 476.02 146 T (ming languages. Inte) 108 132 T (grating Tcl and Ja) 208.14 132 T (v) 294.22 132 T (a brings ne) 299.92 132 T (w po) 352.27 132 T (wer to both Tcl and Ja) 375.64 132 T (v) 482.38 132 T (a de) 488.08 132 T (v) 507.43 132 T (elop-) 513.25 132 T (ers. While describing our moti) 108 118 T (v) 254.02 118 T (ations, this section e) 259.72 118 T (xplicitly describes the moti) 356.87 118 T (v) 486.9 118 T (ations) 492.6 118 T (from the unique points of vie) 108 104 T (w of both Ja) 247.36 104 T (v) 306.11 104 T (a and Tcl programmers.) 311.81 104 T 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "2" 2 %%Page: "3" 3 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] [ 0 0 0 0.3 0.7 0.7 0.7] [ 0 0 0 0.1 0.9 0.9 0.9] 9 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (February 3, 1998) 108 42.62 T (Tcl and Ja) 285.47 42.62 T (v) 318.19 42.62 T (a Inte) 321.99 42.62 T (gration) 339.86 42.62 T (3) 536 42.62 T 1 14 Q (2.1 What Tcl pr) 108 710.67 T (o) 206.14 710.67 T (vides f) 213 710.67 T (or J) 251.15 710.67 T (a) 274.66 710.67 T (v) 281.31 710.67 T (a users.) 288.17 710.67 T 1 12 Q (A new language f) 108 684 T (or b) 196.03 684 T (uilding J) 216.79 684 T (a) 261.64 684 T (v) 267.34 684 T (a applications.) 273.22 684 T 0 F (Ja) 350.23 684 T (v) 359.99 684 T (a is best classi\336ed as a system pro-) 365.69 684 T (gramming language. It is ideal for b) 108 670 T (uilding components from scratch and has all the com-) 280.07 670 T (ple) 108 656 T (x data structures, type safety) 122.48 656 T (, and other features a de) 258.67 656 T (v) 373 656 T (eloper needs to b) 378.82 656 T (uild lar) 460.22 656 T (ge) 494.34 656 T (systems. The comple) 108 642 T (xity in components is in the representation and handling of data) 208.81 642 T (structures and algorithms. F) 108 628 T (or man) 241.81 628 T (y tasks, ho) 275.29 628 T (we) 325.99 628 T (v) 339.68 628 T (er) 345.5 628 T (, a scripting language lik) 354.35 628 T (e Tcl is a) 472.55 628 T (much better tool. Scripting languages are designed for b) 108 614 T (uilding small to medium sized) 376.72 614 T -0.41 (applications that focus on rapid de) 108 600 P -0.41 (v) 270.61 600 P -0.41 (elopment or dynamic beha) 276.43 600 P -0.41 (vior) 402.59 600 P -0.41 (. Here, the comple) 421.26 600 P -0.41 (xity is) 508.15 600 P (in the connections. Scripting languages are ideal for \322gluing\323 together e) 108 586 T (xisting compo-) 452.09 586 T (nents or applications. F) 108 572 T (or a more detailed discussion on the trade-of) 219.82 572 T (fs between systems) 433.14 572 T (programming and scripting, please see a white paper written by John Ousterhout on the) 108 558 T (subject. [4][5]) 108 544 T 1 F (Add scripting to J) 108 518 T (a) 200.16 518 T (v) 205.86 518 T (a applications.) 211.74 518 T 0 F (Tcl has an interesting attrib) 288.76 518 T (ute not found in man) 419.83 518 T (y) 519.65 518 T -0.18 (scripting languages: It is a library that is easy to embed into e) 108 504 P -0.18 (xisting Ja) 400.27 504 P -0.18 (v) 445.52 504 P -0.18 (a applications. By) 451.22 504 P (using the Tcl library) 108 490 T (, application de) 204.88 490 T (v) 278.23 490 T (elopers can add scripting capabilities to their Ja) 284.05 490 T (v) 511.44 490 T (a) 517.14 490 T (based applications. It is easy to e) 108 476 T (xtend the Tcl language to pro) 265.46 476 T (vide v) 406.26 476 T (ery high le) 435.74 476 T (v) 486.77 476 T (el, appli-) 492.59 476 T -0.22 (cation speci\336c commands that interf) 108 462 P -0.22 (ace a product\325) 281 462 P -0.22 (s speci\336c application features to the Tcl) 347.87 462 P -0.04 (language. By adding scripting capabilities to their applications, Ja) 108 448 P -0.04 (v) 423.38 448 P -0.04 (a de) 429.08 448 P -0.04 (v) 448.39 448 P -0.04 (elopers can add a) 454.21 448 P (great deal of po) 108 434 T (wer) 182.68 434 T (, \337e) 200.18 434 T (xibility and end user customization to their Ja) 218 434 T (v) 436.75 434 T (a applications. In) 442.45 434 T -0.51 (addition, ha) 108 420 P -0.51 (ving scripting capabilities a) 163.91 420 P -0.51 (v) 294.47 420 P -0.51 (ailable across a suite of Ja) 300.17 420 P -0.51 (v) 422.36 420 P -0.51 (a applications pro) 428.05 420 P -0.51 (vides) 512.18 420 P (a w) 108 406 T (ay to tie those applications together) 124.87 406 T (, much lik) 294.71 406 T (e V) 342.92 406 T (isual Basic for Applications \050VB) 359.2 406 T (A\051) 516.1 406 T (does for Microsoft Of) 108 392 T (\336ce. Figure) 212.68 392 T (1 sho) 270.34 392 T (ws ho) 295.7 392 T (w end users could e) 323.74 392 T (v) 418.08 392 T (en create ne) 423.9 392 T (w custom) 480.9 392 T -0.16 (applications by using Tcl to access the functionality of scriptable Ja) 108 378 P -0.16 (v) 430.79 378 P -0.16 (a applications. Using) 436.49 378 P (the Tcl library) 108 364 T (, Ja) 175.87 364 T (v) 191.63 364 T (a de) 197.33 364 T (v) 216.68 364 T (elopers can add scripting capabilities with the least amount of) 222.5 364 T (ef) 108 350 T (fort.) 117.02 350 T 1 F (A better interface to J) 108 184.06 T (a) 220.44 184.06 T (v) 226.14 184.06 T (aBeans) 232.02 184.06 T 3 F (\324) 268.69 184.06 T 1 F ( components.) 279.37 184.06 T 0 F (The bene\336ts described abo) 349.7 184.06 T (v) 477.83 184.06 T (e are the) 483.65 184.06 T (same as the bene\336ts a C programmer enjo) 108 170.06 T (ys by using Tcl. W) 308.84 170.06 T (e are, ho) 398.88 170.06 T (we) 439.56 170.06 T (v) 453.25 170.06 T (er) 459.07 170.06 T (, w) 467.92 170.06 T (orking on) 482.46 170.06 T -0.17 (se) 108 156.06 P -0.17 (v) 117.7 156.06 P -0.17 (eral features that are Ja) 123.52 156.06 P -0.17 (v) 233.21 156.06 P -0.17 (a speci\336c and, in f) 238.91 156.06 P -0.17 (act, are only possible because of the speci\336c) 325.75 156.06 P (features of the Ja) 108 142.06 T (v) 189.4 142.06 T (a en) 195.1 142.06 T (vironment. W) 214.27 142.06 T (e ha) 279.97 142.06 T (v) 299.39 142.06 T (e created ne) 305.21 142.06 T (w interf) 362.21 142.06 T (aces to script the po) 399.74 142.06 T (werful) 494.76 142.06 T (Ja) 108 128.06 T (v) 117.76 128.06 T (aBeans component mechanism. Tcl has al) 123.46 128.06 T (w) 324.64 128.06 T (ays been a great language for gluing sys-) 333.18 128.06 T (tems together) 108 114.06 T (. W) 172.33 114.06 T (e e) 188.7 114.06 T (xpect that de\336ning the connections between components will be 5-10) 202.18 114.06 T (times f) 108 100.06 T (aster with our Tcl interf) 140.88 100.06 T (aces than writing the connections in Ja) 254.74 100.06 T (v) 439.8 100.06 T (a. There are a v) 445.5 100.06 T (ari-) 519.49 100.06 T (ety of reasons for this that the paper discusses in fuller detail in Section) 108 86.06 T (3. An) 453.29 86.06 T (y de) 479.77 86.06 T (v) 499.8 86.06 T (elop-) 505.62 86.06 T 0 0 0 1 0 0 0 K 108 250.8 540 346 C 0 0 0 1 0 0 0 K 160.71 257.57 217.86 300.43 R 1 H 0 Z 0 X 0 0 0 1 0 0 0 K N 160.71 301.14 189.29 319.71 R N 189.43 301 218 319.57 R N 1 10 Q (GUI) 165 307.57 T (Tcl) 194.29 307.57 T (J) 179.29 289.71 T (a) 184.14 289.71 T (v) 188.89 289.71 T (a) 193.79 289.71 T (A) 163.57 276.85 T (pplication) 170.54 276.85 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 242.64 257.57 299.79 300.43 R N 242.64 301.14 271.22 319.71 R N 271.36 301 299.93 319.57 R N (GUI) 246.93 307.57 T (Tcl) 276.21 307.57 T (J) 261.21 289.71 T (a) 266.07 289.71 T (v) 270.82 289.71 T (a) 275.71 289.71 T (A) 245.5 276.85 T (pplication) 252.47 276.85 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Database) 166.43 264 T 324.57 257.57 381.72 300.43 R N 324.57 301.14 353.14 319.71 R N 353.29 301 381.86 319.57 R N (GUI) 328.86 307.57 T (Tcl) 358.14 307.57 T (J) 343.14 289.71 T (a) 347.99 289.71 T (v) 352.74 289.71 T (a) 357.64 289.71 T (A) 327.43 276.85 T (pplication) 334.4 276.85 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Spr) 244.29 264 T (eadsheet) 259.67 264 T (Chart T) 327.86 262.57 T (ool) 361.66 262.57 T (End-User) 431.43 306.14 T (A) 431.43 296.14 T (pplication) 438.4 296.14 T 428.57 289 485 322.57 R N 428.57 322.57 458.57 336.86 R N (Tcl) 436.43 325.43 T 458.57 322.57 485 336.86 R N (GUI) 461.43 325.43 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 417.54 334 417.54 336.64 426.76 334 417.54 331.35 4 Y N 417.54 334 417.54 336.64 426.76 334 417.54 331.35 4 Y V 417.04 334 211.43 334 2 L N 373.75 326.44 375.36 324.35 366.44 320.82 372.14 328.54 4 Y N 373.75 326.44 375.36 324.35 366.44 320.82 372.14 328.54 4 Y V 383.57 334 374.14 326.74 2 L N 288.98 326.13 290.52 323.98 281.48 320.77 287.44 328.28 4 Y N 288.98 326.13 290.52 323.98 281.48 320.77 287.44 328.28 4 Y V 300 334 289.39 326.42 2 L N 202.87 326.65 204.53 324.59 195.7 320.85 201.21 328.7 4 Y N 202.87 326.65 204.53 324.59 195.7 320.85 201.21 328.7 4 Y V 212.86 334.71 203.26 326.96 2 L N 0 0 0 1 0 0 0 K 0 0 612 792 C 108 206.06 540 250.8 C 0 0 0 1 0 0 0 K 0 9 Q 0 X 0 0 0 1 0 0 0 K -0.26 (Figure 1. Tcl can be used to gi) 162 237.23 P -0.26 (v) 273.42 237.23 P -0.26 (e a suite of Ja) 277.79 237.23 P -0.26 (v) 325.56 237.23 P -0.26 (a applications a common interf) 329.83 237.23 P -0.26 (ace for e) 440.18 237.23 P -0.26 (xtending) 470.51 237.23 P (the applications and for end-user customization. This notion is similar to ho) 162 227.23 T (w Microsoft) 434.26 227.23 T (e) 162 217.23 T (xtends it\325) 165.86 217.23 T (s Of) 199.12 217.23 T (\336ce application suite with VB) 214.14 217.23 T (A.) 321.32 217.23 T 0 0 0 1 0 0 0 K 0 0 612 792 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "3" 3 %%Page: "4" 4 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] [ 0 0 0 0.3 0.7 0.7 0.7] [ 0 0 0 0.1 0.9 0.9 0.9] 9 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (February 3, 1998) 108 42.62 T (Tcl and Ja) 285.47 42.62 T (v) 318.19 42.62 T (a Inte) 321.99 42.62 T (gration) 339.86 42.62 T (4) 536 42.62 T 0 12 Q -0.2 (ment or) 108 712 P -0.2 (g) 144.58 712 P -0.2 (anization interested in doing w) 150.52 712 P -0.2 (ork with Ja) 297.58 712 P -0.2 (v) 350.26 712 P -0.2 (aBeans will certainly w) 355.96 712 P -0.2 (ant to e) 468.22 712 P -0.2 (v) 502.85 712 P -0.2 (aluate) 508.55 712 P (Tcl as a tool for gluing them together) 108 698 T (.) 286.32 698 T 1 F (A tool f) 108 672 T (or pr) 145.69 672 T (ototyping and testing) 171.8 672 T (.) 279.64 672 T 0 F (In addition to our Beans interf) 285.64 672 T (aces, we ha) 430.5 672 T (v) 485.23 672 T (e also) 491.05 672 T (de) 108 658 T (v) 119.03 658 T (eloped a general interf) 124.85 658 T (ace to the Ja) 232.36 658 T (v) 291.1 658 T (a Re\337ection API\325) 296.8 658 T (s that mak) 380.12 658 T (es Tcl ideal for proto-) 429.34 658 T (typing and testing Ja) 108 644 T (v) 206.76 644 T (a applications. Our interf) 212.46 644 T (ace allo) 332.32 644 T (ws Tcl code to dynamically create) 369 644 T -0.03 (and destro) 108 630 P -0.03 (y objects in the Ja) 157.5 630 P -0.03 (v) 243.13 630 P -0.03 (a VM. Tcl can also set the \336elds for and call the methods on) 248.83 630 P -0.26 (an) 108 616 P -0.26 (y Ja) 119.15 616 P -0.26 (v) 137.65 616 P -0.26 (a object. This gi) 143.35 616 P -0.26 (v) 219.6 616 P -0.26 (es incredible po) 225.42 616 P -0.26 (wer for interf) 300.58 616 P -0.26 (acing Tcl code to the rest of the Ja) 363.92 616 P -0.26 (v) 526.23 616 P -0.26 (a) 531.93 616 P (en) 108 602 T (vironment. Among other things, a Ja) 118.85 602 T (v) 294.26 602 T (a de) 299.96 602 T (v) 319.32 602 T (eloper can use this feature to rapidly proto-) 325.14 602 T (type a Ja) 108 588 T (v) 149.75 588 T (a module in Tcl, change features quickly and on the \337y) 155.45 588 T (, and once the) 418.96 588 T (y ha) 485.42 588 T (v) 505.51 588 T (e) 511.33 588 T (decided upon an actual feature set, re) 108 574 T (write the code in Ja) 285.97 574 T (v) 379.04 574 T (a for maximum performance.) 384.74 574 T -0.39 (The re\337ection interf) 108 560 P -0.39 (aces are also ideal for testing Ja) 203.08 560 P -0.39 (v) 352.48 560 P -0.39 (a code. It\325) 358.18 560 P -0.39 (s easy to write Tcl code that) 405.06 560 P -0.04 (can call e) 108 546 P -0.04 (v) 152.93 546 P -0.04 (ery method in your API and test error conditions and return results. W) 158.75 546 P -0.04 (e gi) 494.28 546 P -0.04 (v) 511.6 546 P -0.04 (e an) 517.42 546 P (e) 108 532 T (xample of using Tcl for testing in Section) 113.15 532 T (4.2. F) 315.8 532 T (or no) 343.3 532 T (w) 367.99 532 T (, let\325) 375.88 532 T (s just say that depending on) 397.21 532 T (the kind of w) 108 518 T (ork Ja) 171.54 518 T (v) 200.29 518 T (a de) 205.99 518 T (v) 225.35 518 T (elopers need to do, Tcl can be a vital tool for accelerating the) 231.17 518 T (de) 108 504 T (v) 119.03 504 T (elopment process.) 124.85 504 T 1 F (A bridge f) 108 478 T (or porting legacy code.) 159.7 478 T 0 F ( Tcl has al) 276.35 478 T (w) 325.88 478 T (ays been good at gluing together v) 334.43 478 T (arious) 499.44 478 T (systems into an inte) 108 464 T (grated whole. Tcl features and e) 202.82 464 T (xtensions lik) 356.59 464 T (e e) 417.48 464 T (x) 430.96 464 T (ec, e) 436.78 464 T (xpect[12], and) 458.58 464 T (TkSteal, are ideal for wrapping le) 108 450 T (g) 269.11 450 T (ac) 275.05 450 T (y systems into ne) 285.53 450 T (w systems. Tcl Blend allo) 368.23 450 T (ws this) 492.26 450 T (same po) 108 436 T (wer for inte) 147.36 436 T (grating C based code into the Ja) 203.16 436 T (v) 356.23 436 T (a platform. W) 361.93 436 T (ith Tcl Blend de) 428.44 436 T (v) 505.8 436 T (elop-) 511.62 436 T -0.4 (ers use the Tcl scripting language to glue together le) 108 422 P -0.4 (g) 355.22 422 P -0.4 (ac) 361.16 422 P -0.4 (y code with ne) 371.64 422 P -0.4 (w Ja) 440.47 422 P -0.4 (v) 461.49 422 P -0.4 (a systems. The) 467.19 422 P (illustration in Figure) 108 408 T (2 sho) 209.68 408 T (ws ho) 235.04 408 T (w Tcl Blend gi) 263.08 408 T (v) 334.44 408 T (es de) 340.26 408 T (v) 364.28 408 T (elopers a clear path for porting C) 370.1 408 T -0.17 (code to become 100% Ja) 108 394 P -0.17 (v) 226.36 394 P -0.17 (a in an incremental w) 232.06 394 P -0.17 (ay) 334.55 394 P -0.17 (. Ov) 345.1 394 P -0.17 (er time, the de) 365.41 394 P -0.17 (v) 433.24 394 P -0.17 (eloper can incremen-) 439.06 394 P -0.31 (tally port their le) 108 380 P -0.31 (g) 187.21 380 P -0.31 (ac) 193.15 380 P -0.31 (y applications to Ja) 203.63 380 P -0.31 (v) 294.78 380 P -0.31 (a. When all of your C based code is \336nally mo) 300.48 380 P -0.31 (v) 520.16 380 P -0.31 (ed) 525.98 380 P (to Ja) 108 366 T (v) 130.09 366 T (a, the de) 135.79 366 T (v) 175.81 366 T (eloper can switch from the C based Tcl to using Jacl. The end product is a) 181.63 366 T (completely Ja) 108 352 T (v) 174.08 352 T (a based solution.) 179.78 352 T 1 14 Q (2.2 What J) 108 154.73 T (a) 176.24 154.73 T (v) 182.89 154.73 T (a pr) 189.75 154.73 T (o) 213.99 154.73 T (vides f) 220.85 154.73 T (or Tcl users.) 259 154.73 T 1 12 Q -0.46 (Cr) 108 128.06 P -0.46 (oss-platf) 121.78 128.06 P -0.46 (orm extensions.) 164.81 128.06 P 0 F -0.46 (Tcl w) 246.88 128.06 P -0.46 (as originally designed as a library for quickly creating a) 273.97 128.06 P (ne) 108 114.06 T (w scripting language for a gi) 119.03 114.06 T (v) 256.37 114.06 T (en tool. As such Tcl has al) 262.19 114.06 T (w) 389.05 114.06 T (ays been a tw) 397.6 114.06 T (o language sys-) 462.46 114.06 T (tem. The basic Tcl library contains a standard interpreter) 108 100.06 T (, control structures, etc. In addi-) 379.79 100.06 T (tion, the language w) 108 86.06 T (as designed to be e) 205.2 86.06 T (xtended with interesting functionality via C or) 295.67 86.06 T (C++. As the language has gro) 108 72.06 T (wn it has shifted to being a cross-platform scripting lan-) 250.55 72.06 T 0 0 0 1 0 0 0 K 108 228.8 540 324 C 0 0 0 1 0 0 0 K 116.37 240.77 191.94 312.77 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N 0 10 Q (Tcl Blend) 123.57 298.37 T 123.57 247.97 181.17 283.97 R 7 X V 0 X N (Ja) 133.04 257.34 T (v) 141.17 257.34 T (a Code) 145.92 257.34 T 130.77 269.57 145.17 276.77 3.6 RR 7 X V 0 X N 159.57 269.57 173.97 276.77 3.6 RR 7 X V 0 X N 206.34 291.89 220.74 299.09 3.6 RR 7 X V 0 X N 207.14 277.49 221.54 284.69 3.6 RR 7 X V 0 X N 206.34 255.89 220.74 263.09 3.6 RR 7 X V 0 X N 206.34 241.49 220.74 248.69 3.6 RR 7 X V 0 X N (C Code) 199.14 306.29 T 193.06 296.89 193.06 294.75 185.62 296.89 193.06 299.02 4 Y 0 Z N 193.06 296.89 193.06 294.75 185.62 296.89 193.06 299.02 4 Y V 197 296.89 197 299.02 204.44 296.89 197 294.75 4 Y N 197 296.89 197 299.02 204.44 296.89 197 294.75 4 Y V 193.31 296.89 196.75 296.89 2 L N 166.71 282.99 164.96 282.99 166.71 289.11 168.47 282.99 4 Y N 166.71 282.99 164.96 282.99 166.71 289.11 168.47 282.99 4 Y V 166.71 279.58 168.47 279.58 166.71 273.47 164.96 279.58 4 Y N 166.71 279.58 168.47 279.58 166.71 273.47 164.96 279.58 4 Y V 166.71 282.74 166.71 279.83 2 L N 197.86 235.86 230 316.57 R N 269.37 237.77 350.66 309.77 R 7 X V 2 Z 0 X N (Tcl Blend) 276.57 295.37 T 276.57 244.97 347.74 280.97 R 7 X V 0 X N (Ja) 286.04 254.34 T (v) 294.17 254.34 T (a Code) 298.92 254.34 T 283.77 266.57 298.17 273.77 3.6 RR 7 X V 0 X N 304 265.86 318.4 273.06 3.6 RR 7 X V 0 X N 366.49 285.32 380.89 292.52 3.6 RR 7 X V 0 X N 367.29 270.91 381.69 278.11 3.6 RR 7 X V 0 X N 330.77 252.89 345.17 260.09 3.6 RR 7 X V 0 X N 328.63 266.34 343.03 273.54 3.6 RR 7 X V 0 X N (C Code) 359.29 299.71 T 358 266.43 393 310 R N 433.8 235.49 530.8 307.49 R 7 X V 0 X N (Jacl) 441 293.09 T 441 242.69 526.46 278.69 R 7 X V 0 X N (Ja) 444.76 249.91 T (v) 452.89 249.91 T (a Code) 457.64 249.91 T 448.2 264.29 462.6 271.49 3.6 RR 7 X V 0 X N 468.43 263.57 482.83 270.77 3.6 RR 7 X V 0 X N 510.2 265.17 524.6 272.37 3.6 RR 7 X V 0 X N 508.86 248.63 523.26 255.83 3.6 RR 7 X V 0 X N 490.2 248.46 504.6 255.66 3.6 RR 7 X V 0 X N 493.06 264.06 507.46 271.26 3.6 RR 7 X V 0 X N 454.69 276.71 452.93 276.71 454.69 282.82 456.44 276.71 4 Y 0 Z N 454.69 276.71 452.93 276.71 454.69 282.82 456.44 276.71 4 Y V 454.69 273.3 456.44 273.3 454.69 267.18 452.93 273.3 4 Y N 454.69 273.3 456.44 273.3 454.69 267.18 452.93 273.3 4 Y V 454.69 276.46 454.69 273.55 2 L N 475.57 276.71 473.82 276.71 475.57 282.82 477.33 276.71 4 Y N 475.57 276.71 473.82 276.71 475.57 282.82 477.33 276.71 4 Y V 475.57 273.3 477.33 273.3 475.57 267.18 473.82 273.3 4 Y N 475.57 273.3 477.33 273.3 475.57 267.18 473.82 273.3 4 Y V 475.57 276.46 475.57 273.55 2 L N 498.57 276.71 496.82 276.71 498.57 282.82 500.33 276.71 4 Y N 498.57 276.71 496.82 276.71 498.57 282.82 500.33 276.71 4 Y V 498.57 273.3 500.33 273.3 498.57 267.18 496.82 273.3 4 Y N 498.57 273.3 500.33 273.3 498.57 267.18 496.82 273.3 4 Y V 498.57 276.46 498.57 273.55 2 L N 515.86 276.71 514.1 276.71 515.86 282.82 517.61 276.71 4 Y N 515.86 276.71 514.1 276.71 515.86 282.82 517.61 276.71 4 Y V 515.86 273.3 517.61 273.3 515.86 267.18 514.1 273.3 4 Y N 515.86 273.3 517.61 273.3 515.86 267.18 514.1 273.3 4 Y V 515.86 276.46 515.86 273.55 2 L N 90 450 1.5 1.5 247.67 275.14 G 249.17 275.14 249.17 278.94 262.42 275.14 249.17 271.34 4 Y 3 H N 249.17 275.14 249.17 278.94 262.42 275.14 249.17 271.34 4 Y V 236.43 275.14 247.67 275.14 2 L 2 Z N 90 450 1.5 1.5 410.67 275.14 G 412.17 275.14 412.17 278.94 425.42 275.14 412.17 271.34 4 Y 0 Z N 412.17 275.14 412.17 278.94 425.42 275.14 412.17 271.34 4 Y V 399.43 275.14 410.67 275.14 2 L 2 Z N 193.06 281.74 193.06 279.61 185.62 281.74 193.06 283.88 4 Y 0.5 H 0 Z N 193.06 281.74 193.06 279.61 185.62 281.74 193.06 283.88 4 Y V 197 281.74 197 283.88 204.44 281.74 197 279.61 4 Y N 197 281.74 197 283.88 204.44 281.74 197 279.61 4 Y V 193.31 281.74 196.75 281.74 2 L N 193.06 259.46 193.06 257.33 185.62 259.46 193.06 261.59 4 Y N 193.06 259.46 193.06 257.33 185.62 259.46 193.06 261.59 4 Y V 197 259.46 197 261.59 204.44 259.46 197 257.33 4 Y N 197 259.46 197 261.59 204.44 259.46 197 257.33 4 Y V 193.31 259.46 196.75 259.46 2 L N 193.06 245.74 193.06 243.61 185.62 245.74 193.06 247.88 4 Y N 193.06 245.74 193.06 243.61 185.62 245.74 193.06 247.88 4 Y V 197 245.74 197 247.88 204.44 245.74 197 243.61 4 Y N 197 245.74 197 247.88 204.44 245.74 197 243.61 4 Y V 193.31 245.74 196.75 245.74 2 L N 138.29 282.85 136.53 282.85 138.29 288.97 140.04 282.85 4 Y N 138.29 282.85 136.53 282.85 138.29 288.97 140.04 282.85 4 Y V 138.29 279.44 140.04 279.44 138.29 273.32 136.53 279.44 4 Y N 138.29 279.44 140.04 279.44 138.29 273.32 136.53 279.44 4 Y V 138.29 282.6 138.29 279.69 2 L N 291.71 279.99 289.96 279.99 291.71 286.11 293.47 279.99 4 Y N 291.71 279.99 289.96 279.99 291.71 286.11 293.47 279.99 4 Y V 291.71 276.58 293.47 276.58 291.71 270.47 289.96 276.58 4 Y N 291.71 276.58 293.47 276.58 291.71 270.47 289.96 276.58 4 Y V 291.71 279.74 291.71 276.83 2 L N 311.14 279.99 309.39 279.99 311.14 286.11 312.9 279.99 4 Y N 311.14 279.99 309.39 279.99 311.14 286.11 312.9 279.99 4 Y V 311.14 276.58 312.9 276.58 311.14 270.47 309.39 276.58 4 Y N 311.14 276.58 312.9 276.58 311.14 270.47 309.39 276.58 4 Y V 311.14 279.74 311.14 276.83 2 L N 336.29 279.99 334.53 279.99 336.29 286.11 338.04 279.99 4 Y N 336.29 279.99 334.53 279.99 336.29 286.11 338.04 279.99 4 Y V 336.29 276.58 338.04 276.58 336.29 270.47 334.53 276.58 4 Y N 336.29 276.58 338.04 276.58 336.29 270.47 334.53 276.58 4 Y V 336.29 279.74 336.29 276.83 2 L N 354.01 290.29 354.01 288.53 347.89 290.29 354.01 292.04 4 Y N 354.01 290.29 354.01 288.53 347.89 290.29 354.01 292.04 4 Y V 357.42 290.29 357.42 292.04 363.54 290.29 357.42 288.53 4 Y N 357.42 290.29 357.42 292.04 363.54 290.29 357.42 288.53 4 Y V 354.26 290.29 357.17 290.29 2 L N 354.01 274.43 354.01 272.68 347.89 274.43 354.01 276.18 4 Y N 354.01 274.43 354.01 272.68 347.89 274.43 354.01 276.18 4 Y V 357.42 274.43 357.42 276.18 363.54 274.43 357.42 272.68 4 Y N 357.42 274.43 357.42 276.18 363.54 274.43 357.42 272.68 4 Y V 354.26 274.43 357.17 274.43 2 L N 0 0 0 1 0 0 0 K 0 0 612 792 C 108 184.06 540 228.8 C 0 0 0 1 0 0 0 K 0 9 Q 0 X 0 0 0 1 0 0 0 K (Figure 2. This \336gure sho) 162 215.23 T (ws the incremental transition to Ja) 255.02 215.23 T (v) 378.08 215.23 T (a by using Tcl Blend to inte) 382.36 215.23 T (grate) 482.22 215.23 T (ne) 162 205.23 T (w Ja) 170.27 205.23 T (v) 186.34 205.23 T (a code and le) 190.61 205.23 T (g) 237.71 205.23 T (ac) 242.16 205.23 T (y code to e) 250.02 205.23 T (v) 289.04 205.23 T (entually using Jacl for a 100% Ja) 293.4 205.23 T (v) 412.2 205.23 T (a solution.) 416.48 205.23 T 0 0 0 1 0 0 0 K 0 0 612 792 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "4" 4 %%Page: "5" 5 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] [ 0 0 0 0.3 0.7 0.7 0.7] [ 0 0 0 0.1 0.9 0.9 0.9] 9 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (February 3, 1998) 108 42.62 T (Tcl and Ja) 285.47 42.62 T (v) 318.19 42.62 T (a Inte) 321.99 42.62 T (gration) 339.86 42.62 T (5) 536 42.62 T 0 12 Q (guage. Unfortunately) 108 712 T (, the e) 209.2 712 T (xtensions that people wrote were written in C and, as a result,) 238.01 712 T (were not portable. Ja) 108 698 T (v) 207.73 698 T (a pro) 213.43 698 T (vides us with a w) 237.58 698 T (ay to e) 320.78 698 T (xtend the Tcl interpreter in a language) 352.6 698 T -0.01 (that is cross-platform. By using Ja) 108 684 P -0.01 (v) 271.68 684 P -0.01 (a, users can write e) 277.38 684 P -0.01 (xtensions that are cross-platform, a) 368.77 684 P (feature long desired by Tcl users.) 108 670 T 1 F -0.02 (Tcl runs on mor) 108 644 P -0.02 (e platf) 190.73 644 P -0.02 (orms.) 222.74 644 P 0 F -0.02 (The portability of Tcl has al) 254.71 644 P -0.02 (w) 388.81 644 P -0.02 (ays been a strong dra) 397.35 644 P -0.02 (w to the) 498.39 644 P (language. Tcl already runs on Macintosh 68k & Po) 108 630 T (werPC, W) 352.67 630 T (indo) 402.18 630 T (ws 95 & W) 423.22 630 T (indo) 477.73 630 T (ws NT) 498.77 630 T (,) 530.21 630 T (and all \337a) 108 616 T (v) 155.09 616 T (ors of UNIX. Ho) 160.85 616 T (we) 241.86 616 T (v) 255.55 616 T (er) 261.37 616 T (, by implementing Tcl in the Ja) 270.22 616 T (v) 419.64 616 T (a programming lan-) 425.34 616 T (guage, we allo) 108 602 T (w Tcl users to run Tcl code on the Ja) 177.35 602 T (v) 354.07 602 T (a Station and in web bro) 359.77 602 T (wsers. Fur-) 476.46 602 T (thermore, Tcl will run on an) 108 588 T (y ne) 243.13 588 T (w platform that Ja) 263.16 588 T (v) 349.91 588 T (a is ported, sparing the Tcl de) 355.61 588 T (v) 497.62 588 T (eloper) 503.44 588 T -0.24 (the trouble of porting. This is of particular v) 108 574 P -0.24 (alue considering the amount of w) 317.41 574 P -0.24 (ork going on) 476.39 574 P (with respect to Ja) 108 560 T (v) 191.41 560 T (a en) 197.11 560 T (vironments.) 216.29 560 T 1 F (Tcl can tak) 108 534 T (e adv) 165.22 534 T (antage of J) 192.1 534 T (a) 247.91 534 T (v) 253.61 534 T (a featur) 259.49 534 T (es.) 299.59 534 T 0 F (Tcl will be able to tak) 315.59 534 T (e adv) 420.46 534 T (antage of man) 445.81 534 T (y of) 513.61 534 T (the numerous adv) 108 520 T (anced API\325) 193.02 520 T (s being added to the Ja) 246.67 520 T (v) 355.42 520 T (a platform. F) 361.12 520 T (or e) 423.26 520 T (xample, Tcl could) 441.41 520 T (use the ne) 108 506 T (w 3D API\325) 155.69 506 T (s to add ne) 207.68 506 T (w widgets to the Tcl/Tk toolkit. The bene\336t is that these) 259.04 506 T -0.21 (API\325) 108 492 P -0.21 (s w) 130.67 492 P -0.21 (ould be cross-platform and the e) 146.67 492 P -0.21 (xtension writer w) 300.42 492 P -0.21 (ould not ha) 383.86 492 P -0.21 (v) 437.21 492 P -0.21 (e to do a ne) 443.03 492 P -0.21 (w imple-) 497.21 492 P (mentation for each platform. Furthermore, the Ja) 108 478 T (v) 341.71 478 T (a P) 347.41 478 T (ackage will mak) 362.23 478 T (e using the Ja) 440.76 478 T (v) 505.51 478 T (a) 511.21 478 T (API\325) 108 464 T (s possible directly from Tcl without writing ne) 130.67 464 T (w Tcl commands.) 354.02 464 T 1 14 Q (2.3 Tcl and J) 108 430.67 T (a) 188.3 430.67 T (v) 194.95 430.67 T (a Syner) 201.81 430.67 T (gy: A new ar) 247.17 430.67 T (chitectur) 323.52 430.67 T (e) 376.91 430.67 T 0 12 Q (Aside from the speci\336c bene\336ts Tcl may pro) 108 404 T (vide to Ja) 321.46 404 T (v) 367.21 404 T (a users or the bene\336ts Ja) 372.91 404 T (v) 489.65 404 T (a may) 495.35 404 T (pro) 108 390 T (vide to Tcl users, there are additional bene\336ts that come from the languages w) 123.82 390 T (orking) 498.96 390 T (together) 108 376 T (. These bene\336ts are made more profound if you notice a split that is occurring) 146.66 376 T (between dif) 108 362 T (ferent communities in the de) 164.02 362 T (v) 301.03 362 T (eloper w) 306.85 362 T (orld. The split separates traditional,) 348.38 362 T (3GL based, \322component de) 108 348 T (v) 239 348 T (elopers\323 from higher le) 244.82 348 T (v) 356.16 348 T (el, scripting centric, \322application) 361.98 348 T (assemblers\323.) 108 334 T (What we call \322component de) 108 308 T (v) 247 308 T (elopers\323 generally include C, C++, Ja) 252.82 308 T (v) 433.08 308 T (a and other 3rd gen-) 438.78 308 T -0.44 (eration language \0503GL\051 de) 108 294 P -0.44 (v) 233.33 294 P -0.44 (elopers. These de) 239.15 294 P -0.44 (v) 321.6 294 P -0.44 (elopers tend to de) 327.42 294 P -0.44 (v) 410.77 294 P -0.44 (elop code from scratch or) 416.59 294 P (generic frame) 108 280 T (w) 174 280 T (orks. The) 182.54 280 T (y primarily b) 227.69 280 T (uild operating systems, lar) 290.11 280 T (ge applications or lar) 416.56 280 T (ge) 517.32 280 T -0.09 (reusable components. The tools the) 108 266 P -0.09 (y use \050including the languages\051 focus on performance,) 277.11 266 P -0.38 (memory management, protocols and other lo) 108 252 P -0.38 (w-le) 321.1 252 P -0.38 (v) 342.12 252 P -0.38 (el system characteristics. The important) 347.94 252 P (engineering choices of these systems center around data structures and algorithms.) 108 238 T (\322) 108 212 T (Application assemblers\323, on the other hand, consist of de) 112.37 212 T (v) 386.03 212 T (elopers that use scripting lan-) 391.85 212 T (guages, visual programming applications, and other 4GL tools. Rather than coding from) 108 198 T -0.18 (scratch, these de) 108 184 P -0.18 (v) 186.3 184 P -0.18 (elopers tend to \322glue\323 together lar) 192.12 184 P -0.18 (ge modules or applications \050often writ-) 353.95 184 P (ten in a 3GL\051. That is, the) 108 170 T (y might quickly assemble applications out of lar) 231.8 170 T (ge pre-e) 462.58 170 T (xisting) 501.37 170 T -0.16 (components, or perhaps the) 108 156 P -0.16 (y will wrap e) 239.32 156 P -0.16 (xisting le) 301.65 156 P -0.16 (g) 345.65 156 P -0.16 (ac) 351.59 156 P -0.16 (y systems and get them to w) 362.07 156 P -0.16 (ork with) 496.99 156 P (ne) 108 142 T (w systems. Lo) 119.03 142 T (w-le) 187.73 142 T (v) 208.75 142 T (el system characteristics are usually not a concern with these types) 214.57 142 T (of applications because the amount of code is usually really small and often dw) 108 128 T (arfed by) 488.82 128 T -0.49 (the lar) 108 114 P -0.49 (ger components. Rather) 137.62 114 P -0.49 (, application assemblers look for tools that ha) 250.48 114 P -0.49 (v) 464.82 114 P -0.49 (e \337e) 470.64 114 P -0.49 (xibility of) 490.3 114 P -0.24 (communication, can deal with types dynamically) 108 100 P -0.24 (, or ha) 341.32 100 P -0.24 (v) 370.91 100 P -0.24 (e other features that aid in the glu-) 376.73 100 P -0.25 (ing of a myriad of dif) 108 86 P -0.25 (ferent components and applications. Here, the important engineering) 209.42 86 P -0.3 (choices focus on the connections between components. While the systems assembled may) 108 72 P 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "5" 5 %%Page: "6" 6 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] [ 0 0 0 0.3 0.7 0.7 0.7] [ 0 0 0 0.1 0.9 0.9 0.9] 9 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (February 3, 1998) 108 42.62 T (Tcl and Ja) 285.47 42.62 T (v) 318.19 42.62 T (a Inte) 321.99 42.62 T (gration) 339.86 42.62 T (6) 536 42.62 T 0 12 Q -0.26 (be quite lar) 108 712 P -0.26 (ge, the amount of code written tends to be much smaller than what\325) 161.26 712 P -0.26 (s written by) 481.11 712 P (systems de) 108 698 T (v) 160.03 698 T (elopers.) 165.85 698 T (F) 108 672 T (or the Ja) 114.49 672 T (v) 154.91 672 T (a platform, we en) 160.61 672 T (vision an architecture that includes Ja) 244.1 672 T (v) 424.16 672 T (a as the \322component\323) 429.86 672 T (language used by component de) 108 658 T (v) 261.67 658 T (elopers and Tcl as the \322glue\323 language used by applica-) 267.49 658 T (tion assemblers. W) 108 644 T (e belie) 198.7 644 T (v) 230.05 644 T (e this is an ideal match. Ja) 235.87 644 T (v) 361.28 644 T (a has all the characteristics w) 366.98 644 T (anted) 507.16 644 T (in a systems language. In addition, with features lik) 108 630 T (e Ja) 355.19 630 T (v) 373.27 630 T (aBeans, the memory model and) 378.97 630 T (the Re\337ection API, Ja) 108 616 T (v) 213.08 616 T (a is a better language than C or C++ for b) 218.78 616 T (uilding reusable compo-) 418.04 616 T (nents that can be manipulated by other tools. On the \337ip side, Tcl is an ideal \322glue\323 lan-) 108 602 T (guage because of its dynamic types, \337e) 108 588 T (xible runtime model, and e) 295.45 588 T (xtensibility) 424.26 588 T (. W) 477.49 588 T (e ha) 493.86 588 T (v) 513.28 588 T (e) 519.1 588 T (created the Ja) 108 574 T (v) 173.06 574 T (a P) 178.76 574 T (ackage to mak) 193.58 574 T (e this match e) 262.78 574 T (v) 328.8 574 T (en better) 334.62 574 T (.) 375.61 574 T (This dual language approach to de) 108 548 T (v) 272.66 548 T (elopment is not ne) 278.48 548 T (w) 366.52 548 T (. Microsoft has used the approach) 374.4 548 T (v) 108 534 T (ery ef) 113.82 534 T (fecti) 141.17 534 T (v) 162.19 534 T (ely on the W) 168.01 534 T (indo) 229.19 534 T (ws desktop. W) 250.22 534 T (indo) 320.74 534 T (ws de) 341.77 534 T (v) 369.13 534 T (elopers use V) 374.95 534 T (isual C/C++ for sys-) 439.55 534 T (tems programming and the de) 108 520 T (v) 251.02 520 T (elopment of components. The) 256.84 520 T (y use V) 399.97 520 T (isual Basic \050VB\051 for) 435.91 520 T -0 (scripting components into small to medium sized applications. VB users b) 108 506 P -0 (uy \050reuse\051 com-) 464.04 506 P -0.05 (ponents from de) 108 492 P -0.05 (v) 185.58 492 P -0.05 (elopers that specialize in de) 191.4 492 P -0.05 (v) 323.52 492 P -0.05 (eloping components. The VB users quickly) 329.34 492 P -0.1 (write code that combines these components into small to medium sized applications. This) 108 478 P (model has w) 108 464 T (ork) 168.54 464 T (ed v) 184.42 464 T (ery well for Microsoft and Microsoft\325) 204.56 464 T (s customers.) 384.86 464 T (The problem of course, is that Microsoft has used V) 108 438 T (isual C/C++ and VB to lock people) 357.24 438 T (into the W) 108 424 T (indo) 158.18 424 T (ws desktop en) 179.22 424 T (vironment. Ja) 246.73 424 T (v) 311.82 424 T (a and Tcl, on the other hand, ha) 317.52 424 T (v) 468.91 424 T (e focused on) 474.73 424 T (being cross-platform which is essential for netw) 108 410 T (ork based computing. In all other w) 338.51 410 T (ays,) 509.36 410 T (ho) 108 396 T (we) 119.7 396 T (v) 133.39 396 T (er) 139.21 396 T (, the relationship is similar) 148.06 396 T (. VB can be used to script Acti) 275.06 396 T (v) 422.08 396 T (eX components. Tcl) 427.9 396 T (can be used to script Ja) 108 382 T (v) 218.74 382 T (aBeans. C based applications can be made scriptable by V) 224.44 382 T (isual) 502.99 382 T -0.47 (Basic for Applications \050VB) 108 368 P -0.47 (A\051. Ja) 237.81 368 P -0.47 (v) 265.76 368 P -0.47 (a based applications can be made scriptable with the Tcl) 271.45 368 P (library) 108 354 T (. In short: Ja) 139.21 354 T (v) 198.3 354 T (a and Tcl are to netw) 204 354 T (ork computing what V) 304.85 354 T (isual C/C++ and V) 412.45 354 T (isual) 502.27 354 T (Basic are to the Microsoft desktop.) 108 340 T 1 16 Q (3 Scripting J) 108 299.33 T (a) 198.88 299.33 T (v) 206.48 299.33 T (a: The J) 214.32 299.33 T (a) 270.08 299.33 T (v) 277.68 299.33 T (a P) 285.52 299.33 T (ackage) 307.14 299.33 T 0 12 Q -0.36 (This section focuses on the speci\336c w) 108 272 P -0.36 (ays in which Tcl has been e) 287.04 272 P -0.36 (xtended to script the Ja) 417.35 272 P -0.36 (v) 526.33 272 P -0.36 (a) 532.03 272 P -0.21 (VM. These are speci\336c features that stand Tcl and Ja) 108 258 P -0.21 (v) 359.78 258 P -0.21 (a inte) 365.48 258 P -0.21 (gration apart from just another) 391.42 258 P (port of a programming language to the Ja) 108 244 T (v) 306.06 244 T (a platform. W) 311.76 244 T (e will not, ho) 377.78 244 T (we) 440.82 244 T (v) 454.51 244 T (er) 460.33 244 T (, discuss the) 469.18 244 T (speci\336c bene\336ts of Tcl or Ja) 108 230 T (v) 242.74 230 T (a per se which ha) 248.44 230 T (v) 331.5 230 T (e been dealt with better in other conte) 337.32 230 T (xts) 518.1 230 T ([1][2].) 108 216 T (The sum of these features that inte) 108 190 T (grate Tcl with Ja) 273.12 190 T (v) 353.2 190 T (a is something called the Ja) 358.9 190 T (v) 490.31 190 T (a P) 496.01 190 T (ack-) 510.83 190 T (age. The Ja) 108 176 T (v) 162.07 176 T (a P) 167.77 176 T (ackage is a) 182.59 176 T (v) 235 176 T (ailable in both Tcl Blend and Jacl. The) 240.7 176 T (y are a set of Tcl e) 426.49 176 T (xten-) 514.94 176 T (sions that interact hea) 108 162 T (vily with the Ja) 212.08 162 T (v) 285.5 162 T (a VM. The Ja) 291.2 162 T (v) 356.28 162 T (a P) 361.98 162 T (ackage w) 376.8 162 T (orks with JDK) 421.66 162 T 3 F (\324) 491.65 162 T 0 F ( 1.1 or) 502.33 162 T (later) 108 148 T (.) 128.66 148 T 1 14 Q (3.1 Using the J) 108 114.67 T (a) 199.18 114.67 T (v) 205.83 114.67 T (a Re\337ection API\325) 212.69 114.67 T (s fr) 314.82 114.67 T (om Tcl) 334.39 114.67 T 0 12 Q (As of JDK 1.1, Ja) 108 88 T (v) 193.08 88 T (a has had a ne) 198.78 88 T (w re\337ection API which mak) 265.79 88 T (es more dynamic use of the) 400.98 88 T (Ja) 108 74 T (v) 117.76 74 T (a VM a possibility) 123.46 74 T (. The re\337ection API\325) 211.68 74 T (s also mak) 310.33 74 T (e it possible to script Ja) 360.88 74 T (v) 472.97 74 T (a. Scripting) 478.67 74 T 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "6" 6 %%Page: "7" 7 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] [ 0 0 0 0.3 0.7 0.7 0.7] [ 0 0 0 0.1 0.9 0.9 0.9] 9 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (February 3, 1998) 108 42.62 T (Tcl and Ja) 285.47 42.62 T (v) 318.19 42.62 T (a Inte) 321.99 42.62 T (gration) 339.86 42.62 T (7) 536 42.62 T 0 12 Q (Ja) 108 712 T (v) 117.76 712 T (a means that the de) 123.46 712 T (v) 215.14 712 T (eloper can dynamically determine methods and \336elds of an object) 220.96 712 T -0.19 (or class. The) 108 698 P -0.19 (y can call or manipulate those methods and \336elds. But most importantly) 168.43 698 P -0.19 (, the) 510.89 698 P -0.19 (y) 531.19 698 P (can do all those things during runtime without ha) 108 684 T (ving prior kno) 343.75 684 T (wledge of which objects) 412.12 684 T (and classes will e) 108 670 T (xist during runtime.) 191.47 670 T -0.25 (The follo) 108 644 P -0.25 (wing is a list of the types of things we can do with the Ja) 151.78 644 P -0.25 (v) 420.07 644 P -0.25 (a P) 425.77 644 P -0.25 (ackage thanks to the) 440.34 644 P -0.35 (Re\337ection API\325) 108 630 P -0.35 (s in JDK 1.1. All of these features will also be in the 1.0 release of Jacl and) 182.65 630 P (Tcl Blend.) 108 616 T 4 F (\245) 108 596 T 0 F (Create ne) 121.75 596 T (w instances of an) 167.09 596 T (y public class including arrays.) 249.89 596 T 4 F (\245) 108 576 T 0 F (Call methods on objects or static methods for a gi) 121.75 576 T (v) 359.76 576 T (en class.) 365.58 576 T 4 F (\245) 108 556 T 0 F (Access or set an) 121.75 556 T (y public \336eld of an object \050or class if \336eld is static\051.) 199.21 556 T 4 F (\245) 108 536 T 0 F (Determine the class, base class or super class of an object.) 121.75 536 T 4 F (\245) 108 516 T 0 F (Determine the public methods and \336elds a) 121.75 516 T (v) 324.15 516 T (ailable for a gi) 329.85 516 T (v) 399.2 516 T (en object or class.) 405.02 516 T 4 F (\245) 108 496 T 0 F (Load ne) 121.75 496 T (w Ja) 160.43 496 T (v) 181.85 496 T (a classes from a class path speci\336ed in Tcl.) 187.55 496 T 4 F (\245) 108 476 T 0 F (De\336ne ne) 121.75 476 T (w Ja) 167.76 476 T (v) 189.18 476 T (a classes from a byte stream in Tcl.) 194.88 476 T (While the list is not complete, it gi) 108 450 T (v) 273.71 450 T (es a good idea of the po) 279.53 450 T (wer of the Ja) 393.2 450 T (v) 454.61 450 T (a P) 460.31 450 T (ackage. Fur-) 475.13 450 T (thermore, using this po) 108 436 T (wer from Tcl is v) 218.36 436 T (astly easier to do than using the re\337ection API\325) 301.38 436 T (s) 526.69 436 T -0.17 (directly) 108 422 P -0.17 (. In short, one can do from Tcl, via the Ja) 143.88 422 P -0.17 (v) 339.59 422 P -0.17 (a P) 345.29 422 P -0.17 (ackage, what one can do in Ja) 359.94 422 P -0.17 (v) 501.65 422 P -0.17 (a. The) 507.35 422 P (e) 108 408 T (xample in Figure) 113.15 408 T (3 gi) 198.14 408 T (v) 216.18 408 T (es a v) 222 408 T (ery simple e) 249.14 408 T (xample of the Ja) 307.62 408 T (v) 386.36 408 T (a P) 392.06 408 T (ackage in action.) 406.88 408 T 1 14 Q (3.2 Scripting J) 108 197.07 T (a) 198.02 197.07 T (v) 204.67 197.07 T (a Beans) 211.53 197.07 T 0 12 Q (In addition to the Re\337ection support, the Ja) 108 170.4 T (v) 315.08 170.4 T (a P) 320.78 170.4 T (ackage also supports the manipulation of) 335.6 170.4 T -0.11 (Ja) 108 156.4 P -0.11 (v) 117.76 156.4 P -0.11 (aBeans. Ja) 123.46 156.4 P -0.11 (v) 173.76 156.4 P -0.11 (aBeans are the component mechanism used in the Ja) 179.46 156.4 P -0.11 (v) 430.26 156.4 P -0.11 (a platform. Ho) 435.96 156.4 P -0.11 (we) 505.76 156.4 P -0.11 (v) 519.45 156.4 P -0.11 (er) 525.27 156.4 P -0.11 (,) 534.11 156.4 P (in its simplest form Beans are just classes that follo) 108 142.4 T (w a set of naming con) 354.02 142.4 T (v) 459.19 142.4 T (entions.) 465.01 142.4 T (The Ja) 108 116.4 T (v) 139.42 116.4 T (a P) 145.12 116.4 T (ackage includes se) 159.94 116.4 T (v) 248.94 116.4 T (eral w) 254.76 116.4 T (ays to manipulate Ja) 284.29 116.4 T (v) 381.71 116.4 T (aBeans. Here is a short list of) 387.41 116.4 T (the kinds of things that are possible with the Ja) 108 102.4 T (v) 332.75 102.4 T (a P) 338.45 102.4 T (ackage:) 353.27 102.4 T 4 F (\245) 108 82.4 T 0 F (Create ne) 121.75 82.4 T (w beans and call an) 167.09 82.4 T (y method on the bean.) 260.88 82.4 T 0 0 0 1 0 0 0 K 108 226.4 540 380 C 0 0 0 1 0 0 0 K 2 9 Q 0 X 0 0 0 1 0 0 0 K (set f [java::new java.awt.Frame]) 126 374 T ($f setTitle \322Hello World\323) 126 362 T (set text [java::new java.awt.TextArea]) 126 338 T ($text setText \322Simple example of Tcl scripting Java.\323) 126 326 T ($f {add java.awt.Component} $text) 126 314 T ($f setLocation 100 100) 126 290 T ($f pack) 126 278 T ($f toFront) 126 266 T 0 F (Figure 3.) 162 247 T 0 10 Q (This \336gure sho) 201.25 247 T (ws the Ja) 261 247 T (v) 297.46 247 T (a P) 302.21 247 T (ackage creating a simple user interf) 314.56 247 T (ace using) 456.36 247 T (the A) 162 237 T (WT toolkit.) 183.04 237 T 0 0 0 1 0 0 0 K 0 0 612 792 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "7" 7 %%Page: "8" 8 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] [ 0 0 0 0.3 0.7 0.7 0.7] [ 0 0 0 0.1 0.9 0.9 0.9] 9 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (February 3, 1998) 108 42.62 T (Tcl and Ja) 285.47 42.62 T (v) 318.19 42.62 T (a Inte) 321.99 42.62 T (gration) 339.86 42.62 T (8) 536 42.62 T 4 12 Q (\245) 108 712 T 0 F (Set or get an) 121.75 712 T (y property de\336ned for the Ja) 181.89 712 T (v) 317.28 712 T (aBean.) 322.98 712 T 4 F (\245) 108 692 T 0 F (Determine the list of e) 121.75 692 T (v) 228.76 692 T (ents supported by the bean.) 234.58 692 T 4 F (\245) 108 672 T 0 F (Re) 121.75 672 T (gister Tcl call backs to bean e) 134.9 672 T (v) 277.23 672 T (ent listeners.) 283.05 672 T (The last feature is perhaps one of the most interesting. Ja) 108 646 T (v) 380.71 646 T (a de) 386.41 646 T (v) 405.77 646 T (elopers must ensure that) 411.59 646 T -0.35 (the) 108 632 P -0.35 (y ha) 122.48 632 P -0.35 (v) 142.22 632 P -0.35 (e the right type of object interf) 148.04 632 P -0.35 (ace before the) 292.45 632 P -0.35 (y can re) 358.87 632 P -0.35 (gister interest in an e) 395.96 632 P -0.35 (v) 494.24 632 P -0.35 (ent on a) 500.06 632 P (particular bean. This usually in) 108 618 T (v) 256.5 618 T (olv) 262.26 618 T (es writing ne) 277.42 618 T (w \322adaptor\323 classes that glue the tw) 339.11 618 T (o) 510.95 618 T (objects together) 108 604 T (. W) 183.66 604 T (ith Tcl\325) 200.51 604 T (s Ja) 235.51 604 T (v) 252.94 604 T (a P) 258.64 604 T (ackage ho) 273.46 604 T (we) 321.47 604 T (v) 335.16 604 T (er) 340.98 604 T (, the de) 349.82 604 T (v) 384.52 604 T (eloper simply needs to use the) 390.34 604 T -0.14 (ja) 108 590 P -0.14 (v) 116.42 590 P -0.14 (a::bind command to re) 122.12 590 P -0.14 (gister a Tcl script with a ne) 229.85 590 P -0.14 (w Ja) 359.36 590 P -0.14 (v) 380.64 590 P -0.14 (a object. Only one line of code!) 386.34 590 P (\050See Figure) 108 576 T (4 for a simple e) 166.66 576 T (xample.\051 Of course, we are doing the e) 241.13 576 T (xtra w) 427.22 576 T (ork of creating) 457.43 576 T (the adaptor classes behind the scenes. The result, ho) 108 562 T (we) 357.65 562 T (v) 371.34 562 T (er) 377.16 562 T (, is that beans are easier to use.) 386 562 T 1 14 Q (3.3 Futur) 108 313.07 T (e enhancements to the J) 167.25 313.07 T (a) 309.35 313.07 T (v) 316 313.07 T (a P) 322.86 313.07 T (ackage) 341.77 313.07 T 0 12 Q -0.35 (W) 108 286.4 P -0.35 (e are still researching w) 118.37 286.4 P -0.35 (ays in which we can impro) 230.81 286.4 P -0.35 (v) 357.85 286.4 P -0.35 (e the Ja) 363.67 286.4 P -0.35 (v) 398.71 286.4 P -0.35 (a P) 404.42 286.4 P -0.35 (ackage to mak) 418.88 286.4 P -0.35 (e scripting) 487.37 286.4 P (Ja) 108 272.4 T (v) 117.76 272.4 T (a from Tcl e) 123.46 272.4 T (v) 182.14 272.4 T (en easier) 187.96 272.4 T (. Some of the features we are currently planning include imple-) 229.61 272.4 T (menting Ja) 108 258.4 T (v) 160.09 258.4 T (a interf) 165.79 258.4 T (aces in Tcl and subclassing a Ja) 199.99 258.4 T (v) 351.72 258.4 T (a class with Tcl procedures. W) 357.42 258.4 T (e are) 504.42 258.4 T (also considering generating complete Ja) 108 244.4 T (v) 299.72 244.4 T (aBeans that are implemented in Tcl. Ja) 305.42 244.4 T (v) 491.48 244.4 T (a appli-) 497.18 244.4 T (cations using these Tcl-generated beans w) 108 230.4 T (ould not e) 310.16 230.4 T (v) 357.86 230.4 T (en kno) 363.68 230.4 T (w the) 395.71 230.4 T (y are using beans that) 421.86 230.4 T (were de) 108 216.4 T (v) 145.34 216.4 T (eloped with the Tcl scripting language.) 151.16 216.4 T 1 16 Q (4 A) 108 175.73 T (pplications) 135.15 175.73 T 0 12 Q -0.32 (The number of possible applications of Jacl and Tcl Blend are limitless. This section gi) 108 148.4 P -0.32 (v) 521.5 148.4 P -0.32 (es) 527.32 148.4 P -0.08 (a fe) 108 134.4 P -0.08 (w important e) 125.28 134.4 P -0.08 (xamples that we feel may be early applications of our technology) 191.6 134.4 P -0.08 (. Man) 503.34 134.4 P -0.08 (y) 531.08 134.4 P -0.08 (of these application areas are traditional areas of e) 108 120.4 P -0.08 (xpertise for the Tcl language. Ho) 347.78 120.4 P -0.08 (we) 505.72 120.4 P -0.08 (v) 519.41 120.4 P -0.08 (er) 525.23 120.4 P -0.08 (,) 534.08 120.4 P (some will le) 108 106.4 T (v) 166.37 106.4 T (erage this ne) 172.19 106.4 T (w syner) 232.54 106.4 T (gy we are creating between Tcl and Ja) 269.98 106.4 T (v) 453.34 106.4 T (a.) 459.04 106.4 T 0 0 0 1 0 0 0 K 108 342.4 540 534 C 0 0 0 1 0 0 0 K 2 9 Q 0 X 0 0 0 1 0 0 0 K (set f [java::new java.awt.Frame]) 126 528 T (set b [java::new java.awt.Button " Exit "]) 126 516 T (java::bind $b actionPerformed {set done yes}) 126 492 T ($f {add java.awt.Component} $but) 126 468 T ($f setLocation 100 100) 126 456 T ($f pack) 126 444 T ($f toFront) 126 432 T (set done "no") 126 408 T (vwait done) 126 396 T ($f dispose) 126 384 T 0 F (Figure 4.) 162 365 T 0 10 Q (This \336gure sho) 201.25 365 T (ws the use of the ja) 261 365 T (v) 337.73 365 T (a::bind command to re) 342.48 365 T (gister a callback) 432.6 365 T (with the Button bean. Clicking the b) 162 355 T (utton will set the v) 307.08 355 T (ariable \322done\323 which will) 381.28 355 T (allo) 162 345 T (w the script to continue and dispose the Frame.) 176.75 345 T 0 0 0 1 0 0 0 K 0 0 612 792 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "8" 8 %%Page: "9" 9 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] [ 0 0 0 0.3 0.7 0.7 0.7] [ 0 0 0 0.1 0.9 0.9 0.9] 9 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (February 3, 1998) 108 42.62 T (Tcl and Ja) 285.47 42.62 T (v) 318.19 42.62 T (a Inte) 321.99 42.62 T (gration) 339.86 42.62 T (9) 536 42.62 T 1 14 Q (4.1 W) 108 710.67 T (eb Ser) 145.59 710.67 T (v) 183.17 710.67 T (er CGI) 190.03 710.67 T 0 12 Q -0.19 (One of the lar) 108 684 P -0.19 (gest gro) 173.53 684 P -0.19 (wth areas for Tcl is with CGI scripting. Man) 211.36 684 P -0.19 (y people are \336nding Tcl) 423.3 684 P (easier to learn, use, and maintain than Perl. No) 108 670 T (w that Jacl brings the po) 331.99 670 T (wer of Tcl to the) 448.68 670 T (Ja) 108 656 T (v) 117.76 656 T (a platform, we e) 123.46 656 T (xpect Jacl to suit the CGI needs of Ja) 201.25 656 T (v) 378.98 656 T (a based web serv) 384.68 656 T (ers.) 466.14 656 T 1 14 Q (4.2 T) 108 622.67 T (esting) 140.55 622.67 T 0 12 Q (Tcl is often used for writing white box test scripts. It is ideal for testing little snippets of) 108 596 T -0.21 (code for an e) 108 582 P -0.21 (xpected outcome. W) 169.5 582 P -0.21 (ith our use of the Ja) 267.58 582 P -0.21 (v) 360.61 582 P -0.21 (a re\337ection API\325) 366.31 582 P -0.21 (s Jacl is e) 445.21 582 P -0.21 (v) 489.95 582 P -0.21 (en better) 495.77 582 P (suited for this type of application[6]. The current Tcl implementation has about 211,000) 108 568 T (lines of test code written in Tcl. The e) 108 554 T (xisting Tcl test suite has enabled us to port Tcl to) 290.12 554 T (Ja) 108 540 T (v) 117.76 540 T (a v) 123.46 540 T (ery quickly and has also assured us that our implementation is rock solid. Other) 137.6 540 T (de) 108 526 T (v) 119.03 526 T (elopers will \336nd our testing frame) 124.85 526 T (w) 287.53 526 T (ork easy to adapt to their o) 296.08 526 T (wn testing needs.) 423.76 526 T (Figure) 108 500 T (5 contains an e) 142.33 500 T (xample pulled directly from our test suite. Ja) 213.8 500 T (v) 428.21 500 T (a code can be called) 433.91 500 T -0.35 (and manipulated directly with our Ja) 108 486 P -0.35 (v) 281.65 486 P -0.35 (a scripting interf) 287.35 486 P -0.35 (ace. The test command is part of the) 365.85 486 P (testing frame) 108 472 T (w) 170.69 472 T (ork which we ship with our source distrib) 179.23 472 T (utions for Tcl.) 378.64 472 T 1 14 Q (4.3 Small IR A) 108 345.87 T (pplications) 199.04 345.87 T 0 12 Q (Tcl has al) 108 319.2 T (w) 154.54 319.2 T (ays been ideal for gluing together functionality to quickly create useful appli-) 163.08 319.2 T -0.01 (cations for the enterprise. Much of this is due to Tk, which is used to add a GUI to le) 108 305.2 P -0.01 (g) 514.59 305.2 P -0.01 (ac) 520.53 305.2 P -0.01 (y) 531.01 305.2 P -0.27 (applications or comple) 108 291.2 P -0.27 (x systems. Unfortunately) 216.59 291.2 P -0.27 (, Tk has yet to be ported to Ja) 335.59 291.2 P -0.27 (v) 474.8 291.2 P -0.27 (a. Ho) 480.5 291.2 P -0.27 (we) 505.92 291.2 P -0.27 (v) 519.61 291.2 P -0.27 (er) 525.43 291.2 P -0.27 (,) 534.27 291.2 P (with our support for Ja) 108 277.2 T (v) 217.08 277.2 T (a Beans, Jacl is already a v) 222.78 277.2 T (ery useful tool for constructing proto-) 351.56 277.2 T (types or full featured applications.) 108 263.2 T 1 14 Q (4.4 Scripting A) 108 229.87 T (pplications) 200.99 229.87 T 0 12 Q (Tcl w) 108 203.2 T (as in) 135.54 203.2 T (v) 157.39 203.2 T (ented to be embedded in applications to pro) 163.21 203.2 T (vide them with a scripting inter-) 372.67 203.2 T (f) 108 189.2 T (ace. Jacl is a library that can be used by Ja) 111.88 189.2 T (v) 314.58 189.2 T (a application de) 320.28 189.2 T (v) 395.96 189.2 T (elopers to add scripting fea-) 401.78 189.2 T (tures to their applications. Jacl is f) 108 175.2 T (ar and a) 272.2 175.2 T (w) 310 175.2 T (ay the easiest and most \337e) 318.54 175.2 T (xible w) 444.01 175.2 T (ay to add) 479.56 175.2 T (scripting to your Ja) 108 161.2 T (v) 200.09 161.2 T (a based applications. \050See Figure) 205.79 161.2 T (1 on page) 367.09 161.2 T (3.\051) 416.75 161.2 T 1 14 Q (4.5 T) 108 127.87 T (ransitioning to the J) 140.8 127.87 T (a) 260.77 127.87 T (v) 267.42 127.87 T (a Platf) 274.28 127.87 T (orm) 313.2 127.87 T 0 12 Q (Our nati) 108 101.2 T (v) 147.36 101.2 T (e Tcl implementation of Tcl Blend allo) 153.18 101.2 T (ws de) 340.2 101.2 T (v) 367.56 101.2 T (elopers to migrate to Ja) 373.38 101.2 T (v) 485.12 101.2 T (a without) 490.82 101.2 T (losing functionality a) 108 87.2 T (v) 209.76 87.2 T (ailable in le) 215.46 87.2 T (g) 271.27 87.2 T (ac) 277.21 87.2 T (y \050or C-based\051 applications. Tcl Blend allo) 287.69 87.2 T (ws the) 492.36 87.2 T (de) 108 73.2 T (v) 119.03 73.2 T (eloper to create \322h) 124.85 73.2 T (ybrid\323 systems implemented in both Ja) 213.08 73.2 T (v) 399.84 73.2 T (a and C in a much easier) 405.54 73.2 T 0 0 0 1 0 0 0 K 108 375.2 540 450 C 0 0 0 1 0 0 0 K 2 9 Q 0 X 0 0 0 1 0 0 0 K (test invoke-11.8 {getClassByName} {) 126 444 T ( set k [java::new {java.lang.Integer int} 1]) 126 432 T ( java::instanceof $k java.lang.Integer) 126 420 T (} 1) 126 408 T 0 F (Figure 5.) 162 389 T 0 10 Q (Each test runs a script and compares the result to an e) 201.25 389 T (xpected result. This) 415.22 389 T (test is making sure a created object is of the proper type.) 162 379 T 0 0 0 1 0 0 0 K 0 0 612 792 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "9" 9 %%Page: "10" 10 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] [ 0 0 0 0.3 0.7 0.7 0.7] [ 0 0 0 0.1 0.9 0.9 0.9] 9 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (February 3, 1998) 108 42.62 T (Tcl and Ja) 285.47 42.62 T (v) 318.19 42.62 T (a Inte) 321.99 42.62 T (gration) 339.86 42.62 T (10) 532 42.62 T 0 12 Q (manner than using the JNI \050Ja) 108 712 T (v) 251.4 712 T (a Nati) 257.1 712 T (v) 285.79 712 T (e Interf) 291.61 712 T (ace\051 directly from within C. Ov) 326.47 712 T (er time, C) 477.6 712 T (based code can migrate to Ja) 108 698 T (v) 245.39 698 T (a. Ev) 251.09 698 T (entually) 275.57 698 T (, Tcl Blend can be replaced with Jacl and the) 313.45 698 T (result is a 100% Ja) 108 684 T (v) 197.75 684 T (a solution. De) 203.45 684 T (v) 270.14 684 T (elopers looking for a w) 275.96 684 T (ay to inte) 387.16 684 T (grate Ja) 431.64 684 T (v) 468.38 684 T (a with their) 474.08 684 T (le) 108 670 T (g) 116.48 670 T (ac) 122.42 670 T (y systems should really consider the po) 132.9 670 T (wer of Tcl Blend. \050See Figure) 321.25 670 T (2 on page) 467.56 670 T (4.\051) 517.21 670 T 1 14 Q (4.6 Writing new components: J) 108 636.67 T (a) 297.56 636.67 T (v) 304.21 636.67 T (a Studio) 311.07 636.67 T 0 12 Q -0.19 (W) 108 610 P -0.19 (e are currently w) 118.37 610 P -0.19 (orking on a Ja) 198.65 610 P -0.19 (v) 265.51 610 P -0.19 (a Studio bean component that is based on Jacl. W) 271.21 610 P -0.19 (ith the) 507.04 610 P (Tcl component, Ja) 108 596 T (v) 196.08 596 T (a Studio de) 201.78 596 T (v) 255.48 596 T (elopers can write ne) 261.3 596 T (w beha) 357.3 596 T (vior for Ja) 391.38 596 T (v) 440.46 596 T (a Studio directly) 446.16 596 T (with Tcl. W) 108 582 T (e are planing to e) 164.7 582 T (v) 247.04 582 T (entually allo) 252.86 582 T (w de) 312.23 582 T (v) 334.92 582 T (elopers to write ne) 340.74 582 T (w Ja) 429.42 582 T (v) 450.84 582 T (a Beans com-) 456.54 582 T (pletely in Tcl. Ja) 108 568 T (v) 187.75 568 T (a users can use those Tcl beans directly without e) 193.45 568 T (v) 430.1 568 T (er e) 435.92 568 T (v) 453.28 568 T (en kno) 459.1 568 T (wing that) 491.12 568 T (the beans are implemented with Tcl. Figure) 108 554 T (6 contains an e) 319.97 554 T (xample of a Ja) 391.44 554 T (v) 460.85 554 T (a Studio bean) 466.55 554 T (written in Tcl that mimics the Memory bean that ships with Ja) 108 540 T (v) 406.08 540 T (a Studio. Note ho) 411.78 540 T (w little) 495.48 540 T (Tcl code is needed!) 108 526 T 1 16 Q (5 Implementation) 108 207.33 T 0 12 Q (This section will discuss our implementation strate) 108 180 T (gy and gi) 351.82 180 T (v) 396.18 180 T (e a rough roadmap for con-) 402 180 T -0.26 (struction. The products we are currently constructing are Tcl Blend, Jacl, and the Tcl bean) 108 166 P (for Ja) 108 152 T (v) 134.75 152 T (a Studio. This section will discuss our implementation plans for each project.) 140.45 152 T 1 14 Q (5.1 J) 108 118.67 T (a) 139.29 118.67 T (v) 145.94 118.67 T (a & Nati) 152.8 118.67 T (v) 203.98 118.67 T (e Tcl: Tcl Blend) 210.84 118.67 T 0 12 Q -0.42 (One reason for doing Tcl Blend is to get the full po) 108 92 P -0.42 (wer of Tcl and Ja) 348.73 92 P -0.42 (v) 430.11 92 P -0.42 (a w) 435.81 92 P -0.42 (orking together in) 452.27 92 P -0.3 (the shortest period of time. Tcl Blend allo) 108 78 P -0.3 (ws the user to use all of Tcl and Tk and all of the) 306.25 78 P 0 0 0 1 0 0 0 K 108 244 540 498 C 0 0 0 1 0 0 0 K 2 9 Q 0 X 0 0 0 1 0 0 0 K (# Set the following list to hold the memory locations for this bean.) 126 492 T (set memory_locations {store1 store2}) 126 480 T (foreach x $memory_locations {) 126 456 T ( studio::port in \322$x input\323 -transfer dynamic) 126 444 T ( studio::port out \322$x output\323 -location east -transfer dynamic) 126 432 T (}) 126 420 T (studio::port in Trigger -location north) 126 396 T (studio::bind Trigger {) 126 384 T ( foreach x $memory_locations {) 126 372 T ( upvar #0 \322$x input\323 input) 126 360 T ( upvar #0 \322$x output\323 output) 126 348 T ( if {[info exists input]} {) 126 336 T ( set output [$input toString]) 126 324 T ( }) 126 312 T ( }) 126 300 T (}) 126 288 T 0 F (Figure 6.) 162 269 T 0 10 Q (This e) 201.25 269 T (xample Studio Bean creates input and output pins for each memory) 225.82 269 T -0.26 (location. A trigger pin is also created that, when \336red, will transfer an) 162 259 P -0.26 (y data that came) 437.28 259 P (in the input pins to the output pins.) 162 249 T 0 0 0 1 0 0 0 K 0 0 612 792 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "10" 10 %%Page: "11" 11 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] [ 0 0 0 0.3 0.7 0.7 0.7] [ 0 0 0 0.1 0.9 0.9 0.9] 9 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (February 3, 1998) 108 42.62 T (Tcl and Ja) 285.47 42.62 T (v) 318.19 42.62 T (a Inte) 321.99 42.62 T (gration) 339.86 42.62 T (11) 532 42.62 T 0 12 Q (features of Ja) 108 712 T (v) 171.73 712 T (a. Tcl Blend will be feature complete long before Jacl. This is good ne) 177.43 712 T (ws) 514.74 712 T (for Ja) 108 698 T (v) 134.75 698 T (a de) 140.45 698 T (v) 159.8 698 T (elopers as well. The) 165.62 698 T (y will be able to test their Tcl Ja) 261.42 698 T (v) 415.16 698 T (a code no) 420.86 698 T (w and kno) 466.55 698 T (w) 516.24 698 T (that there is a planned roadmap to mak) 108 684 T (e that 100% Ja) 294.18 684 T (v) 364.26 684 T (a in the future.) 369.96 684 T (Tcl Blend is progressing smoothly) 108 658 T (. The biggest task will be to get Tcl Blend to w) 272.56 658 T (ork) 497.76 658 T -0.15 (e) 108 644 P -0.15 (v) 113.03 644 P -0.15 (erywhere Tcl and Ja) 118.85 644 P -0.15 (v) 215.11 644 P -0.15 (a 1.1 both e) 220.81 644 P -0.15 (xist. This will be an on going job that will be customer) 276.16 644 P (dri) 108 630 T (v) 121.03 630 T (en. W) 126.85 630 T (e also still need to inte) 154.55 630 T (grate Tk and Ja) 262.03 630 T (v) 335.44 630 T (a windo) 341.14 630 T (w systems to allo) 379.16 630 T (w the tw) 461.87 630 T (o to) 503.08 630 T (w) 108 616 T (ork together) 116.54 616 T (. Ev) 174.2 616 T (en with the limited resources we currently ha) 193.36 616 T (v) 409.4 616 T (e a) 415.22 616 T (v) 428.64 616 T (ailable for Tcl Blend,) 434.34 616 T (we should be feature complete within calendar year 1998.) 108 602 T 1 14 Q (5.2 100% J) 108 568.67 T (a) 177.79 568.67 T (v) 184.44 568.67 T (a: J) 191.3 568.67 T (acl) 213.25 568.67 T 0 12 Q -0.3 (Of course, for man) 108 542 P -0.3 (y users it is important to ha) 197.54 542 P -0.3 (v) 326.15 542 P -0.3 (e a 100% Ja) 331.97 542 P -0.3 (v) 388.46 542 P -0.3 (a solution. Our long term goal) 394.16 542 P (is to port all of Tcl & Tk to the Ja) 108 528 T (v) 269.09 528 T (a programming language. Ho) 274.79 528 T (we) 415.13 528 T (v) 428.82 528 T (er) 434.64 528 T (, it must be remem-) 443.48 528 T -0.14 (bered that Tcl and Tk are v) 108 514 P -0.14 (ery lar) 236.96 514 P -0.14 (ge systems and a full port will tak) 267.59 514 P -0.14 (e a great deal of ef) 428.84 514 P -0.14 (fort.) 516.81 514 P -0.29 (Tcl is implemented in some 80,000 lines of C code. Tk is another 120,000 lines of C code.) 108 500 P (Our current estimates for a full port is around 6 to 10 man years. W) 108 486 T (e are currently staf) 430.64 486 T (fed) 519.97 486 T (with three full time engineers and are looking at an elapsed time of around three years.) 108 472 T (The w) 108 458 T (ork is such that we can do a lot of things in parallel and we could dramatically) 138.2 458 T (reduce the schedule if gi) 108 444 T (v) 225 444 T (en additional man po) 230.82 444 T (wer) 331.51 444 T (.) 348.84 444 T -0.28 (The good ne) 108 418 P -0.28 (ws is that the core of Tcl has already been ported and is e) 167.12 418 P -0.28 (xtremely useful. The) 438.2 418 P (core includes all of the control structures for the language, basic \336le support, and other) 108 404 T (important features lik) 108 390 T (e re) 211.2 390 T (gular e) 228.67 390 T (xpressions. Because Tcl has such a lar) 261.48 390 T (ge test suite we are) 444.89 390 T (also assured that the code ported so f) 108 376 T (ar is v) 284.84 376 T (ery stable and completely compatible with the) 313.99 376 T (C v) 108 362 T (ersion of Tcl. W) 124.82 362 T (e plan to release v) 202.51 362 T (ersion 1.0 of Jacl in the \336rst quarter of 1998. While) 288.97 362 T (this will represent only a subset of Tcl, it will be of commercial quality) 108 348 T (.) 448.52 348 T (After this initial release, we will be making re) 108 322 T (gular releases that will incrementally) 328.12 322 T (increase the subset of Tcl and Tk that Jacl supports. Exactly what those features are will) 108 308 T -0.13 (depend hea) 108 294 P -0.13 (vily on customer demand. W) 161.95 294 P -0.13 (e e) 299.46 294 P -0.13 (xpect that we will ha) 312.81 294 P -0.13 (v) 412.05 294 P -0.13 (e bi-annual releases until) 417.87 294 P (Tcl and Tk are completely ported.) 108 280 T 1 14 Q (5.3 Strategy f) 108 246.67 T (or porting Tk) 190.85 246.67 T 0 12 Q (Due to the length of time it will tak) 108 220 T (e to port all of Tk we are looking for w) 277.21 220 T (ays to reduce) 464.39 220 T (our schedule yet still retain the most v) 108 206 T (alue. Speci\336cally) 290.69 206 T (, we w) 372.56 206 T (ant to \336nd a w) 404.1 206 T (ay to get the) 472.64 206 T -0.29 (v) 108 192 P -0.29 (alue of Tk without ha) 113.7 192 P -0.29 (ving to do a full port. It turns out that a majority of the code in Tk is) 215.61 192 P (in the widgets themselv) 108 178 T (es. Just the T) 221.48 178 T (e) 283.31 178 T (xt and can) 288.46 178 T (v) 337.3 178 T (as widgets alone mak) 343 178 T (e up roughly one) 445.86 178 T (third of all of Tk. W) 108 164 T (e also w) 204.36 164 T (ould lik) 243.56 164 T (e a w) 280.45 164 T (ay to better inte) 305.65 164 T (grate the Tk widget set with the) 380.46 164 T (A) 108 150 T (WT widget set.) 115.58 150 T (Instead of doing a straight port of Tk we plan to \322wrap\323 e) 108 124 T (xisting A) 383.76 124 T (WT widgets \050beans\051 in) 427.02 124 T -0.21 (such a w) 108 110 P -0.21 (ay that the) 149.44 110 P -0.21 (y look and beha) 198.83 110 P -0.21 (v) 274.27 110 P -0.21 (e lik) 280.08 110 P -0.21 (e Tk widgets. In f) 300.75 110 P -0.21 (act, we hope to be able to create) 384.76 110 P (a mechanism where an) 108 96 T (y Ja) 217.45 96 T (v) 236.21 96 T (a bean with a GUI can be used by Tk directly) 241.91 96 T (. Tk will get the) 459.07 96 T (bene\336t of a lar) 108 82 T (ge set of reusable widgets without our ha) 177.43 82 T (ving to write or port too much) 374.16 82 T (code.) 108 68 T 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "11" 11 %%Page: "12" 12 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] [ 0 0 0 0.3 0.7 0.7 0.7] [ 0 0 0 0.1 0.9 0.9 0.9] 9 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (February 3, 1998) 108 42.62 T (Tcl and Ja) 285.47 42.62 T (v) 318.19 42.62 T (a Inte) 321.99 42.62 T (gration) 339.86 42.62 T (12) 532 42.62 T 0 12 Q (Ho) 108 712 T (we) 122.36 712 T (v) 136.06 712 T (er) 141.88 712 T (, man) 150.72 712 T (y of the widgets in Tk - especially the can) 177.2 712 T (v) 377.69 712 T (as and te) 383.39 712 T (xt widgets are v) 425.2 712 T (astly) 501.22 712 T (superior to the A) 108 698 T (WT widgets. W) 187.91 698 T (e will e) 263.27 698 T (v) 298.3 698 T (entually need to port these widgets in order to) 304.12 698 T -0.01 (obtain the full bene\336ts of Tk. W) 108 684 P -0.01 (e hope to port these Tk widgets as Ja) 261.28 684 P -0.01 (v) 437.57 684 P -0.01 (a beans so that the) 443.27 684 P -0.01 (y) 531.01 684 P -0.37 (will be useful outside of the conte) 108 670 P -0.37 (xt of Tk as well. F) 268.25 670 P -0.37 (or complete compatibility we will also) 354.22 670 P (need to create ne) 108 656 T (w Beans for the basic widgets lik) 188.66 656 T (e Buttons and Scrollbars. The reason is) 347.86 656 T (that the Tk widgets \050for the most part\051 ha) 108 642 T (v) 305.06 642 T (e a much richer feature set.) 310.88 642 T 1 14 Q (5.4 Tcl Bean f) 108 608.67 T (or J) 193.6 608.67 T (a) 217.1 608.67 T (v) 223.75 608.67 T (a Studio) 230.61 608.67 T 0 12 Q -0.25 (The \336rst v) 108 582 P -0.25 (ersion of the Tcl Bean for Ja) 156.66 582 P -0.25 (v) 291.58 582 P -0.25 (a Studio is nearing completion. In f) 297.28 582 P -0.25 (act, we hope to) 465.34 582 P (release the bean with Jacl 1.0. W) 108 568 T (e plan to e) 265 568 T (v) 314.35 568 T (aluate customer response to the Tcl Bean) 320.05 568 T (before planning our future feature set. Our goal is to get the Tcl Bean b) 108 554 T (undled with Ja) 449.35 554 T (v) 519.11 554 T (a) 524.81 554 T (Studio. Contact me directly if you ha) 108 540 T (v) 285.42 540 T (e questions about this product.) 291.24 540 T 1 16 Q (6 Related W) 108 499.33 T (ork) 195.23 499.33 T 0 12 Q (Tcl is not the only language being ported to the Ja) 108 472 T (v) 347.74 472 T (a VM. Some of the other projects we) 353.44 472 T (kno) 108 458 T (w of are included belo) 125.7 458 T (w) 232.7 458 T (. W) 240.59 458 T (e also discuss the dif) 256.96 458 T (ferences between the w) 355.98 458 T (ork the) 468.14 458 T (y are) 501.62 458 T (doing and what we are trying to do. Please remember that this list is only a snapshot in) 108 444 T (time and information about v) 108 430 T (arious ef) 247.69 430 T (forts is sk) 289.04 430 T (etch) 335.59 430 T (y at best.) 355.52 430 T 1 F (P) 108 404 T (erl) 115.09 404 T 0 F (. Perl[8] is one of the more well kno) 129.08 404 T (wn scripting languages. T) 302.42 404 T (raditionally Perl has) 425.99 404 T (been used for data con) 108 390 T (v) 215.48 390 T (ersion or processing b) 221.3 390 T (ut has recently dominated the w) 326.71 390 T (orld of CGI) 479.57 390 T -0.01 (scripting. It is rumored that O\325Reilly & Compan) 108 376 P -0.01 (y\325) 339.75 376 P -0.01 (s \322Perl Resource Kit\323 has some limited) 349.09 376 P (support for Ja) 108 362 T (v) 173.75 362 T (a.) 179.45 362 T 1 F (Python) 108 336 T 0 F (. Python[9] is also a cross-platform scripting language that has been around for a) 144.67 336 T (fe) 108 322 T (w years. While it hasn\325) 117.02 322 T (t attained the wide spread use of Tcl or Perl, it certainly has an) 227.78 322 T (a) 108 308 T (vid follo) 113.09 308 T (wing. Currently there is an ef) 153.79 308 T (fort to port the Python scripting language to Ja) 294.13 308 T (v) 517.21 308 T (a) 522.91 308 T -0.4 (called JPython[10]. In f) 108 294 P -0.4 (act, their approach is to compile Python code directly do) 220 294 P -0.4 (wn to Ja) 487.41 294 P -0.4 (v) 526.37 294 P -0.4 (a) 532.07 294 P -0.48 (byte codes. The JPython w) 108 280 P -0.48 (ork currently doesn\325) 234.96 280 P -0.48 (t include an) 331.1 280 P -0.48 (ything lik) 385.96 280 P -0.48 (e the Ja) 431.71 280 P -0.48 (v) 466.5 280 P -0.48 (a P) 472.2 280 P -0.48 (ackage b) 486.55 280 P -0.48 (ut) 528.14 280 P (their w) 108 266 T (ork, lik) 141.54 266 T (e ours, is on going.[13]) 176.09 266 T 1 F -0.24 (J) 108 240 P -0.24 (a) 113.82 240 P -0.24 (v) 119.52 240 P -0.24 (aScript) 125.4 240 P 0 F -0.24 (. One of the most common questions we recei) 162.73 240 P -0.24 (v) 380.12 240 P -0.24 (e is, \322ho) 385.94 240 P -0.24 (w does this relate to the) 424.81 240 P -0.28 (Ja) 108 226 P -0.28 (v) 117.76 226 P -0.28 (aScript[11] programming language?\323 The simple answer is that Ja) 123.46 226 P -0.28 (v) 438.95 226 P -0.28 (aScript w) 444.65 226 P -0.28 (as created) 489.91 226 P (for) 108 212 T (, and has al) 121.51 212 T (w) 175.38 212 T (ays focused on web page scripting. Ja) 183.92 212 T (v) 364.64 212 T (aScript is not geared for) 370.34 212 T (, nor has) 485.17 212 T -0.13 (been used to an) 108 198 P -0.13 (y e) 181.74 198 P -0.13 (xtent for application de) 195.76 198 P -0.13 (v) 306.72 198 P -0.13 (elopment. Tcl, on the other hand, is focused on) 312.54 198 P -0.31 (creating or w) 108 184 P -0.31 (orking with applications. As f) 170.57 184 P -0.31 (ar as we can tell, Netscape has no clear plans to) 312.18 184 P (mak) 108 170 T (e Ja) 128.54 170 T (v) 146.63 170 T (aScript a general purpose scripting language.) 152.33 170 T 1 F -0.09 (V) 108 144 P -0.09 (isual Basic) 116.22 144 P 0 F -0.09 (. V) 170.47 144 P -0.09 (isual Basic has some ef) 184.32 144 P -0.09 (forts to mak) 295.63 144 P -0.09 (e V) 353.32 144 P -0.09 (isual Basic w) 369.49 144 P -0.09 (ork with Ja) 433.18 144 P -0.09 (v) 486.08 144 P -0.09 (a and Ja) 491.78 144 P -0.09 (v-) 530 144 P -0.01 (aBeans. Ho) 108 130 P -0.01 (we) 163.01 130 P -0.01 (v) 176.7 130 P -0.01 (er) 182.52 130 P -0.01 (, their focus remains on supporting Acti) 191.36 130 P -0.01 (v) 381.96 130 P -0.01 (eX. Current of) 387.79 130 P -0.01 (ferings of V) 457.11 130 P -0.01 (isual) 514.34 130 P (Basic are also not implemented in Ja) 108 116 T (v) 283.74 116 T (a and are not cross-platform. Nonetheless, with a) 289.44 116 T (compan) 108 102 T (y as lar) 145.81 102 T (ge as Microsoft, you must closely w) 180.25 102 T (atch what the) 353.78 102 T (y do in this space.) 417.59 102 T 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "12" 12 %%Page: "13" 13 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] [ 0 0 0 0.3 0.7 0.7 0.7] [ 0 0 0 0.1 0.9 0.9 0.9] 9 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (February 3, 1998) 108 42.62 T (Tcl and Ja) 285.47 42.62 T (v) 318.19 42.62 T (a Inte) 321.99 42.62 T (gration) 339.86 42.62 T (13) 532 42.62 T 1 16 Q (7 Conclusions) 108 709.33 T 0 12 Q (This paper clearly points out moti) 108 682 T (v) 270.02 682 T (ations, feasibility) 275.72 682 T (, and bene\336ts of inte) 357.61 682 T (grating the Tcl) 455.09 682 T -0.15 (and Ja) 108 668 P -0.15 (v) 137.94 668 P -0.15 (a programming languages. Depending on the customer) 143.64 668 P -0.15 (, a scripting solution for the) 405.23 668 P (Ja) 108 654 T (v) 117.76 654 T (a platform may range from v) 123.46 654 T (ery useful to outright essential. Our initial ef) 261.58 654 T (forts ha) 474.59 654 T (v) 510.67 654 T (e) 516.49 654 T -0.18 (been recei) 108 640 P -0.18 (v) 156.49 640 P -0.18 (ed with high praise, and we ha) 162.32 640 P -0.18 (v) 307.32 640 P -0.18 (e a clear path to pro) 313.14 640 P -0.18 (viding a complete solution.) 407.04 640 P (Some customers are already recei) 108 626 T (ving the bene\336ts of this w) 268.98 626 T (ork, and more are trying it) 393.19 626 T (e) 108 612 T (v) 113.03 612 T (ery day) 118.85 612 T (. An) 153.72 612 T (y serious de) 174.2 612 T (v) 231.23 612 T (eloper w) 237.05 612 T (orking on applications for the Ja) 278.58 612 T (v) 433.32 612 T (a platform will cer-) 439.02 612 T -0.16 (tainly \336nd the syner) 108 598 P -0.16 (gy between Tcl and Ja) 202.98 598 P -0.16 (v) 309.41 598 P -0.16 (a a great tool for addressing their de) 315.11 598 P -0.16 (v) 486.67 598 P -0.16 (elopment) 492.49 598 P (needs.) 108 584 T 1 16 Q (8 Refer) 108 543.33 T (ences) 161.9 543.33 T 0 10 Q ([1]) 108 521.33 T (J. Ousterhout,) 129.6 521.33 T 5 F (Tcl and the Tk T) 187.93 521.33 T (oolkit) 252.57 521.33 T 0 F (, Addison-W) 275.35 521.33 T (esle) 326.21 521.33 T (y) 341.61 521.33 T (, ISBN 0-201-63337-X, 1994.) 345.96 521.33 T ([2]) 108 507.33 T (K.Arnold and J. Gosling,) 129.6 507.33 T 5 F (The J) 232.65 507.33 T (ava Pr) 254.24 507.33 T (o) 280.73 507.33 T (gr) 285.63 507.33 T (amming Langua) 294.37 507.33 T (g) 359.55 507.33 T (e) 364.45 507.33 T 0 F (, Addison-W) 368.89 507.33 T (esle) 419.75 507.33 T (y) 435.15 507.33 T (, ISBN 0-201-63455-4,) 439.5 507.33 T (1996.) 129.6 495.33 T ([3]) 108 481.33 T (Jacl & Tcl Blend home page: http://sunscript.sun.com/ja) 129.6 481.33 T (v) 354.95 481.33 T (a/) 359.7 481.33 T ([4]) 108 467.33 T (J. Ousterhout,) 129.6 467.33 T 5 F (Scripting: Higher Le) 187.93 467.33 T (vel Pr) 271.11 467.33 T (o) 294.82 467.33 T (gr) 299.72 467.33 T (amming for the 21st Century) 308.46 467.33 T 0 F (,) 422.81 467.33 T 2 F (http://www.sun-) 427.81 467.33 T (labs.com/people/john.ousterhout/scripting.html) 129.6 455.33 T 0 F (.) 405.6 455.33 T ([5]) 108 441.33 T (J. Ousterhout,) 129.6 441.33 T 5 F (Additional Information for Scripting White P) 187.93 441.33 T (aper) 367.42 441.33 T 0 F (,) 385.35 441.33 T 2 F (http://www.sunlabs.com/) 390.35 441.33 T (people/john.ousterhout/scriptextra.html) 129.6 429.33 T 0 F (.) 363.6 429.33 T ([6]) 108 415.33 T (S. Stanton, \322TclBlend: Blending Tcl and Ja) 129.6 415.33 T (v) 302.73 415.33 T (a\323,) 307.48 415.33 T 5 F (Dr) 321.36 415.33 T (. Dobb\325) 331.36 415.33 T (s J) 361.51 415.33 T (ournal) 372.09 415.33 T 0 F (, pp. 50-54, Feb 1998.) 398.76 415.33 T ([7]) 108 401.33 T (B. K) 129.6 401.33 T (ernighan and D. Ritchie,) 148.24 401.33 T 5 F (The C Pr) 248.78 401.33 T (o) 285 401.33 T (gr) 289.9 401.33 T (amming Langua) 298.64 401.33 T (g) 363.82 401.33 T (e) 368.72 401.33 T 0 F (, Second Edition, Prentice Hall, ISBN 0-) 373.16 401.33 T (13-110362-8, 1988.) 129.6 389.33 T ([8]) 108 375.33 T (L. W) 129.6 375.33 T (all, T) 149.35 375.33 T (. Christiansen, and R. Schw) 169.72 375.33 T (artz,) 280.45 375.33 T 5 F (Pr) 300.44 375.33 T (o) 309.99 375.33 T (gr) 314.89 375.33 T (amming P) 323.63 375.33 T (erl) 363.66 375.33 T 0 F (, Second Edition, O\325Reilly and Associ-) 374.77 375.33 T (ates, ISBN 1-56592-149-6, 1996.) 129.6 363.33 T ([9]) 108 349.33 T -0.33 (W) 129.6 349.33 P -0.33 (atters, A., G. v) 138.24 349.33 P -0.33 (an Rossum, and J. C. Ahlstrom,) 195.59 349.33 P 5 F -0.33 (Internet Pr) 323.04 349.33 P -0.33 (o) 366.42 349.33 P -0.33 (gr) 371.32 349.33 P -0.33 (amming with Python) 380.06 349.33 P 0 F -0.33 (, MIS Press/ Henry) 462.17 349.33 P (Holt Publishers, 1996.) 129.6 337.33 T ([10]) 108 323.33 T (J. Hugunin,) 129.6 323.33 T 5 F (Python and J) 178.49 323.33 T (ava: The Best of Both W) 230.91 323.33 T (orlds) 327.48 323.33 T 0 F (, ) 168.48 311.33 T ([11]) 108 297.33 T (D. Flanag) 129.6 297.33 T (an,) 168.99 297.33 T 5 F (J) 183.43 297.33 T (avaScript: The De\336nitive Guide) 187.52 297.33 T 0 F (, Second Edition, O\325Reilly and Associates, ISBN 1-) 315 297.33 T (56592-234-4, 1997.) 129.6 285.33 T ([12]) 108 271.33 T (D. Libes,) 129.6 271.33 T 5 F (Exploring Expect) 169.04 271.33 T 0 F (, O\325Reilly and Associates, ISBN 1-56592-090-2, 1995.) 238.75 271.33 T ([13]) 108 257.33 T (Home page for O\325Reilly Perl product: http://perl.oreilly) 129.6 257.33 T (.com/) 351.43 257.33 T 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "13" 13 %%Trailer %%BoundingBox: 0 0 612 792 %%PageOrder: Ascend %%Pages: 13 %%DocumentFonts: Times-Roman %%+ Times-Bold %%+ Courier %%+ Symbol %%+ Courier-Bold %%+ Times-Italic %%EOF .