OSDN Git Service

Please enter the commit message for your changes. Lines starting
[eos/hostdependX86LINUX64.git] / util / X86LINUX64 / man / mann / switch.n
1 '\"
2 '\" Copyright (c) 1993 The Regents of the University of California.
3 '\" Copyright (c) 1994-1997 Sun Microsystems, Inc.
4 '\"
5 '\" See the file "license.terms" for information on usage and redistribution
6 '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
7 '\" 
8 .TH switch n 8.5 Tcl "Tcl Built-In Commands"
9 .\" The -*- nroff -*- definitions below are for supplemental macros used
10 .\" in Tcl/Tk manual entries.
11 .\"
12 .\" .AP type name in/out ?indent?
13 .\"     Start paragraph describing an argument to a library procedure.
14 .\"     type is type of argument (int, etc.), in/out is either "in", "out",
15 .\"     or "in/out" to describe whether procedure reads or modifies arg,
16 .\"     and indent is equivalent to second arg of .IP (shouldn't ever be
17 .\"     needed;  use .AS below instead)
18 .\"
19 .\" .AS ?type? ?name?
20 .\"     Give maximum sizes of arguments for setting tab stops.  Type and
21 .\"     name are examples of largest possible arguments that will be passed
22 .\"     to .AP later.  If args are omitted, default tab stops are used.
23 .\"
24 .\" .BS
25 .\"     Start box enclosure.  From here until next .BE, everything will be
26 .\"     enclosed in one large box.
27 .\"
28 .\" .BE
29 .\"     End of box enclosure.
30 .\"
31 .\" .CS
32 .\"     Begin code excerpt.
33 .\"
34 .\" .CE
35 .\"     End code excerpt.
36 .\"
37 .\" .VS ?version? ?br?
38 .\"     Begin vertical sidebar, for use in marking newly-changed parts
39 .\"     of man pages.  The first argument is ignored and used for recording
40 .\"     the version when the .VS was added, so that the sidebars can be
41 .\"     found and removed when they reach a certain age.  If another argument
42 .\"     is present, then a line break is forced before starting the sidebar.
43 .\"
44 .\" .VE
45 .\"     End of vertical sidebar.
46 .\"
47 .\" .DS
48 .\"     Begin an indented unfilled display.
49 .\"
50 .\" .DE
51 .\"     End of indented unfilled display.
52 .\"
53 .\" .SO ?manpage?
54 .\"     Start of list of standard options for a Tk widget. The manpage
55 .\"     argument defines where to look up the standard options; if
56 .\"     omitted, defaults to "options". The options follow on successive
57 .\"     lines, in three columns separated by tabs.
58 .\"
59 .\" .SE
60 .\"     End of list of standard options for a Tk widget.
61 .\"
62 .\" .OP cmdName dbName dbClass
63 .\"     Start of description of a specific option.  cmdName gives the
64 .\"     option's name as specified in the class command, dbName gives
65 .\"     the option's name in the option database, and dbClass gives
66 .\"     the option's class in the option database.
67 .\"
68 .\" .UL arg1 arg2
69 .\"     Print arg1 underlined, then print arg2 normally.
70 .\"
71 .\" .QW arg1 ?arg2?
72 .\"     Print arg1 in quotes, then arg2 normally (for trailing punctuation).
73 .\"
74 .\" .PQ arg1 ?arg2?
75 .\"     Print an open parenthesis, arg1 in quotes, then arg2 normally
76 .\"     (for trailing punctuation) and then a closing parenthesis.
77 .\"
78 .\"     # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
79 .if t .wh -1.3i ^B
80 .nr ^l \n(.l
81 .ad b
82 .\"     # Start an argument description
83 .de AP
84 .ie !"\\$4"" .TP \\$4
85 .el \{\
86 .   ie !"\\$2"" .TP \\n()Cu
87 .   el          .TP 15
88 .\}
89 .ta \\n()Au \\n()Bu
90 .ie !"\\$3"" \{\
91 \&\\$1 \\fI\\$2\\fP (\\$3)
92 .\".b
93 .\}
94 .el \{\
95 .br
96 .ie !"\\$2"" \{\
97 \&\\$1  \\fI\\$2\\fP
98 .\}
99 .el \{\
100 \&\\fI\\$1\\fP
101 .\}
102 .\}
103 ..
104 .\"     # define tabbing values for .AP
105 .de AS
106 .nr )A 10n
107 .if !"\\$1"" .nr )A \\w'\\$1'u+3n
108 .nr )B \\n()Au+15n
109 .\"
110 .if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
111 .nr )C \\n()Bu+\\w'(in/out)'u+2n
112 ..
113 .AS Tcl_Interp Tcl_CreateInterp in/out
114 .\"     # BS - start boxed text
115 .\"     # ^y = starting y location
116 .\"     # ^b = 1
117 .de BS
118 .br
119 .mk ^y
120 .nr ^b 1u
121 .if n .nf
122 .if n .ti 0
123 .if n \l'\\n(.lu\(ul'
124 .if n .fi
125 ..
126 .\"     # BE - end boxed text (draw box now)
127 .de BE
128 .nf
129 .ti 0
130 .mk ^t
131 .ie n \l'\\n(^lu\(ul'
132 .el \{\
133 .\"     Draw four-sided box normally, but don't draw top of
134 .\"     box if the box started on an earlier page.
135 .ie !\\n(^b-1 \{\
136 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
137 .\}
138 .el \}\
139 \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
140 .\}
141 .\}
142 .fi
143 .br
144 .nr ^b 0
145 ..
146 .\"     # VS - start vertical sidebar
147 .\"     # ^Y = starting y location
148 .\"     # ^v = 1 (for troff;  for nroff this doesn't matter)
149 .de VS
150 .if !"\\$2"" .br
151 .mk ^Y
152 .ie n 'mc \s12\(br\s0
153 .el .nr ^v 1u
154 ..
155 .\"     # VE - end of vertical sidebar
156 .de VE
157 .ie n 'mc
158 .el \{\
159 .ev 2
160 .nf
161 .ti 0
162 .mk ^t
163 \h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
164 .sp -1
165 .fi
166 .ev
167 .\}
168 .nr ^v 0
169 ..
170 .\"     # Special macro to handle page bottom:  finish off current
171 .\"     # box/sidebar if in box/sidebar mode, then invoked standard
172 .\"     # page bottom macro.
173 .de ^B
174 .ev 2
175 'ti 0
176 'nf
177 .mk ^t
178 .if \\n(^b \{\
179 .\"     Draw three-sided box if this is the box's first page,
180 .\"     draw two sides but no top otherwise.
181 .ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
182 .el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
183 .\}
184 .if \\n(^v \{\
185 .nr ^x \\n(^tu+1v-\\n(^Yu
186 \kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
187 .\}
188 .bp
189 'fi
190 .ev
191 .if \\n(^b \{\
192 .mk ^y
193 .nr ^b 2
194 .\}
195 .if \\n(^v \{\
196 .mk ^Y
197 .\}
198 ..
199 .\"     # DS - begin display
200 .de DS
201 .RS
202 .nf
203 .sp
204 ..
205 .\"     # DE - end display
206 .de DE
207 .fi
208 .RE
209 .sp
210 ..
211 .\"     # SO - start of list of standard options
212 .de SO
213 'ie '\\$1'' .ds So \\fBoptions\\fR
214 'el .ds So \\fB\\$1\\fR
215 .SH "STANDARD OPTIONS"
216 .LP
217 .nf
218 .ta 5.5c 11c
219 .ft B
220 ..
221 .\"     # SE - end of list of standard options
222 .de SE
223 .fi
224 .ft R
225 .LP
226 See the \\*(So manual entry for details on the standard options.
227 ..
228 .\"     # OP - start of full description for a single option
229 .de OP
230 .LP
231 .nf
232 .ta 4c
233 Command-Line Name:      \\fB\\$1\\fR
234 Database Name:  \\fB\\$2\\fR
235 Database Class: \\fB\\$3\\fR
236 .fi
237 .IP
238 ..
239 .\"     # CS - begin code excerpt
240 .de CS
241 .RS
242 .nf
243 .ta .25i .5i .75i 1i
244 ..
245 .\"     # CE - end code excerpt
246 .de CE
247 .fi
248 .RE
249 ..
250 .\"     # UL - underline word
251 .de UL
252 \\$1\l'|0\(ul'\\$2
253 ..
254 .\"     # QW - apply quotation marks to word
255 .de QW
256 .ie '\\*(lq'"' ``\\$1''\\$2
257 .\"" fix emacs highlighting
258 .el \\*(lq\\$1\\*(rq\\$2
259 ..
260 .\"     # PQ - apply parens and quotation marks to word
261 .de PQ
262 .ie '\\*(lq'"' (``\\$1''\\$2)\\$3
263 .\"" fix emacs highlighting
264 .el (\\*(lq\\$1\\*(rq\\$2)\\$3
265 ..
266 .\"     # QR - quoted range
267 .de QR
268 .ie '\\*(lq'"' ``\\$1''\\-``\\$2''\\$3
269 .\"" fix emacs highlighting
270 .el \\*(lq\\$1\\*(rq\\-\\*(lq\\$2\\*(rq\\$3
271 ..
272 .\"     # MT - "empty" string
273 .de MT
274 .QW ""
275 ..
276 .BS
277 '\" Note:  do not modify the .SH NAME line immediately below!
278 .SH NAME
279 switch \- Evaluate one of several scripts, depending on a given value
280 .SH SYNOPSIS
281 \fBswitch \fR?\fIoptions\fR?\fI string pattern body \fR?\fIpattern body \fR...?
282 .sp
283 \fBswitch \fR?\fIoptions\fR?\fI string \fR{\fIpattern body \fR?\fIpattern body \fR...?}
284 .BE
285 .SH DESCRIPTION
286 .PP
287 The \fBswitch\fR command matches its \fIstring\fR argument against each of
288 the \fIpattern\fR arguments in order.
289 As soon as it finds a \fIpattern\fR that matches \fIstring\fR it
290 evaluates the following \fIbody\fR argument by passing it recursively
291 to the Tcl interpreter and returns the result of that evaluation.
292 If the last \fIpattern\fR argument is \fBdefault\fR then it matches
293 anything.
294 If no \fIpattern\fR argument
295 matches \fIstring\fR and no default is given, then the \fBswitch\fR
296 command returns an empty string.
297 .PP
298 If the initial arguments to \fBswitch\fR start with \fB\-\fR then
299 they are treated as options
300 unless there are exactly two arguments to \fBswitch\fR (in which case the
301 first must the \fIstring\fR and the second must be the
302 \fIpattern\fR/\fIbody\fR list).
303 The following options are currently supported:
304 .TP 10
305 \fB\-exact\fR
306 .
307 Use exact matching when comparing \fIstring\fR to a pattern.  This
308 is the default.
309 .TP 10
310 \fB\-glob\fR
311 .
312 When matching \fIstring\fR to the patterns, use glob-style matching
313 (i.e. the same as implemented by the \fBstring match\fR command).
314 .TP 10
315 \fB\-regexp\fR
316 .
317 When matching \fIstring\fR to the patterns, use regular
318 expression matching
319 (as described in the \fBre_syntax\fR reference page).
320 .TP 10
321 \fB\-nocase\fR
322 .
323 Causes comparisons to be handled in a case-insensitive manner.
324 .TP 10
325 \fB\-matchvar\fR \fIvarName\fR
326 .
327 This option (only legal when \fB\-regexp\fR is also specified)
328 specifies the name of a variable into which the list of matches
329 found by the regular expression engine will be written.  The first
330 element of the list written will be the overall substring of the input
331 string (i.e. the \fIstring\fR argument to \fBswitch\fR) matched, the
332 second element of the list will be the substring matched by the first
333 capturing parenthesis in the regular expression that matched, and so
334 on.  When a \fBdefault\fR branch is taken, the variable will have the
335 empty list written to it.  This option may be specified at the same
336 time as the \fB\-indexvar\fR option.
337 .TP 10
338 \fB\-indexvar\fR \fIvarName\fR
339 .
340 This option (only legal when \fB\-regexp\fR is also specified)
341 specifies the name of a variable into which the list of indices
342 referring to matching substrings
343 found by the regular expression engine will be written.  The first
344 element of the list written will be a two-element list specifying the
345 index of the start and index of the first character after the end of
346 the overall substring of the input
347 string (i.e. the \fIstring\fR argument to \fBswitch\fR) matched, in a
348 similar way to the \fB\-indices\fR option to the \fBregexp\fR can
349 obtain.  Similarly, the second element of the list refers to the first
350 capturing parenthesis in the regular expression that matched, and so
351 on.  When a \fBdefault\fR branch is taken, the variable will have the
352 empty list written to it.  This option may be specified at the same
353 time as the \fB\-matchvar\fR option.
354 .TP 10
355 \fB\-\|\-\fR
356 .
357 Marks the end of options.  The argument following this one will
358 be treated as \fIstring\fR even if it starts with a \fB\-\fR.
359 This is not required when the matching patterns and bodies are grouped
360 together in a single argument.
361 .PP
362 Two syntaxes are provided for the \fIpattern\fR and \fIbody\fR arguments.
363 The first uses a separate argument for each of the patterns and commands;
364 this form is convenient if substitutions are desired on some of the
365 patterns or commands.
366 The second form places all of the patterns and commands together into
367 a single argument; the argument must have proper list structure, with
368 the elements of the list being the patterns and commands.
369 The second form makes it easy to construct multi-line switch commands,
370 since the braces around the whole list make it unnecessary to include a
371 backslash at the end of each line.
372 Since the \fIpattern\fR arguments are in braces in the second form,
373 no command or variable substitutions are performed on them;  this makes
374 the behavior of the second form different than the first form in some
375 cases.
376 .PP
377 If a \fIbody\fR is specified as
378 .QW \fB\-\fR
379 it means that the \fIbody\fR
380 for the next pattern should also be used as the body for this
381 pattern (if the next pattern also has a body of
382 .QW \fB\-\fR
383 then the body after that is used, and so on).
384 This feature makes it possible to share a single \fIbody\fR among
385 several patterns.
386 .PP
387 Beware of how you place comments in \fBswitch\fR commands.  Comments
388 should only be placed \fBinside\fR the execution body of one of the
389 patterns, and not intermingled with the patterns.
390 .SH "EXAMPLES"
391 .PP
392 The \fBswitch\fR command can match against variables and not just
393 literals, as shown here (the result is \fI2\fR):
394 .PP
395 .CS
396 set foo "abc"
397 \fBswitch\fR abc a \- b {expr {1}} $foo {expr {2}} default {expr {3}}
398 .CE
399 .PP
400 Using glob matching and the fall-through body is an alternative to
401 writing regular expressions with alternations, as can be seen here
402 (this returns \fI1\fR):
403 .PP
404 .CS
405 \fBswitch\fR \-glob aaab {
406     a*b     \-
407     b       {expr {1}}
408     a*      {expr {2}}
409     default {expr {3}}
410 }
411 .CE
412 .PP
413 Whenever nothing matches, the \fBdefault\fR clause (which must be
414 last) is taken.  This example has a result of \fI3\fR:
415 .PP
416 .CS
417 \fBswitch\fR xyz {
418     a \-
419     b {
420         # Correct Comment Placement
421         expr {1}
422     }
423     c {
424         expr {2}
425     }
426     default {
427         expr {3}
428     }
429 }
430 .CE
431 .PP
432 When matching against regular expressions, information about what
433 exactly matched is easily obtained using the \fB\-matchvar\fR option:
434 .PP
435 .CS
436 \fBswitch\fR \-regexp \-matchvar foo \-\- $bar {
437     a(b*)c {
438         puts "Found [string length [lindex $foo 1]] 'b's"
439     }
440     d(e*)f(g*)h {
441         puts "Found [string length [lindex $foo 1]] 'e's and\e
442                 [string length [lindex $foo 2]] 'g's"
443     }
444 }
445 .CE
446 .SH "SEE ALSO"
447 for(n), if(n), regexp(n)
448 .SH KEYWORDS
449 switch, match, regular expression
450 .\" Local Variables:
451 .\" mode: nroff
452 .\" End: