[comp.sys.amiga.tech] TCL questions

maniac@cleanhead.cs.unlv.edu (Eric J. Schwertfeger) (03/10/90)

	I have a few questions to ask about TCL, and a few possibly 
invalid observations to make.  First of all, is there any way to get
a copy of the paper that describes TCL?  I'd like to see it to get
a better idea of what it is cabable of.
	Second, it is my impression that programs with TCL interfaces
talk directly to each other, rather than through an intermediate, as with
ARexx.  While this is good as far as speed goes, I do see one limitation
to this.  I'm currently working on a mini-database with an ARexx interface,
and my script interpreter will pass any unknown functions to ARexx, much
like DME does.  Now, I don't have to know which host or library defined
the function, so long as the library or host has been identified to ARexx
as such.  Can this be done with TCL?
	Finally, I don't see why somebody couldn't write a set of 
library functions to implement a command interpreter similar to that 
of TCL.  Two functions to add and remove commands, and one or more to
do the actual stuff of checking the message port, etc.
	I am interested in TCL, but for now I think I'll stick with ARexx. 


Eric Schwertfeger, maniac@jimi.CS.UNLV.EDU

deven@rpi.edu (Deven T. Corzine) (03/10/90)

On 9 Mar 90 21:36:27 GMT,
maniac@cleanhead.cs.unlv.edu (Eric J. Schwertfeger) said:

Eric> I have a few questions to ask about TCL, and a few possibly
Eric> invalid observations to make.  First of all, is there any way to
Eric> get a copy of the paper that describes TCL?  I'd like to see it
Eric> to get a better idea of what it is cabable of.

Since there seems to be a good deal of interest here, this seems
warranted.  Here is the postscript source for the Usenix paper on Tcl
from the Winter 1990 Usenix Conference Proceedings.

The entire Tcl distribution is available for anonymous FTP from
ucbvax.berkeley.edu in /pub/tcl.tar.Z and it includes this postscript
source form of the Usenix paper.

Deven

#!/bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of shell archive."
# Contents:  usenix.ps
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'usenix.ps' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'usenix.ps'\"
else
echo shar: Extracting \"'usenix.ps'\" \(118900 characters\)
sed "s/^X//" >'usenix.ps' <<'END_OF_FILE'
X%!PS-Adobe-1.0
X%%Creator: mace.Berkeley.EDU:ouster (John Ousterhout,525E,0865,5476132)
X%%Title: stdin (ditroff)
X%%CreationDate: Fri Dec 22 15:50:55 1989
X%%EndComments
X%	@(#)psdit.pro	1.3 4/15/88
X% lib/psdit.pro -- prolog for psdit (ditroff) files
X% Copyright (c) 1984, 1985 Adobe Systems Incorporated. All Rights Reserved.
X% last edit: shore Sat Nov 23 20:28:03 1985
X% RCSID: $Header: psdit.pro,v 2.1 85/11/24 12:19:43 shore Rel $
X
X% Changed by Edward Wang (edward@ucbarpa.berkeley.edu) to handle graphics,
X% 17 Feb, 87.
X
X/$DITroff 140 dict def $DITroff begin
X/fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def
X/xi{0 72 11 mul translate 72 resolution div dup neg scale 0 0 moveto
X /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F
X /pagesave save def}def
X/PB{save /psv exch def currentpoint translate 
X resolution 72 div dup neg scale 0 0 moveto}def
X/PE{psv restore}def
X/arctoobig 90 def /arctoosmall .05 def
X/m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def
X/tan{dup sin exch cos div}def
X/point{resolution 72 div mul}def
X/dround	{transform round exch round exch itransform}def
X/xT{/devname exch def}def
X/xr{/mh exch def /my exch def /resolution exch def}def
X/xp{}def
X/xs{docsave restore end}def
X/xt{}def
X/xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not
X {fonts slotno fontname findfont put fontnames slotno fontname put}if}def
X/xH{/fontheight exch def F}def
X/xS{/fontslant exch def F}def
X/s{/fontsize exch def /fontheight fontsize def F}def
X/f{/fontnum exch def F}def
X/F{fontheight 0 le{/fontheight fontsize def}if
X fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore
X fontslant 0 ne{1 0 fontslant tan 1 0 0 m2 astore m3 concatmatrix}if
X makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}def
X/X{exch currentpoint exch pop moveto show}def
X/N{3 1 roll moveto show}def
X/Y{exch currentpoint pop exch moveto show}def
X/S{show}def
X/ditpush{}def/ditpop{}def
X/AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}def
X/AN{4 2 roll moveto 0 exch ashow}def
X/AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}def
X/AS{0 exch ashow}def
X/MX{currentpoint exch pop moveto}def
X/MY{currentpoint pop exch moveto}def
X/MXY{moveto}def
X/cb{pop}def	% action on unknown char -- nothing for now
X/n{}def/w{}def
X/p{pop showpage pagesave restore /pagesave save def}def
X/Dt{/Dlinewidth exch def}def 1 Dt
X/Ds{/Ddash exch def}def -1 Ds
X/Di{/Dstipple exch def}def 1 Di
X/Dsetlinewidth{2 Dlinewidth mul setlinewidth}def
X/Dsetdash{Ddash 4 eq{[8 12]}{Ddash 16 eq{[32 36]}
X {Ddash 20 eq{[32 12 8 12]}{[]}ifelse}ifelse}ifelse 0 setdash}def
X/Dstroke{gsave Dsetlinewidth Dsetdash 1 setlinecap stroke grestore
X currentpoint newpath moveto}def
X/Dl{rlineto Dstroke}def
X/arcellipse{/diamv exch def /diamh exch def oldmat currentmatrix pop
X currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def
X currentpoint exch rad add exch rad -180 180 arc oldmat setmatrix}def
X/Dc{dup arcellipse Dstroke}def
X/De{arcellipse Dstroke}def
X/Da{/endv exch def /endh exch def /centerv exch def /centerh exch def
X /cradius centerv centerv mul centerh centerh mul add sqrt def
X /eradius endv endv mul endh endh mul add sqrt def
X /endang endv endh atan def
X /startang centerv neg centerh neg atan def
X /sweep startang endang sub dup 0 lt{360 add}if def
X sweep arctoobig gt
X {/midang startang sweep 2 div sub def /midrad cradius eradius add 2 div def
X  /midh midang cos midrad mul def /midv midang sin midrad mul def
X  midh neg midv neg endh endv centerh centerv midh midv Da
X  Da}
X {sweep arctoosmall ge
X  {/controldelt 1 sweep 2 div cos sub 3 sweep 2 div sin mul div 4 mul def
X   centerv neg controldelt mul centerh controldelt mul
X   endv neg controldelt mul centerh add endh add
X   endh controldelt mul centerv add endv add
X   centerh endh add centerv endv add rcurveto Dstroke}
X  {centerh endh add centerv endv add rlineto Dstroke}
X  ifelse}
X ifelse}def
X/Dpatterns[
X[%cf[widthbits]
X[8<0000000000000010>]
X[8<0411040040114000>]
X[8<0204081020408001>]
X[8<0000103810000000>]
X[8<6699996666999966>]
X[8<0000800100001008>]
X[8<81c36666c3810000>]
X[8<0f0e0c0800000000>]
X[8<0000000000000010>]
X[8<0411040040114000>]
X[8<0204081020408001>]
X[8<0000001038100000>]
X[8<6699996666999966>]
X[8<0000800100001008>]
X[8<81c36666c3810000>]
X[8<0f0e0c0800000000>]
X[8<0042660000246600>]
X[8<0000990000990000>]
X[8<0804020180402010>]
X[8<2418814242811824>]
X[8<6699996666999966>]
X[8<8000000008000000>]
X[8<00001c3e363e1c00>]
X[8<0000000000000000>]
X[32<00000040000000c00000004000000040000000e0000000000000000000000000>]
X[32<00000000000060000000900000002000000040000000f0000000000000000000>]
X[32<000000000000000000e0000000100000006000000010000000e0000000000000>]
X[32<00000000000000002000000060000000a0000000f00000002000000000000000>]
X[32<0000000e0000000000000000000000000000000f000000080000000e00000001>]
X[32<0000090000000600000000000000000000000000000007000000080000000e00>]
X[32<00010000000200000004000000040000000000000000000000000000000f0000>]
X[32<0900000006000000090000000600000000000000000000000000000006000000>]]
X[%ug
X[8<0000020000000000>]
X[8<0000020000002000>]
X[8<0004020000002000>]
X[8<0004020000402000>]
X[8<0004060000402000>]
X[8<0004060000406000>]
X[8<0006060000406000>]
X[8<0006060000606000>]
X[8<00060e0000606000>]
X[8<00060e000060e000>]
X[8<00070e000060e000>]
X[8<00070e000070e000>]
X[8<00070e020070e000>]
X[8<00070e020070e020>]
X[8<04070e020070e020>]
X[8<04070e024070e020>]
X[8<04070e064070e020>]
X[8<04070e064070e060>]
X[8<06070e064070e060>]
X[8<06070e066070e060>]
X[8<06070f066070e060>]
X[8<06070f066070f060>]
X[8<060f0f066070f060>]
X[8<060f0f0660f0f060>]
X[8<060f0f0760f0f060>]
X[8<060f0f0760f0f070>]
X[8<0e0f0f0760f0f070>]
X[8<0e0f0f07e0f0f070>]
X[8<0e0f0f0fe0f0f070>]
X[8<0e0f0f0fe0f0f0f0>]
X[8<0f0f0f0fe0f0f0f0>]
X[8<0f0f0f0ff0f0f0f0>]
X[8<1f0f0f0ff0f0f0f0>]
X[8<1f0f0f0ff1f0f0f0>]
X[8<1f0f0f8ff1f0f0f0>]
X[8<1f0f0f8ff1f0f0f8>]
X[8<9f0f0f8ff1f0f0f8>]
X[8<9f0f0f8ff9f0f0f8>]
X[8<9f0f0f9ff9f0f0f8>]
X[8<9f0f0f9ff9f0f0f9>]
X[8<9f8f0f9ff9f0f0f9>]
X[8<9f8f0f9ff9f8f0f9>]
X[8<9f8f1f9ff9f8f0f9>]
X[8<9f8f1f9ff9f8f1f9>]
X[8<bf8f1f9ff9f8f1f9>]
X[8<bf8f1f9ffbf8f1f9>]
X[8<bf8f1fdffbf8f1f9>]
X[8<bf8f1fdffbf8f1fd>]
X[8<ff8f1fdffbf8f1fd>]
X[8<ff8f1fdffff8f1fd>]
X[8<ff8f1ffffff8f1fd>]
X[8<ff8f1ffffff8f1ff>]
X[8<ff9f1ffffff8f1ff>]
X[8<ff9f1ffffff9f1ff>]
X[8<ff9f9ffffff9f1ff>]
X[8<ff9f9ffffff9f9ff>]
X[8<ffbf9ffffff9f9ff>]
X[8<ffbf9ffffffbf9ff>]
X[8<ffbfdffffffbf9ff>]
X[8<ffbfdffffffbfdff>]
X[8<ffffdffffffbfdff>]
X[8<ffffdffffffffdff>]
X[8<fffffffffffffdff>]
X[8<ffffffffffffffff>]]
X[%mg
X[8<8000000000000000>]
X[8<0822080080228000>]
X[8<0204081020408001>]
X[8<40e0400000000000>]
X[8<66999966>]
X[8<8001000010080000>]
X[8<81c36666c3810000>]
X[8<f0e0c08000000000>]
X[16<07c00f801f003e007c00f800f001e003c007800f001f003e007c00f801f003e0>]
X[16<1f000f8007c003e001f000f8007c003e001f800fc007e003f001f8007c003e00>]
X[8<c3c300000000c3c3>]
X[16<0040008001000200040008001000200040008000000100020004000800100020>]
X[16<0040002000100008000400020001800040002000100008000400020001000080>]
X[16<1fc03fe07df0f8f8f07de03fc01f800fc01fe03ff07df8f87df03fe01fc00f80>]
X[8<80>]
X[8<8040201000000000>]
X[8<84cc000048cc0000>]
X[8<9900009900000000>]
X[8<08040201804020100800020180002010>]
X[8<2418814242811824>]
X[8<66999966>]
X[8<8000000008000000>]
X[8<70f8d8f870000000>]
X[8<0814224180402010>]
X[8<aa00440a11a04400>]
X[8<018245aa45820100>]
X[8<221c224180808041>]
X[8<88000000>]
X[8<0855800080550800>]
X[8<2844004482440044>]
X[8<0810204080412214>]
X[8<00>]]]def
X/Dfill{
X transform /maxy exch def /maxx exch def
X transform /miny exch def /minx exch def
X minx maxx gt{/minx maxx /maxx minx def def}if
X miny maxy gt{/miny maxy /maxy miny def def}if
X Dpatterns Dstipple 1 sub get exch 1 sub get
X aload pop /stip exch def /stipw exch def /stiph 128 def
X /imatrix[stipw 0 0 stiph 0 0]def
X /tmatrix[stipw 0 0 stiph 0 0]def
X /minx minx cvi stiph idiv stiph mul def
X /miny miny cvi stipw idiv stipw mul def
X gsave eoclip 0 setgray
X miny stiph maxy{
X  tmatrix exch 5 exch put
X  minx stipw maxx{
X   tmatrix exch 4 exch put tmatrix setmatrix
X   stipw stiph true imatrix {stip} imagemask
X  }for
X }for
X grestore
X}def
X/Dp{Dfill Dstroke}def
X/DP{Dfill currentpoint newpath moveto}def
Xend
X
X/ditstart{$DITroff begin
X /nfonts 60 def			% NFONTS makedev/ditroff dependent!
X /fonts[nfonts{0}repeat]def
X /fontnames[nfonts{()}repeat]def
X/docsave save def
X}def
X
X% character outcalls
X/oc{
X /pswid exch def /cc exch def /name exch def
X /ditwid pswid fontsize mul resolution mul 72000 div def
X /ditsiz fontsize resolution mul 72 div def
X ocprocs name known{ocprocs name get exec}{name cb}ifelse
X}def
X/fractm [.65 0 0 .6 0 0] def
X/fraction{
X /fden exch def /fnum exch def gsave /cf currentfont def
X cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto
X fnum show rmoveto currentfont cf setfont(\244)show setfont fden show 
X grestore ditwid 0 rmoveto
X}def
X/oce{grestore ditwid 0 rmoveto}def
X/dm{ditsiz mul}def
X/ocprocs 50 dict def ocprocs begin
X(14){(1)(4)fraction}def
X(12){(1)(2)fraction}def
X(34){(3)(4)fraction}def
X(13){(1)(3)fraction}def
X(23){(2)(3)fraction}def
X(18){(1)(8)fraction}def
X(38){(3)(8)fraction}def
X(58){(5)(8)fraction}def
X(78){(7)(8)fraction}def
X(sr){gsave 0 .06 dm rmoveto(\326)show oce}def
X(is){gsave 0 .15 dm rmoveto(\362)show oce}def
X(->){gsave 0 .02 dm rmoveto(\256)show oce}def
X(<-){gsave 0 .02 dm rmoveto(\254)show oce}def
X(==){gsave 0 .05 dm rmoveto(\272)show oce}def
X(uc){gsave currentpoint 400 .009 dm mul add translate
X     8 -8 scale ucseal oce}def
Xend
X
X% an attempt at a PostScript FONT to implement ditroff special chars
X% this will enable us to 
X%	cache the little buggers
X%	generate faster, more compact PS out of psdit
X%	confuse everyone (including myself)!
X50 dict dup begin
X/FontType 3 def
X/FontName /DIThacks def
X/FontMatrix [.001 0 0 .001 0 0] def
X/FontBBox [-260 -260 900 900] def% a lie but ...
X/Encoding 256 array def
X0 1 255{Encoding exch /.notdef put}for
XEncoding
X dup 8#040/space put %space
X dup 8#110/rc put %right ceil
X dup 8#111/lt put %left  top curl
X dup 8#112/bv put %bold vert
X dup 8#113/lk put %left  mid curl
X dup 8#114/lb put %left  bot curl
X dup 8#115/rt put %right top curl
X dup 8#116/rk put %right mid curl
X dup 8#117/rb put %right bot curl
X dup 8#120/rf put %right floor
X dup 8#121/lf put %left  floor
X dup 8#122/lc put %left  ceil
X dup 8#140/sq put %square
X dup 8#141/bx put %box
X dup 8#142/ci put %circle
X dup 8#143/br put %box rule
X dup 8#144/rn put %root extender
X dup 8#145/vr put %vertical rule
X dup 8#146/ob put %outline bullet
X dup 8#147/bu put %bullet
X dup 8#150/ru put %rule
X dup 8#151/ul put %underline
X pop
X/DITfd 100 dict def
X/BuildChar{0 begin
X /cc exch def /fd exch def
X /charname fd /Encoding get cc get def
X /charwid fd /Metrics get charname get def
X /charproc fd /CharProcs get charname get def
X charwid 0 fd /FontBBox get aload pop setcachedevice
X 2 setlinejoin 40 setlinewidth
X newpath 0 0 moveto gsave charproc grestore
X end}def
X/BuildChar load 0 DITfd put
X/CharProcs 50 dict def
XCharProcs begin
X/space{}def
X/.notdef{}def
X/ru{500 0 rls}def
X/rn{0 840 moveto 500 0 rls}def
X/vr{0 800 moveto 0 -770 rls}def
X/bv{0 800 moveto 0 -1000 rls}def
X/br{0 840 moveto 0 -1000 rls}def
X/ul{0 -140 moveto 500 0 rls}def
X/ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def
X/bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def
X/sq{80 0 rmoveto currentpoint dround newpath moveto
X    640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def
X/bx{80 0 rmoveto currentpoint dround newpath moveto
X    640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def
X/ci{500 360 rmoveto currentpoint newpath 333 0 360 arc
X    50 setlinewidth stroke}def
X
X/lt{0 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def
X/lb{0 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def
X/rt{0 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def
X/rb{0 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def
X/lk{0 800 moveto 0 300 -300 300 s4 arcto pop pop 1000 sub
X    0 300 4 2 roll s4 a4p 0 -200 lineto stroke}def
X/rk{0 800 moveto 0 300 s2 300 s4 arcto pop pop 1000 sub
X    0 300 4 2 roll s4 a4p 0 -200 lineto stroke}def
X/lf{0 800 moveto 0 -1000 rlineto s4 0 rls}def
X/rf{0 800 moveto 0 -1000 rlineto s4 neg 0 rls}def
X/lc{0 -200 moveto 0 1000 rlineto s4 0 rls}def
X/rc{0 -200 moveto 0 1000 rlineto s4 neg 0 rls}def
Xend
X
X/Metrics 50 dict def Metrics begin
X/.notdef 0 def
X/space 500 def
X/ru 500 def
X/br 0 def
X/lt 416 def
X/lb 416 def
X/rt 416 def
X/rb 416 def
X/lk 416 def
X/rk 416 def
X/rc 416 def
X/lc 416 def
X/rf 416 def
X/lf 416 def
X/bv 416 def
X/ob 350 def
X/bu 350 def
X/ci 750 def
X/bx 750 def
X/sq 750 def
X/rn 500 def
X/ul 500 def
X/vr 0 def
Xend
X
XDITfd begin
X/s2 500 def /s4 250 def /s3 333 def
X/a4p{arcto pop pop pop pop}def
X/2cx{2 copy exch}def
X/rls{rlineto stroke}def
X/currx{currentpoint pop}def
X/dround{transform round exch round exch itransform} def
Xend
Xend
X/DIThacks exch definefont pop
Xditstart
X(psc)xT
X576 1 1 xr
X1(Times-Roman)xf 1 f
X2(Times-Italic)xf 2 f
X3(Times-Bold)xf 3 f
X4(Times-BoldItalic)xf 4 f
X5(Helvetica)xf 5 f
X6(Helvetica-Bold)xf 6 f
X7(Courier)xf 7 f
X8(Courier-Bold)xf 8 f
X9(Symbol)xf 9 f
X10(DIThacks)xf 10 f
X10 s
X1 f
Xxi
X%%EndProlog
X
X%%Page: 1 1
X10 s 10 xH 0 xS 1 f
X11 s
X3 f
X14 s
X1420 1144(Tcl:)N
X1669(An)X
X1840(Embeddable)X
X2471(Command)X
X3004(Language)X
X2 f
X12 s
X2070 1469(John)N
X2281(K.)X
X2393(Ousterhout)X
X1 f
X1916 1794(Computer)N
X2325(Science)X
X2649(Division)X
X1548 1893 0.3542(Electrical)AN
X1943(Engineering)X
X2438(and)X
X2601(Computer)X
X3010(Sciences)X
X1752 1992(University)N
X2182(of)X
X2286(California)X
X2701(at)X
X2795(Berkeley)X
X2051 2091(Berkeley,)N
X2447(CA)X
X2604(94720)X
X1920 2190(ouster@sprite.berkeley.edu)N
X3 f
X2187 2614(ABSTRACT)N
X1 f
X11 s
X1040 2878(Tcl)N
X1182(is)X
X1265(an)X
X1372(interpreter)X
X1762(for)X
X1887(a)X
X1949(tool)X
X2110(command)X
X2481(language.)X
X2866(It)X
X2943(consists)X
X3245(of)X
X3341(a)X
X3403(library)X
X3661(pack-)X
X1040 2977(age)N
X1199(that)X
X1369(is)X
X1465(embedded)X
X1864(in)X
X1970(tools)X
X2179(\(such)X
X2406(as)X
X2515(editors,)X
X2813(debuggers,)X
X3232(etc.\))X
X3422(as)X
X3531(the)X
X3675(basic)X
X1040 3076(command)N
X1418(interpreter.)X
X1858(Tcl)X
X2005(provides)X
X2337(\(a\))X
X2463(a)X
X2531(parser)X
X2774(for)X
X2905(a)X
X2973(simple)X
X3238(textual)X
X3508(command)X
X1040 3175(language,)N
X1414(\(b\))X
X1550(a)X
X1623(collection)X
X2006(of)X
X2113(built-in)X
X2408(utility)X
X2655(commands,)X
X3093(and)X
X3254(\(c\))X
X3384(a)X
X3456(C)X
X3548(interface)X
X1040 3274(that)N
X1201(tools)X
X1401(use)X
X1546(to)X
X1642(augment)X
X1973(the)X
X2108(built-in)X
X2396(commands)X
X2805(with)X
X2989(tool-speci\256c)X
X3452(commands.)X
X1040 3373(Tcl)N
X1187(is)X
X1275(particularly)X
X1711(attractive)X
X2069(when)X
X2288(integrated)X
X2670(with)X
X2856(the)X
X2993(widget)X
X3262(library)X
X3526(of)X
X3628(a)X
X3695(win-)X
X1040 3472(dow)N
X1233(system:)X
X1567(it)X
X1659(increases)X
X2022(the)X
X2171(programmability)X
X2806(of)X
X2920(the)X
X3069(widgets)X
X3384(by)X
X3513(providing)X
X1040 3571(mechanisms)N
X1504(for)X
X1634(variables,)X
X2002(procedures,)X
X2437(expressions,)X
X2896(etc;)X
X3073(it)X
X3150(allows)X
X3407(users)X
X3614(to)X
X3710(pro-)X
X1040 3670(gram)N
X1245(both)X
X1426(the)X
X1558(appearance)X
X1977(and)X
X2128(the)X
X2259(actions)X
X2532(of)X
X2628(widgets;)X
X2972(and)X
X3122(it)X
X3195(offers)X
X3422(a)X
X3484(simple)X
X3743(but)X
X1040 3769(powerful)N
X1379(communication)X
X1951(mechanism)X
X2375(between)X
X2690(interactive)X
X3085(programs.)X
X2 f
X1097 4160(This)N
X1271(paper)X
X1498(will)X
X1654(appear)X
X1925(in)X
X2016(the)X
X2146(1990)X
X2344(Winter)X
X2606(USENIX)X
X2931(Conference)X
X3359(Proceedings)X
X1 f
X10 s
X10 f
X720 5323(h)N
X752(hhhhhhhhhhhhhhhhhhhhhhhhhhhh)X
X1 f
X892 5432(The)N
X1052(work)X
X1252(described)X
X1595(here)X
X1769(was)X
X1929(supported)X
X2280(in)X
X2377(part)X
X2537(by)X
X2652(the)X
X2784(National)X
X3094(Science)X
X3378(Foundation)X
X3776(under)X
X3993(Grant)X
X720 5522(ECS-8351961.)N
X
X1 p
X%%Page: 1 2
X10 s 10 xH 0 xS 1 f
X3 f
X11 s
X720 483(Tcl:)N
X894(An)X
X1028(Embeddable)X
X1525(Command)X
X1942(Language)X
X3466(December)X
X3868(22,)X
X4000(1989)X
X720 771(1.)N
X830(Introduction)X
X1 f
X920 903(Tcl)N
X1071(stands)X
X1324(for)X
X1459(``tool)X
X1687(command)X
X2067(language''.)X
X2519(It)X
X2605(consists)X
X2916(of)X
X3021(a)X
X3092(library)X
X3359(package)X
X3679(that)X
X3844(programs)X
X720 1002(can)N
X865(use)X
X1005(as)X
X1101(the)X
X1232(basis)X
X1431(for)X
X1556(their)X
X1740(command)X
X2110(languages.)X
X2528(The)X
X2687(development)X
X3165(of)X
X3260(Tcl)X
X3400(was)X
X3558(motivated)X
X3934(by)X
X4044(two)X
X720 1101(observations.)N
X1240(The)X
X1408(\256rst)X
X1576(observation)X
X2018(is)X
X2108(that)X
X2271(a)X
X2340(general-purpose)X
X2936(programmable)X
X3480(command)X
X3858(language)X
X720 1200(ampli\256es)N
X1075(the)X
X1214(power)X
X1464(of)X
X1568(a)X
X1637(tool)X
X1805(by)X
X1923(allowing)X
X2262(users)X
X2472(to)X
X2571(write)X
X2782(programs)X
X3144(in)X
X3243(the)X
X3381(command)X
X3759(language)X
X4107(in)X
X720 1299(order)N
X933(to)X
X1030(extend)X
X1293(the)X
X1429(tool's)X
X1658(built-in)X
X1947(facilities.)X
X2324(Among)X
X2616(the)X
X2752(best-known)X
X3190(examples)X
X3551(of)X
X3651(powerful)X
X3995(com-)X
X720 1398(mand)N
X943(languages)X
X1322(are)X
X1456(those)X
X1669(of)X
X1769(the)X
X1904(UNIX)X
X2149(shells)X
X2377([5])X
X2506(and)X
X2660(the)X
X2795(Emacs)X
X3057(editor)X
X3290([8].)X
X3463(In)X
X3563(each)X
X3751(case)X
X3929(a)X
X3995(com-)X
X720 1497(puting)N
X970(environment)X
X1440(of)X
X1537(unusual)X
X1834(power)X
X2076(has)X
X2216(arisen,)X
X2471(in)X
X2563(large)X
X2762(part)X
X2922(because)X
X3223(of)X
X3319(the)X
X3450 0.2898(availability)AX
X3872(of)X
X3968(a)X
X4030(pro-)X
X720 1596(grammable)N
X1139(command)X
X1509(language.)X
X920 1728(The)N
X1083(second)X
X1352(motivating)X
X1761(observation)X
X2197(is)X
X2281(that)X
X2439(the)X
X2572(number)X
X2866(of)X
X2964(interactive)X
X3362(applications)X
X3814(is)X
X3898(increas-)X
X720 1827(ing.)N
X911(In)X
X1018(the)X
X1160(timesharing)X
X1611(environments)X
X2125(of)X
X2232(the)X
X2374(late)X
X2536(1970's)X
X2809(and)X
X2970(early)X
X3180(1980's)X
X3453(almost)X
X3722(all)X
X3844(programs)X
X720 1926(were)N
X918(batch-oriented.)X
X1499(They)X
X1708(were)X
X1906(typically)X
X2244(invoked)X
X2556(using)X
X2775(an)X
X2886(interactive)X
X3287(command)X
X3663(shell.)X
X3902(Besides)X
X720 2025(the)N
X851(shell,)X
X1063(only)X
X1243(a)X
X1305(few)X
X1459(other)X
X1663(programs)X
X2018(needed)X
X2290(to)X
X2382(be)X
X2488(interactive,)X
X2906(such)X
X3090(as)X
X3186(editors)X
X3449(and)X
X3599(mailers.)X
X3925(In)X
X4020(con-)X
X720 2124(trast,)N
X923(the)X
X1060(personal)X
X1387(workstations)X
X1866(used)X
X2055(today,)X
X2301(with)X
X2486(their)X
X2676(raster)X
X2899(displays)X
X3216(and)X
X3371(mice,)X
X3593(encourage)X
X3982(a)X
X4049(dif-)X
X720 2223(ferent)N
X954(system)X
X1228(structure)X
X1565(where)X
X1808(a)X
X1876(large)X
X2081(number)X
X2379(of)X
X2480(programs)X
X2840(are)X
X2975(interactive)X
X3376(and)X
X3531(the)X
X3667(most)X
X3867(common)X
X720 2322(style)N
X915(of)X
X1016(interaction)X
X1422(is)X
X1509(to)X
X1606(manipulate)X
X2026(individual)X
X2412(applications)X
X2866(directly)X
X3163(with)X
X3347(a)X
X3413(mouse.)X
X3714(Furthermore,)X
X720 2421(the)N
X855(large)X
X1058(displays)X
X1374(available)X
X1720(today)X
X1943(make)X
X2161(it)X
X2238(possible)X
X2554(for)X
X2683(many)X
X2906(interactive)X
X3306(applications)X
X3760(to)X
X3856(be)X
X3965(active)X
X720 2520(at)N
X806(once,)X
X1016(whereas)X
X1325(this)X
X1475(was)X
X1633(not)X
X1768(practical)X
X2094(with)X
X2273(the)X
X2403(smaller)X
X2685(screens)X
X2965(of)X
X3060(ten)X
X3190(years)X
X3397(ago.)X
X920 2652(Unfortunately,)N
X1462(few)X
X1619(of)X
X1718(today's)X
X2002(interactive)X
X2400(applications)X
X2852(have)X
X3043(the)X
X3176(power)X
X3420(of)X
X3518(the)X
X3651(shell)X
X3843(or)X
X3941(Emacs)X
X720 2751(command)N
X1093(languages.)X
X1514(Where)X
X1773(good)X
X1974(command)X
X2346(languages)X
X2722(exist,)X
X2935(they)X
X3111(tend)X
X3287(to)X
X3380(be)X
X3487(tied)X
X3644(to)X
X3737(speci\256c)X
X4030(pro-)X
X720 2850(grams.)N
X1006(Each)X
X1209(new)X
X1382(interactive)X
X1782(application)X
X2202(requires)X
X2512(a)X
X2577(new)X
X2749(command)X
X3123(language)X
X3467(to)X
X3562(be)X
X3671(developed.)X
X4103(In)X
X720 2949(most)N
X919(cases)X
X1131(application)X
X1551(programmers)X
X2047(do)X
X2162(not)X
X2302(have)X
X2495(the)X
X2630(time)X
X2815(or)X
X2915(inclination)X
X3321(to)X
X3417(implement)X
X3823(a)X
X3888(general-)X
X720 3048(purpose)N
X1046(facility)X
X1345(\(particularly)X
X1829(if)X
X1931(the)X
X2087(application)X
X2528(itself)X
X2752(is)X
X2858(simple\),)X
X3192(so)X
X3317(the)X
X3472(resulting)X
X3828(command)X
X720 3147(languages)N
X1094(tend)X
X1268(to)X
X1359(have)X
X1547(insuf\256cient)X
X1966(power)X
X2207(and)X
X2356(clumsy)X
X2633(syntax.)X
X920 3279(Tcl)N
X1065(is)X
X1151(an)X
X1261(application-independent)X
X2141(command)X
X2516(language.)X
X2905(It)X
X2986(exists)X
X3214(as)X
X3314(a)X
X3380(C)X
X3466(library)X
X3728(package)X
X4043(that)X
X720 3378(can)N
X869(be)X
X978(used)X
X1165(in)X
X1260(many)X
X1482(different)X
X1811(programs.)X
X2213(The)X
X2376(Tcl)X
X2520(library)X
X2781(provides)X
X3110(a)X
X3175(parser)X
X3415(for)X
X3543(a)X
X3608(simple)X
X3870(but)X
X4009(fully)X
X720 3477(programmable)N
X1271(command)X
X1656(language.)X
X2055(The)X
X2229(library)X
X2501(also)X
X2680(implements)X
X3129(a)X
X3204(collection)X
X3589(of)X
X3698(built-in)X
X3995(com-)X
X720 3576(mands)N
X975(that)X
X1133(provide)X
X1427(general-purpose)X
X2018(programming)X
X2523(constructs)X
X2905(such)X
X3091(as)X
X3189(variables,)X
X3554(lists,)X
X3744(expressions,)X
X720 3675(conditionals,)N
X1217(looping,)X
X1552(and)X
X1722(procedures.)X
X2194(Individual)X
X2599(application)X
X3034(programs)X
X3408(extend)X
X3685(the)X
X3835(basic)X
X4058(Tcl)X
X720 3774(language)N
X1066(with)X
X1251(application-speci\256c)X
X1970(commands.)X
X2424(The)X
X2589(Tcl)X
X2735(library)X
X2998(also)X
X3168(provides)X
X3499(a)X
X3565(set)X
X3690(of)X
X3790(utility)X
X4030(rou-)X
X720 3873(tines)N
X909(to)X
X1000(simplify)X
X1317(the)X
X1447 0.2885(implementation)AX
X2025(of)X
X2120(tool-speci\256c)X
X2578(commands.)X
X920 4005(I)N
X982(believe)X
X1270(that)X
X1436(Tcl)X
X1587(is)X
X1679(particularly)X
X2119(useful)X
X2367(in)X
X2468(a)X
X2539(windowing)X
X2967(environment,)X
X3467(and)X
X3626(that)X
X3791(it)X
X3873(provides)X
X720 4104(two)N
X876(advantages.)X
X1335(First,)X
X1543(it)X
X1617(can)X
X1763(be)X
X1870(used)X
X2054(as)X
X2150(a)X
X2212(general-purpose)X
X2801(mechanism)X
X3226(for)X
X3351(programming)X
X3854(the)X
X3985(inter-)X
X720 4203(faces)N
X932(of)X
X1037(applications.)X
X1540(If)X
X1630(a)X
X1701(tool)X
X1871(is)X
X1962(based)X
X2194(on)X
X2314(Tcl,)X
X2486(then)X
X2669(it)X
X2750(should)X
X3016(be)X
X3130(relatively)X
X3495(easy)X
X3682(to)X
X3782(modify)X
X4068(the)X
X720 4302(application's)N
X1206(user)X
X1382(interface)X
X1720(and)X
X1877(to)X
X1975(extend)X
X2239(the)X
X2376(interface)X
X2713(with)X
X2899(new)X
X3074(commands.)X
X3529(Second,)X
X3839(and)X
X3995(more)X
X720 4401(important,)N
X1123(Tcl)X
X1278(provides)X
X1618(a)X
X1694(uniform)X
X2015(framework)X
X2437(for)X
X2576(communication)X
X3162(between)X
X3491(tools.)X
X3743(If)X
X3837(used)X
X4034(uni-)X
X720 4500(formly)N
X991(in)X
X1091(all)X
X1211(tools,)X
X1436(Tcl)X
X1585(will)X
X1754(make)X
X1976(it)X
X2056(possible)X
X2375(for)X
X2507(tools)X
X2709(to)X
X2808(work)X
X3018(together)X
X3337(more)X
X3548(gracefully)X
X3935(than)X
X4117(is)X
X720 4599(possible)N
X1031(today.)X
X920 4731(The)N
X1082(rest)X
X1234(of)X
X1332(this)X
X1485(paper)X
X1705(is)X
X1789(organized)X
X2161(as)X
X2259(follows.)X
X2592(Section)X
X2882(2)X
X2951(describes)X
X3303(the)X
X3436(Tcl)X
X3579(language)X
X3922(as)X
X4020(seen)X
X720 4830(by)N
X833(users.)X
X1082(Section)X
X1372(3)X
X1441(discusses)X
X1793(how)X
X1969(Tcl)X
X2112(is)X
X2196(used)X
X2382(in)X
X2475(applications,)X
X2948(including)X
X3306(the)X
X3438(C-language)X
X3868(interface)X
X720 4929(between)N
X1040(application)X
X1460(programs)X
X1819(and)X
X1973(the)X
X2108(Tcl)X
X2253(library.)X
X2559(Section)X
X2851(4)X
X2922(describes)X
X3276(how)X
X3454(Tcl)X
X3598(can)X
X3746(be)X
X3855(used)X
X4042(in)X
X4137(a)X
X720 5028(windowing)N
X1148(environment)X
X1626(to)X
X1727(customize)X
X2117(interface)X
X2457(actions)X
X2739(and)X
X2898(appearances.)X
X3403(Section)X
X3700(5)X
X3775(shows)X
X4025(how)X
X720 5127(Tcl)N
X864(can)X
X1012(be)X
X1121(used)X
X1308(as)X
X1407(a)X
X1471(vehicle)X
X1751(for)X
X1878(communication)X
X2453(between)X
X2771(applications,)X
X3245(and)X
X3397(why)X
X3573(this)X
X3726(is)X
X3810(important.)X
X720 5226(Section)N
X1010(6)X
X1079(presents)X
X1392(the)X
X1525(status)X
X1750(of)X
X1847(the)X
X1979(Tcl)X
X2121 0.2885(implementation)AX
X2701(and)X
X2852(some)X
X3062(preliminary)X
X3498(performance)X
X3966(meas-)X
X720 5325(urements.)N
X1126(Section)X
X1430(7)X
X1513(compares)X
X1889(Tcl)X
X2046(to)X
X2154(Lisp,)X
X2372(Emacs,)X
X2668(and)X
X2834(NeWS,)X
X3128(and)X
X3293(Section)X
X3596(8)X
X3678(concludes)X
X4068(the)X
X720 5424(paper.)N
X3 f
X2375 6048(-)N
X2426(1)X
X2492(-)X
X
X2 p
X%%Page: 2 3
X11 s 11 xH 0 xS 3 f
X720 483(Tcl:)N
X894(An)X
X1028(Embeddable)X
X1525(Command)X
X1942(Language)X
X3466(December)X
X3868(22,)X
X4000(1989)X
X720 771(2.)N
X830(The)X
X999(Tcl)X
X1144(Language)X
X1 f
X920 903(In)N
X1033(a)X
X1112(sense,)X
X1364(the)X
X1512(syntax)X
X1782(of)X
X1895(the)X
X2043(Tcl)X
X2200(language)X
X2557(is)X
X2655(unimportant:)X
X3151(any)X
X3317(programming)X
X3836(language,)X
X720 1002(whether)N
X1035(it)X
X1117(is)X
X1208(C)X
X1299([6],)X
X1455(Forth)X
X1678([4],)X
X1834(Lisp)X
X2023([1],)X
X2179(or)X
X2284(Postscript)X
X2664([2],)X
X2820(could)X
X3048(provide)X
X3348(many)X
X3575(of)X
X3679(the)X
X3818(same)X
X4030(pro-)X
X720 1101(grammability)N
X1223(and)X
X1376(communication)X
X1952(advantages)X
X2369(as)X
X2468(Tcl.)X
X2656(This)X
X2839(suggests)X
X3162(that)X
X3320(the)X
X3453(best)X
X3620 0.2885(implementation)AX
X720 1200(approach)N
X1065(is)X
X1147(to)X
X1239(borrow)X
X1515(an)X
X1621(existing)X
X1924(language)X
X2265(and)X
X2415(concentrate)X
X2844(on)X
X2955(providing)X
X3321(a)X
X3382(convenient)X
X3791(framework)X
X720 1299(for)N
X852(the)X
X990(use)X
X1137(of)X
X1240(that)X
X1403(language.)X
X1795(However,)X
X2168(the)X
X2306(environment)X
X2782(for)X
X2914(an)X
X3026(embeddable)X
X3481(command)X
X3858(language)X
X720 1398(presents)N
X1038(an)X
X1150(unusual)X
X1453(set)X
X1580(of)X
X1682(constraints)X
X2093(on)X
X2210(the)X
X2347(language,)X
X2716(which)X
X2960(are)X
X3096(described)X
X3462(below.)X
X3750(I)X
X3808(eventually)X
X720 1497(decided)N
X1020(that)X
X1179(a)X
X1244(new)X
X1415(language)X
X1758(designed)X
X2096(from)X
X2292(scratch)X
X2566(could)X
X2787(probably)X
X3125(meet)X
X3322(the)X
X3455(constraints)X
X3862(with)X
X4044(less)X
X720 1596 0.2885(implementation)AN
X1298(effort)X
X1515(than)X
X1689(any)X
X1838(existing)X
X2140(language.)X
X920 1728(Tcl)N
X1065(is)X
X1151(unusual)X
X1452(because)X
X1757(it)X
X1834(presents)X
X2149(two)X
X2308(different)X
X2638(interfaces:)X
X3054(a)X
X3120(textual)X
X3388(interface)X
X3723(to)X
X3819(users)X
X4025(who)X
X720 1827(issue)N
X934(Tcl)X
X1090(commands,)X
X1532(and)X
X1697(a)X
X1774(procedural)X
X2188(interface)X
X2534(to)X
X2641(the)X
X2787(applications)X
X3251(in)X
X3357(which)X
X3609(it)X
X3696(is)X
X3792(embedded.)X
X720 1926(Each)N
X919(of)X
X1015(these)X
X1219(interfaces)X
X1584(must)X
X1779(be)X
X1885(simple,)X
X2166(powerful,)X
X2527(and)X
X2676(ef\256cient.)X
X3031(There)X
X3258(were)X
X3450(four)X
X3618(major)X
X3846(factors)X
X4107(in)X
X720 2025(the)N
X850(language)X
X1190(design:)X
X720 2157([1])N
X3 f
X920(The)X
X1092(language)X
X1454(is)X
X1537(for)X
X1673(commands.)X
X1 f
X2146(Almost)X
X2430(all)X
X2543(Tcl)X
X2685(``programs'')X
X3157(will)X
X3319(be)X
X3426(short,)X
X3648(many)X
X3868(only)X
X4049(one)X
X920 2256(line)N
X1079(long.)X
X1306(Most)X
X1513(programs)X
X1871(will)X
X2035(be)X
X2144(typed)X
X2366(in,)X
X2483(executed)X
X2822(once)X
X3014(or)X
X3113(perhaps)X
X3412(a)X
X3477(few)X
X3633(times,)X
X3872(and)X
X4024(then)X
X920 2355(discarded.)N
X1327(This)X
X1510(suggests)X
X1834(that)X
X1993(the)X
X2127(language)X
X2471(should)X
X2732(have)X
X2924(a)X
X2989(simple)X
X3251(syntax)X
X3506(so)X
X3609(that)X
X3767(it)X
X3842(is)X
X3926(easy)X
X4107(to)X
X920 2454(type)N
X1102(commands.)X
X1558(Most)X
X1769(existing)X
X2079(programming)X
X2589(languages)X
X2971(have)X
X3167(complex)X
X3501(syntax;)X
X3808(the)X
X3946(syntax)X
X920 2553(is)N
X1025(helpful)X
X1321(when)X
X1557(writing)X
X1858(long)X
X2061(programs)X
X2439(but)X
X2598(would)X
X2864(be)X
X2992(clumsy)X
X3292(if)X
X3391(used)X
X3597(for)X
X3744(a)X
X3828(command)X
X920 2652(language.)N
X720 2784([2])N
X3 f
X920(The)X
X1092(language)X
X1455(must)X
X1665(be)X
X1778(programmable.)X
X1 f
X2409(It)X
X2488(should)X
X2748(contain)X
X3032(general)X
X3315(programming)X
X3819(constructs)X
X920 2883(such)N
X1109(as)X
X1210(variables,)X
X1578(procedures,)X
X2013(conditionals,)X
X2495(and)X
X2650(loops,)X
X2891(so)X
X2997(that)X
X3158(users)X
X3366(can)X
X3516(extend)X
X3779(the)X
X3915(built-in)X
X920 2982(command)N
X1293(set)X
X1416(by)X
X1528(writing)X
X1807(Tcl)X
X1949(procedures.)X
X2402 0.2760(Extensibility)AX
X2879(also)X
X3045(argues)X
X3298(for)X
X3424(a)X
X3487(simple)X
X3747(syntax:)X
X4048(this)X
X920 3081(makes)N
X1167(it)X
X1239(easier)X
X1466(for)X
X1590(Tcl)X
X1730(programs)X
X2084(to)X
X2175(generate)X
X2495(other)X
X2698(Tcl)X
X2838(programs.)X
X720 3213([3])N
X3 f
X920(The)X
X1097(language)X
X1465(must)X
X1680(permit)X
X1963(a)X
X2036(simple)X
X2310(and)X
X2481(ef\256cient)X
X2808(interpreter.)X
X1 f
X3296(For)X
X3447(the)X
X3584(Tcl)X
X3731(library)X
X3995(to)X
X4093(be)X
X920 3312(included)N
X1247(in)X
X1339(many)X
X1558(small)X
X1772(programs,)X
X2148(particularly)X
X2577(on)X
X2687(machines)X
X3042(without)X
X3334(shared-library)X
X3849(facilities,)X
X920 3411(the)N
X1058(interpreter)X
X1455(must)X
X1657(not)X
X1800(occupy)X
X2084(much)X
X2310(memory.)X
X2678(The)X
X2845(mechanism)X
X3276(for)X
X3407(interpreting)X
X3848(Tcl)X
X3995(com-)X
X920 3510(mands)N
X1179(must)X
X1380(be)X
X1492(fast)X
X1648(enough)X
X1936(to)X
X2034(be)X
X2146(usable)X
X2400(for)X
X2531(events)X
X2785(that)X
X2947(occur)X
X3171(hundreds)X
X3522(of)X
X3623(times)X
X3843(a)X
X3910(second,)X
X920 3609(such)N
X1103(as)X
X1198(mouse)X
X1450(motion.)X
X720 3741([4])N
X3 f
X920(The)X
X1097(language)X
X1465(must)X
X1680(permit)X
X1964(a)X
X2038(simple)X
X2313(interface)X
X2675(to)X
X2778(C)X
X2871(applications.)X
X1 f
X3401(It)X
X3485(must)X
X3687(be)X
X3800(easy)X
X3986(for)X
X4117(C)X
X920 3840(applications)N
X1380(to)X
X1482(invoke)X
X1755(the)X
X1896(interpreter)X
X2296(and)X
X2456(easy)X
X2645(for)X
X2780(them)X
X2990(to)X
X3092(extend)X
X3360(the)X
X3501(built-in)X
X3794(commands)X
X920 3939(with)N
X1104(application-speci\256c)X
X1822(commands.)X
X2275(This)X
X2459(factor)X
X2691(was)X
X2854(one)X
X3008(of)X
X3108(the)X
X3242(reasons)X
X3531(why)X
X3708(I)X
X3763(decided)X
X4063(not)X
X920 4038(to)N
X1024(use)X
X1176(Lisp)X
X1368(as)X
X1476(the)X
X1619(command)X
X2002(language:)X
X2402(Lisp's)X
X2657(basic)X
X2873(data)X
X3055(types)X
X3276(and)X
X3437(storage)X
X3725(management)X
X920 4137(mechanisms)N
X1385(are)X
X1521(so)X
X1628(different)X
X1960(than)X
X2141(those)X
X2356(of)X
X2458(C)X
X2546(that)X
X2708(it)X
X2787(would)X
X3036(be)X
X3148(dif\256cult)X
X3457(to)X
X3555(build)X
X3766(a)X
X3834(clean)X
X4049(and)X
X920 4236(simple)N
X1178(interface)X
X1508(between)X
X1823(them.)X
X2066(For)X
X2210(Tcl)X
X2350(I)X
X2401(used)X
X2584(a)X
X2645(data)X
X2814(type)X
X2988(\(string\))X
X3269(that)X
X3424(is)X
X3505(natural)X
X3772(to)X
X3863(C.)X
X3 f
X720 4431(2.1.)N
X896(Tcl)X
X1041(Language)X
X1435(Syntax)X
X1 f
X920 4563(Tcl's)N
X1126(basic)X
X1332(syntax)X
X1587(is)X
X1671(similar)X
X1941(to)X
X2034(that)X
X2191(of)X
X2288(the)X
X2420(UNIX)X
X2662(shells:)X
X2912(a)X
X2975(command)X
X3347(consists)X
X3650(of)X
X3747(one)X
X3898(or)X
X3995(more)X
X720 4662(\256elds)N
X938(separated)X
X1297(spaces)X
X1553(or)X
X1653(tabs.)X
X1866(The)X
X2030(\256rst)X
X2194(\256eld)X
X2378(is)X
X2464(the)X
X2599(name)X
X2817(of)X
X2917(a)X
X2983(command,)X
X3380(which)X
X3622(may)X
X3801(be)X
X3910(either)X
X4137(a)X
X720 4761(built-in)N
X1011(command,)X
X1411(an)X
X1524(application-speci\256c)X
X2245(command,)X
X2645(or)X
X2747(a)X
X2815(procedure)X
X3195(consisting)X
X3582(of)X
X3684(a)X
X3752(sequence)X
X4103(of)X
X720 4860(Tcl)N
X861(commands.)X
X1310(Fields)X
X1549(after)X
X1733(the)X
X1864(\256rst)X
X2023(one)X
X2172(are)X
X2301(passed)X
X2557(to)X
X2648(the)X
X2778(command)X
X3148(as)X
X3243(arguments.)X
X3676(Newline)X
X3996(char-)X
X720 4959(acters)N
X951(are)X
X1084(used)X
X1271(as)X
X1370(command)X
X1744(separators,)X
X2148(just)X
X2302(as)X
X2401(in)X
X2496(the)X
X2630(UNIX)X
X2874(shells,)X
X3123(and)X
X3276(semi-colons)X
X3728(may)X
X3906(be)X
X4015(used)X
X720 5058(to)N
X820(separate)X
X1139(commands)X
X1552(on)X
X1671(the)X
X1810(same)X
X2022(line.)X
X2230(Unlike)X
X2501(the)X
X2640(UNIX)X
X2889(shells,)X
X3143(each)X
X3335(Tcl)X
X3484(command)X
X3863(returns)X
X4137(a)X
X720 5157(string)N
X943(result,)X
X1183(or)X
X1278(the)X
X1408(empty)X
X1651(string)X
X1874(if)X
X1950(a)X
X2011(return)X
X2243(value)X
X2456(isn't)X
X2635(appropriate.)X
X920 5289(There)N
X1157(are)X
X1296(four)X
X1474(additional)X
X1860(syntactic)X
X2206(constructs)X
X2595(in)X
X2696(Tcl,)X
X2868(which)X
X3115(give)X
X3299(the)X
X3438(language)X
X3787(a)X
X3857(Lisp-like)X
X720 5388(\257avor.)N
X993(Curly)X
X1218(braces)X
X1466(are)X
X1597(used)X
X1782(to)X
X1875(group)X
X2104(complex)X
X2432(arguments;)X
X2870(they)X
X3045(act)X
X3171(as)X
X3267(nestable)X
X3579(quote)X
X3798(characters.)X
X720 5487(If)N
X803(the)X
X936(\256rst)X
X1097(character)X
X1443(of)X
X1540(an)X
X1647(argument)X
X2004(is)X
X2087(a)X
X2150(open)X
X2345(brace,)X
X2581(then)X
X2757(the)X
X2889(argument)X
X3246(is)X
X3329(not)X
X3466(terminated)X
X3868(by)X
X3980(white)X
X720 5586(space.)N
X969(Instead,)X
X1277(it)X
X1359(is)X
X1450(terminated)X
X1860(by)X
X1980(the)X
X2120(matching)X
X2481(close)X
X2694(brace.)X
X2959(The)X
X3127(argument)X
X3491(passed)X
X3756(to)X
X3856(the)X
X3995(com-)X
X720 5685(mand)N
X955(consists)X
X1273(of)X
X1385(everything)X
X1801(between)X
X2133(the)X
X2280(braces,)X
X2565(with)X
X2761(the)X
X2908(enclosing)X
X3285(braces)X
X3548(stripped)X
X3870(off.)X
X4054(For)X
X720 5784(example,)N
X1063(the)X
X1193(command)X
X3 f
X2375 6048(-)N
X2426(2)X
X2492(-)X
X
X3 p
X%%Page: 3 4
X11 s 11 xH 0 xS 3 f
X720 483(Tcl:)N
X894(An)X
X1028(Embeddable)X
X1525(Command)X
X1942(Language)X
X3466(December)X
X3868(22,)X
X4000(1989)X
X7 f
X10 s
X1040 771(set)N
X1232(a)X
X1328({dog)X
X1568(cat)X
X1760({horse)X
X2096(cow)X
X2288(mule})X
X2576(bear})X
X1 f
X11 s
X720 903(will)N
X886(receive)X
X1168(two)X
X1328(arguments:)X
X1748(``)X
X7 f
X1806(a)X
X1 f
X1859('')X
X1945(and)X
X2100(``)X
X7 f
X2158(dog)X
X2376(cat)X
X2594({horse)X
X2970(cow)X
X3187(mule})X
X3510(bear)X
X1 f
X3722(''.)X
X3851(This)X
X4035(par-)X
X720 1002(ticular)N
X970(command)X
X1342(will)X
X1504(set)X
X1626(the)X
X1758(variable)X
X7 f
X2097(a)X
X1 f
X2174(to)X
X2266(a)X
X2328(string)X
X2552(equal)X
X2766(to)X
X2858(the)X
X2989(second)X
X3256(argument.)X
X3656(If)X
X3737(an)X
X3843(argument)X
X720 1101(is)N
X808(enclosed)X
X1145(in)X
X1243(braces,)X
X1518(then)X
X1699(none)X
X1899(of)X
X2001(the)X
X2138(other)X
X2348(substitutions)X
X2824(described)X
X3190(below)X
X3433(is)X
X3520(made)X
X3739(on)X
X3855(the)X
X3991(argu-)X
X720 1200(ment.)N
X964(One)X
X1133(of)X
X1229(the)X
X1360(most)X
X1555(common)X
X1886(uses)X
X2059(of)X
X2154(braces)X
X2400(is)X
X2481(to)X
X2572(specify)X
X2848(a)X
X2909(Tcl)X
X3049(subprogram)X
X3491(as)X
X3586(an)X
X3691(argument)X
X4046(to)X
X4137(a)X
X720 1299(Tcl)N
X860(command.)X
X920 1431(The)N
X1079(second)X
X1345(syntactic)X
X1681(construct)X
X2026(in)X
X2117(Tcl)X
X2257(is)X
X2338(square)X
X2589(brackets,)X
X2926(which)X
X3163(are)X
X3292(used)X
X3475(to)X
X3566(invoke)X
X3828(command)X
X720 1530(substitution.)N
X1207(If)X
X1295(an)X
X1408(open)X
X1609(bracket)X
X1898(appears)X
X2196(in)X
X2295(an)X
X2408(argument,)X
X2793(then)X
X2974(everything)X
X3380(from)X
X3580(the)X
X3717(open)X
X3917(bracket)X
X720 1629(up)N
X841(to)X
X943(the)X
X1084(matching)X
X1446(close)X
X1660(bracket)X
X1952(is)X
X2043(treated)X
X2315(as)X
X2420(a)X
X2491(command)X
X2871(and)X
X3030(executed)X
X3375(recursively)X
X3798(by)X
X3918(the)X
X4058(Tcl)X
X720 1728(interpreter.)N
X1170(The)X
X1346(result)X
X1581(of)X
X1693(the)X
X1839(command)X
X2225(is)X
X2322(then)X
X2512(substituted)X
X2933(into)X
X3109(the)X
X3255(argument)X
X3626(in)X
X3733(place)X
X3957(of)X
X4068(the)X
X720 1827(bracketed)N
X1084(string.)X
X1351(For)X
X1495(example,)X
X1838(consider)X
X2158(the)X
X2288(command)X
X7 f
X10 s
X1040 1959(set)N
X1232(a)X
X1328([format)X
X1712({Santa)X
X2048(Claus)X
X2336(is)X
X2480(%s)X
X2624(years)X
X2912(old})X
X3152(99])X
X1 f
X11 s
X720 2091(The)N
X7 f
X914(format)X
X1 f
X1258(command)X
X1632(does)X
X7 f
X1849(printf)X
X1 f
X2167(-like)X
X2354(formatting)X
X2752(and)X
X2904(returns)X
X3173(the)X
X3306(string)X
X3532(``)X
X7 f
X3590(Santa)X
X3911(Claus)X
X720 2190(is)N
X879(99)X
X1038(years)X
X1356(old)X
X1 f
X1515('',)X
X1617(which)X
X1854(is)X
X1935(then)X
X2109(passed)X
X2365(to)X
X7 f
X2487(set)X
X1 f
X2668(and)X
X2817(assigned)X
X3142(to)X
X3233(variable)X
X7 f
X3570(a)X
X1 f
X3623(.)X
X920 2322(The)N
X1083(third)X
X1276(syntactic)X
X1616(construct)X
X1965(is)X
X2050(the)X
X2184(dollar)X
X2416(sign,)X
X2611(which)X
X2852(is)X
X2937(used)X
X3124(for)X
X3252(variable)X
X3561(substitution.)X
X4043(If)X
X4126(it)X
X720 2421(appears)N
X1013(in)X
X1106(an)X
X1213(argument)X
X1570(then)X
X1746(the)X
X1878(following)X
X2245(characters)X
X2625(are)X
X2756(treated)X
X3020(as)X
X3117(a)X
X3180(variable)X
X3488(name;)X
X3750(the)X
X3882(contents)X
X720 2520(of)N
X819(the)X
X953(variable)X
X1263(are)X
X1396(substituted)X
X1804(into)X
X1967(the)X
X2100(argument)X
X2458(in)X
X2552(place)X
X2763(of)X
X2861(the)X
X2994(dollar)X
X3225(sign)X
X3397(and)X
X3549(name.)X
X3809(For)X
X3956(exam-)X
X720 2619(ple,)N
X872(the)X
X1002(commands)X
X7 f
X10 s
X1040 2751(set)N
X1232(b)X
X1328(99)X
X1040 2850(set)N
X1232(a)X
X1328([format)X
X1712({Santa)X
X2048(Claus)X
X2336(is)X
X2480(%s)X
X2624(years)X
X2912(old})X
X3152($b])X
X1 f
X11 s
X720 2982(result)N
X945(in)X
X1043(the)X
X1179(same)X
X1388(\256nal)X
X1573(value)X
X1792(for)X
X7 f
X1953(a)X
X1 f
X2034(as)X
X2135(the)X
X2271(single)X
X2510(command)X
X2886(in)X
X2983(the)X
X3119(previous)X
X3450(paragraph.)X
X3873(Variable)X
X720 3081(substitution)N
X1164(isn't)X
X1352(strictly)X
X1629(necessary)X
X2001(since)X
X2213(there)X
X2420(are)X
X2558(other)X
X2770(ways)X
X2981(to)X
X3081(achieve)X
X3381(the)X
X3520(same)X
X3731(effect,)X
X3983(but)X
X4126(it)X
X720 3180(reduces)N
X1010(typing.)X
X920 3312(The)N
X1085(last)X
X1236(syntactic)X
X1578(construct)X
X1929(is)X
X2016(the)X
X2152(backslash)X
X2522(character,)X
X2893(which)X
X3135(may)X
X3314(be)X
X3424(used)X
X3612(to)X
X3708(insert)X
X3931(special)X
X720 3411(characters)N
X1098(into)X
X1258(arguments,)X
X1669(such)X
X1852(as)X
X1947(curly)X
X2150(braces)X
X2396(or)X
X2491(non-printing)X
X2954(characters.)X
X3 f
X720 3606(2.2.)N
X896(Data)X
X1098(Types)X
X1 f
X920 3738(There)N
X1159(is)X
X1252(only)X
X1443(one)X
X1604(type)X
X1789(of)X
X1895(data)X
X2075(in)X
X2177(Tcl:)X
X2375(strings.)X
X2687(All)X
X2833(commands,)X
X3270(arguments)X
X3670(to)X
X3772(commands,)X
X720 3837(results)N
X999(returned)X
X1341(by)X
X1478(commands,)X
X1931(and)X
X2106(variable)X
X2438(values)X
X2711(are)X
X2866(ASCII)X
X3143(strings.)X
X3470(The)X
X3655(use)X
X3820(of)X
X3941(strings)X
X720 3936(throughout)N
X1135(Tcl)X
X1281(makes)X
X1534(it)X
X1612(easy)X
X1796(to)X
X1893(pass)X
X2072(information)X
X2517(back)X
X2711(and)X
X2866(forth)X
X3064(between)X
X3384(Tcl)X
X3529(library)X
X3791(procedures)X
X720 4035(and)N
X878(C)X
X968(code)X
X1164(in)X
X1263(the)X
X1401(enclosing)X
X1769(application.)X
X2236(It)X
X2320(also)X
X2492(makes)X
X2747(it)X
X2827(easier)X
X3062(to)X
X3161(pass)X
X3342(Tcl-related)X
X3759(information)X
X720 4134(back)N
X908(and)X
X1057(forth)X
X1250(between)X
X1565(machines)X
X1920(of)X
X2015(different)X
X2340(types.)X
X920 4266(Although)N
X1287(everything)X
X1698(in)X
X1800(Tcl)X
X1951(is)X
X2043(a)X
X2115(string,)X
X2371(many)X
X2600(commands)X
X3015(expect)X
X3278(their)X
X3473(string)X
X3707(arguments)X
X4107(to)X
X720 4365(have)N
X916(particular)X
X1284(formats.)X
X1627(There)X
X1862(are)X
X1999(three)X
X2205(particularly)X
X2642(common)X
X2981(formats)X
X3280(for)X
X3412(strings:)X
X3724(lists,)X
X3918(expres-)X
X720 4464(sions,)N
X957(and)X
X1118(commands.)X
X1578(A)X
X1675(list)X
X1818(is)X
X1911(just)X
X2073(a)X
X2146(string)X
X2381(containing)X
X2788(one)X
X2949(or)X
X3056(more)X
X3270(\256elds)X
X3494(separated)X
X3859(by)X
X3980(white)X
X720 4563(space,)N
X963(similar)X
X1235(to)X
X1330(a)X
X1395(command.)X
X1813(Curly)X
X2040(braces)X
X2290(may)X
X2468(be)X
X2577(used)X
X2763(to)X
X2857(enclose)X
X3146(complex)X
X3475(list)X
X3609(elements;)X
X3995(these)X
X720 4662(complex)N
X1046(list)X
X1177(elements)X
X1513(are)X
X1642(often)X
X1845(lists)X
X2010(in)X
X2101(their)X
X2285(own)X
X2458(right,)X
X2669(as)X
X2764(in)X
X2855(Lisp.)X
X3078(For)X
X3222(example,)X
X3565(the)X
X3695(string)X
X7 f
X10 s
X1040 4794(dog)N
X1232(cat)X
X1424({horse)X
X1760(cow)X
X1952(mule})X
X2240(bear)X
X1 f
X11 s
X720 4926(is)N
X810(a)X
X880(list)X
X1020(with)X
X1208(four)X
X1385(elements,)X
X1752(the)X
X1891(third)X
X2088(of)X
X2191(which)X
X2436(is)X
X2525(a)X
X2594(list)X
X2733(with)X
X2920(three)X
X3126(elements.)X
X3514(Tcl)X
X3662(provides)X
X3995(com-)X
X720 5025(mands)N
X982(for)X
X1116(a)X
X1187(number)X
X1488(of)X
X1593 0.2383(list-manipulation)AX
X2229(operations,)X
X2649(such)X
X2841(as)X
X2945(creating)X
X3260(lists,)X
X3456(extracting)X
X3840(elements,)X
X720 5124(and)N
X869(computing)X
X1269(list)X
X1400(lengths.)X
X920 5256(The)N
X1089(second)X
X1365(common)X
X1706(form)X
X1909(for)X
X2043(a)X
X2114(string)X
X2347(is)X
X2438(a)X
X2509(numeric)X
X2830(expression.)X
X3281(Tcl)X
X3430(expressions)X
X3871(have)X
X4068(the)X
X720 5355(same)N
X927(operators)X
X1280(and)X
X1433(precedence)X
X1854(as)X
X1953(expressions)X
X2389(in)X
X2484(C.)X
X2612(The)X
X7 f
X2805(expr)X
X1 f
X3042(Tcl)X
X3185(command)X
X3558(evaluates)X
X3911(a)X
X3975(string)X
X720 5454(as)N
X815(an)X
X920(expression)X
X1318(and)X
X1467(returns)X
X1733(the)X
X1863(result)X
X2081(\(as)X
X2205(a)X
X2266(string,)X
X2511(of)X
X2606(course\).)X
X2930(For)X
X3074(example,)X
X3417(the)X
X3547(command)X
X7 f
X10 s
X1040 5586(expr)N
X1280({\($a)X
X1520(<)X
X1616($b\))X
X1808(||)X
X1952(\($c)X
X2144(!=)X
X2288(0\)})X
X1 f
X11 s
X720 5718(returns)N
X988(``)X
X7 f
X1046(1)X
X1 f
X1099('')X
X1181(if)X
X1259(the)X
X1391(numeric)X
X1704(value)X
X1919(of)X
X2016(variable)X
X7 f
X2354(a)X
X1 f
X2430(is)X
X2512(less)X
X2667(than)X
X2842(that)X
X2998(of)X
X3094(variable)X
X7 f
X3432(b)X
X1 f
X3485(,)X
X3530(or)X
X3626(if)X
X3703(variable)X
X7 f
X4041(c)X
X1 f
X4117(is)X
X3 f
X2375 6048(-)N
X2426(3)X
X2492(-)X
X
X4 p
X%%Page: 4 5
X11 s 11 xH 0 xS 3 f
X720 483(Tcl:)N
X894(An)X
X1028(Embeddable)X
X1525(Command)X
X1942(Language)X
X3466(December)X
X3868(22,)X
X4000(1989)X
X1 f
X720 771(zero;)N
X946(otherwise)X
X1316(it)X
X1394(returns)X
X1666(``)X
X7 f
X1724(0)X
X1 f
X1777(''.)X
X1907(Several)X
X2199(other)X
X2408(commands,)X
X2840(such)X
X3029(as)X
X7 f
X3161(if)X
X1 f
X3295(and)X
X7 f
X3481(for)X
X1 f
X3640(,)X
X3690(expect)X
X3948(one)X
X4103(or)X
X720 870(more)N
X923(of)X
X1018(their)X
X1202(arguments)X
X1591(to)X
X1682(be)X
X1787(expressions.)X
X920 1002(The)N
X1089(third)X
X1288(common)X
X1629(interpretation)X
X2137(of)X
X2242(strings)X
X2509(is)X
X2600(as)X
X2705(commands)X
X3119(\(or)X
X3252(sequences)X
X3639(of)X
X3743(commands\).)X
X720 1101(Arguments)N
X1138(of)X
X1238(this)X
X1392(form)X
X1589(are)X
X1722(used)X
X1909(in)X
X2004(Tcl)X
X2148(commands)X
X2556(that)X
X2715(implement)X
X3120(control)X
X3396(structures.)X
X3808(For)X
X3956(exam-)X
X720 1200(ple,)N
X872(consider)X
X1192(the)X
X1322(following)X
X1687(command:)X
X7 f
X10 s
X1040 1332(if)N
X1184({$a)X
X1376(<)X
X1472($b})X
X1664({)X
X1266 1431(set)N
X1458(tmp)X
X1650($a)X
X1266 1530(set)N
X1458(a)X
X1554($b)X
X1266 1629(set)N
X1458(b)X
X1554($tmp)X
X1040 1728(})N
X1 f
X11 s
X720 1893(The)N
X7 f
X912(if)X
X1 f
X1042(command)X
X1414(receives)X
X1726(two)X
X1882(arguments)X
X2273(here,)X
X2470(each)X
X2655(of)X
X2752(which)X
X2991(is)X
X3074(delimited)X
X3433(by)X
X3544(curly)X
X3748(braces.)X
X7 f
X4070(If)X
X1 f
X720 1992(is)N
X806(a)X
X872(built-in)X
X1160(command)X
X1535(that)X
X1695(evaluates)X
X2050(its)X
X2161(\256rst)X
X2325(argument)X
X2685(as)X
X2785(an)X
X2894(expression;)X
X3321(if)X
X3401(the)X
X3535(result)X
X3757(is)X
X3842(non-zero,)X
X7 f
X720 2091(if)N
X1 f
X853(executes)X
X1183(its)X
X1294(second)X
X1565(argument)X
X1925(as)X
X2025(a)X
X2091(Tcl)X
X2236(command.)X
X2655(This)X
X2839(particular)X
X3203(command)X
X3577(swaps)X
X3817(the)X
X3951(values)X
X720 2190(of)N
X815(the)X
X945(variables)X
X7 f
X1316(a)X
X1 f
X1391(and)X
X7 f
X1571(b)X
X1 f
X1646(if)X
X7 f
X1753(a)X
X1 f
X1828(is)X
X1909(less)X
X2063(than)X
X7 f
X2268(b)X
X1 f
X2321(.)X
X920 2322(Tcl)N
X1060(also)X
X1224(allows)X
X1476(users)X
X1678(to)X
X1769(de\256ne)X
X2006(command)X
X2376(procedures)X
X2783(written)X
X3055(in)X
X3146(the)X
X3276(Tcl)X
X3416(language.)X
X3800(I)X
X3851(will)X
X4011(refer)X
X720 2421(to)N
X815(these)X
X1022(procedures)X
X1433(as)X
X2 f
X1532(tclproc)X
X1 f
X1782('s,)X
X1893(in)X
X1988(order)X
X2199(to)X
X2294(distinguish)X
X2708(them)X
X2911(from)X
X3108(other)X
X3315(procedures)X
X3726(written)X
X4001(in)X
X4095(C.)X
X720 2520(The)N
X7 f
X919(proc)X
X1 f
X1162(built-in)X
X1453(command)X
X1831(is)X
X1920(used)X
X2111(to)X
X2210(create)X
X2450(a)X
X2519(tclproc.)X
X2838(For)X
X2990(example,)X
X3341(here)X
X3522(is)X
X3611(a)X
X3680(Tcl)X
X3828(command)X
X720 2619(that)N
X875(de\256nes)X
X1146(a)X
X1207(recursive)X
X1551(factorial)X
X1867(procedure:)X
X7 f
X10 s
X1040 2751(proc)N
X1280(fac)X
X1472(x)X
X1568({)X
X1266 2850(if)N
X1410({$x)X
X1602(==)X
X1746(1})X
X1890({return)X
X2274(1})X
X1266 2949(return)N
X1602([expr)X
X1890({$x)X
X2082(*)X
X2178([fac)X
X2418([expr)X
X2706($x-1]]}])X
X1040 3048(})N
X1 f
X11 s
X720 3213(The)N
X7 f
X912(proc)X
X1 f
X1148(command)X
X1520(takes)X
X1725(three)X
X1925(arguments:)X
X2363(a)X
X2425(name)X
X2639(for)X
X2764(the)X
X2895(new)X
X3064(tclproc,)X
X3354(a)X
X3416(list)X
X3548(of)X
X3644(variable)X
X3951(names)X
X720 3312(\(in)N
X841(this)X
X992(case)X
X1166(the)X
X1297(list)X
X1428(has)X
X1567(only)X
X1746(a)X
X1807(single)X
X2040(element,)X
X7 f
X2395(x)X
X1 f
X2448(\),)X
X2521(and)X
X2670(a)X
X2731(Tcl)X
X2871(command)X
X3241(that)X
X3396(comprises)X
X3775(the)X
X3905(body)X
X4103(of)X
X720 3411(the)N
X858(tclproc.)X
X1177(Once)X
X1392(this)X
X7 f
X1581(proc)X
X1 f
X1823(command)X
X2200(has)X
X2346(been)X
X2541(executed,)X
X7 f
X2936(fac)X
X1 f
X3124(may)X
X3305(be)X
X3417(invoked)X
X3730(just)X
X3887(like)X
X4049(any)X
X720 3510(other)N
X923(Tcl)X
X1063(command.)X
X1477(For)X
X1621(example)X
X7 f
X10 s
X1040 3642(fac)N
X1232(4)X
X1 f
X11 s
X720 3774(will)N
X880(return)X
X1112(the)X
X1242(string)X
X1465(``)X
X7 f
X1523(24)X
X1 f
X1629(''.)X
X920 3906(Figure)N
X1186(1)X
X1266(lists)X
X1445(all)X
X1570(of)X
X1679(the)X
X1823(built-in)X
X2120(Tcl)X
X2274(commands)X
X2692(in)X
X2796(groups.)X
X3114(In)X
X3222(addition)X
X3547(to)X
X3651(the)X
X3794(commands)X
X720 4005(already)N
X1005(mentioned,)X
X1426(Tcl)X
X1570(provides)X
X1899(commands)X
X2307(for)X
X2434(manipulating)X
X2926(strings)X
X3186(\(comparison,)X
X3673(matching,)X
X4049(and)X
X7 f
X720 4104(printf/scanf)N
X1 f
X1356(-like)X
X1546(operations\),)X
X1992(commands)X
X2402(for)X
X2532(manipulating)X
X3027(\256les)X
X3202(and)X
X3357(\256le)X
X3498(names,)X
X3773(and)X
X3928(a)X
X3995(com-)X
X720 4203(mand)N
X941(to)X
X1035(fork)X
X1206(a)X
X1270(subprocess)X
X1680(and)X
X1832(return)X
X2067(the)X
X2200(subprocess's)X
X2673(standard)X
X2996(output)X
X3247(as)X
X3345(result.)X
X3610(The)X
X3772(built-in)X
X4058(Tcl)X
X720 4302(commands)N
X1129(provide)X
X1424(a)X
X1489(simple)X
X1751(but)X
X1890(complete)X
X2240(programming)X
X2746(language.)X
X3134(The)X
X3297(built-in)X
X3584(facilities)X
X3915(may)X
X4093(be)X
X720 4401(extended)N
X1066(in)X
X1163(three)X
X1367(ways:)X
X1622(by)X
X1738(writing)X
X2021(tclprocs;)X
X2353(by)X
X2469(invoking)X
X2811(other)X
X3019(programs)X
X3378(as)X
X3478(subprocesses;)X
X3988(or)X
X4088(by)X
X720 4500(de\256ning)N
X1031(new)X
X1199(commands)X
X1603(with)X
X1782(C)X
X1863(procedures)X
X2270(as)X
X2365(described)X
X2724(in)X
X2815(the)X
X2945(next)X
X3119(section.)X
X3 f
X720 4794(3.)N
X830(Embedding)X
X1288(Tcl)X
X1433(in)X
X1529(Applications)X
X1 f
X920 4926(Although)N
X1282(the)X
X1419(built-in)X
X1709(Tcl)X
X1856(commands)X
X2267(could)X
X2492(conceivably)X
X2947(be)X
X3058(used)X
X3247(as)X
X3348(a)X
X3415(stand-alone)X
X3849(program-)X
X720 5025(ming)N
X927(system,)X
X1219(Tcl)X
X1362(is)X
X1446(really)X
X1672(intended)X
X2001(to)X
X2094(be)X
X2201(embedded)X
X2587(in)X
X2680(application)X
X3097(programs.)X
X3497(I)X
X3550(have)X
X3740(built)X
X3927(several)X
X720 5124(application)N
X1137(programs)X
X1492(using)X
X1706(Tcl,)X
X1869(one)X
X2019(of)X
X2115(which)X
X2353(is)X
X2435(a)X
X2497(mouse-based)X
X2979(editor)X
X3208(for)X
X3333(X)X
X3419(called)X
X2 f
X3653(mx)X
X1 f
X3755(.)X
X3822(In)X
X3918(the)X
X4049(rest)X
X720 5223(of)N
X816(the)X
X947(paper)X
X1165(I)X
X1217(will)X
X1378(use)X
X1518(examples)X
X1873(from)X
X2 f
X2066(mx)X
X1 f
X2190(to)X
X2281(illustrate)X
X2613(how)X
X2786(Tcl)X
X2926(interacts)X
X3247(with)X
X3426(its)X
X3532(enclosing)X
X3892(applica-)X
X720 5322(tion.)N
X920 5454(An)N
X1058(application)X
X1482(using)X
X1704(Tcl)X
X1853(extends)X
X2152(the)X
X2290(built-in)X
X2581(commands)X
X2993(with)X
X3180(a)X
X3249(few)X
X3410(additional)X
X3794(commands)X
X720 5553(related)N
X997(to)X
X1103(that)X
X1273(particular)X
X1648(application.)X
X2122(For)X
X2281(example,)X
X2638(a)X
X2713(clock)X
X2940(program)X
X3274(might)X
X3517(provide)X
X3822(additional)X
X720 5652(commands)N
X1129(to)X
X1225(control)X
X1502(how)X
X1680(the)X
X1815(clock)X
X2033(is)X
X2119(displayed)X
X2484(and)X
X2638(to)X
X2734(set)X
X2859(alarms;)X
X3168(the)X
X2 f
X3303(mx)X
X1 f
X3432(editor)X
X3665(provides)X
X3995(addi-)X
X720 5751(tional)N
X955(commands)X
X1370(to)X
X1472(read)X
X1656(a)X
X1728(\256le)X
X1874(from)X
X2078(disk,)X
X2280(display)X
X2568(it)X
X2651(in)X
X2753(a)X
X2825(window,)X
X3163(select)X
X3396(and)X
X3555(modify)X
X3842(ranges)X
X4103(of)X
X3 f
X2375 6048(-)N
X2426(4)X
X2492(-)X
X
X5 p
X%%Page: 5 6
X11 s 11 xH 0 xS 3 f
X720 483(Tcl:)N
X894(An)X
X1028(Embeddable)X
X1525(Command)X
X1942(Language)X
X3466(December)X
X3868(22,)X
X4000(1989)X
X7 f
X10 s
X1881 3355(catch,)N
X2217(error,)X
X2553(info,)X
X2841(time)X
X3 f
X2217 3257(Miscellaneous)N
X7 f
X2361 3041(exec)N
X3 f
X2068 2943(Invoking)N
X2393(Subprocesses)X
X7 f
X1857 2727(file,)N
X2145(glob,)X
X2433(print,)X
X2769(source)X
X3 f
X2150 2629(File)N
X2299(Manipulation)X
X7 f
X1977 2413(format,)N
X2361(scan,)X
X2649(string)X
X3 f
X2108 2315(String)N
X2341(Manipulation)X
X7 f
X2361 2099(expr)N
X3 f
X2253 2000(Expressions)N
X7 f
X1641 1784(concat,)N
X2025(index,)X
X2361(length,)X
X2745(list,)X
X3033(range)X
X3 f
X2148 1686(List)N
X2301(Manipulation)X
X7 f
X1857 1470(global,)N
X2241(proc,)X
X2529(return,)X
X2913(set)X
X3 f
X2015 1372(Variables)N
X2364(and)X
X2512(Procedures)X
X7 f
X1377 1156(break,)N
X1713(case,)X
X2001(continue,)X
X2481(eval,)X
X2769(for,)X
X3009(foreach,)X
X3441(if)X
X3 f
X2324 1058(Control)N
X-1 Ds
X1 Dt
X1260 3459 MXY
X0 -2592 Dl
X2376 0 Dl
X0 2592 Dl
X-2376 0 Dl
X3 Dt
X-1 Ds
X880 3641(Figure)N
X1130(1)X
X1 f
X(.)S
X1233(The)X
X1381(built-in)X
X1638(Tcl)X
X1767(commands.)X
X2176(This)X
X2340(set)X
X2451(of)X
X2540(commands)X
X2909(is)X
X2984(available)X
X3296(to)X
X3380(any)X
X3518(application)X
X3896(that)X
X880 3731(uses)N
X1038(Tcl.)X
X1205(Additional)X
X1567(commands)X
X1934(may)X
X2092(be)X
X2188(de\256ned)X
X2444(by)X
X2544(the)X
X2662(application.)X
X11 s
X720 3959(bytes,)N
X957(and)X
X1113(write)X
X1323(the)X
X1460(modi\256ed)X
X1803(\256le)X
X1945(back)X
X2140(to)X
X2238(disk.)X
X2458(An)X
X2594(application)X
X3016(programmer)X
X3480(need)X
X3674(only)X
X3859(write)X
X4068(the)X
X720 4058(application-speci\256c)N
X1439(commands;)X
X1896(the)X
X2032(built-in)X
X2321(commands)X
X2731(provide)X
X3028(programmability)X
X3649(and)X
X3803(extensibil-)X
X720 4157(ity)N
X839(``for)X
X1023(free''.)X
X1285(To)X
X1407(users,)X
X1633(the)X
X1765(application-speci\256c)X
X2480(commands)X
X2886(appear)X
X3144(the)X
X3276(same)X
X3481(as)X
X3578(the)X
X3710(built-in)X
X3995(com-)X
X720 4256(mands.)N
X920 4388(Figure)N
X1188(2)X
X1270(shows)X
X1527(the)X
X1673(relationship)X
X2128(between)X
X2458(Tcl)X
X2613(and)X
X2777(the)X
X2922(rest)X
X3086(of)X
X3196(an)X
X3316(application.)X
X3790(Tcl)X
X3945(is)X
X4041(a)X
X4117(C)X
X720 4487(library)N
X984(package)X
X1301(that)X
X1463(is)X
X1551(linked)X
X1801(with)X
X1986(the)X
X2122(application.)X
X2587(The)X
X2752(Tcl)X
X2898(library)X
X3161(includes)X
X3483(a)X
X3550(parser)X
X3792(for)X
X3922(the)X
X4058(Tcl)X
X720 4586(language,)N
X1087(procedures)X
X1499(to)X
X1595(execute)X
X1890(the)X
X2024(built-in)X
X2311(commands,)X
X2741(and)X
X2894(a)X
X2959(set)X
X3083(of)X
X3182(utility)X
X3421(procedures)X
X3832(for)X
X3960(things)X
X720 4685(like)N
X882(expression)X
X1287(evaluation)X
X1684(and)X
X1840(list)X
X1978(management.)X
X2501(The)X
X2666(parser)X
X2908(includes)X
X3230(an)X
X3341(extension)X
X3707(interface)X
X4043(that)X
X720 4784(may)N
X894(be)X
X999(used)X
X1182(to)X
X1273(extend)X
X1530(the)X
X1660(language's)X
X2063(command)X
X2433(set.)X
X920 4916(To)N
X1047(use)X
X1193(Tcl,)X
X1362(an)X
X1474(application)X
X1896(\256rst)X
X2062(creates)X
X2335(an)X
X2447(object)X
X2692(called)X
X2932(an)X
X2 f
X3044(interpreter)X
X1 f
X3426(,)X
X3477(using)X
X3697(the)X
X3833(following)X
X720 5015(library)N
X977(procedure:)X
X7 f
X10 s
X1040 5147(Tcl_Interp)N
X1568(*)X
X1664(Tcl_CreateInterp\(\))X
X1 f
X11 s
X720 5279(An)N
X855(interpreter)X
X1250(consists)X
X1557(of)X
X1658(a)X
X1725(set)X
X1851(of)X
X1952(commands,)X
X2384(a)X
X2451(set)X
X2577(of)X
X2678(variable)X
X2990(bindings,)X
X3344(and)X
X3499(a)X
X3566(command)X
X3942(execu-)X
X720 5378(tion)N
X882(state.)X
X1112(It)X
X1190(is)X
X1273(the)X
X1405(basic)X
X1610(unit)X
X1772(manipulated)X
X2233(by)X
X2345(most)X
X2540(of)X
X2636(the)X
X2767(Tcl)X
X2908(library)X
X3166(procedures.)X
X3618(Simple)X
X3892(applica-)X
X720 5477(tions)N
X919(will)X
X1084(use)X
X1228(only)X
X1412(a)X
X1478(single)X
X1715(interpreter,)X
X2130(while)X
X2352(more)X
X2559(complex)X
X2889(applications)X
X3342(may)X
X3520(use)X
X3663(multiple)X
X3985(inter-)X
X720 5576(preters)N
X997(for)X
X1137(different)X
X1478(purposes.)X
X1872(For)X
X2032(example,)X
X2 f
X2391(mx)X
X1 f
X2530(uses)X
X2718(one)X
X2882(interpreter)X
X3286(for)X
X3425(each)X
X3623(window)X
X3943(on)X
X4068(the)X
X720 5675(screen.)N
X3 f
X2375 6048(-)N
X2426(5)X
X2492(-)X
X
X6 p
X%%Page: 6 7
X11 s 11 xH 0 xS 3 f
X720 483(Tcl:)N
X894(An)X
X1028(Embeddable)X
X1525(Command)X
X1942(Language)X
X3466(December)X
X3868(22,)X
X4000(1989)X
X1 f
X-1 Ds
X1 Dt
X2183 1045 MXY
X604 0 Dl
X2183 1400 MXY
X16 -25 Dl
X-16 9 Dl
X-15 -9 Dl
X15 25 Dl
X0 -355 Dl
X13 s
X3006 867(Application)N
X3142 1471 MXY
X25 15 Dl
X-9 -15 Dl
X9 -16 Dl
X-25 16 Dl
X71 0 Dl
X2929 1542 MXY
X0 71 Dl
X284 0 Dl
X0 -142 Dl
X2929 1400 MXY
X16 -25 Dl
X-16 9 Dl
X-15 -9 Dl
X15 25 Dl
X0 -284 Dl
X2361 1471 MXY
X24 15 Dl
X-8 -15 Dl
X8 -16 Dl
X-24 16 Dl
X355 0 Dl
X1367 867(Tcl)N
X3 Dt
X2787 1116 MXY
X0 -142 Dl
X284 0 Dl
X0 142 Dl
X-284 0 Dl
X2716 1542 MXY
X0 -142 Dl
X426 0 Dl
X0 142 Dl
X-426 0 Dl
X2779 1506(Collect)N
X2857 1080(Init)N
X1935 2465 MXY
X0 -142 Dl
X426 0 Dl
X0 142 Dl
X-426 0 Dl
X2006 1542 MXY
X0 -142 Dl
X355 0 Dl
X0 142 Dl
X-355 0 Dl
X1980 2429(Utilities)N
X3 f
X9 s
X1349 2087(Commands)N
X1349 1980(Built-in)N
X3142 2140(Commands)N
X3142 2033(Speci\256c)N
X3142 1927(Application-)N
X1 f
X13 s
X2053 1506(Parser)N
X3000 2039 MXY
X0 -71 Dl
X71 0 Dl
X0 71 Dl
X-71 0 Dl
X2858 MX
X0 -71 Dl
X71 0 Dl
X0 71 Dl
X-71 0 Dl
X2716 MX
X0 -71 Dl
X71 0 Dl
X0 71 Dl
X-71 0 Dl
X2574 MX
X0 -71 Dl
X71 0 Dl
X0 71 Dl
X-71 0 Dl
X2290 MX
X0 -71 Dl
X71 0 Dl
X0 71 Dl
X-71 0 Dl
X2148 MX
X0 -71 Dl
X71 0 Dl
X0 71 Dl
X-71 0 Dl
X2006 MX
X0 -71 Dl
X71 0 Dl
X0 71 Dl
X-71 0 Dl
X1864 MX
X0 -71 Dl
X71 0 Dl
X0 71 Dl
X-71 0 Dl
X1722 MX
X0 -71 Dl
X71 0 Dl
X0 71 Dl
X-71 0 Dl
X1 Dt
X1757 MX
X0 213 Dl
X249 0 Dl
X1899 2039 MXY
X0 178 Dl
X142 0 Dl
X2006 2323 MXY
X15 -24 Dl
X-15 9 Dl
X-16 -9 Dl
X16 24 Dl
X0 -71 Dl
X2041 2323 MXY
X16 -24 Dl
X-16 9 Dl
X-15 -9 Dl
X15 24 Dl
X0 -106 Dl
X2039 MY
X0 142 Dl
X36 0 Dl
X2323 MY
X15 -24 Dl
X-15 9 Dl
X-16 -9 Dl
X16 24 Dl
X0 -142 Dl
X3036 2039 MXY
X0 213 Dl
X-746 0 Dl
X2323 MY
X16 -24 Dl
X-16 9 Dl
X-16 -9 Dl
X16 24 Dl
X0 -71 Dl
X2894 2039 MXY
X0 178 Dl
X-640 0 Dl
X2323 MY
X16 -24 Dl
X-16 9 Dl
X-15 -9 Dl
X15 24 Dl
X0 -106 Dl
X2752 2039 MXY
X0 142 Dl
X-533 0 Dl
X2323 MY
X16 -24 Dl
X-16 9 Dl
X-16 -9 Dl
X16 24 Dl
X0 -142 Dl
X2610 2039 MXY
X0 107 Dl
X-427 0 Dl
X2323 MY
X16 -24 Dl
X-16 9 Dl
X-15 -9 Dl
X15 24 Dl
X0 -177 Dl
X2326 2039 MXY
X0 71 Dl
X-178 0 Dl
X2323 MY
X16 -24 Dl
X-16 9 Dl
X-16 -9 Dl
X16 24 Dl
X0 -213 Dl
X2183 2039 MXY
X0 35 Dl
X-71 0 Dl
X2323 MY
X16 -24 Dl
X-16 9 Dl
X-15 -9 Dl
X15 24 Dl
X0 -249 Dl
X2326 1968 MXY
X15 -25 Dl
X-15 9 Dl
X-16 -9 Dl
X16 25 Dl
X0 -107 Dl
X2183 1968 MXY
X16 -25 Dl
X-16 9 Dl
X-15 -9 Dl
X15 25 Dl
X0 -71 Dl
X2610 1968 MXY
X15 -25 Dl
X-15 9 Dl
X-16 -9 Dl
X16 25 Dl
X0 -142 Dl
X2752 1968 MXY
X15 -25 Dl
X-15 9 Dl
X-16 -9 Dl
X16 25 Dl
X0 -178 Dl
X2894 1968 MXY
X15 -25 Dl
X-15 9 Dl
X-16 -9 Dl
X16 25 Dl
X0 -213 Dl
X3036 1968 MXY
X15 -25 Dl
X-15 9 Dl
X-16 -9 Dl
X16 25 Dl
X0 -249 Dl
X2326 1542 MXY
X0 177 Dl
X710 0 Dl
X2290 1542 MXY
X0 213 Dl
X604 0 Dl
X2254 1542 MXY
X0 248 Dl
X498 0 Dl
X2219 1542 MXY
X0 284 Dl
X391 0 Dl
X2183 1542 MXY
X0 319 Dl
X143 0 Dl
X2148 1542 MXY
X0 355 Dl
X35 0 Dl
X2041 1542 MXY
X0 177 Dl
X-284 0 Dl
X1968 MY
X16 -25 Dl
X-16 9 Dl
X-15 -9 Dl
X15 25 Dl
X0 -249 Dl
X2077 1542 MXY
X0 213 Dl
X-178 0 Dl
X1968 MY
X16 -25 Dl
X-16 9 Dl
X-15 -9 Dl
X15 25 Dl
X0 -213 Dl
X2112 1542 MXY
X0 248 Dl
X-71 0 Dl
X1968 MY
X16 -25 Dl
X-16 9 Dl
X-15 -9 Dl
X15 25 Dl
X0 -178 Dl
X4 Ds
X2503 2536 MXY
X0 -1633 Dl
X1066 0 Dl
X0 1633 Dl
X-1066 0 Dl
X2432 903 MXY
X0 1633 Dl
X-1136 0 Dl
X0 -1633 Dl
X1136 0 Dl
X3 Dt
X-1 Ds
X3 f
X10 s
X880 2718(Figure)N
X1128(2)X
X1 f
X(.)S
X1229(The)X
X1375(Tcl)X
X1503(library)X
X1738(provides)X
X2035(a)X
X2092(parser)X
X2310(for)X
X2425(the)X
X2544(Tcl)X
X2672(language,)X
X3003(a)X
X3060(set)X
X3170(of)X
X3258(built-in)X
X3513(commands,)X
X3900(and)X
X880 2808(several)N
X1145(utility)X
X1372(procedures.)X
X1801(The)X
X1962(application)X
X2354(provides)X
X2666(application-speci\256c)X
X3330(commands)X
X3713(plus)X
X3882(pro-)X
X880 2898(cedures)N
X1148(to)X
X1232(collect)X
X1468(commands)X
X1837(for)X
X1953(execution.)X
X2327(The)X
X2474(commands)X
X2843(are)X
X2963(parsed)X
X3194(by)X
X3295(Tcl)X
X3423(and)X
X3560(then)X
X3719(passed)X
X3954(to)X
X880 2988(relevant)N
X1159(command)X
X1495(procedures)X
X1868(\(either)X
X2098(in)X
X2180(Tcl)X
X2307(or)X
X2394(in)X
X2476(the)X
X2594(application\))X
X2997(for)X
X3111(execution.)X
X11 s
X920 3216(Once)N
X1138(an)X
X1254(application)X
X1679(has)X
X1828(created)X
X2114(an)X
X2229(interpreter,)X
X2650(it)X
X2732(calls)X
X2926(the)X
X7 f
X3097 0.1992(Tcl_CreateCommand)AX
X1 f
X4030(pro-)X
X720 3315(cedure)N
X976(to)X
X1067(extend)X
X1324(the)X
X1454(interpreter)X
X1843(with)X
X2022(application-speci\256c)X
X2735(commands:)X
X7 f
X10 s
X1360 3480(typedef)N
X1744(int)X
X1936(\(*Tcl_CmdProc\)\(ClientData)X
X3184(clientData,)X
X1586 3579(Tcl_Interp)N
X2114(*interp,)X
X2546(int)X
X2738(argc,)X
X3026(char)X
X3266(*argv[]\);)X
X1360 3777(Tcl_CreateCommand\(Tcl_Interp)N
X2752(*interp,)X
X3184(char)X
X3424(*name,)X
X1586 3876(Tcl_CmdProc)N
X2162(proc,)X
X2450(ClientData)X
X2978(clientData\))X
X1 f
X11 s
X720 4041(Each)N
X919(call)X
X1070(to)X
X7 f
X1193 0.1992(Tcl_CreateCommand)AX
X1 f
X2117(associates)X
X2492(a)X
X2554(particular)X
X2915(command)X
X3285(name)X
X3498(\()X
X7 f
X3527(name)X
X1 f
X3739(\))X
X3790(with)X
X3969(a)X
X4030(pro-)X
X720 4140(cedure)N
X982(that)X
X1142(implements)X
X1582(that)X
X1742(command)X
X2117(\()X
X7 f
X2146(proc)X
X1 f
X2358(\))X
X2414(and)X
X2568(an)X
X2678(arbitrary)X
X3008(single-word)X
X3455(value)X
X3673(to)X
X3769(pass)X
X3947(to)X
X4043(that)X
X720 4239(procedure)N
X1093(\()X
X7 f
X1122(clientData)X
X1 f
X1652(\).)X
X920 4371(After)N
X1136(creating)X
X1451(application-speci\256c)X
X2173(commands,)X
X2608(the)X
X2747(application)X
X3171(enters)X
X3412(a)X
X3482(main)X
X3689(loop)X
X3876(that)X
X4039(col-)X
X720 4470(lects)N
X904(commands)X
X1308(and)X
X1457(passes)X
X1703(them)X
X1902(to)X
X1993(the)X
X7 f
X2154(Tcl_Eval)X
X1 f
X2600(procedure)X
X2973(for)X
X3097(execution:)X
X7 f
X10 s
X1040 4602(int)N
X1232(Tcl_Eval\(Tcl_Interp)X
X2192(*interp,)X
X2624(char)X
X2864(*cmd\))X
X1 f
X11 s
X720 4734(In)N
X825(the)X
X965(simplest)X
X1292(form,)X
X1517(an)X
X1632(application)X
X2057(might)X
X2296(simply)X
X2569(read)X
X2751(commands)X
X3164(from)X
X3366(the)X
X3505(terminal)X
X3831(or)X
X3935(from)X
X4137(a)X
X720 4833(\256le.)N
X908(In)X
X1012(the)X
X2 f
X1151(mx)X
X1 f
X1284(editor)X
X1521(Tcl)X
X1669(commands)X
X2081(are)X
X2218(associated)X
X2610(with)X
X2797(events)X
X3052(such)X
X3243(as)X
X3346(keystrokes,)X
X3774(mouse)X
X4034(but-)X
X720 4932(tons,)N
X916(or)X
X1016(menu)X
X1239(activations;)X
X1696(each)X
X1884(time)X
X2069(an)X
X2179(event)X
X2397(occurs,)X
X2675(the)X
X2810(corresponding)X
X3339(Tcl)X
X3483(command)X
X3857(is)X
X3942(passed)X
X720 5031(to)N
X7 f
X842(Tcl_Eval)X
X1 f
X1266(.)X
X920 5163(The)N
X7 f
X1122(Tcl_Eval)X
X1 f
X1580(procedure)X
X1965(parses)X
X2218(its)X
X7 f
X2367(cmd)X
X1 f
X2559(argument)X
X2925(into)X
X3096(\256elds,)X
X3342(looks)X
X3566(up)X
X3687(the)X
X3828(command)X
X720 5262(name)N
X942(in)X
X1042(the)X
X1181(table)X
X1384(of)X
X1488(those)X
X1705(associated)X
X2098(with)X
X2286(the)X
X2425(interpreter,)X
X2845(and)X
X3003(invokes)X
X3308(the)X
X3447(command)X
X3825(procedure)X
X720 5361(associated)N
X1133(with)X
X1341(that)X
X1525(command.)X
X1968(All)X
X2132(command)X
X2530(procedures,)X
X2987(whether)X
X3320(built-in)X
X3631(or)X
X3754(application-)X
X720 5460(speci\256c,)N
X1039(are)X
X1174(called)X
X1413(in)X
X1510(the)X
X1646(same)X
X1855(way,)X
X2050(as)X
X2150(described)X
X2514(in)X
X2610(the)X
X7 f
X2776(typedef)X
X1 f
X3174(for)X
X7 f
X3334(Tcl_CmdProc)X
X1 f
X3944(above.)X
X720 5559(A)N
X809(command)X
X1183(procedure)X
X1560(is)X
X1645(passed)X
X1905(an)X
X2014(array)X
X2220(of)X
X2319(strings)X
X2580(describing)X
X2973(the)X
X3107(command's)X
X3543(arguments)X
X3935(\()X
X7 f
X3964(argc)X
X1 f
X720 5658(and)N
X7 f
X909(argv)X
X1 f
X1121(\))X
X1181(plus)X
X1359(the)X
X7 f
X1529(clientData)X
X1 f
X2090(value)X
X2312(that)X
X2476(was)X
X2643(associated)X
X3036(with)X
X3224(the)X
X3362(command)X
X3740(when)X
X3960(it)X
X4040(was)X
X720 5757(created.)N
X7 f
X1091(ClientData)X
X1 f
X1663(is)X
X1764(typically)X
X2116(a)X
X2197(pointer)X
X2488(to)X
X2598(an)X
X2722(application-speci\256c)X
X3454(structure)X
X3803(containing)X
X3 f
X2375 6048(-)N
X2426(6)X
X2492(-)X
X
X7 p
X%%Page: 7 8
X11 s 11 xH 0 xS 3 f
X720 483(Tcl:)N
X894(An)X
X1028(Embeddable)X
X1525(Command)X
X1942(Language)X
X3466(December)X
X3868(22,)X
X4000(1989)X
X1 f
X720 771(information)N
X1165(needed)X
X1442(to)X
X1539(execute)X
X1836(the)X
X1972(command.)X
X2392(For)X
X2542(example,)X
X2891(in)X
X2 f
X2988(mx)X
X1 f
X3118(the)X
X7 f
X3285(clientData)X
X1 f
X3843(argument)X
X720 870(points)N
X978(to)X
X1089(a)X
X1170(per-window)X
X1636(data)X
X1825(structure)X
X2175(describing)X
X2584(the)X
X2734(\256le)X
X2889(being)X
X3127(edited)X
X3385(and)X
X3553(the)X
X3702(window)X
X4026(it)X
X4117(is)X
X720 969(displayed)N
X1080(in.)X
X920 1101(Control)N
X1253(mechanisms)X
X1752(like)X
X7 f
X1978(if)X
X1 f
X2146(and)X
X7 f
X2366(for)X
X1 f
X2587(are)X
X2756(implemented)X
X3280(with)X
X3499(recursive)X
X3883(calls)X
X4107(to)X
X7 f
X720 1200(Tcl_Eval)N
X1 f
X1144(.)X
X1212(For)X
X1358(example,)X
X1703(the)X
X1835(command)X
X2207(procedure)X
X2582(for)X
X2708(the)X
X7 f
X2871(if)X
X1 f
X3001(command)X
X3373(evaluates)X
X3724(its)X
X3831(\256rst)X
X3991(argu-)X
X720 1299(ment)N
X924(as)X
X1024(an)X
X1134(expression;)X
X1584(if)X
X1665(the)X
X1800(result)X
X2023(is)X
X2109(non-zero,)X
X2470(then)X
X2649(it)X
X2726(calls)X
X7 f
X2945(Tcl_Eval)X
X1 f
X3395(recursively)X
X3812(to)X
X3907(execute)X
X720 1398(its)N
X838(second)X
X1116(argument)X
X1483(as)X
X1590(a)X
X1663(Tcl)X
X1815(command.)X
X2241(During)X
X2524(the)X
X2666(execution)X
X3043(of)X
X3150(that)X
X3317(command,)X
X7 f
X3752(Tcl_Eval)X
X1 f
X720 1497(may)N
X901(be)X
X1013(called)X
X1253(recursively)X
X1673(again,)X
X1915(and)X
X2071(so)X
X2178(on.)X
X7 f
X2370(Tcl_Eval)X
X1 f
X2823(also)X
X2994(calls)X
X3185(itself)X
X3391(recursively)X
X3810(to)X
X3907(execute)X
X720 1596(bracketed)N
X1084(commands)X
X1488(that)X
X1643(appear)X
X1899(in)X
X1990(arguments.)X
X920 1728(Even)N
X1127(tclprocs)X
X1431(such)X
X1617(as)X
X7 f
X1746(fac)X
X1 f
X1930(use)X
X2072(this)X
X2225(same)X
X2431(basic)X
X2637(mechanism.)X
X3108(When)X
X3343(the)X
X7 f
X3507(proc)X
X1 f
X3744(command)X
X4117(is)X
X720 1827(invoked)N
X1045(to)X
X1155(create)X
X7 f
X1437(fac)X
X1 f
X1596(,)X
X1659(the)X
X7 f
X1839(proc)X
X1 f
X2091(command)X
X2479(procedure)X
X2870(creates)X
X3154(a)X
X3233(new)X
X3419(command)X
X3807(by)X
X3935(calling)X
X7 f
X720 1926 0.1992(Tcl_CreateCommand)AN
X1 f
X1650(as)X
X1752(illustrated)X
X2135(in)X
X2233(Figure)X
X2492(3.)X
X2609(The)X
X2775(new)X
X2950(command)X
X3326(has)X
X3471(the)X
X3607(name)X
X7 f
X3857(fac)X
X1 f
X4016(.)X
X4088(Its)X
X720 2025(command)N
X1095(procedure)X
X1472(\()X
X7 f
X1501(proc)X
X1 f
X1739(in)X
X1834(the)X
X1968(call)X
X2122(to)X
X7 f
X2248 0.1992(Tcl_CreateCommand)AX
X1 f
X3149(\))X
X3204(is)X
X3289(a)X
X3354(special)X
X3625(Tcl)X
X3769(library)X
X4030(pro-)X
X720 2124(cedure)N
X987(called)X
X7 f
X1261(InterpProc)X
X1 f
X1791(,)X
X1845(and)X
X2004(its)X
X7 f
X2151(clientData)X
X1 f
X2713(is)X
X2804(a)X
X2875(pointer)X
X3157(to)X
X3258(a)X
X3329(structure)X
X3669(describing)X
X4068(the)X
X720 2223(tclproc.)N
X1036(This)X
X1220(structure)X
X1555(contains,)X
X1898(among)X
X2165(other)X
X2373(things,)X
X2638(a)X
X2704(copy)X
X2902(of)X
X3002(the)X
X3137(body)X
X3340(of)X
X3440(the)X
X3575(tclproc)X
X3846(\(the)X
X4009(third)X
X720 2322(argument)N
X1090(to)X
X1196(the)X
X7 f
X1372(proc)X
X1 f
X1621(command\).)X
X2079(When)X
X2326(the)X
X7 f
X2502(fac)X
X1 f
X2698(command)X
X3083(is)X
X3179(invoked,)X
X7 f
X3553(Tcl_Eval)X
X1 f
X4014(calls)X
X7 f
X720 2421(InterpProc)N
X1 f
X1250(,)X
X1309(which)X
X1560(in)X
X1665(turn)X
X1843(calls)X
X7 f
X2072(Tcl_Eval)X
X1 f
X2532(to)X
X2637(execute)X
X2942(the)X
X3086(body)X
X3298(of)X
X3407(the)X
X3551(tclproc.)X
X3876(There)X
X4117(is)X
X720 2520(some)N
X933(additional)X
X1314(code)X
X1507(required)X
X1827(to)X
X1923(associate)X
X2268(the)X
X2403(argument)X
X2763(of)X
X2863(the)X
X7 f
X3028(fac)X
X1 f
X3213(command)X
X3587(\(which)X
X3857(is)X
X3942(passed)X
X720 2619(to)N
X7 f
X847(InterpProc)X
X1 f
X1404(in)X
X1499(its)X
X7 f
X1640(argv)X
X1 f
X1878(array\))X
X2113(with)X
X2296(the)X
X7 f
X2461(x)X
X1 f
X2540(variable)X
X2850(used)X
X3037(inside)X
X7 f
X3305(fac)X
X1 f
X3464('s)X
X3553(body,)X
X3777(and)X
X3930(to)X
X4025(sup-)X
X720 2718(port)N
X893(variables)X
X1242(with)X
X1430(local)X
X1633(scope,)X
X1886(but)X
X2030(much)X
X2256(of)X
X2359(the)X
X2497(mechanism)X
X2929(for)X
X3061(tclprocs)X
X3370(is)X
X3459(the)X
X3597(same)X
X3808(as)X
X3911(that)X
X4074(for)X
X720 2817(any)N
X869(other)X
X1072(Tcl)X
X1212(command.)X
X-1 Ds
X1 Dt
X2489 4389 MXY
X 2489 4338 2489 4287 2547.33 4261.5 curveto
X 2605.67 4236 2722.33 4236 2780.67 4206.83 curveto
X 2839 4177.67 2839 4119.33 2839 4061 curveto
XDstroke
X2140 4389 MXY
X 2140 4338 2140 4287 2081.67 4261.5 curveto
X 2023.33 4236 1906.67 4236 1848.33 4206.83 curveto
X 1790 4177.67 1790 4119.33 1790 4061 curveto
XDstroke
X2424 3974 MXY
X 2387.33 3974 2350.67 3974 2332.33 3904.83 curveto
X 2314 3835.67 2314 3697.33 2314 3559 curveto
XDstroke
X1499 3749(\(h\))N
X1914 4361(\(g\))N
X1922 3683(\(f\))N
X2351 3880(\(d\))N
X2616 4361(\(c\))N
X2613 3683(\(b\))N
X2140 3449 MXY
X-30 -19 Dl
X10 19 Dl
X-10 20 Dl
X30 -20 Dl
X4411 MY
X19 -30 Dl
X-19 11 Dl
X-20 -11 Dl
X20 30 Dl
X2402 3537 MXY
X 2402 3595.33 2402 3653.67 2474.83 3682.83 curveto
X 2547.67 3712 2693.33 3712 2766.17 3737.5 curveto
X 2839 3763 2839 3814 2839 3865 curveto
XDstroke
X2227 3537 MXY
X 2227 3595.33 2227 3653.67 2154.17 3682.83 curveto
X 2081.33 3712 1935.67 3712 1862.83 3737.5 curveto
X 1790 3763 1790 3814 1790 3865 curveto
XDstroke
X3886 MY
X19 -30 Dl
X-19 11 Dl
X-19 -11 Dl
X19 30 Dl
X2314 3537 MXY
X-19 30 Dl
X19 -11 Dl
X20 11 Dl
X-20 -30 Dl
X2489 4411 MXY
X19 -30 Dl
X-19 11 Dl
X-19 -11 Dl
X19 30 Dl
X2839 3886 MXY
X19 -30 Dl
X-19 11 Dl
X-19 -11 Dl
X19 30 Dl
X4 Ds
X1965 4673 MXY
X0 -262 Dl
X699 0 Dl
X0 262 Dl
X-699 0 Dl
X2059 4623(Data)N
X2247(Structure)X
X1605 4011(InterpProc)N
X2466 4033(Command)N
X2856(Procedure)X
X7 f
X2733 3945(proc)N
X1 f
X2205 3486(Parser)N
X-1 Ds
X3 Dt
X2140 3537 MXY
X0 -175 Dl
X349 0 Dl
X0 175 Dl
X-349 0 Dl
X2424 4061 MXY
X0 -175 Dl
X830 0 Dl
X0 175 Dl
X-830 0 Dl
X1571 MX
X0 -175 Dl
X438 0 Dl
X0 175 Dl
X-438 0 Dl
X1 Dt
X3974 MY
X 1527.33 3974 1483.67 3974 1461.83 3886.5 curveto
X 1440 3799 1440 3624 1553 3536.5 curveto
X 1666 3449 1892 3449 2118 3449 curveto
XDstroke
X7 f
X2235 4514(fac)N
X2533 3049(proc)N
X2798(fac)X
X3010(x)X
X3116({...})X
X1 f
X2402 3362 MXY
X19 -30 Dl
X-19 11 Dl
X-19 -11 Dl
X19 30 Dl
X0 -350 Dl
X2227 3362 MXY
X19 -30 Dl
X-19 11 Dl
X-19 -11 Dl
X19 30 Dl
X0 -350 Dl
X2402 MX
X87 0 Dl
X2227 MX
X-87 0 Dl
X2446 3224(\(a\))N
X2086(\(e\))X
X7 f
X1831 3049(fac)N
X2043(5)X
X1 f
X3 Dt
X-1 Ds
X3 f
X10 s
X880 4855(Figure)N
X1135(3)X
X1 f
X(.)S
X1242(The)X
X1394(creation)X
X1680(and)X
X1823(execution)X
X2162(of)X
X2256(a)X
X2319(tclproc)X
X2569(\(a)X
X2659(procedure)X
X3008(written)X
X3262(in)X
X3351(Tcl\):)X
X3554(\(a\))X
X3671(the)X
X7 f
X3824(proc)X
X1 f
X880 4945(command)N
X1218(is)X
X1293(invoked,)X
X1593(e.g.)X
X1731(to)X
X1815(create)X
X2030(the)X
X7 f
X2178(fac)X
X1 f
X2344(procedure;)X
X2730(\(b\))X
X2846(the)X
X2965(Tcl)X
X3093(parser)X
X3311(invokes)X
X3581(the)X
X3700(command)X
X880 5035(procedure)N
X1225(associated)X
X1578(with)X
X7 f
X1771(proc)X
X1 f
X(;)S
X2028(\(c\))X
X2141(the)X
X7 f
X2290(proc)X
X1 f
X2505(command)X
X2844(procedure)X
X3189(creates)X
X3436(a)X
X3495(data)X
X3651(structure)X
X3954(to)X
X880 5125(hold)N
X1047(the)X
X1170(Tcl)X
X1301(command)X
X1641(that)X
X1785(is)X
X7 f
X1890(fac)X
X1 f
X('s)S
X2116(body;)X
X2342(\(d\))X
X7 f
X2488(fac)X
X1 f
X2656(is)X
X2733(registered)X
X3074(as)X
X3165(a)X
X3225(new)X
X3383(Tcl)X
X3514(command,)X
X3874(with)X
X7 f
X880 5215(InterpProc)N
X1 f
X1388(as)X
X1483(its)X
X1585(command)X
X1928(procedure;)X
X2319(\(e\))X
X7 f
X2464(fac)X
X1 f
X2635(is)X
X2715(invoked)X
X3000(as)X
X3094(a)X
X3157(Tcl)X
X3291(command;)X
X3676(\(f\))X
X3784(the)X
X3909(Tcl)X
X880 5305(parser)N
X1112(invokes)X
X7 f
X1424(InterpProc)X
X1 f
X1939(as)X
X2041(the)X
X2174(command)X
X2524(procedure)X
X2880(for)X
X7 f
X3036(fac)X
X1 f
X(;)S
X3256(\(g\))X
X7 f
X3412(InterpProc)X
X1 f
X3926(re-)X
X880 5395(trieves)N
X1118(the)X
X1240(body)X
X1424(of)X
X7 f
X1543(fac)X
X1 f
X1711(from)X
X1891(the)X
X2013(data)X
X2171(structure;)X
X2518(and)X
X2658(\(h\))X
X2775(the)X
X2896(Tcl)X
X3026(commands)X
X3396(in)X
X7 f
X3509(fac)X
X1 f
X('s)S
X3734(body)X
X3917(are)X
X880 5485(passed)N
X1114(back)X
X1286(to)X
X1368(the)X
X1486(Tcl)X
X1613(parser)X
X1830(for)X
X1944(execution.)X
X3 f
X11 s
X2375 6048(-)N
X2426(7)X
X2492(-)X
X
X8 p
X%%Page: 8 9
X11 s 11 xH 0 xS 3 f
X720 483(Tcl:)N
X894(An)X
X1028(Embeddable)X
X1525(Command)X
X1942(Language)X
X3466(December)X
X3868(22,)X
X4000(1989)X
X1 f
X920 771(A)N
X1009(Tcl)X
X1152(command)X
X1525(procedure)X
X1901(returns)X
X2170(two)X
X2327(results)X
X2582(to)X
X7 f
X2707(Tcl_Eval)X
X1 f
X3131(:)X
X3181(an)X
X3289(integer)X
X3559(return)X
X3794(code)X
X3985(and)X
X4137(a)X
X720 870(string.)N
X992(The)X
X1156(return)X
X1393(code)X
X1586(is)X
X1672(returned)X
X1992(as)X
X2092(the)X
X2227(procedure's)X
X2668(result,)X
X2913(and)X
X3067(the)X
X3202(string)X
X3430(is)X
X3515(stored)X
X3756(in)X
X3851(the)X
X3985(inter-)X
X720 969(preter,)N
X975(from)X
X1174(which)X
X1417(it)X
X1495(can)X
X1645(be)X
X1756(retrieved)X
X2097(later.)X
X7 f
X2356(Tcl_Eval)X
X1 f
X2807(returns)X
X3078(the)X
X3213(same)X
X3421(code)X
X3614(and)X
X3768(string)X
X3996(to)X
X4092(its)X
X720 1068(caller.)N
X990(Table)X
X1221(I)X
X1280(summarizes)X
X1731(the)X
X1869(return)X
X2108(codes)X
X2337(and)X
X2493(strings.)X
X2801(Normally)X
X3168(the)X
X3305(return)X
X3544(code)X
X3739(is)X
X7 f
X3858(TCL_OK)X
X1 f
X720 1167(and)N
X878(the)X
X1017(string)X
X1249(contains)X
X1574(the)X
X1713(result)X
X1940(of)X
X2044(the)X
X2183(command.)X
X2605(If)X
X2693(an)X
X2806(error)X
X3006(occurs)X
X3265(in)X
X3364(executing)X
X3737(a)X
X3806(command,)X
X720 1266(then)N
X896(the)X
X1028(return)X
X1262(code)X
X1452(will)X
X1614(be)X
X7 f
X1752(TCL_ERROR)X
X1 f
X2253(and)X
X2404(the)X
X2536(string)X
X2761(will)X
X2923(describe)X
X3240(the)X
X3372(error)X
X3565(condition.)X
X3966(When)X
X7 f
X720 1365(TCL_ERROR)N
X1 f
X1220(is)X
X1302(returned)X
X1618(\(or)X
X1742(any)X
X1891(value)X
X2104(other)X
X2307(than)X
X7 f
X2512(TCL_OK)X
X1 f
X2830(\),)X
X2903(the)X
X3033(normal)X
X3305(action)X
X3543(is)X
X3624(for)X
X3748(nested)X
X3995(com-)X
X720 1464(mand)N
X943(procedures)X
X1355(to)X
X1451(return)X
X1688(the)X
X1823(same)X
X2031(code)X
X2224(and)X
X2378(string)X
X2606(to)X
X2701(their)X
X2889(callers,)X
X3167(unwinding)X
X3570(all)X
X3685(pending)X
X3995(com-)X
X720 1563(mand)N
X945(executions)X
X1351(until)X
X1543(eventually)X
X1940(the)X
X2077(return)X
X2316(code)X
X2511(and)X
X2667(string)X
X2897(are)X
X3033(returned)X
X3355(by)X
X3472(the)X
X3609(top-level)X
X3951(call)X
X4107(to)X
X7 f
X720 1662(Tcl_Eval)N
X1 f
X1144(.)X
X1212(At)X
X1324(this)X
X1476(point)X
X1682(the)X
X1814(application)X
X2231(will)X
X2393(normally)X
X2736(display)X
X3015(the)X
X3147(error)X
X3341(message)X
X3663(for)X
X3788(the)X
X3919(user)X
X4088(by)X
X720 1761(printing)N
X1022(it)X
X1094(on)X
X1204(the)X
X1334(terminal)X
X1651(or)X
X1746(displaying)X
X2136(it)X
X2208(in)X
X2299(a)X
X2360(noti\256er)X
X2637(window.)X
X920 1893(Return)N
X1185(codes)X
X1410(other)X
X1616(than)X
X7 f
X1824(TCL_OK)X
X1 f
X2166(or)X
X7 f
X2294(TCL_ERROR)X
X1 f
X2795(cause)X
X3014(partial)X
X3264(unwinding.)X
X3709(For)X
X3855(example,)X
X720 1992(the)N
X7 f
X884(break)X
X1 f
X1174(command)X
X1547(returns)X
X1816(a)X
X7 f
X1911(TCL_BREAK)X
X1 f
X2413(code.)X
X2648(This)X
X2830(causes)X
X3084(nested)X
X3334(command)X
X3706(executions)X
X4107(to)X
X720 2091(be)N
X855(unwound)X
X1234(until)X
X1449(a)X
X1540(nested)X
X7 f
X1847(for)X
X1 f
X2057(or)X
X7 f
X2212(foreach)X
X1 f
X2634(command)X
X3033(is)X
X3143(reached.)X
X3511(When)X
X3772(a)X
X7 f
X3893(for)X
X1 f
X4103(or)X
X7 f
X720 2190(foreach)N
X1 f
X1119(command)X
X1495(invokes)X
X7 f
X1828(Tcl_Eval)X
X1 f
X2280(recursively,)X
X2720(it)X
X2797(checks)X
X3063(specially)X
X3404(for)X
X3533(the)X
X7 f
X3699(TCL_BREAK)X
X1 f
X720 2289(result.)N
X993(When)X
X1236(this)X
X1397(occurs)X
X1658(the)X
X7 f
X1829(for)X
X1 f
X2020(or)X
X7 f
X2156(foreach)X
X1 f
X2559(command)X
X2939(terminates)X
X3339(the)X
X3479(loop,)X
X3690(but)X
X3835(it)X
X3917(doesn't)X
X720 2388(return)N
X955(the)X
X7 f
X1119(TCL_BREAK)X
X1 f
X1620(code)X
X1810(to)X
X1903(its)X
X2011(caller.)X
X2275(Instead)X
X2553(it)X
X2627(returns)X
X7 f
X2926(TCL_OK)X
X1 f
X3244(.)X
X3312(Thus)X
X3512(no)X
X3624(higher)X
X3873(levels)X
X4103(of)X
X720 2487(execution)N
X1104(are)X
X1252(aborted.)X
X1601(The)X
X7 f
X1810(TCL_CONTINUE)X
X1 f
X2487(return)X
X2737(code)X
X2943(is)X
X3042(also)X
X3224(handled)X
X3543(by)X
X3671(the)X
X7 f
X3850(for)X
X1 f
X4049(and)X
X7 f
X720 2586(foreach)N
X1 f
X1122(commands)X
X1535(\(they)X
X1746(go)X
X1864(on)X
X1982(to)X
X2081(the)X
X2219(next)X
X2401(loop)X
X2588(iteration\))X
X2942(and)X
X7 f
X3130(TCL_RETURN)X
X1 f
X3690(is)X
X3779(handled)X
X4088(by)X
X720 2685(the)N
X7 f
X887(InterpProc)X
X1 f
X1445(procedure.)X
X1868(Only)X
X2072(a)X
X2138(few)X
X2296(command)X
X2671(procedures,)X
X3105(like)X
X7 f
X3296(break)X
X1 f
X3588(and)X
X7 f
X3773(for)X
X1 f
X3932(,)X
X3981(know)X
X720 2784(anything)N
X1061(about)X
X1289(special)X
X1566(return)X
X1808(codes)X
X2040(such)X
X2233(as)X
X7 f
X2369(TCL_BREAK)X
X1 f
X2846(;)X
X2925(other)X
X3138(command)X
X3518(procedures)X
X3935(simply)X
X720 2883(abort)N
X923(whenever)X
X1286(they)X
X1460(see)X
X1594(any)X
X1743(return)X
X1975(code)X
X2163(other)X
X2366(than)X
X7 f
X2571(TCL_OK)X
X1 f
X2889(.)X
X920 3015(The)N
X7 f
X1129(catch)X
X1 f
X1435(command)X
X1824(may)X
X2017(be)X
X2141(used)X
X2343(to)X
X2453(prevent)X
X2758(complete)X
X3123(unwinding)X
X3540(on)X
X7 f
X3699(TCL_ERROR)X
X1 f
X720 3114(returns.)N
X7 f
X1064(Catch)X
X1 f
X1354(takes)X
X1560(an)X
X1668(argument)X
X2026(that)X
X2184(is)X
X2268(a)X
X2332(Tcl)X
X2475(command)X
X2847(to)X
X2940(execute.)X
X3277(It)X
X3355(passes)X
X3603(the)X
X3735(command)X
X4107(to)X
X7 f
X720 3213(Tcl_Eval)N
X1 f
X1182(for)X
X1322(execution,)X
X1725(but)X
X1875(always)X
X2156(returns)X
X7 f
X2468(TCL_OK)X
X1 f
X2786(.)X
X2867(If)X
X2962(an)X
X3082(error)X
X3289(occurs)X
X3555(in)X
X3661(the)X
X3806(command,)X
X7 f
X720 3312(catch)N
X1 f
X985('s)X
X1081(command)X
X1462(procedure)X
X1846(detects)X
X2124(the)X
X7 f
X2296(TCL_ERROR)X
X1 f
X2806(return)X
X3049(value)X
X3273(from)X
X7 f
X3508(Tcl_Eval)X
X1 f
X3932(,)X
X3986(saves)X
X720 3411(information)N
X1162(about)X
X1383(the)X
X1516(error)X
X1710(in)X
X1803(Tcl)X
X1945(variables,)X
X2309(and)X
X2460(then)X
X2636(returns)X
X2904(TCL_OK)X
X3265(to)X
X3358(its)X
X3466(caller.)X
X3730(In)X
X3827(almost)X
X4087(all)X
X720 3510(cases)N
X928(I)X
X980(think)X
X1185(the)X
X1316(best)X
X1481(response)X
X1811(to)X
X1903(an)X
X2009(error)X
X2202(is)X
X2284(to)X
X2376(abort)X
X2580(all)X
X2692(command)X
X3063(invocations)X
X3493(and)X
X3642(notify)X
X3875(the)X
X4005(user;)X
X7 f
X720 3609(catch)N
X1 f
X1026(is)X
X1126(provided)X
X1480(for)X
X1623(those)X
X1850(few)X
X2022(occasions)X
X2405(where)X
X2660(an)X
X2783(error)X
X2993(is)X
X3092(expected)X
X3445(and)X
X3612(can)X
X3774(be)X
X3897(handled)X
X720 3708(without)N
X1012(aborting.)X
X3 f
X720 4002(4.)N
X830(Tcl)X
X975(and)X
X1139(Window)X
X1479(Applications)X
X1 f
X920 4134(An)N
X1061(embeddable)X
X1521(command)X
X1903(language)X
X2255(like)X
X2422(Tcl)X
X2574(offers)X
X2811(particular)X
X3182(advantages)X
X3606(in)X
X3708(a)X
X3780(windowing)X
X720 4233(environment.)N
X1259(This)X
X1465(is)X
X1572(partly)X
X1826(because)X
X2152(there)X
X2376(are)X
X2531(many)X
X2775(interactive)X
X3196(programs)X
X3576(in)X
X3693(a)X
X3780(windowing)X
X720 4332(environment)N
X1192(\(hence)X
X1452(many)X
X1674(places)X
X1920(to)X
X2015(use)X
X2158(a)X
X2223(command)X
X2597(language\))X
X2970(and)X
X3122(partly)X
X3353(because)X
X3656(con\256gurability)X
X10 f
X955 4472(i)N
X992(iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii)X
X1 f
X1093 4571(Return)N
X1355(Code)X
X2322(Meaning)X
X3501(String)X
X10 f
X955 4582(i)N
X992(iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii)X
X7 f
X999 4681(TCL_OK)N
X1 f
X1767(Command)X
X2157(completed)X
X2547(normally)X
X3322(Result)X
X7 f
X999 4780(TCL_ERROR)N
X1 f
X1767(Error)X
X1974(occurred)X
X2303(in)X
X2394(command)X
X3322(Error)X
X3529(message)X
X7 f
X999 4879(TCL_BREAK)N
X1 f
X1767(Should)X
X2039(abort)X
X2242(innermost)X
X2617(loop)X
X3322(None)X
X7 f
X999 4978(TCL_CONTINUE)N
X1 f
X1767(Should)X
X2039(skip)X
X2208(innermost)X
X2583(iteration)X
X3322(None)X
X7 f
X999 5077(TCL_RETURN)N
X1 f
X1767(Should)X
X2039(return)X
X2271(from)X
X2464(innermost)X
X2839(procedure)X
X3322(Procedure)X
X3700(result)X
X10 f
X955 5088(i)N
X992(iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii)X
X955(c)X
X5000(c)Y
X4912(c)Y
X4824(c)Y
X4736(c)Y
X4648(c)Y
X4560(c)Y
X1701 5088(c)N
X5000(c)Y
X4912(c)Y
X4824(c)Y
X4736(c)Y
X4648(c)Y
X4560(c)Y
X3256 5088(c)N
X5000(c)Y
X4912(c)Y
X4824(c)Y
X4736(c)Y
X4648(c)Y
X4560(c)Y
X3940 5088(c)N
X5000(c)Y
X4912(c)Y
X4824(c)Y
X4736(c)Y
X4648(c)Y
X4560(c)Y
X3 f
X10 s
X880 5244(Table)N
X1099(I)X
X1 f
X1130(.)X
X1194(Each)X
X1378(Tcl)X
X1508(command)X
X1847(returns)X
X2093(a)X
X2152(code)X
X2327(describing)X
X2684(what)X
X2863(happened)X
X3194(and)X
X3333(a)X
X3392(string)X
X3597(that)X
X3740(provides)X
X880 5334(additional)N
X1235(information.)X
X1687(If)X
X1775(the)X
X1907(return)X
X2133(code)X
X2319(is)X
X2406(not)X
X7 f
X2570(TCL_OK)X
X1 f
X(,)S
X2912(then)X
X3084(nested)X
X3323(command)X
X3673(executions)X
X880 5424(unwind)N
X1146(and)X
X1287(return)X
X1504(the)X
X1627(same)X
X1817(code,)X
X2014(until)X
X2185(reaching)X
X2487(top-level)X
X2797(or)X
X2889(some)X
X3083(command)X
X3424(that)X
X3569(is)X
X3647(prepared)X
X3954(to)X
X880 5514(deal)N
X1034(with)X
X1196(the)X
X1314(exceptional)X
X1704(return)X
X1916(code.)X
X3 f
X11 s
X2375 6048(-)N
X2426(8)X
X2492(-)X
X
X9 p
X%%Page: 9 10
X11 s 11 xH 0 xS 3 f
X720 483(Tcl:)N
X894(An)X
X1028(Embeddable)X
X1525(Command)X
X1942(Language)X
X3466(December)X
X3868(22,)X
X4000(1989)X
X1 f
X720 771(is)N
X807(important)X
X1179(in)X
X1276(today's)X
X1563(windowing)X
X1987(environments)X
X2495(and)X
X2650(a)X
X2716(language)X
X3061(like)X
X3221(Tcl)X
X3366(provides)X
X3696(the)X
X3831(\257exibility)X
X720 870(to)N
X828(recon\256gure.)X
X1311(Tcl)X
X1468(can)X
X1628(be)X
X1749(used)X
X1948(for)X
X2088(two)X
X2258(purposes)X
X2608(in)X
X2715(a)X
X2792(window)X
X3113(application:)X
X3591(to)X
X3698(con\256gure)X
X4068(the)X
X720 969(application's)N
X1211(interface)X
X2 f
X1554(actions)X
X1 f
X1809(,)X
X1866(and)X
X2028(to)X
X2132(con\256gure)X
X2499(the)X
X2641(application's)X
X3131(interface)X
X2 f
X3473(appearance)X
X1 f
X3888(.)X
X3966(These)X
X720 1068(two)N
X874(purposes)X
X1208(are)X
X1337(discussed)X
X1696(in)X
X1787(the)X
X1917(paragraphs)X
X2324(below.)X
X920 1200(The)N
X1086(\256rst)X
X1251(use)X
X1396(of)X
X1497(Tcl)X
X1643(is)X
X1730(for)X
X1860(interface)X
X2196(actions.)X
X2518(Ideally,)X
X2813(each)X
X3002(event)X
X3221(that)X
X3382(has)X
X3527(any)X
X3682(importance)X
X4107(to)X
X720 1299(the)N
X867(application)X
X1299(should)X
X1573(be)X
X1695(bound)X
X1954(to)X
X2062(a)X
X2140(Tcl)X
X2297(command.)X
X2728(Each)X
X2943(keystroke,)X
X3346(each)X
X3546(mouse)X
X3814(motion)X
X4103(or)X
X720 1398(mouse)N
X977(button)X
X1230(press)X
X1437(\(or)X
X1566(release\),)X
X1887(and)X
X2040(each)X
X2227(menu)X
X2449(entry)X
X2656(should)X
X2917(be)X
X3026(associated)X
X3414(with)X
X3597(a)X
X3662(Tcl)X
X3806(command.)X
X720 1497(When)N
X960(the)X
X1098(event)X
X1319(occurs,)X
X1600(it)X
X1680(is)X
X1769(\256rst)X
X1936(mapped)X
X2244(to)X
X2342(its)X
X2455(Tcl)X
X2602(command)X
X2979(and)X
X3135(then)X
X3316(executed)X
X3658(by)X
X3775(passing)X
X4068(the)X
X720 1596(command)N
X1109(to)X
X7 f
X1250(Tcl_Eval)X
X1 f
X1674(.)X
X1758(The)X
X1935(application)X
X2368(should)X
X2643(not)X
X2796(take)X
X2983(any)X
X3150(actions)X
X3440(directly;)X
X3797(all)X
X3926(actions)X
X720 1695(should)N
X989(\256rst)X
X1159(pass)X
X1343(through)X
X1650(Tcl.)X
X1845(Furthermore,)X
X2340(the)X
X2481(application)X
X2907(should)X
X3175(provide)X
X3477(Tcl)X
X3628(commands)X
X4043(that)X
X720 1794(allow)N
X938(the)X
X1068(user)X
X1236(to)X
X1327(change)X
X1598(the)X
X1728(Tcl)X
X1868(command)X
X2238(associated)X
X2622(with)X
X2801(any)X
X2950(event.)X
X920 1926(In)N
X1020(interactive)X
X1420(windowing)X
X1843(applications,)X
X2319(the)X
X2454(use)X
X2598(of)X
X2698(Tcl)X
X2843(will)X
X3007(probably)X
X3346(not)X
X3485(be)X
X3594(visible)X
X3856(to)X
X3951(begin-)X
X720 2025(ning)N
X903(users:)X
X1156(they)X
X1334(will)X
X1498(manipulate)X
X1917(the)X
X2051(applications)X
X2504(using)X
X2720(buttons,)X
X3027(menus,)X
X3304(and)X
X3456(other)X
X3662(interface)X
X3995(com-)X
X720 2124(ponents.)N
X1063(However,)X
X1431(if)X
X1510(Tcl)X
X1653(is)X
X1737(used)X
X1923(as)X
X2021(an)X
X2129(intermediary)X
X2605(for)X
X2732(all)X
X2846(interface)X
X3179(actions)X
X3453(then)X
X3629(two)X
X3785(advantages)X
X720 2223(accrue.)N
X1021(First,)X
X1233(it)X
X1311(becomes)X
X1646(possible)X
X1962(to)X
X2058(write)X
X2266(Tcl)X
X2411(programs)X
X2770(to)X
X2866(recon\256gure)X
X3293(the)X
X3428(interface.)X
X3807(For)X
X3956(exam-)X
X720 2322(ple,)N
X878(users)X
X1086(will)X
X1252(be)X
X1363(able)X
X1538(to)X
X1635(rebind)X
X1887(keystrokes,)X
X2312(change)X
X2588(mouse)X
X2845(buttons,)X
X3154(or)X
X3254(replace)X
X3535(an)X
X3645(existing)X
X3952(opera-)X
X720 2421(tion)N
X882(with)X
X1063(a)X
X1126(more)X
X1331(complex)X
X1659(one)X
X1810(speci\256ed)X
X2147(as)X
X2243(a)X
X2305(set)X
X2426(of)X
X2522(Tcl)X
X2663(commands)X
X3068(or)X
X3164(tclprocs.)X
X3510(The)X
X3670(second)X
X3937(advan-)X
X720 2520(tage)N
X891(is)X
X974(that)X
X1131(this)X
X1283(approach)X
X1628(forces)X
X1865(all)X
X1977(of)X
X2073(the)X
X2204(application's)X
X2683(functionality)X
X3158(to)X
X3250(be)X
X3356(accessible)X
X3736(through)X
X4033(Tcl:)X
X720 2619(anything)N
X1053(that)X
X1210(can)X
X1355(be)X
X1461(invoked)X
X1768(with)X
X1948(the)X
X2079(mouse)X
X2332(or)X
X2428(keyboard)X
X2778(can)X
X2923(also)X
X3088(be)X
X3194(invoked)X
X3501(with)X
X3681(Tcl)X
X3822(programs.)X
X720 2718(This)N
X902(makes)X
X1152(it)X
X1227(possible)X
X1541(to)X
X1635(write)X
X1841(tclprocs)X
X2145(that)X
X2303(simulate)X
X2628(the)X
X2761(actions)X
X3036(of)X
X3133(the)X
X3265(program,)X
X3609(or)X
X3706(that)X
X3863(compose)X
X720 2817(the)N
X854(program's)X
X1241(basic)X
X1447(actions)X
X1722(into)X
X1885(more)X
X2091(powerful)X
X2433(actions.)X
X2752(It)X
X2831(also)X
X2998(permits)X
X3288(interactive)X
X3686(sessions)X
X3999(to)X
X4093(be)X
X720 2916(recorded)N
X1049(and)X
X1198(replayed)X
X1523(as)X
X1618(a)X
X1679(sequence)X
X2023(of)X
X2118(Tcl)X
X2258(commands)X
X2662(\(see)X
X2825(Section)X
X3112(5\).)X
X920 3048(The)N
X1083(second)X
X1353(use)X
X1496(for)X
X1624(Tcl)X
X1767(in)X
X1861(a)X
X1925(window)X
X2233(application)X
X2651(is)X
X2735(to)X
X2829(con\256gure)X
X3186(the)X
X3319(appearance)X
X3739(of)X
X3837(the)X
X3970(appli-)X
X720 3147(cation.)N
X1017(All)X
X1167(of)X
X1277(the)X
X1422(application's)X
X1915(interface)X
X2260(components)X
X2723(\(``widgets'')X
X3179(in)X
X3285(X)X
X3385(terminology\),)X
X3905(such)X
X4103(as)X
X720 3246(labels,)N
X982(buttons,)X
X1298(text)X
X1465(entries,)X
X1756(menus,)X
X2042(and)X
X2203(scrollbars,)X
X2601(should)X
X2870(be)X
X2987(con\256gured)X
X3397(using)X
X3621(Tcl)X
X3772(commands.)X
X720 3345(For)N
X872(example,)X
X1223(in)X
X1322(the)X
X1460(case)X
X1641(of)X
X1744(a)X
X1813(button)X
X2068(the)X
X2205(application)X
X2627(\(or)X
X2758(the)X
X2895(button)X
X3150(widget)X
X3419(code\))X
X3643(should)X
X3907(provide)X
X720 3444(Tcl)N
X866(commands)X
X1276(to)X
X1373(change)X
X1650(the)X
X1786(button's)X
X2103(size)X
X2268(and)X
X2423(location,)X
X2758(its)X
X2870(text,)X
X3053(its)X
X3165(colors,)X
X3430(and)X
X3585(the)X
X3720(action)X
X3963(\(a)X
X4058(Tcl)X
X720 3543(command,)N
X1117(of)X
X1217(course\))X
X1502(to)X
X1598(invoke)X
X1865(when)X
X2082(the)X
X2217(button)X
X2470(is)X
X2556(activated.)X
X2946(This)X
X3130(makes)X
X3382(it)X
X3458(possible)X
X3773(for)X
X3901(users)X
X4107(to)X
X720 3642(write)N
X933(Tcl)X
X1083(programs)X
X1447(to)X
X1548(personalize)X
X1981(the)X
X2121(layout)X
X2374(and)X
X2533(appearance)X
X2960(of)X
X3065(the)X
X3205(applications)X
X3664(they)X
X3847(use.)X
X4039(The)X
X720 3741(most)N
X916(common)X
X1249(use)X
X1390(of)X
X1487(such)X
X1672(recon\256gurability)X
X2284(would)X
X2528(probably)X
X2865(be)X
X2971(in)X
X3063(Tcl)X
X3204(command)X
X3575(\256les)X
X3745(read)X
X3919(by)X
X4030(pro-)X
X720 3840(grams)N
X962 0.2604(automatically)AX
X1471(when)X
X1688(they)X
X1867(start)X
X2046(execution.)X
X2460(However,)X
X2830(the)X
X2964(Tcl)X
X3108(commands)X
X3516(could)X
X3738(also)X
X3906(be)X
X4015(used)X
X720 3939(to)N
X811(change)X
X1082(an)X
X1187(application's)X
X1665(appearance)X
X2082(while)X
X2300(it)X
X2372(is)X
X2453(running,)X
X2771(if)X
X2847(that)X
X3002(should)X
X3259(prove)X
X3481(useful.)X
X920 4071(If)N
X1010(Tcl)X
X1160(is)X
X1251(used)X
X1444(as)X
X1549(described)X
X1918(above,)X
X2182(then)X
X2366(it)X
X2448(could)X
X2676(serve)X
X2893(as)X
X2998(a)X
X3069(speci\256cation)X
X3547(language)X
X3897(for)X
X4030(user)X
X720 4170(interfaces.)N
X1143(User)X
X1345(interface)X
X1690(editors)X
X1967(could)X
X2200(be)X
X2320(written)X
X2606(to)X
X2711(display)X
X3002(widgets)X
X3312(and)X
X3475(let)X
X3600(users)X
X3816(re-arrange)X
X720 4269(them)N
X925(and)X
X1080(con\256gure)X
X1440(attributes)X
X1797(such)X
X1986(as)X
X2087(colors)X
X2330(and)X
X2484(associated)X
X2873(Tcl)X
X3018(commands.)X
X3471(The)X
X3635(interface)X
X3970(editor)X
X720 4368(could)N
X939(then)X
X1114(output)X
X1363(information)X
X1803(about)X
X2022(the)X
X2152(interface)X
X2482(as)X
X2577(a)X
X2638(Tcl)X
X2778(command)X
X3148(\256le)X
X3283(to)X
X3374(be)X
X3479(read)X
X3652(by)X
X3762(the)X
X3892(applica-)X
X720 4467(tion)N
X881(when)X
X1094(it)X
X1167(starts)X
X1376(up.)X
X1531(Some)X
X1755(current)X
X2027(interface)X
X2358(editors)X
X2620(output)X
X2868(C)X
X2949(code)X
X3137(which)X
X3374(must)X
X3568(then)X
X3742(be)X
X3847(compiled)X
X720 4566(into)N
X887(the)X
X1024(application)X
X1445([7];)X
X1622(unfortunately)X
X2125(this)X
X2281(approach)X
X2631(requires)X
X2942(an)X
X3053(application)X
X3474(to)X
X3571(be)X
X3682(recompiled)X
X4107(in)X
X720 4665(order)N
X929(to)X
X1022(change)X
X1295(its)X
X1403(interface)X
X1735(\(or,)X
X1883(alternatively,)X
X2371(it)X
X2445(requires)X
X2752(a)X
X2814(dynamic-code-loading)X
X3630(facility\).)X
X3977(If)X
X4058(Tcl)X
X720 4764(were)N
X914(used)X
X1099(as)X
X1196(the)X
X1328(interface)X
X1660(speci\256cation)X
X2130(language)X
X2472(then)X
X2648(no)X
X2760(recompilation)X
X3274(would)X
X3517(be)X
X3623(necessary)X
X3987(and)X
X4137(a)X
X720 4863(single)N
X953(application)X
X1368(binary)X
X1615(could)X
X1833(support)X
X2119(many)X
X2337(different)X
X2662(interfaces.)X
X3 f
X720 5157(5.)N
X830(Communication)X
X1458(Between)X
X1797(Applications)X
X1 f
X920 5289(The)N
X1086(advantages)X
X1505(of)X
X1606(an)X
X1717(embedded)X
X2107(command)X
X2483(language)X
X2829(like)X
X2990(Tcl)X
X3136(become)X
X3438(even)X
X3632(greater)X
X3904(if)X
X3986(all)X
X4103(of)X
X720 5388(the)N
X862(tools)X
X1068(in)X
X1171(an)X
X1288(environment)X
X1768(are)X
X1909(based)X
X2143(on)X
X2265(the)X
X2407(same)X
X2622(language.)X
X3018(First,)X
X3236(users)X
X3450(need)X
X3650(only)X
X3840(learn)X
X4049(one)X
X720 5487(basic)N
X938(command)X
X1323(language;)X
X1725(to)X
X1831(move)X
X2064(from)X
X2272(one)X
X2436(application)X
X2866(to)X
X2972(another)X
X3273(they)X
X3461(need)X
X3663(only)X
X3856(learn)X
X4068(the)X
X720 5586(\(few?\))N
X976(application-speci\256c)X
X1695(commands)X
X2105(for)X
X2235(the)X
X2370(new)X
X2543(application.)X
X3007(Second,)X
X3315(generic)X
X3601(interface)X
X3936(editors)X
X720 5685(become)N
X1017(possible,)X
X1351(as)X
X1447(described)X
X1806(in)X
X1897(the)X
X2027(previous)X
X2352(section.)X
X2668(Third,)X
X2908(and)X
X3057(most)X
X3251(important)X
X3617(in)X
X3708(my)X
X3843(view,)X
X4058(Tcl)X
X720 5784(can)N
X864(provide)X
X1155(a)X
X1216(means)X
X1463(of)X
X1558(communication)X
X2130(between)X
X2445(applications.)X
X3 f
X2375 6048(-)N
X2426(9)X
X2492(-)X
X
X10 p
X%%Page: 10 11
X11 s 11 xH 0 xS 3 f
X720 483(Tcl:)N
X894(An)X
X1028(Embeddable)X
X1525(Command)X
X1942(Language)X
X3466(December)X
X3868(22,)X
X4000(1989)X
X1 f
X920 771(I)N
X977(have)X
X1170(implemented)X
X1659(a)X
X1725(communication)X
X2302(mechanism)X
X2731(for)X
X2860(X11)X
X3038(in)X
X3134(the)X
X3269(form)X
X3467(of)X
X3567(an)X
X3677(additional)X
X4058(Tcl)X
X720 870(command)N
X1095(called)X
X7 f
X1364(send)X
X1 f
X1576(.)X
X1647(For)X
X7 f
X1827(send)X
X1 f
X2066(to)X
X2161(work,)X
X2389(each)X
X2576(Tcl)X
X2720(interpreter)X
X3113(associated)X
X3501(with)X
X3684(an)X
X3793(X11)X
X3970(appli-)X
X720 969(cation)N
X961(is)X
X1045(given)X
X1266(a)X
X1330(textual)X
X1596(name,)X
X1834(such)X
X2020(as)X
X7 f
X2149(xmh)X
X1 f
X2333(for)X
X2460(an)X
X2568(X)X
X2656(mail)X
X2839(handler)X
X3128(or)X
X7 f
X3256(mx.foo.c)X
X1 f
X3704(for)X
X3830(a)X
X3893(window)X
X720 1068(in)N
X813(which)X
X2 f
X1052(mx)X
X1 f
X1178(is)X
X1261(displaying)X
X1653(a)X
X1716(\256le)X
X1853(named)X
X7 f
X2143(foo.c)X
X1 f
X2408(.)X
X2475(The)X
X7 f
X2666(send)X
X1 f
X2901(command)X
X3272(takes)X
X3476(two)X
X3631(arguments:)X
X4068(the)X
X720 1167(name)N
X937(of)X
X1036(an)X
X1145(interpreter)X
X1538(and)X
X1691(a)X
X1756(Tcl)X
X1900(command)X
X2274(to)X
X2369(execute)X
X2663(in)X
X2757(that)X
X2915(interpreter.)X
X7 f
X3382(Send)X
X1 f
X3619(arranges)X
X3941(for)X
X4068(the)X
X720 1266(command)N
X1093(to)X
X1187(be)X
X1295(passed)X
X1554(to)X
X1648(the)X
X1781(process)X
X2069(containing)X
X2467(the)X
X2600(named)X
X2860(interpreter;)X
X3276(the)X
X3408(command)X
X3780(is)X
X3863(executed)X
X720 1365(by)N
X844(that)X
X1013(interpreter)X
X1416(and)X
X1579(the)X
X1723(results)X
X1989(\(return)X
X2264(code)X
X2466(and)X
X2629(string\))X
X2895(are)X
X3038(returned)X
X3367(to)X
X3472(the)X
X3615(application)X
X4043(that)X
X720 1464(issued)N
X962(the)X
X7 f
X1123(send)X
X1 f
X1357(command.)X
X920 1596(The)N
X1092(X11)X
X1278 0.2885(implementation)AX
X1869(of)X
X7 f
X2007(send)X
X1 f
X2253(uses)X
X2438(a)X
X2511(special)X
X2790(property)X
X3122(attached)X
X3450(to)X
X3553(the)X
X3695(root)X
X3871(window.)X
X720 1695(The)N
X882(property)X
X1205(stores)X
X1435(the)X
X1568(names)X
X1818(of)X
X1916(all)X
X2030(the)X
X2163(interpreters)X
X2589(plus)X
X2761(a)X
X2825(window)X
X3133(identi\256er)X
X3476(for)X
X3602(each)X
X3787(interpreter.)X
X720 1794(A)N
X813(command)X
X1191(is)X
X1280(sent)X
X1452(to)X
X1551(an)X
X1663(interpreter)X
X2059(by)X
X2176(appending)X
X2572(it)X
X2651(to)X
X2749(a)X
X2817(particular)X
X3184(property)X
X3511(in)X
X3609(the)X
X3746(interpreter's)X
X720 1893(associated)N
X1110(window.)X
X1465(The)X
X1630(property)X
X1955(change)X
X2231(is)X
X2317(detected)X
X2638(by)X
X2753(the)X
X2888(process)X
X3178(that)X
X3338(owns)X
X3550(the)X
X3685(interpreter;)X
X4126(it)X
X720 1992(reads)N
X928(the)X
X1059(property,)X
X1402(executes)X
X1728(the)X
X1859(command,)X
X2252(and)X
X2402(appends)X
X2713(result)X
X2932(information)X
X3372(onto)X
X3551(a)X
X3612(property)X
X3932(associ-)X
X720 2091(ated)N
X902(with)X
X1094(the)X
X1236(sending)X
X1544(application.)X
X2015(Finally,)X
X2322(the)X
X2464(sending)X
X2772(application)X
X3199(detects)X
X3478(this)X
X3640(change)X
X3923(of)X
X4030(pro-)X
X720 2190(perty,)N
X945(reads)X
X1152(the)X
X1282(result)X
X1500(information,)X
X1961(and)X
X2110(returns)X
X2376(it)X
X2448(as)X
X2543(the)X
X2673(result)X
X2891(of)X
X2986(the)X
X7 f
X3147(send)X
X1 f
X3381(command.)X
X920 2322(The)N
X7 f
X1116(send)X
X1 f
X1355(command)X
X1730(provides)X
X2060(a)X
X2126(powerful)X
X2470(way)X
X2643(for)X
X2772(one)X
X2926(application)X
X3346(to)X
X3442(control)X
X3719(another.)X
X4054(For)X
X720 2421(example,)N
X1069(a)X
X1136(debugger)X
X1491(could)X
X1715(send)X
X1904(commands)X
X2314(to)X
X2411(an)X
X2522(editor)X
X2756(to)X
X2852(highlight)X
X3199(the)X
X3334(current)X
X3610(source)X
X3866(line)X
X4026(as)X
X4126(it)X
X720 2520(single-steps)N
X1170(through)X
X1478(a)X
X1551(program.)X
X1927(Or,)X
X2075(a)X
X2148(user)X
X2328(interface)X
X2670(editor)X
X2910(could)X
X3139(use)X
X7 f
X3320(send)X
X1 f
X3565(to)X
X3667(manipulate)X
X4093(an)X
X720 2619(application's)N
X1217(interface)X
X1566(directly:)X
X1924(rather)X
X2170(than)X
X2363(modifying)X
X2771(a)X
X2850(dummy)X
X3160(version)X
X3459(of)X
X3572(the)X
X3720(application's)X
X720 2718(interface)N
X1062(displayed)X
X1434(by)X
X1556(the)X
X1698(interface)X
X2040(editor,)X
X2302(the)X
X2443(interface)X
X2784(editor)X
X3023(could)X
X3252(use)X
X7 f
X3433(send)X
X1 f
X3678(to)X
X3780(modify)X
X4068(the)X
X720 2817(interface)N
X1065(of)X
X1175(a)X
X1251(``live'')X
X1537(application,)X
X1989(while)X
X2222(also)X
X2401(saving)X
X2668(the)X
X2813(con\256guration)X
X3320(for)X
X3459(a)X
X3535(con\256guration)X
X4041(\256le.)X
X720 2916(This)N
X905(would)X
X1153(allow)X
X1377(an)X
X1488(interface)X
X1824(designer)X
X2150(to)X
X2247(try)X
X2373(out)X
X2513(the)X
X2648(look)X
X2832(and)X
X2986(feel)X
X3145(of)X
X3245(a)X
X3311(new)X
X3484(interface)X
X3819(incremen-)X
X720 3015(tally)N
X900(as)X
X995(changes)X
X1300(are)X
X1429(made)X
X1642(to)X
X1733(the)X
X1863(interface.)X
X920 3147(Another)N
X1230(example)X
X1551(of)X
X1646(using)X
X7 f
X1890(send)X
X1 f
X2124(is)X
X2205(for)X
X2329(changing)X
X2674(user)X
X2842(preferences.)X
X3312(If)X
X3392(one)X
X3541(user)X
X3709(walks)X
X3936(up)X
X4046(to)X
X4137(a)X
X720 3246(display)N
X1000(that)X
X1158(has)X
X1300(been)X
X1491(con\256gured)X
X1892(for)X
X2019(some)X
X2230(other)X
X2436(user,)X
X2629(the)X
X2762(new)X
X2932(user)X
X3102(could)X
X3322(run)X
X3463(a)X
X3526(program)X
X3848(that)X
X4005(\256nds)X
X720 3345(out)N
X860(about)X
X1083(all)X
X1199(the)X
X1334(existing)X
X1641(applications)X
X2095(on)X
X2210(the)X
X2345(screen)X
X2595(\(by)X
X2738(querying)X
X3077(the)X
X3211(property)X
X3535(that)X
X3694(contains)X
X4014(their)X
X720 3444(names\),)N
X1023(reads)X
X1234(the)X
X1368(new)X
X1540(user's)X
X1775(con\256guration)X
X2271(\256le)X
X2410(for)X
X2538(each)X
X2725(application,)X
X3166(and)X
X3319(sends)X
X3540(commands)X
X3948(to)X
X4043(that)X
X720 3543(application)N
X1139(to)X
X1234(recon\256gure)X
X1660(it)X
X1736(for)X
X1864(the)X
X1998(new)X
X2170(user's)X
X2405(preferences.)X
X2879(When)X
X3115(the)X
X3249(old)X
X3388(user)X
X3560(returns,)X
X3852(he)X
X3961(or)X
X4059(she)X
X720 3642(could)N
X938(invoke)X
X1200(the)X
X1330(same)X
X1533(program)X
X1853(to)X
X1944(restore)X
X2205(the)X
X2335(original)X
X2632(preferences.)X
X7 f
X920 3774(Send)N
X1 f
X1159(could)X
X1382(also)X
X1551(be)X
X1661(used)X
X1849(to)X
X1945(record)X
X2196(interactive)X
X2595(sessions)X
X2909(involving)X
X3274(multiple)X
X3596(applications)X
X4049(and)X
X720 3873(then)N
X897(replay)X
X1142(the)X
X1275(sessions)X
X1588(later)X
X1770(\(e.g.)X
X1951(for)X
X2078(demonstration)X
X2608(purposes\).)X
X3017(This)X
X3198(would)X
X3442(require)X
X3715(an)X
X3822(additional)X
X720 3972(Tcl)N
X871(command)X
X1252(called)X
X7 f
X1527(trace)X
X1 f
X1792(;)X
X7 f
X1903(trace)X
X1 f
X2201(would)X
X2454(take)X
X2634(a)X
X2706(single)X
X2950(argument)X
X3316(\(a)X
X3416(Tcl)X
X3566(command)X
X3946(string\))X
X720 4071(and)N
X876(cause)X
X1100(that)X
X1261(command)X
X1637(string)X
X1866(to)X
X1963(be)X
X2074(executed)X
X2415(before)X
X2667(each)X
X2856(other)X
X3065(command)X
X3441(was)X
X3605(executed)X
X3946(in)X
X4043(that)X
X720 4170(interpreter.)N
X1168(Within)X
X1451(a)X
X1527(single)X
X1775(application,)X
X7 f
X2258(trace)X
X1 f
X2560(could)X
X2793(be)X
X2913(used)X
X3111(to)X
X3217(record)X
X3477(each)X
X3674(Tcl)X
X3828(command)X
X720 4269(before)N
X986(it)X
X1078(is)X
X1179(executed,)X
X1556(so)X
X1676(that)X
X1851(the)X
X2001(commands)X
X2425(could)X
X2662(be)X
X2786(replayed)X
X3130(later.)X
X3372(In)X
X3486(a)X
X3566 0.2500(multi-application)AX
X720 4368(environment,)N
X1225(a)X
X1301(recorder)X
X1630(program)X
X1965(could)X
X2198(be)X
X2318(built)X
X2518(using)X
X7 f
X2777(send)X
X1 f
X2989(.)X
X3070(The)X
X3244(recorder)X
X3573(sends)X
X3805(a)X
X7 f
X3911(trace)X
X1 f
X720 4467(command)N
X1093(to)X
X1187(each)X
X1373(application)X
X1791(to)X
X1884(be)X
X1991(recorded.)X
X2366(The)X
X7 f
X2558(trace)X
X1 f
X2847(command)X
X3219(arranges)X
X3540(for)X
X3666(information)X
X4107(to)X
X720 4566(be)N
X827(sent)X
X993(back)X
X1183(to)X
X1276(the)X
X1408(recorder)X
X1724(about)X
X1944(each)X
X2129(command)X
X2501(executed)X
X2838(in)X
X2931(that)X
X3088(application.)X
X3549(The)X
X3709(recorder)X
X4024(then)X
X720 4665(logs)N
X909(information)X
X1367(about)X
X1604(which)X
X1860(applications)X
X2328(executed)X
X2682(which)X
X2938(commands.)X
X3405(The)X
X3583(recorder)X
X3916(can)X
X4079(re-)X
X720 4764(execute)N
X1022(the)X
X1163(commands)X
X1578(by)X
X7 f
X1730(send)X
X1 f
X1942(-ing)X
X2117(them)X
X2327(back)X
X2526(to)X
X2628(the)X
X2769(applications)X
X3229(again.)X
X3497(The)X
X7 f
X3698(trace)X
X1 f
X3995(com-)X
X720 4863(mand)N
X938(does)X
X1121(not)X
X1256(yet)X
X1386(exist)X
X1575(in)X
X1666(Tcl,)X
X1828(but)X
X1963(it)X
X2035(could)X
X2253(easily)X
X2481(be)X
X2586(added.)X
X7 f
X920 4995(Send)N
X1 f
X1156(provides)X
X1483(a)X
X1546(much)X
X1766(more)X
X1970(powerful)X
X2310(mechanism)X
X2735(for)X
X2860(communication)X
X3433(between)X
X3749(applications)X
X720 5094(than)N
X899(is)X
X985(available)X
X1331(today.)X
X1598(The)X
X1762(only)X
X1946(easy-to-use)X
X2373(form)X
X2571(of)X
X2671(communication)X
X3248(for)X
X3377(today's)X
X3663(applications)X
X4117(is)X
X720 5193(the)N
X855(selection)X
X1195(or)X
X1294(cut)X
X1428(buffer:)X
X1715(a)X
X1780(single)X
X2017(string)X
X2244(of)X
X2343(text)X
X2502(that)X
X2661(may)X
X2839(be)X
X2948(set)X
X3072(by)X
X3186(one)X
X3339(application)X
X3758(and)X
X3911(read)X
X4088(by)X
X720 5292(another.)N
X7 f
X1089(Send)X
X1 f
X1331(provides)X
X1664(a)X
X1733(more)X
X1944(general)X
X2233(form)X
X2434(of)X
X2536(communication)X
X3115(akin)X
X3296(to)X
X3394(remote)X
X3668(procedure)X
X4048(call)X
X720 5391([3].)N
X891(If)X
X974(all)X
X1088(of)X
X1186(an)X
X1294(application's)X
X1775(functionality)X
X2252(is)X
X2336(made)X
X2552(available)X
X2896(through)X
X3195(Tcl,)X
X3360(as)X
X3457(described)X
X3818(in)X
X3911(Section)X
X720 5490(4,)N
X823(then)X
X7 f
X1043(send)X
X1 f
X1291(makes)X
X1552(all)X
X1677(of)X
X1786(each)X
X1983(application's)X
X2475(functionality)X
X2963(available)X
X3318(to)X
X3423(other)X
X3640(applications)X
X4103(as)X
X720 5589(well.)N
X3 f
X2353 6048(-)N
X2404(10)X
X2514(-)X
X
X11 p
X%%Page: 11 12
X11 s 11 xH 0 xS 3 f
X720 483(Tcl:)N
X894(An)X
X1028(Embeddable)X
X1525(Command)X
X1942(Language)X
X3466(December)X
X3868(22,)X
X4000(1989)X
X1 f
X920 771(If)N
X1011(Tcl)X
X1161(\(and)X
X7 f
X1380(send)X
X1 f
X1592(\))X
X1653(were)X
X1855(to)X
X1956(become)X
X2262(widely)X
X2534(used)X
X2727(in)X
X2828(window)X
X3143(applications,)X
X3624(I)X
X3685(believe)X
X3972(that)X
X4137(a)X
X720 870(better)N
X946(kind)X
X1128(of)X
X1226(interactive)X
X1624(environment)X
X2095(would)X
X2340(arise,)X
X2553(consisting)X
X2936(of)X
X3033(a)X
X3096(large)X
X3296(number)X
X3589(of)X
X3686(small)X
X3902(special-)X
X720 969(ized)N
X898(applications)X
X1356(rather)X
X1592(than)X
X1775(a)X
X1845(few)X
X2007(monolithic)X
X2422(ones.)X
X2658(Today's)X
X2977(applications)X
X3435(cannot)X
X3700(communicate)X
X720 1068(with)N
X902(each)X
X1088(other)X
X1294(very)X
X1475(well,)X
X1674(so)X
X1777(each)X
X1963(application)X
X2381(must)X
X2577(incorporate)X
X3002(all)X
X3115(the)X
X3247(functionality)X
X3723(that)X
X3880(it)X
X3954(needs.)X
X720 1167(For)N
X890(example,)X
X1259(some)X
X1493(window-based)X
X2053(debuggers)X
X2462(contain)X
X2770(built-in)X
X3079(text)X
X3260(editors)X
X3548(so)X
X3674(that)X
X3855(they)X
X4054(can)X
X720 1266(highlight)N
X1066(the)X
X1200(current)X
X1475(point)X
X1682(of)X
X1780(execution.)X
X2192(With)X
X2394(Tcl)X
X2537(and)X
X7 f
X2720(send)X
X1 f
X2932(,)X
X2979(the)X
X3112(debugger)X
X3464(and)X
X3616(the)X
X3749(editor)X
X3980(could)X
X720 1365(be)N
X829(distinct)X
X1116(programs,)X
X1496(with)X
X1679(each)X
X7 f
X1897(send)X
X1 f
X2109(-ing)X
X2277(commands)X
X2685(to)X
X2780(the)X
X2914(other)X
X3121(as)X
X3219(necessary.)X
X3629(Ideally,)X
X3921(monol-)X
X720 1464(ithic)N
X909(applications)X
X1367(could)X
X1594(be)X
X1708(replaced)X
X2037(by)X
X2156(lots)X
X2315(of)X
X2419(small)X
X2642(applications)X
X3100(that)X
X3263(work)X
X3473(together)X
X3792(in)X
X3891(exciting)X
X720 1563(new)N
X894(ways,)X
X1124(just)X
X1280(as)X
X1381(the)X
X1517(UNIX)X
X1763(shells)X
X1992(allowed)X
X2298(lots)X
X2453(of)X
X2553(small)X
X2772(text)X
X2932(processing)X
X3335(applications)X
X3789(to)X
X3885(be)X
X3995(com-)X
X720 1662(bined)N
X945(together.)X
X1307(I)X
X1365(think)X
X1576(that)X
X1738(Tcl,)X
X1907(or)X
X2009(some)X
X2224(other)X
X2434(language)X
X2781(like)X
X2943(it,)X
X3044(will)X
X3211(provide)X
X3508(the)X
X3644(glue)X
X3824(that)X
X3985(binds)X
X720 1761(together)N
X1031(the)X
X1161(windowing)X
X1579(applications)X
X2028(of)X
X2123(the)X
X2253(1990's.)X
X3 f
X720 2055(6.)N
X830(Status)X
X1086(and)X
X1250(Performance)X
X1 f
X920 2187(The)N
X1084(Tcl)X
X1229(language)X
X1574(was)X
X1737(designed)X
X2077(in)X
X2173(the)X
X2308(fall)X
X2453(of)X
X2553(1987)X
X2756(and)X
X2910(implemented)X
X3399(in)X
X3494(the)X
X3628(winter)X
X3879(of)X
X3978(1988.)X
X720 2286(In)N
X825(the)X
X965(spring)X
X1217(of)X
X1322(1988)X
X1530(I)X
X1590(incorporated)X
X2066(Tcl)X
X2215(into)X
X2384(the)X
X2 f
X2523(mx)X
X1 f
X2656(editor)X
X2893(\(which)X
X3168(already)X
X3458(existed,)X
X3761(but)X
X3905(with)X
X4093(an)X
X720 2385(inferior)N
X1018(command)X
X1399(language\),)X
X1801(and)X
X1961(also)X
X2136(into)X
X2307(a)X
X2379(companion)X
X2804(terminal)X
X3132(emulator)X
X3479(called)X
X3723(Tx.)X
X3898(Both)X
X4103(of)X
X720 2484(these)N
X931(programs)X
X1293(have)X
X1489(been)X
X1684(in)X
X1782(use)X
X1928(by)X
X2045(a)X
X2113(small)X
X2334(user)X
X2509(community)X
X2941(at)X
X3034(Berkeley)X
X3381(for)X
X3512(the)X
X3649(last)X
X3801(year)X
X3981(and)X
X4137(a)X
X720 2583(half.)N
X926(All)X
X1064(of)X
X1162(the)X
X1295(Tcl)X
X1438(language)X
X1781(facilities)X
X2111(exist)X
X2303(as)X
X2401(described)X
X2762(above,)X
X3018(except)X
X3272(that)X
X3429(the)X
X7 f
X3592(send)X
X1 f
X3828(command)X
X720 2682(is)N
X806(still)X
X967(in)X
X1063(prototype)X
X1428(form)X
X1626(and)X
X7 f
X1811(trace)X
X1 f
X2103(hasn't)X
X2345(been)X
X2538(implemented.)X
X3071(Some)X
X3299(of)X
X3399(the)X
X3534(features)X
X3839(described)X
X720 2781(in)N
X824(Section)X
X1124(4,)X
X1225(such)X
X1421(as)X
X1529(menu)X
X1760(and)X
X1922(keystroke)X
X2299(bindings,)X
X2660(are)X
X2802(implemented)X
X3299(in)X
X2 f
X3402(mx)X
X1 f
X3504(,)X
X3560(but)X
X3707(in)X
X3810(an)X
X2 f
X3927(ad)X
X4049(hoc)X
X1 f
X720 2880(fashion:)N
X1057(Tcl)X
X1206(is)X
X1296(not)X
X1440(yet)X
X1579(integrated)X
X1963(with)X
X2151(a)X
X2221(widget)X
X2492(set.)X
X2665(I)X
X2725(am)X
X2864(currently)X
X3213(building)X
X3539(a)X
X3609(new)X
X3786(toolkit)X
X4049(and)X
X720 2979(widget)N
X991(set)X
X1120(that)X
X1284(is)X
X1374(based)X
X1605(entirely)X
X1906(on)X
X2025(Tcl.)X
X2218(When)X
X2459(it)X
X2540(is)X
X2629(completed,)X
X3049(I)X
X3108(expect)X
X3368(it)X
X3448(to)X
X3547(provide)X
X3846(all)X
X3965(of)X
X4068(the)X
X720 3078(features)N
X1020(described)X
X1379(in)X
X1470(Section)X
X1757(4.)X
X1867(As)X
X1986(of)X
X2081(this)X
X2231(writing,)X
X2530(the)X
X2660 0.2885(implementation)AX
X3238(has)X
X3377(barely)X
X3619(begun.)X
X920 3210(Table)N
X1147(II)X
X1230(shows)X
X1474(how)X
X1650(long)X
X1832(it)X
X1907(takes)X
X2113(Tcl)X
X2256(to)X
X2350(execute)X
X2644(various)X
X2928(commands)X
X3335(on)X
X3448(two)X
X3605(different)X
X3933(works-)X
X720 3309(tations.)N
X1062(On)X
X1231(Sun-3)X
X1503(workstations,)X
X2037(the)X
X2207(average)X
X2542(time)X
X2762(for)X
X2926(simple)X
X3224(commands)X
X3667(is)X
X3787(about)X
X4044(500)X
X720 3408(microseconds,)N
X1279(while)X
X1528(on)X
X1669(DECstation)X
X2134(3100's)X
X2426(the)X
X2586(average)X
X2911(time)X
X3121(per)X
X3285(command)X
X3685(is)X
X3796(about)X
X4044(160)X
X720 3507(microseconds.)N
X1271(Although)X
X2 f
X1627(mx)X
X1 f
X1752(does)X
X1936(not)X
X2072(currently)X
X2413(use)X
X2553(a)X
X2615(Tcl)X
X2756(command)X
X3127(for)X
X3252(each)X
X3436(mouse)X
X3689(motion)X
X3963(event,)X
X720 3606(the)N
X861(times)X
X1086(in)X
X1188(Table)X
X1421(II)X
X1511(suggest)X
X1807(that)X
X1972(this)X
X2132(would)X
X2384(be)X
X2499(possible,)X
X2842(even)X
X3040(on)X
X3160(Sun-3)X
X3402(workstations,)X
X3906(without)X
X720 3705(signi\256cant)N
X1120(degradation)X
X1568(of)X
X1673(response.)X
X2056(For)X
X2210(example,)X
X2563(if)X
X2649(mouse)X
X2911(motion)X
X3194(events)X
X3451(occur)X
X3678(100)X
X3841(times)X
X4064(per)X
X720 3804(second,)N
X1012(the)X
X1146(Tcl)X
X1290(overhead)X
X1638(for)X
X1766(dispatching)X
X2199(one)X
X2352(command)X
X2726(per)X
X2864(event)X
X3081(will)X
X3245(consume)X
X3583(only)X
X3765(about)X
X3986(1-2%)X
X720 3903(of)N
X819(a)X
X884(Sun-3)X
X1120(processor.)X
X1526(For)X
X1674(the)X
X1808(ways)X
X2013(in)X
X2107(which)X
X2347(Tcl)X
X2490(is)X
X2574(currently)X
X2917(used)X
X3103(\(keystroke)X
X3499(and)X
X3651(menu)X
X3872(bindings)X
X720 4002(consisting)N
X1129(of)X
X1253(a)X
X1343(few)X
X1525(commands\),)X
X2009(there)X
X2236(are)X
X2394(no)X
X2533(noticeable)X
X2947(delays)X
X3223(associated)X
X3635(with)X
X3842(Tcl.)X
X4054(For)X
X720 4101(application-speci\256c)N
X1437(commands)X
X1845(such)X
X2032(as)X
X2131(those)X
X2343(for)X
X2471(the)X
X2 f
X2605(mx)X
X1 f
X2733(editor,)X
X2987(the)X
X3121(time)X
X3305(to)X
X3400(execute)X
X3695(the)X
X3828(command)X
X720 4200(is)N
X801(much)X
X1019(greater)X
X1285(than)X
X1459(the)X
X1589(time)X
X1769(required)X
X2084(by)X
X2194(Tcl)X
X2334(to)X
X2425(parse)X
X2632(it)X
X2704(and)X
X2853(call)X
X3003(the)X
X3133(command)X
X3503(procedure.)X
X920 4332(The)N
X1084(Tcl)X
X1229(library)X
X1491(is)X
X1577(small)X
X1796(enough)X
X2082(to)X
X2178(be)X
X2288(used)X
X2476(in)X
X2572(a)X
X2638(wide)X
X2836(variety)X
X3108(of)X
X3208(programs,)X
X3589(even)X
X3782(on)X
X3897(systems)X
X720 4431(without)N
X1020(mechanisms)X
X1486(for)X
X1618(sharing)X
X1907(libraries.)X
X2270(The)X
X2437(Tcl)X
X2585(code)X
X2781(consists)X
X3090(of)X
X3193(about)X
X3419(7000)X
X3624(lines)X
X3820(of)X
X3922(C)X
X4010(code)X
X720 4530(\(about)N
X980(half)X
X1152(of)X
X1260(which)X
X1510(is)X
X1604(comments\).)X
X2075(When)X
X2320(compiled)X
X2683(for)X
X2819(a)X
X2892(Motorola)X
X3254(68000,)X
X3530(it)X
X3614(generates)X
X3980(about)X
X720 4629(27000)N
X962(bytes)X
X1170(of)X
X1265(object)X
X1503(code.)X
X3 f
X720 4923(7.)N
X830(Comparisons)X
X1 f
X920 5055(The)N
X1091(Tcl)X
X1242(language)X
X1593(has)X
X1743(quite)X
X1953(a)X
X2025(bit)X
X2152(of)X
X2258(surface)X
X2544(similarity)X
X2917(to)X
X3019(Lisp,)X
X3231(except)X
X3494(that)X
X3660(Tcl)X
X3811(uses)X
X3995(curly)X
X720 5154(braces)N
X970(or)X
X1069(brackets)X
X1388(instead)X
X1664(of)X
X1763(parentheses)X
X2199(and)X
X2352(no)X
X2466(braces)X
X2716(are)X
X2849(needed)X
X3124(around)X
X3394(the)X
X3528(outermost)X
X3906(level)X
X4103(of)X
X720 5253(a)N
X790(command.)X
X1213(The)X
X1381(greatest)X
X1686(difference)X
X2073(between)X
X2397(Tcl)X
X2546(and)X
X2704(Lisp)X
X2892(is)X
X2982(that)X
X3146(Lisp)X
X3333(evaluates)X
X3691(arguments)X
X4088(by)X
X720 5352(default,)N
X1016(whereas)X
X1332(in)X
X1430(Tcl)X
X1577(arguments)X
X1972(are)X
X2107(not)X
X2248(evaluated)X
X2614(unless)X
X2862(surrounded)X
X3285(by)X
X3401(brackets.)X
X3766(This)X
X3951(means)X
X720 5451(that)N
X876(more)X
X1080(typing)X
X1329(effort)X
X1547(is)X
X1629(required)X
X1945(in)X
X2037(Tcl)X
X2178(if)X
X2255(an)X
X2361(argument)X
X2717(is)X
X2799(to)X
X2891(be)X
X2997(evaluated,)X
X3380(and)X
X3530(more)X
X3733(typing)X
X3981(effort)X
X720 5550(is)N
X813(required)X
X1140(in)X
X1243(Lisp)X
X1434(if)X
X1522(an)X
X1639(argument)X
X2006(is)X
X2099(to)X
X2202(be)X
X2319(quoted)X
X2593(\(not)X
X2769(evaluated\).)X
X3213(It)X
X3300(appeared)X
X3650(to)X
X3752(me)X
X3893(that)X
X4059(no-)X
X720 5649(evaluation)N
X1117(is)X
X1205(usually)X
X1488(the)X
X1624(desired)X
X1906(result)X
X2130(in)X
X2227(arguments)X
X2622(to)X
X2719(a)X
X2786(command)X
X3162(language,)X
X3530(so)X
X3636(I)X
X3693(made)X
X3912(this)X
X4068(the)X
X3 f
X2353 6048(-)N
X2404(11)X
X2514(-)X
X
X12 p
X%%Page: 12 13
X11 s 11 xH 0 xS 3 f
X720 483(Tcl:)N
X894(An)X
X1028(Embeddable)X
X1525(Command)X
X1942(Language)X
X3466(December)X
X3868(22,)X
X4000(1989)X
X1 f
X10 f
X870 812(i)N
X902(iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii)X
X1 f
X2827 911(Sun-3)N
X3059(Time)X
X3462(DS3100)X
X3772(Time)X
X1520 960(Tcl)N
X1660(Command)X
X2766 1010(\(microseconds\))N
X3440(\(microseconds\))X
X10 f
X870 1021(i)N
X902(iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii)X
X7 f
X9 s
X914 1120(set)N
X1086(a)X
X1172(1)X
X1 f
X11 s
X3015(225)X
X3711(57)X
X10 f
X870 1131(i)N
X902(iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii)X
X7 f
X9 s
X914 1230(list)N
X1129(abc)X
X1301(def)X
X1473(ghi)X
X1645(jkl)X
X1 f
X11 s
X3015(460)X
X3667(138)X
X10 f
X870 1241(i)N
X902(iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii)X
X7 f
X9 s
X914 1340(if)N
X1043({4)X
X1172(>)X
X1258(3})X
X1387({set)X
X1602(a)X
X1688(1})X
X1 f
X11 s
X3015(700)X
X3667(220)X
X10 f
X870 1351(i)N
X902(iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii)X
X7 f
X9 s
X914 1450(proc)N
X1129(fac)X
X1301(x)X
X1387({)X
X1086 1549(if)N
X1215({$x)X
X1387(==)X
X1516(1})X
X1645({return)X
X1989(1})X
X1086 1648(return)N
X1387([expr)X
X1645({$x*[fac)X
X2032([expr)X
X2290($x-1]]}])X
X914 1747(})N
X1 f
X11 s
X2971 1598(1280)N
X3667(380)X
X10 f
X870 1758(i)N
X902(iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii)X
X7 f
X9 s
X914 1857(fac)N
X1086(5)X
X1 f
X11 s
X2927(11250)X
X3623(3630)X
X10 f
X870 1868(i)N
X902(iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii)X
X870(c)X
X1780(c)Y
X1692(c)Y
X1604(c)Y
X1516(c)Y
X1428(c)Y
X1340(c)Y
X1252(c)Y
X1164(c)Y
X1076(c)Y
X988(c)Y
X900(c)Y
X2700 1868(c)N
X1780(c)Y
X1692(c)Y
X1604(c)Y
X1516(c)Y
X1428(c)Y
X1340(c)Y
X1252(c)Y
X1164(c)Y
X1076(c)Y
X988(c)Y
X900(c)Y
X3374 1868(c)N
X1780(c)Y
X1692(c)Y
X1604(c)Y
X1516(c)Y
X1428(c)Y
X1340(c)Y
X1252(c)Y
X1164(c)Y
X1076(c)Y
X988(c)Y
X900(c)Y
X4026 1868(c)N
X1780(c)Y
X1692(c)Y
X1604(c)Y
X1516(c)Y
X1428(c)Y
X1340(c)Y
X1252(c)Y
X1164(c)Y
X1076(c)Y
X988(c)Y
X900(c)Y
X3 f
X10 s
X880 2024(Table)N
X1108(II)X
X1 f
X1170(.)X
X1242(The)X
X1399(cost)X
X1560(of)X
X1659(various)X
X1927(Tcl)X
X2066(commands,)X
X2465(measured)X
X2805(on)X
X2917(a)X
X2985(Sun-3/75)X
X3310(workstation)X
X3720(and)X
X3868(on)X
X3980(a)X
X880 2114(DECstation)N
X1279(3100.)X
X1505(The)X
X1655(command)X
X7 f
X2024(fac)X
X2221(5)X
X1 f
X2294(executes)X
X2596(a)X
X2657(total)X
X2824(of)X
X2916(23)X
X3021(Tcl)X
X3153(commands,)X
X3545(for)X
X3664(an)X
X3765(average)X
X880 2204(command)N
X1228(time)X
X1402(of)X
X1501(about)X
X1711(500)X
X1863(microseconds)X
X2336(on)X
X2448(a)X
X2516(Sun-3)X
X2739(or)X
X2838(160)X
X2990(microseconds)X
X3463(on)X
X3575(a)X
X3643(DECstation)X
X880 2294(3100.)N
X11 s
X720 2522(default)N
X996(in)X
X1096(Tcl.)X
X1289(Tcl)X
X1438(also)X
X1611(has)X
X1759(fewer)X
X1989(data)X
X2167(types)X
X2384(than)X
X2567(Lisp;)X
X2802(this)X
X2961(was)X
X3128(done)X
X3330(in)X
X3429(order)X
X3644(to)X
X3743(simplify)X
X4068(the)X
X720 2621(interface)N
X1050(between)X
X1365(the)X
X1495(Tcl)X
X1635(library)X
X1892(and)X
X2041(an)X
X2146(enclosing)X
X2506(C)X
X2587(application.)X
X920 2753(The)N
X1084(Emacs)X
X1346(editor)X
X1579(is)X
X1665(similar)X
X1938(to)X
X2034(Tcl)X
X2179(in)X
X2275(that)X
X2435(it)X
X2512(provides)X
X2842(a)X
X2908(framework)X
X3320(that)X
X3480(can)X
X3629(be)X
X3738(used)X
X3925(to)X
X4020(con-)X
X720 2852(trol)N
X872(many)X
X1097(different)X
X1429(application)X
X1851(programs.)X
X2256(For)X
X2407(example,)X
X2757(subprocesses)X
X3244(can)X
X3395(be)X
X3507(run)X
X3653(in)X
X3751(Emacs)X
X4015(win-)X
X720 2951(dows)N
X929(and)X
X1080(users)X
X1284(can)X
X1430(write)X
X1635(Emacs)X
X1894(command)X
X2266(scripts)X
X2520(that)X
X2677(\(a\))X
X2798(generate)X
X3119(command)X
X3490(sequences)X
X3869(for)X
X3994(input)X
X720 3050(to)N
X820(the)X
X959(applications)X
X1417(and)X
X1575(\(b\))X
X1708(re-format)X
X2071(the)X
X2210(output)X
X2467(of)X
X2571(applications.)X
X3073(This)X
X3261(allows)X
X3522(users)X
X3733(to)X
X3832(embellish)X
X720 3149(the)N
X860(basic)X
X1073(facilities)X
X1410(of)X
X1515(applications,)X
X1996(edit)X
X2160(their)X
X2353(output,)X
X2632(and)X
X2790(so)X
X2899(on.)X
X3062(The)X
X3230(difference)X
X3617(between)X
X3941(Emacs)X
X720 3248(and)N
X870(Tcl)X
X1011(is)X
X1093(that)X
X1249(the)X
X1380(programmability)X
X1997(is)X
X2078(centralized)X
X2487(in)X
X2578(Emacs:)X
X2860(applications)X
X3309(cannot)X
X3566(talk)X
X3721(to)X
X3812(each)X
X3995(other)X
X720 3347(unless)N
X967(Emacs)X
X1229(acts)X
X1393(as)X
X1492(intermediary)X
X1969(\(e.g.)X
X2151(to)X
X2246(set)X
X2370(up)X
X2484(a)X
X2549(new)X
X2721(communication)X
X3297(mechanism)X
X3725(between)X
X4044(two)X
X720 3446(applications,)N
X1207(code)X
X1411(must)X
X1621(be)X
X1742(written)X
X2030(in)X
X2137(Emacs)X
X2410(to)X
X2517(pass)X
X2706(information)X
X3161(back)X
X3365(and)X
X3530(forth)X
X3738(between)X
X4068(the)X
X720 3545(applications\).)N
X1250(The)X
X1417(Tcl)X
X1565(approach)X
X1917(is)X
X2006(decentralized:)X
X2553(each)X
X2744(application)X
X3167(has)X
X3314(its)X
X3428(own)X
X3608(command)X
X3985(inter-)X
X720 3644(preter)N
X947(and)X
X1096(applications)X
X1545(may)X
X1719(communicate)X
X2217(directly)X
X2509(with)X
X2688(each)X
X2871(other.)X
X920 3776(Lastly,)N
X1190(it)X
X1267(is)X
X1353(interesting)X
X1753(to)X
X1849(compare)X
X2179(Tcl)X
X2324(to)X
X2420(NeWS)X
X2681([9],)X
X2832(a)X
X2898(window)X
X3208(system)X
X3480(that)X
X3640(is)X
X3726(based)X
X3953(on)X
X4068(the)X
X720 3875(Postscript)N
X1098(language.)X
X1490(NeWS)X
X1754(allows)X
X2014(applications)X
X2470(to)X
X2568(down-load)X
X2973(Postscript)X
X3350(programs)X
X3711(into)X
X3878(the)X
X4015(win-)X
X720 3974(dow)N
X904(server)X
X1151(in)X
X1253(order)X
X1471(to)X
X1573(change)X
X1855(the)X
X1996(user)X
X2175(interface)X
X2516(and)X
X2676(modify)X
X2964(other)X
X3178(aspects)X
X3465(of)X
X3571(the)X
X3711(system.)X
X4032(In)X
X4137(a)X
X720 4073(sense,)N
X955(this)X
X1106(is)X
X1188(similar)X
X1457(to)X
X1549(the)X
X7 f
X1711(send)X
X1 f
X1946(command)X
X2317(in)X
X2409(Tcl,)X
X2571(in)X
X2662(that)X
X2817(applications)X
X3266(may)X
X3440(send)X
X3623(programs)X
X3977(to)X
X4068(the)X
X720 4172(server)N
X964(for)X
X1096(execution.)X
X1513(However,)X
X1886(the)X
X2023(NeWS)X
X2286(mechanism)X
X2717(is)X
X2805(less)X
X2966(general)X
X3254(than)X
X3435(Tcl:)X
X3629(NeWS)X
X3892(applica-)X
X720 4271(tions)N
X915(generate)X
X1235(Postscript)X
X1605(programs)X
X1959(as)X
X2054(output)X
X2302(but)X
X2437(they)X
X2611(do)X
X2721(not)X
X2856(necessarily)X
X3269(respond)X
X3569(to)X
X3660(Postscript)X
X4030(pro-)X
X720 4370(grams)N
X959(as)X
X1056(input.)X
X1306(In)X
X1403(other)X
X1608(words,)X
X1868(NeWS)X
X2126(applications)X
X2577(can)X
X2723(affect)X
X2947(each)X
X3132(others')X
X3399(interfaces,)X
X3786(by)X
X3897(control-)X
X720 4469(ling)N
X894(the)X
X1038(server,)X
X1310(but)X
X1459(they)X
X1647(cannot)X
X1918(directly)X
X2224(invoke)X
X2500(each)X
X2696(others')X
X2975(application-speci\256c)X
X3701(operations)X
X4103(as)X
X720 4568(they)N
X894(can)X
X1038(with)X
X1217(Tcl.)X
X920 4700(To)N
X1066(summarize,)X
X1523(the)X
X1679(Tcl)X
X1845(approach)X
X2215(is)X
X2322(less)X
X2502(centralized)X
X2937(than)X
X3137(either)X
X3385(the)X
X3540(Emacs)X
X3822(or)X
X3942(NeWS)X
X720 4799(approaches.)N
X1187(For)X
X1337(a)X
X1404(windowing)X
X1828(environment)X
X2302(with)X
X2487(large)X
X2691(numbers)X
X3022(of)X
X3123(independent)X
X3582(tools,)X
X3803(I)X
X3859(think)X
X4068(the)X
X720 4898(decentralized)N
X1215(approach)X
X1562(makes)X
X1812(sense.)X
X2071(In)X
X2169(fairness)X
X2467(to)X
X2561(Emacs,)X
X2843(it's)X
X2980(important)X
X3348(to)X
X3441(point)X
X3647(out)X
X3784(that)X
X3941(Emacs)X
X720 4997(wasn't)N
X982(designed)X
X1323(for)X
X1453(this)X
X1609(environment,)X
X2105(and)X
X2260(that)X
X2420(Emacs)X
X2682(works)X
X2923(quite)X
X3127(nicely)X
X3370(in)X
X3466(the)X
X3601(environment)X
X4074(for)X
X720 5096(which)N
X958(it)X
X1031(was)X
X1189(designed)X
X1524(\(ASCII)X
X1804(terminals)X
X2155(with)X
X2334(batch-style)X
X2743(applications\).)X
X3265(It's)X
X3404(also)X
X3568(worth)X
X3795(noting)X
X4043(that)X
X720 5195(direct)N
X943(communication)X
X1515(between)X
X1830(applications)X
X2279(was)X
X2437(not)X
X2572(an)X
X2677(explicit)X
X2965(goal)X
X3139(of)X
X3234(the)X
X3364(NeWS)X
X3620(system)X
X3887(design.)X
X3 f
X720 5489(8.)N
X830(Conclusions)X
X1 f
X920 5621(I)N
X982(think)X
X1197(that)X
X1363(Tcl)X
X1514(could)X
X1743(improve)X
X2070(our)X
X2219(interactive)X
X2624(environments)X
X3136(in)X
X3237(three)X
X3445(general)X
X3736(ways.)X
X3992(First,)X
X720 5720(Tcl)N
X868(can)X
X1020(be)X
X1133(used)X
X1324(to)X
X1423(improve)X
X1747(individual)X
X2135(tools)X
X2336(by)X
X2453(providing)X
X2825(them)X
X3031(with)X
X3217(a)X
X3285(programmable)X
X3828(command)X
X3 f
X2353 6048(-)N
X2404(12)X
X2514(-)X
X
X13 p
X%%Page: 13 14
X11 s 11 xH 0 xS 3 f
X720 483(Tcl:)N
X894(An)X
X1028(Embeddable)X
X1525(Command)X
X1942(Language)X
X3466(December)X
X3868(22,)X
X4000(1989)X
X1 f
X720 771(language;)N
X1117(this)X
X1277(allows)X
X1539(users)X
X1751(to)X
X1852(customize)X
X2242(tools)X
X2446(and)X
X2605(extend)X
X2872(their)X
X3066(functionality.)X
X3593(Second,)X
X3905(Tcl)X
X4054(can)X
X720 870(provide)N
X1020(a)X
X1090(uniform)X
X1405(command)X
X1784(language)X
X2133(across)X
X2383(a)X
X2453(range)X
X2679(of)X
X2783(tools;)X
X3033(this)X
X3192(makes)X
X3448(it)X
X3529(easier)X
X3765(for)X
X3897(users)X
X4107(to)X
X720 969(program)N
X1042(the)X
X1174(tools)X
X1370(and)X
X1521(also)X
X1687(allows)X
X1941(tool-independent)X
X2563(facilities)X
X2892(to)X
X2985(be)X
X3092(built,)X
X3301(such)X
X3486(as)X
X3583(interface)X
X3914(editors.)X
X720 1068(Third,)N
X962(Tcl)X
X1104(provides)X
X1431(a)X
X1494(mechanism)X
X1920(for)X
X2046(tools)X
X2242(to)X
X2335(control)X
X2609(each)X
X2794(other;)X
X3046(this)X
X3198(encourages)X
X3616(a)X
X3678(more)X
X3882(modular)X
X720 1167(approach)N
X1065(to)X
X1157(windowing)X
X1576(applications)X
X2025(and)X
X2174(makes)X
X2421(it)X
X2493(possible)X
X2804(to)X
X2895(re-use)X
X3131(old)X
X3266(applications)X
X3715(in)X
X3806(new)X
X3974(ways.)X
X720 1266(In)N
X815(my)X
X950(opinion)X
X1242(the)X
X1372(third)X
X1561(bene\256t)X
X1823(is)X
X1904(potentially)X
X2305(the)X
X2435(most)X
X2629(important.)X
X920 1398(My)N
X1067(experiences)X
X1507(with)X
X1688(Tcl)X
X1830(so)X
X1932(far)X
X2053(are)X
X2184(positive)X
X2488(but)X
X2625(limited.)X
X2945(Tcl)X
X3087(needs)X
X3311(a)X
X3374(larger)X
X3603(user)X
X3773(community)X
X720 1497(and)N
X876(a)X
X944(more)X
X1154(complete)X
X1507(integration)X
X1919(into)X
X2086(a)X
X2154(windowing)X
X2579(toolkit)X
X2840(before)X
X3093(it)X
X3172(can)X
X3323(be)X
X3434(fully)X
X3629(evaluated.)X
X4039(The)X
X720 1596(Tcl)N
X865(library)X
X1127(source)X
X1383(code)X
X1576(is)X
X1662(currently)X
X2007(available)X
X2353(to)X
X2449(the)X
X2584(public)X
X2831(in)X
X2926(a)X
X2991(free,)X
X3175(unlicensed)X
X3578(form,)X
X3797(and)X
X3950(I)X
X4005(hope)X
X720 1695(to)N
X811(produce)X
X1116(a)X
X1177(Tcl-based)X
X1546(toolkit)X
X1800(in)X
X1891(the)X
X2021(near)X
X2194(future.)X
X3 f
X720 1989(9.)N
X830(Acknowledgments)X
X1 f
X920 2121(The)N
X1082(members)X
X1430(of)X
X1528(the)X
X1661(Sprite)X
X1897(project)X
X2167(acted)X
X2377(as)X
X2474(guinea)X
X2733(pigs)X
X2904(for)X
X3030(the)X
X3162(editor)X
X3392(and)X
X3543(terminal)X
X3862(emulator)X
X720 2220(based)N
X948(on)X
X1064(Tcl;)X
X1257(without)X
X1555(their)X
X1745(help)X
X1925(the)X
X2061(language)X
X2407(would)X
X2655(not)X
X2796(have)X
X2990(evolved)X
X3297(to)X
X3394(its)X
X3506(current)X
X3782(state.)X
X4015(Fred)X
X720 2319(Douglis,)N
X1045(John)X
X1235(Hartman,)X
X1589(Ken)X
X1759(Shirriff,)X
X2064(and)X
X2215(Brent)X
X2434(Welch)X
X2687(provided)X
X3023(helpful)X
X3296(comments)X
X3682(that)X
X3838(improved)X
X720 2418(the)N
X850(presentation)X
X1303(of)X
X1398(this)X
X1548(paper.)X
X3 f
X720 2712(10.)N
X874(References)X
X1 f
X720 2844([1])N
X920(Abelson,)X
X1265(H.)X
X1380(and)X
X1536(Sussman,)X
X1900(G.J.)X
X2 f
X2092(Structure)X
X2449(and)X
X2610(Interpretation)X
X3134(of)X
X3232(Computer)X
X3613(Programs)X
X1 f
X3964(,)X
X4015(MIT)X
X920 2943(Press,)N
X1149(Cambridge,)X
X1585(MA,)X
X1770(1985.)X
X720 3075([2])N
X920(Adobe)X
X1178(Systems,)X
X1518(Inc.)X
X2 f
X1698(Postscript)X
X2080(Language)X
X2456(Tutorial)X
X2770(and)X
X2926(Cookbook)X
X1 f
X3283(,)X
X3329(Addison-Wesley,)X
X3966(Read-)X
X920 3174(ing,)N
X1077(MA,)X
X1262(1985.)X
X720 3306([3])N
X920(Birrell,)X
X1206(A.)X
X1324(and)X
X1484(Nelson,)X
X1788(B.)X
X1923(``Implementing)X
X2509(Remote)X
X2816(Procedure)X
X3204(Calls.'')X
X2 f
X3498(ACM)X
X3716(Transactions)X
X920 3405(on)N
X1030(Computer)X
X1404(Systems)X
X1 f
X1682(,)X
X1726(Vol.)X
X1902(2,)X
X1990(No.)X
X2141(1,)X
X2229(February)X
X2568(1986,)X
X2788(pp.)X
X2920(39-59.)X
X720 3537([4])N
X920(Brodie,)X
X1206(L.)X
X2 f
X1328(Starting)X
X1637(FORTH:)X
X1995(An)X
X2117(Introduction)X
X2582(to)X
X2675(the)X
X2807(FORTH)X
X3114(Language)X
X3490(and)X
X3645(Operating)X
X4030(Sys-)X
X920 3636(tem)N
X1069(for)X
X1194(Beginners)X
X1573(and)X
X1727(Professionals)X
X1 f
X2207(,)X
X2251(Prentice)X
X2562(Hall,)X
X2758(Englewood)X
X3181(Cliffs,)X
X3448(NJ,)X
X3589(1981.)X
X720 3768([5])N
X920(Kernighan,)X
X1337(B.W.)X
X1547(and)X
X1698(Pike,)X
X1901(R.)X
X2 f
X2028(The)X
X2184(UNIX)X
X2413(Programming)X
X2930(Environment)X
X1 f
X3385(,)X
X3431(Prentice)X
X3744(Hall,)X
X3941(Engle-)X
X920 3867(wood)N
X1137(Cliffs,)X
X1382(NJ,)X
X1523(1984.)X
X720 3999([6])N
X920(Kernighan,)X
X1338(B.W.)X
X1549(and)X
X1701(Ritchie,)X
X2004(D.M.)X
X2 f
X2236(The)X
X2393(C)X
X2477(Programming)X
X2995(Language)X
X1 f
X(,)S
X3394(Second)X
X3678(Edition,)X
X3986(Pren-)X
X920 4098(tice)N
X1070(Hall,)X
X1266(Englewood)X
X1689(Cliffs,)X
X1934(NJ,)X
X2075(1988.)X
X720 4230([7])N
X920(Mackey,)X
X1250(K.,)X
X1382(Downs,)X
X1677(M.,)X
X1824(Duffy,)X
X2080(J.,)X
X2183(and)X
X2335(Leege,)X
X2597(J.)X
X2699(``An)X
X2888(Interactive)X
X3289(Interface)X
X3625(Builder)X
X3914(for)X
X4040(Use)X
X920 4329(with)N
X1099(Ada)X
X1267(Programs,'')X
X2 f
X1706(Xhibition)X
X2058(Conference)X
X2486(Proceedings)X
X1 f
X2926(,)X
X2970(1989.)X
X720 4461([8])N
X920(Stallman,)X
X1279(R.)X
X2 f
X1404(GNU)X
X1611(Emacs)X
X1867(Manual)X
X1 f
X2141(,)X
X2185(Fourth)X
X2442(Edition,)X
X2747(Version)X
X3047(17,)X
X3179(February)X
X3518(1986.)X
X720 4593([9])N
X920(Sun)X
X1083(Microsystems,)X
X1625(Inc.)X
X2 f
X1807(NeWS)X
X2048(Technical)X
X2422(Overview)X
X1 f
X2759(,)X
X2807(Sun)X
X2970(Microsystems,)X
X3512(Inc.)X
X3672(PN)X
X3810(800-1498-)X
X920 4692(05,)N
X1052(1987.)X
X3 f
X2353 6048(-)N
X2404(13)X
X2514(-)X
X
X14 p
X%%Trailer
Xxt
X
Xxs
END_OF_FILE
if test 118900 -ne `wc -c <'usenix.ps'`; then
    echo shar: \"'usenix.ps'\" unpacked with wrong size!
fi
# end of 'usenix.ps'
echo shar: End of shell archive.
exit 0
-- 
Deven T. Corzine        Internet:  deven@rpi.edu, shadow@pawl.rpi.edu
Snail:  2151 12th St. Apt. 4, Troy, NY 12180   Phone:  (518) 274-0327
Bitnet:  deven@rpitsmts, userfxb6@rpitsmts     UUCP:  uunet!rpi!deven
Simple things should be simple and complex things should be possible.

peter@sugar.hackercorp.com (Peter da Silva) (03/10/90)

In article <1585@jimi.cs.unlv.edu> maniac@cleanhead.cs.unlv.edu (Eric J. Schwertfeger) writes:
> 	I have a few questions to ask about TCL, and a few possibly 
> invalid observations to make.  First of all, is there any way to get
> a copy of the paper that describes TCL?  I'd like to see it to get
> a better idea of what it is cabable of.

It's in the package at "sprite.berkeley.edu:ftp/tcl.tar.Z". The only problem
is that when I got it through BITFTP it got messed up somewhere around that
part of the tarchive. If you get a good copy of the file "usenet.ps", perhaps
you could post it to alt.sources.

The rest of the documentation (what I could get) I recently posted to
alt.sources, along with the System V version of TCL.

> 	Second, it is my impression that programs with TCL interfaces
> talk directly to each other, rather than through an intermediate, as with
> ARexx. While this is good as far as speed goes, I do see one limitation
> to this.  I'm currently working on a mini-database with an ARexx interface,
> and my script interpreter will pass any unknown functions to ARexx, much
> like DME does.  Now, I don't have to know which host or library defined
> the function, so long as the library or host has been identified to ARexx
> as such.  Can this be done with TCL?

Not currently. Of course you can always pass it through a TCL/REXX gateway.
We're working on a resource manager for TCL that may serve the same purpose.

In fact a bare TCL interpreter can serve the purpose, now that I think of it:

send resource-manager proc whatever {args} [concat send $myname {$args}]

So you can now send undefined commands to resource-manager. Or just leave the
script interpreter out of your program altogether and let the user put this
together.

> 	Finally, I don't see why somebody couldn't write a set of 
> library functions to implement a command interpreter similar to that 
> of TCL.

Sure. That's exactly what TCL is. A set of library functions that implements
a command interpreter similar to (in fact identical to) that of TCL. Why do
it again?

> 	I am interested in TCL, but for now I think I'll stick with ARexx. 
-- 
 _--_|\  Peter da Silva <peter@sugar.hackercorp.com>.
/      \
\_.--._/ I haven't lost my mind, it's backed up on tape somewhere!
      v  "Have you hugged your wolf today?" `-_-'