OSDN Git Service

FIRST REPOSITORY
[eos/hostdependOTHERS.git] / SGI / util / SGI / man / man3 / ListObj.3
1 '\"
2 '\" Copyright (c) 1996-1997 Sun Microsystems, Inc.
3 '\"
4 '\" See the file "license.terms" for information on usage and redistribution
5 '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
6 '\" 
7 '\" SCCS: @(#) @(#) ListObj.3 1.10 97/10/08 11:36:58
8 '\" 
9 '\" The definitions below are for supplemental macros used in Tcl/Tk
10 '\" 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
54 '\"     Start of list of standard options for a Tk widget.  The
55 '\"     options follow on successive lines, in four columns separated
56 '\"     by tabs.
57 '\"
58 '\" .SE
59 '\"     End of list of standard options for a Tk widget.
60 '\"
61 '\" .OP cmdName dbName dbClass
62 '\"     Start of description of a specific option.  cmdName gives the
63 '\"     option's name as specified in the class command, dbName gives
64 '\"     the option's name in the option database, and dbClass gives
65 '\"     the option's class in the option database.
66 '\"
67 '\" .UL arg1 arg2
68 '\"     Print arg1 underlined, then print arg2 normally.
69 '\"
70 '\" SCCS: @(#) man.macros 1.9 97/08/22 18:50:59
71 '\"
72 '\"     # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
73 .if t .wh -1.3i ^B
74 .nr ^l \n(.l
75 .ad b
76 '\"     # Start an argument description
77 .de AP
78 .ie !"\\$4"" .TP \\$4
79 .el \{\
80 .   ie !"\\$2"" .TP \\n()Cu
81 .   el          .TP 15
82 .\}
83 .ie !"\\$3"" \{\
84 .ta \\n()Au \\n()Bu
85 \&\\$1  \\fI\\$2\\fP    (\\$3)
86 .\".b
87 .\}
88 .el \{\
89 .br
90 .ie !"\\$2"" \{\
91 \&\\$1  \\fI\\$2\\fP
92 .\}
93 .el \{\
94 \&\\fI\\$1\\fP
95 .\}
96 .\}
97 ..
98 '\"     # define tabbing values for .AP
99 .de AS
100 .nr )A 10n
101 .if !"\\$1"" .nr )A \\w'\\$1'u+3n
102 .nr )B \\n()Au+15n
103 .\"
104 .if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
105 .nr )C \\n()Bu+\\w'(in/out)'u+2n
106 ..
107 .AS Tcl_Interp Tcl_CreateInterp in/out
108 '\"     # BS - start boxed text
109 '\"     # ^y = starting y location
110 '\"     # ^b = 1
111 .de BS
112 .br
113 .mk ^y
114 .nr ^b 1u
115 .if n .nf
116 .if n .ti 0
117 .if n \l'\\n(.lu\(ul'
118 .if n .fi
119 ..
120 '\"     # BE - end boxed text (draw box now)
121 .de BE
122 .nf
123 .ti 0
124 .mk ^t
125 .ie n \l'\\n(^lu\(ul'
126 .el \{\
127 .\"     Draw four-sided box normally, but don't draw top of
128 .\"     box if the box started on an earlier page.
129 .ie !\\n(^b-1 \{\
130 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
131 .\}
132 .el \}\
133 \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
134 .\}
135 .\}
136 .fi
137 .br
138 .nr ^b 0
139 ..
140 '\"     # VS - start vertical sidebar
141 '\"     # ^Y = starting y location
142 '\"     # ^v = 1 (for troff;  for nroff this doesn't matter)
143 .de VS
144 .if !"\\$2"" .br
145 .mk ^Y
146 .ie n 'mc \s12\(br\s0
147 .el .nr ^v 1u
148 ..
149 '\"     # VE - end of vertical sidebar
150 .de VE
151 .ie n 'mc
152 .el \{\
153 .ev 2
154 .nf
155 .ti 0
156 .mk ^t
157 \h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
158 .sp -1
159 .fi
160 .ev
161 .\}
162 .nr ^v 0
163 ..
164 '\"     # Special macro to handle page bottom:  finish off current
165 '\"     # box/sidebar if in box/sidebar mode, then invoked standard
166 '\"     # page bottom macro.
167 .de ^B
168 .ev 2
169 'ti 0
170 'nf
171 .mk ^t
172 .if \\n(^b \{\
173 .\"     Draw three-sided box if this is the box's first page,
174 .\"     draw two sides but no top otherwise.
175 .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
176 .el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
177 .\}
178 .if \\n(^v \{\
179 .nr ^x \\n(^tu+1v-\\n(^Yu
180 \kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
181 .\}
182 .bp
183 'fi
184 .ev
185 .if \\n(^b \{\
186 .mk ^y
187 .nr ^b 2
188 .\}
189 .if \\n(^v \{\
190 .mk ^Y
191 .\}
192 ..
193 '\"     # DS - begin display
194 .de DS
195 .RS
196 .nf
197 .sp
198 ..
199 '\"     # DE - end display
200 .de DE
201 .fi
202 .RE
203 .sp
204 ..
205 '\"     # SO - start of list of standard options
206 .de SO
207 .SH "STANDARD OPTIONS"
208 .LP
209 .nf
210 .ta 4c 8c 12c
211 .ft B
212 ..
213 '\"     # SE - end of list of standard options
214 .de SE
215 .fi
216 .ft R
217 .LP
218 See the \\fBoptions\\fR manual entry for details on the standard options.
219 ..
220 '\"     # OP - start of full description for a single option
221 .de OP
222 .LP
223 .nf
224 .ta 4c
225 Command-Line Name:      \\fB\\$1\\fR
226 Database Name:  \\fB\\$2\\fR
227 Database Class: \\fB\\$3\\fR
228 .fi
229 .IP
230 ..
231 '\"     # CS - begin code excerpt
232 .de CS
233 .RS
234 .nf
235 .ta .25i .5i .75i 1i
236 ..
237 '\"     # CE - end code excerpt
238 .de CE
239 .fi
240 .RE
241 ..
242 .de UL
243 \\$1\l'|0\(ul'\\$2
244 ..
245 .TH Tcl_ListObj 3 8.0 Tcl "Tcl Library Procedures"
246 .BS
247 .SH NAME
248 Tcl_ListObjAppendList, Tcl_ListObjAppendElement, Tcl_NewListObj, Tcl_SetListObj, Tcl_ListObjGetElements, Tcl_ListObjLength, Tcl_ListObjIndex, Tcl_ListObjReplace \- manipulate Tcl objects as lists
249 .SH SYNOPSIS
250 .nf
251 \fB#include <tcl.h>\fR
252 .sp
253 int
254 \fBTcl_ListObjAppendList\fR(\fIinterp, listPtr, elemListPtr\fR)
255 .sp
256 int
257 \fBTcl_ListObjAppendElement\fR(\fIinterp, listPtr, objPtr\fR)
258 .sp
259 Tcl_Obj *
260 \fBTcl_NewListObj\fR(\fIobjc, objv\fR)
261 .sp
262 \fBTcl_SetListObj\fR(\fIobjPtr, objc, objv\fR)
263 .sp
264 int
265 \fBTcl_ListObjGetElements\fR(\fIinterp, listPtr, objcPtr, objvPtr\fR)
266 .sp
267 int
268 \fBTcl_ListObjLength\fR(\fIinterp, listPtr, intPtr\fR)
269 .sp
270 int
271 \fBTcl_ListObjIndex\fR(\fIinterp, listPtr, index, objPtrPtr\fR)
272 .sp
273 int
274 \fBTcl_ListObjReplace\fR(\fIinterp, listPtr, first, count, objc, objv\fR)
275 .SH ARGUMENTS
276 .AS Tcl_Interp "*CONST objv[]" out
277 .AP Tcl_Interp *interp in
278 If an error occurs while converting an object to be a list object,
279 an error message is left in the interpreter's result object
280 unless \fIinterp\fR is NULL.
281 .AP Tcl_Obj *listPtr in/out
282 Points to the list object to be manipulated.
283 If \fIlistPtr\fR does not already point to a list object,
284 an attempt will be made to convert it to one.
285 .AP Tcl_Obj *elemListPtr in/out
286 For \fBTcl_ListObjAppendList\fR, this points to a list object
287 containing elements to be appended onto \fIlistPtr\fR.
288 Each element of *\fIelemListPtr\fR will
289 become a new element of \fIlistPtr\fR.
290 If *\fIelemListPtr\fR is not NULL and
291 does not already point to a list object,
292 an attempt will be made to convert it to one.
293 .AP Tcl_Obj *objPtr in
294 For \fBTcl_ListObjAppendElement\fR,
295 points to the Tcl object that will be appended to \fIlistPtr\fR.
296 For \fBTcl_SetListObj\fR,
297 this points to the Tcl object that will be converted to a list object
298 containing the \fIobjc\fR elements of the array referenced by \fIobjv\fR.
299 .AP int *objcPtr in
300 Points to location where \fBTcl_ListObjGetElements\fR
301 stores the number of element objects in \fIlistPtr\fR.
302 .AP Tcl_Obj ***objvPtr out
303 A location where \fBTcl_ListObjGetElements\fR stores a pointer to an array
304 of pointers to the element objects of \fIlistPtr\fR.  
305 .AP int objc in
306 The number of Tcl objects that \fBTcl_NewListObj\fR
307 will insert into a new list object,
308 and \fBTcl_ListObjReplace\fR will insert into \fIlistPtr\fR.
309 For \fBTcl_SetListObj\fR,
310 the number of Tcl objects to insert into \fIobjPtr\fR.
311 .VS
312 .TP 
313 Tcl_Obj *CONST \fIobjv\fR[]     (in)
314 .
315 An array of pointers to objects.
316 \fBTcl_NewListObj\fR will insert these objects into a new list object
317 and \fBTcl_ListObjReplace\fR will insert them into an existing \fIlistPtr\fR.
318 Each object will become a separate list element.  
319 .VE
320 .AP int *intPtr out
321 Points to location where \fBTcl_ListObjLength\fR
322 stores the length of the list.
323 .AP int index in
324 Index of the list element that \fBTcl_ListObjIndex\fR
325 is to return.
326 The first element has index 0.
327 .AP Tcl_Obj **objPtrPtr out
328 Points to place where \fBTcl_ListObjIndex\fR is to store
329 a pointer to the resulting list element object.
330 .AP int first in
331 Index of the starting list element that \fBTcl_ListObjReplace\fR
332 is to replace.
333 The list's first element has index 0.
334 .AP int count in
335 The number of elements that \fBTcl_ListObjReplace\fR
336 is to replace.
337 .BE
338
339 .SH DESCRIPTION
340 .PP
341 Tcl list objects have an internal representation that supports
342 the efficient indexing and appending.
343 The procedures described in this man page are used to
344 create, modify, index, and append to Tcl list objects from C code.
345 .PP
346 \fBTcl_ListObjAppendList\fR and \fBTcl_ListObjAppendElement\fR
347 both add one or more objects
348 to the end of the list object referenced by \fIlistPtr\fR.
349 \fBTcl_ListObjAppendList\fR appends each element of the list object
350 referenced by \fIelemListPtr\fR while
351 \fBTcl_ListObjAppendElement\fR appends the single object
352 referenced by \fIobjPtr\fR.
353 Both procedures will convert the object referenced by \fIlistPtr\fR
354 to a list object if necessary.
355 If an error occurs during conversion,
356 both procedures return \fBTCL_ERROR\fR and leave an error message
357 in the interpreter's result object if \fIinterp\fR is not NULL.
358 Similarly, if \fIelemListPtr\fR does not already refer to a list object,
359 \fBTcl_ListObjAppendList\fR will attempt to convert it to one
360 and if an error occurs during conversion,
361 will return \fBTCL_ERROR\fR
362 and leave an error message in the interpreter's result object
363 if interp is not NULL.
364 Both procedures invalidate any old string representation of \fIlistPtr\fR
365 and, if it was converted to a list object,
366 free any old internal representation.
367 Similarly, \fBTcl_ListObjAppendList\fR frees any old internal representation
368 of \fIelemListPtr\fR if it converts it to a list object.
369 After appending each element in \fIelemListPtr\fR,
370 \fBTcl_ListObjAppendList\fR increments the element's reference count
371 since \fIlistPtr\fR now also refers to it.
372 For the same reason, \fBTcl_ListObjAppendElement\fR
373 increments \fIobjPtr\fR's reference count.
374 If no error occurs,
375 the two procedures return \fBTCL_OK\fR after appending the objects.
376 .PP
377 \fBTcl_NewListObj\fR and \fBTcl_SetListObj\fR
378 create a new object or modify an existing object to hold 
379 the \fIobjc\fR elements of the array referenced by \fIobjv\fR
380 where each element is a pointer to a Tcl object.
381 If \fIobjc\fR is less than or equal to zero,
382 they return an empty object.
383 The new object's string representation is left invalid.
384 The two procedures increment the reference counts
385 of the elements in \fIobjc\fR since the list object now refers to them.
386 The new list object returned by \fBTcl_NewListObj\fR
387 has reference count zero.
388 .PP
389 \fBTcl_ListObjGetElements\fR returns a count and
390 a pointer to an array of the elements in a list object.
391 It returns the count by storing it in the address \fIobjcPtr\fR.
392 Similarly, it returns the array pointer by storing it
393 in the address \fIobjvPtr\fR.
394 If \fIlistPtr\fR is not already a list object,
395 \fBTcl_ListObjGetElements\fR will attempt to convert it to one;
396 if the conversion fails, it returns \fBTCL_ERROR\fR
397 and leaves an error message in the interpreter's result object
398 if \fIinterp\fR is not NULL.
399 Otherwise it returns \fBTCL_OK\fR after storing the count and array pointer.
400 .PP
401 \fBTcl_ListObjLength\fR returns the number of elements in the list object
402 referenced by \fIlistPtr\fR.
403 It returns this count by storing an integer in the address \fIintPtr\fR.
404 If the object is not already a list object,
405 \fBTcl_ListObjLength\fR will attempt to convert it to one;
406 if the conversion fails, it returns \fBTCL_ERROR\fR
407 and leaves an error message in the interpreter's result object
408 if \fIinterp\fR is not NULL.
409 Otherwise it returns \fBTCL_OK\fR after storing the list's length.
410 .PP
411 The procedure \fBTcl_ListObjIndex\fR returns a pointer to the object
412 at element \fIindex\fR in the list referenced by \fIlistPtr\fR.
413 It returns this object by storing a pointer to it
414 in the address \fIobjPtrPtr\fR.
415 If \fIlistPtr\fR does not already refer to a list object,
416 \fBTcl_ListObjIndex\fR will attempt to convert it to one;
417 if the conversion fails, it returns \fBTCL_ERROR\fR
418 and leaves an error message in the interpreter's result object
419 if \fIinterp\fR is not NULL.
420 If the index is out of range,
421 that is, \fIindex\fR is negative or
422 greater than or equal to the number of elements in the list,
423 \fBTcl_ListObjIndex\fR stores a NULL in \fIobjPtrPtr\fR
424 and returns \fBTCL_OK\fR.
425 Otherwise it returns \fBTCL_OK\fR after storing the element's
426 object pointer.
427 The reference count for the list element is not incremented;
428 the caller must do that if it needs to retain a pointer to the element.
429 .PP
430 \fBTcl_ListObjReplace\fR replaces zero or more elements
431 of the list referenced by \fIlistPtr\fR
432 with the \fIobjc\fR objects in the array referenced by \fIobjv\fR.
433 If \fIlistPtr\fR does not point to a list object,
434 \fBTcl_ListObjReplace\fR will attempt to convert it to one;
435 if the conversion fails, it returns \fBTCL_ERROR\fR
436 and leaves an error message in the interpreter's result object
437 if \fIinterp\fR is not NULL.
438 Otherwise, it returns \fBTCL_OK\fR after replacing the objects.
439 If \fIobjv\fR is NULL, no new elements are added.
440 If the argument \fIfirst\fR is zero or negative,
441 it refers to the first element.
442 If \fIfirst\fR is greater than or equal to the
443 number of elements in the list, then no elements are deleted;
444 the new elements are appended to the list.
445 \fIcount\fR gives the number of elements to replace.
446 If \fIcount\fR is zero or negative then no elements are deleted;
447 the new elements are simply inserted before the one
448 designated by \fIfirst\fR.
449 \fBTcl_ListObjReplace\fR invalidates \fIlistPtr\fR's
450 old string representation.
451 The reference counts of any elements inserted from \fIobjv\fR
452 are incremented since the resulting list now refers to them.
453 Similarly, the reference counts for any replaced objects are decremented.
454 .PP
455 Because \fBTcl_ListObjReplace\fR combines
456 both element insertion and deletion,
457 it can be used to implement a number of list operations.
458 For example, the following code inserts the \fIobjc\fR objects
459 referenced by the array of object pointers \fIobjv\fR
460 just before the element \fIindex\fR of the list referenced by \fIlistPtr\fR:
461 .CS
462 result = Tcl_ListObjReplace(interp, listPtr, index, 0, objc, objv);
463 .CE
464 Similarly, the following code appends the \fIobjc\fR objects
465 referenced by the array \fIobjv\fR
466 to the end of the list \fIlistPtr\fR:
467 .CS
468 result = Tcl_ListObjLength(interp, listPtr, &length);
469 if (result == TCL_OK) {
470         result = Tcl_ListObjReplace(interp, listPtr, length, 0, objc, objv);
471 }
472 .CE
473 The \fIcount\fR list elements starting at \fIfirst\fR can be deleted
474 by simply calling \fBTcl_ListObjReplace\fR
475 with a NULL \fIobjvPtr\fR:
476 .CS
477 result = Tcl_ListObjReplace(interp, listPtr, first, count, 0, NULL);
478 .CE
479
480 .SH "SEE ALSO"
481 Tcl_NewObj, Tcl_DecrRefCount, Tcl_IncrRefCount, Tcl_GetObjResult
482
483 .SH KEYWORDS
484 append, index, insert, internal representation, length, list, list object, list type, object, object type, replace, string representation