Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / tools / perl-5.8.0 / man / man3 / Tk::Internals.3
CommitLineData
86530b38
AT
1.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13
2.\"
3.\" Standard preamble:
4.\" ========================================================================
5.de Sh \" Subsection heading
6.br
7.if t .Sp
8.ne 5
9.PP
10\fB\\$1\fR
11.PP
12..
13.de Sp \" Vertical space (when we can't use .PP)
14.if t .sp .5v
15.if n .sp
16..
17.de Vb \" Begin verbatim text
18.ft CW
19.nf
20.ne \\$1
21..
22.de Ve \" End verbatim text
23.ft R
24.fi
25..
26.\" Set up some character translations and predefined strings. \*(-- will
27.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
28.\" double quote, and \*(R" will give a right double quote. | will give a
29.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
30.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
31.\" expand to `' in nroff, nothing in troff, for use with C<>.
32.tr \(*W-|\(bv\*(Tr
33.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
34.ie n \{\
35. ds -- \(*W-
36. ds PI pi
37. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
38. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
39. ds L" ""
40. ds R" ""
41. ds C` ""
42. ds C' ""
43'br\}
44.el\{\
45. ds -- \|\(em\|
46. ds PI \(*p
47. ds L" ``
48. ds R" ''
49'br\}
50.\"
51.\" If the F register is turned on, we'll generate index entries on stderr for
52.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
53.\" entries marked with X<> in POD. Of course, you'll have to process the
54.\" output yourself in some meaningful fashion.
55.if \nF \{\
56. de IX
57. tm Index:\\$1\t\\n%\t"\\$2"
58..
59. nr % 0
60. rr F
61.\}
62.\"
63.\" For nroff, turn off justification. Always turn off hyphenation; it makes
64.\" way too many mistakes in technical documents.
65.hy 0
66.if n .na
67.\"
68.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
69.\" Fear. Run. Save yourself. No user-serviceable parts.
70. \" fudge factors for nroff and troff
71.if n \{\
72. ds #H 0
73. ds #V .8m
74. ds #F .3m
75. ds #[ \f1
76. ds #] \fP
77.\}
78.if t \{\
79. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
80. ds #V .6m
81. ds #F 0
82. ds #[ \&
83. ds #] \&
84.\}
85. \" simple accents for nroff and troff
86.if n \{\
87. ds ' \&
88. ds ` \&
89. ds ^ \&
90. ds , \&
91. ds ~ ~
92. ds /
93.\}
94.if t \{\
95. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
96. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
97. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
98. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
99. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
100. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
101.\}
102. \" troff and (daisy-wheel) nroff accents
103.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
104.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
105.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
106.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
107.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
108.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
109.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
110.ds ae a\h'-(\w'a'u*4/10)'e
111.ds Ae A\h'-(\w'A'u*4/10)'E
112. \" corrections for vroff
113.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
114.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
115. \" for low resolution devices (crt and lpr)
116.if \n(.H>23 .if \n(.V>19 \
117\{\
118. ds : e
119. ds 8 ss
120. ds o a
121. ds d- d\h'-1'\(ga
122. ds D- D\h'-1'\(hy
123. ds th \o'bp'
124. ds Th \o'LP'
125. ds ae ae
126. ds Ae AE
127.\}
128.rm #[ #] #H #V #F C
129.\" ========================================================================
130.\"
131.IX Title "INTERNALS 1"
132.TH INTERNALS 1 "2000-12-30" "perl v5.8.0" "User Contributed Perl Documentation"
133.SH "NAME"
134CallingTk \- what is Perl Tk interface doing when you call Tk functions.
135.PP
136This information is worse than useless for \f(CW\*(C`perlTk\*(C'\fR users, but can of
137some help for people interested in using modified Tk source with
138\&\f(CW\*(C`perlTk\*(C'\fR.
139.PP
140\&\fIThis document is under construction. The information is believed to
141be pertinent to the version of\fR \f(CW\*(C`portableTk\*(C'\fR \fIavailable when it was
142created. All the details are subject to change.\fR
143.SH "DESCRIPTION"
144.IX Header "DESCRIPTION"
145.IP "PreCompiling" 4
146.IX Item "PreCompiling"
147Before the actual compilation stage a script scans the source
148and extracts the subcommands of different commands. This information
149resides in the file \f(CW\*(C`pTk/Methods.def\*(C'\fR.
150.IP "Compilation" 4
151.IX Item "Compilation"
152During compilation the above file is included in the source of booting
153routine of dynamic (or static) library. More precisely, the booting
154code of module \f(CW\*(C`Tk\*(C'\fR calls the subroutine \fIBoot_Glue()\fR from the module
155\&\f(CW\*(C`tkGlue.c\*(C'\fR, and this subroutine includes the file (with appropriate
156macro definitions).
157.ie n .IP "Inside ""use Tk;""" 4
158.el .IP "Inside \f(CWuse Tk;\fR" 4
159.IX Item "Inside use Tk;"
160The module bootstraps the C code, then loads the Perl libraries. The
161heart of the Perl code is contained in the \f(CW\*(C`Tk::Widget\*(C'\fR library, all the
162widgets inherit from this module. Code for toplevels is loaded from
163\&\f(CW\*(C`Tk::MainWindow\*(C'\fR.
164.Sp
165During bootstrap of the C glue code the \f(CW\*(C`Xevent::?\*(C'\fR codes and a
166handful of \f(CW\*(C`Tk::Widget\*(C'\fR and \f(CW\*(C`Tk::Image\*(C'\fR routines are defined. (Much
167more XSUBs are created from \f(CW\*(C`Tk.xs\*(C'\fR code.) The widget subcommands are
168glued to Perl basing on the list included from \f(CW\*(C`pTk/Methods.def\*(C'\fR. In
169fact all the subcommands are glued to XSUBs that are related to the
170same C subroutine \fIXStoWidget()\fR, but have different data parts.
171.Sp
172During the Perl code bootstrap the method \f(CW\*(C`Tk::Widget::import\*(C'\fR is
173called. This call requires all the code from particular widget
174packages.
175.Sp
176Code from the widget packages calls an obscure command like
177.Sp
178.Vb 1
179\& (bless \e"Text")->WidgetClass;
180.Ve
181.Sp
182This command (actually \fITk::Widget::WidgetClass()\fR) creates three
183routines: \fITk::Widget::Text()\fR, \fITk::Widget::isText()\fR, and
184\&\fITk::Text::isText()\fR. The first one is basically \f(CW\*(C`new\*(C'\fR of \f(CW\*(C`Tk::Text\*(C'\fR,
185the other two return constants. It also puts the class into
186depository.
187.ie n .IP "Inside ""$top = MainWindow\->new;""" 4
188.el .IP "Inside \f(CW$top = MainWindow\->new;\fR" 4
189.IX Item "Inside $top = MainWindow->new;"
190This is quite intuitive. This call goes direct to
191\&\f(CW\*(C`Tk::MainWindow::new\*(C'\fR, that calls \s-1XSUB\s0
192\&\f(CW\*(C`Tk::MainWindow::CreateMainWindow\*(C'\fR, that calls C subroutine
193\&\fITk_CreateMainWindow()\fR. It is a \f(CW\*(C`Tk\*(C'\fR subroutine, so here black magic
194ends (almost).
195.Sp
196The only remaining black magic is that the \f(CW\*(C`Tk\*(C'\fR initialization
197routine creates a lot of commands, but the subroutine for creation is
198usurped by \fBportableTk\fR and the commands are created in the package
199\&\f(CW\*(C`Tk\*(C'\fR. They are associated to XSUBs that are related to one of three C
200subroutines \fIXStoSubCmd()\fR, \fIXStoBind()\fR, or \fIXStoTk()\fR, but have different
201data parts.
202.Sp
203The result of the call is blessed into \f(CW\*(C`Tk::MainWindow\*(C'\fR, as it should.
204.ie n .IP "Inside ""$top\->title('Text demo');""" 4
205.el .IP "Inside \f(CW$top\->title('Text demo');\fR" 4
206.IX Item "Inside $top->title('Text demo');"
207The package \f(CW\*(C`Tk::Toplevel\*(C'\fR defines a lot of subroutines on the fly on
208some list. All the commands from the list are converted to the
209corresponding subcommands of \f(CW\*(C`wm\*(C'\fR method of the widget. Here
210subcommand is a command with some particular second argument (in this
211case \f(CW"title"\fR). Recall that the first argument is \f(CW$self\fR.
212.Sp
213Now \f(CW\*(C`Tk::Toplevel\*(C'\fR \f(CW@ISA\fR \f(CW\*(C`Tk::Widget\*(C'\fR, that in turn \f(CW@ISA\fR \f(CW\*(C`Tk\*(C'\fR. So a
214call to \f(CW\*(C`$top\->wm('title','Text demo')\*(C'\fR calls \f(CW\*(C`Tk::wm\*(C'\fR, that is
215defined during call to \fITk_CreateMainWindow()\fR. As it is described
216above, the \s-1XSUB\s0 associated to \fIXStoSubCmd()\fR is called.
217.Sp
218This C routine is defined in \f(CW\*(C`tkGlue.c\*(C'\fR. It gets the data part of
219\&\s-1XSUB\s0, creates a \f(CW\*(C`SV\*(C'\fR with the name of the command, and calls
220\&\fICall_Tk()\fR with the \s-1XSUB\s0 data as the first argument, and with the name
221of \s-1XSUB\s0 stuffed into the Perl stack in the place there \f(CW\*(C`tk\*(C'\fR expects
222it. (In fact it can also reorder the arguments if it thinks it is
223what you want).
224.Sp
225The latter procedure extracts name of \f(CW\*(C`tk\*(C'\fR procedure and
226\&\f(CW\*(C`clientData\*(C'\fR from the first argument and makes a call, using Perl
227stack as \f(CW\*(C`argv\*(C'\fR for the procedure. A lot of black magic is performed
228afterwards to convert result of the procedure to a Perl array return.
229.ie n .IP "Inside ""$text = $top\->Text(background => $txtBg);""" 4
230.el .IP "Inside \f(CW$text = $top\->Text(background => $txtBg);\fR" 4
231.IX Item "Inside $text = $top->Text(background => $txtBg);"
232Above we discussed how the command \f(CW\*(C`Tk::Widget::Text\*(C'\fR is created. The
233above command calls it via inheritance. It is translated to
234.Sp
235.Vb 1
236\& Tk::Text::new($top, background => $txtBg);
237.Ve
238.Sp
239The package \f(CW\*(C`Tk::Text\*(C'\fR has no method \f(CW\*(C`new\*(C'\fR, so the
240\&\f(CW\*(C`Tk::Widget::new\*(C'\fR is called. In turn it calls
241\&\f(CW\*(C`Tk::Text\->DoInit($top)\*(C'\fR, that is
242\&\f(CW\*(C`Tk::Widget::DoInit(Tk::Text,$top)\*(C'\fR, that initializes the bindings if
243necessary. Then it creates the name for the widget of the form
244\&\f(CW\*(C`.text0\*(C'\fR, and calls \f(CW\*(C`Tk::text('.text0', background => $txtBg)\*(C'\fR
245(note lowercase). The result of the call is blessed into \f(CW\*(C`Tk::Text\*(C'\fR,
246and the method \f(CW\*(C`bindtags\*(C'\fR for this object is called.
247.Sp
248Now the only thing to discuss is who defines the methods \f(CW\*(C`text\*(C'\fR and
249\&\f(CW\*(C`bindtags\*(C'\fR. The answer is that they are defined in \f(CW\*(C`tkWindow.c\*(C'\fR,
250and these commands are created in the package \f(CW\*(C`Tk\*(C'\fR in the same sweep
251that created the command \f(CW\*(C`Tk::wm\*(C'\fR discussed above.
252.Sp
253So the the same C code that corresponds to the processing of
254corresponding \s-1TCL\s0 commands is called here as well (this time via
255\&\f(CW\*(C`XStoTk\*(C'\fR interface).
256.ie n .IP "Inside ""$text\->insert('insert','Hello, world!');""" 4
257.el .IP "Inside \f(CW$text\->insert('insert','Hello, world!');\fR" 4
258.IX Item "Inside $text->insert('insert','Hello, world!');"
259As we discussed above, the subcommands of widget procedures correspond
260to \s-1XSUB\s0 \f(CW\*(C`XStoWidget\*(C'\fR. This \s-1XSUB\s0 substitutes the first argument \f(CW$text\fR
261(that is a hash reference) to an appropriate value from this hash,
262adds the additional argument after the first one that contains the
263name of the subcommand extracted from the data part of \s-1XSUB\s0, and calls
264the corresponding Tk C subroutine via \f(CW\*(C`Call_Tk\*(C'\fR.
265.PP
266Ilya Zakharevich <ilya@math.ohio\-state.edu>