OSDN Git Service

FIRST REPOSITORY
[eos/hostdependOTHERS.git] / SGI / util / SGI / man / man3 / Tcl_AddErrorInfo.3
1 '\"
2 '\" Copyright (c) 1989-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 '\" SCCS: @(#) AddErrInfo.3 1.28 97/06/12 13:39:53
9 '\" 
10 '\" The definitions below are for supplemental macros used in Tcl/Tk
11 '\" manual entries.
12 '\"
13 '\" .AP type name in/out ?indent?
14 '\"     Start paragraph describing an argument to a library procedure.
15 '\"     type is type of argument (int, etc.), in/out is either "in", "out",
16 '\"     or "in/out" to describe whether procedure reads or modifies arg,
17 '\"     and indent is equivalent to second arg of .IP (shouldn't ever be
18 '\"     needed;  use .AS below instead)
19 '\"
20 '\" .AS ?type? ?name?
21 '\"     Give maximum sizes of arguments for setting tab stops.  Type and
22 '\"     name are examples of largest possible arguments that will be passed
23 '\"     to .AP later.  If args are omitted, default tab stops are used.
24 '\"
25 '\" .BS
26 '\"     Start box enclosure.  From here until next .BE, everything will be
27 '\"     enclosed in one large box.
28 '\"
29 '\" .BE
30 '\"     End of box enclosure.
31 '\"
32 '\" .CS
33 '\"     Begin code excerpt.
34 '\"
35 '\" .CE
36 '\"     End code excerpt.
37 '\"
38 '\" .VS ?version? ?br?
39 '\"     Begin vertical sidebar, for use in marking newly-changed parts
40 '\"     of man pages.  The first argument is ignored and used for recording
41 '\"     the version when the .VS was added, so that the sidebars can be
42 '\"     found and removed when they reach a certain age.  If another argument
43 '\"     is present, then a line break is forced before starting the sidebar.
44 '\"
45 '\" .VE
46 '\"     End of vertical sidebar.
47 '\"
48 '\" .DS
49 '\"     Begin an indented unfilled display.
50 '\"
51 '\" .DE
52 '\"     End of indented unfilled display.
53 '\"
54 '\" .SO
55 '\"     Start of list of standard options for a Tk widget.  The
56 '\"     options follow on successive lines, in four columns separated
57 '\"     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 '\" SCCS: @(#) man.macros 1.9 97/08/22 18:50:59
72 '\"
73 '\"     # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
74 .if t .wh -1.3i ^B
75 .nr ^l \n(.l
76 .ad b
77 '\"     # Start an argument description
78 .de AP
79 .ie !"\\$4"" .TP \\$4
80 .el \{\
81 .   ie !"\\$2"" .TP \\n()Cu
82 .   el          .TP 15
83 .\}
84 .ie !"\\$3"" \{\
85 .ta \\n()Au \\n()Bu
86 \&\\$1  \\fI\\$2\\fP    (\\$3)
87 .\".b
88 .\}
89 .el \{\
90 .br
91 .ie !"\\$2"" \{\
92 \&\\$1  \\fI\\$2\\fP
93 .\}
94 .el \{\
95 \&\\fI\\$1\\fP
96 .\}
97 .\}
98 ..
99 '\"     # define tabbing values for .AP
100 .de AS
101 .nr )A 10n
102 .if !"\\$1"" .nr )A \\w'\\$1'u+3n
103 .nr )B \\n()Au+15n
104 .\"
105 .if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
106 .nr )C \\n()Bu+\\w'(in/out)'u+2n
107 ..
108 .AS Tcl_Interp Tcl_CreateInterp in/out
109 '\"     # BS - start boxed text
110 '\"     # ^y = starting y location
111 '\"     # ^b = 1
112 .de BS
113 .br
114 .mk ^y
115 .nr ^b 1u
116 .if n .nf
117 .if n .ti 0
118 .if n \l'\\n(.lu\(ul'
119 .if n .fi
120 ..
121 '\"     # BE - end boxed text (draw box now)
122 .de BE
123 .nf
124 .ti 0
125 .mk ^t
126 .ie n \l'\\n(^lu\(ul'
127 .el \{\
128 .\"     Draw four-sided box normally, but don't draw top of
129 .\"     box if the box started on an earlier page.
130 .ie !\\n(^b-1 \{\
131 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
132 .\}
133 .el \}\
134 \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
135 .\}
136 .\}
137 .fi
138 .br
139 .nr ^b 0
140 ..
141 '\"     # VS - start vertical sidebar
142 '\"     # ^Y = starting y location
143 '\"     # ^v = 1 (for troff;  for nroff this doesn't matter)
144 .de VS
145 .if !"\\$2"" .br
146 .mk ^Y
147 .ie n 'mc \s12\(br\s0
148 .el .nr ^v 1u
149 ..
150 '\"     # VE - end of vertical sidebar
151 .de VE
152 .ie n 'mc
153 .el \{\
154 .ev 2
155 .nf
156 .ti 0
157 .mk ^t
158 \h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
159 .sp -1
160 .fi
161 .ev
162 .\}
163 .nr ^v 0
164 ..
165 '\"     # Special macro to handle page bottom:  finish off current
166 '\"     # box/sidebar if in box/sidebar mode, then invoked standard
167 '\"     # page bottom macro.
168 .de ^B
169 .ev 2
170 'ti 0
171 'nf
172 .mk ^t
173 .if \\n(^b \{\
174 .\"     Draw three-sided box if this is the box's first page,
175 .\"     draw two sides but no top otherwise.
176 .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
177 .el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
178 .\}
179 .if \\n(^v \{\
180 .nr ^x \\n(^tu+1v-\\n(^Yu
181 \kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
182 .\}
183 .bp
184 'fi
185 .ev
186 .if \\n(^b \{\
187 .mk ^y
188 .nr ^b 2
189 .\}
190 .if \\n(^v \{\
191 .mk ^Y
192 .\}
193 ..
194 '\"     # DS - begin display
195 .de DS
196 .RS
197 .nf
198 .sp
199 ..
200 '\"     # DE - end display
201 .de DE
202 .fi
203 .RE
204 .sp
205 ..
206 '\"     # SO - start of list of standard options
207 .de SO
208 .SH "STANDARD OPTIONS"
209 .LP
210 .nf
211 .ta 4c 8c 12c
212 .ft B
213 ..
214 '\"     # SE - end of list of standard options
215 .de SE
216 .fi
217 .ft R
218 .LP
219 See the \\fBoptions\\fR manual entry for details on the standard options.
220 ..
221 '\"     # OP - start of full description for a single option
222 .de OP
223 .LP
224 .nf
225 .ta 4c
226 Command-Line Name:      \\fB\\$1\\fR
227 Database Name:  \\fB\\$2\\fR
228 Database Class: \\fB\\$3\\fR
229 .fi
230 .IP
231 ..
232 '\"     # CS - begin code excerpt
233 .de CS
234 .RS
235 .nf
236 .ta .25i .5i .75i 1i
237 ..
238 '\"     # CE - end code excerpt
239 .de CE
240 .fi
241 .RE
242 ..
243 .de UL
244 \\$1\l'|0\(ul'\\$2
245 ..
246 .TH Tcl_AddErrorInfo 3 7.5 Tcl "Tcl Library Procedures"
247 .BS
248 .SH NAME
249 Tcl_AddObjErrorInfo, Tcl_AddErrorInfo, Tcl_SetErrorCode, Tcl_PosixError \- record information about errors
250 .SH SYNOPSIS
251 .nf
252 \fB#include <tcl.h>\fR
253 .sp
254 \fBTcl_AddObjErrorInfo\fR(\fIinterp, message, length\fR)
255 .sp
256 \fBTcl_AddErrorInfo\fR(\fIinterp, message\fR)
257 .sp
258 \fBTcl_SetObjErrorCode\fR(\fIinterp, errorObjPtr\fR)
259 .sp
260 \fBTcl_SetErrorCode\fR(\fIinterp, element, element, ... \fB(char *) NULL\fR)
261 .sp
262 char *
263 \fBTcl_PosixError\fR(\fIinterp\fR)
264 .SH ARGUMENTS
265 .AS Tcl_Interp *message
266 .AP Tcl_Interp *interp in
267 Interpreter in which to record information.
268 .AP char *message in
269 For \fBTcl_AddObjErrorInfo\fR,
270 this points to the first byte of an array of bytes
271 containing a string to record in the \fBerrorInfo\fR variable.
272 This byte array may contain embedded null bytes
273 unless \fIlength\fR is negative.
274 For \fBTcl_AddErrorInfo\fR,
275 this is a conventional C string to record in the \fBerrorInfo\fR variable.
276 .AP int length in
277 The number of bytes to copy from \fImessage\fR when
278 setting the \fBerrorInfo\fR variable.
279 If negative, all bytes up to the first null byte are used.
280 .AP Tcl_Obj *errorObjPtr in
281 This variable \fBerrorCode\fR will be set to this value.
282 .AP char *element in
283 String to record as one element of \fBerrorCode\fR variable.
284 Last \fIelement\fR argument must be NULL.
285 .BE
286
287 .SH DESCRIPTION
288 .PP
289 These procedures are used to manipulate two Tcl global variables
290 that hold information about errors.
291 The variable \fBerrorInfo\fR holds a stack trace of the
292 operations that were in progress when an error occurred,
293 and is intended to be human-readable.
294 The variable \fBerrorCode\fR holds a list of items that
295 are intended to be machine-readable.
296 The first item in \fBerrorCode\fR identifies the class of
297 error that occurred
298 (e.g. POSIX means an error occurred in a POSIX system call)
299 and additional elements in \fBerrorCode\fR hold additional pieces
300 of information that depend on the class.
301 See the Tcl overview manual entry for details on the various
302 formats for \fBerrorCode\fR.
303 .PP
304 The \fBerrorInfo\fR variable is gradually built up as an
305 error unwinds through the nested operations.
306 Each time an error code is returned to \fBTcl_EvalObj\fR
307 (or \fBTcl_Eval\fR, which calls \fBTcl_EvalObj\fR)
308 it calls the procedure \fBTcl_AddObjErrorInfo\fR to add
309 additional text to \fBerrorInfo\fR describing the
310 command that was being executed when the error occurred.
311 By the time the error has been passed all the way back
312 to the application, it will contain a complete trace
313 of the activity in progress when the error occurred.
314 .PP
315 It is sometimes useful to add additional information to
316 \fBerrorInfo\fR beyond what can be supplied automatically
317 by \fBTcl_EvalObj\fR.
318 \fBTcl_AddObjErrorInfo\fR may be used for this purpose:
319 its \fImessage\fR and \fIlength\fR arguments describe an additional
320 string to be appended to \fBerrorInfo\fR.
321 For example, the \fBsource\fR command calls \fBTcl_AddObjErrorInfo\fR
322 to record the name of the file being processed and the
323 line number on which the error occurred;
324 for Tcl procedures, the procedure name and line number
325 within the procedure are recorded, and so on.
326 The best time to call \fBTcl_AddObjErrorInfo\fR is just after
327 \fBTcl_EvalObj\fR has returned \fBTCL_ERROR\fR.
328 In calling \fBTcl_AddObjErrorInfo\fR, you may find it useful to
329 use the \fBerrorLine\fR field of the interpreter (see the
330 \fBTcl_Interp\fR manual entry for details).
331 .PP
332 \fBTcl_AddErrorInfo\fR resembles \fBTcl_AddObjErrorInfo\fR
333 but differs in initializing \fBerrorInfo\fR from the string
334 value of the interpreter's result
335 if the error is just starting to be logged.
336 It does not use the result as a Tcl object
337 so any embedded null characters in the result
338 will cause information to be lost.
339 It also takes a conventional C string in \fImessage\fR
340 instead of \fBTcl_AddObjErrorInfo\fR's counted string.
341 .PP
342 The procedure \fBTcl_SetObjErrorCode\fR is used to set the
343 \fBerrorCode\fR variable. \fIerrorObjPtr\fR contains a list object
344 built up by the caller. \fBerrorCode\fR is set to this
345 value. \fBTcl_SetObjErrorCode\fR is typically invoked just 
346 before returning an error in an object command. If an error is
347 returned without calling \fBTcl_SetObjErrorCode\fR or
348 \fBTcl_SetErrorCode\fR the Tcl interpreter automatically sets
349 \fBerrorCode\fR to \fBNONE\fR.
350 .PP
351 The procedure \fBTcl_SetErrorCode\fR is also used to set the
352 \fBerrorCode\fR variable. However, it takes one or more strings to
353 record instead of an object. Otherwise, it is similar to
354 \fBTcl_SetObjErrorCode\fR in behavior.
355 .PP
356 \fBTcl_PosixError\fR
357 sets the \fBerrorCode\fR variable after an error in a POSIX kernel call.
358 It reads the value of the \fBerrno\fR C variable and calls
359 \fBTcl_SetErrorCode\fR to set \fBerrorCode\fR in the \fBPOSIX\fR format.
360 The caller must previously have called \fBTcl_SetErrno\fR to set
361 \fBerrno\fR; this is necessary on some platforms (e.g. Windows) where Tcl
362 is linked into an application as a shared library, or when the error
363 occurs in a dynamically loaded extension. See the manual entry for
364 \fBTcl_SetErrno\fR for more information.
365 .PP
366 \fBTcl_PosixError\fR returns a human-readable diagnostic message
367 for the error
368 (this is the same value that will appear as the third element
369 in \fBerrorCode\fR).
370 It may be convenient to include this string as part of the
371 error message returned to the application in
372 the interpreter's result.
373 .PP
374 It is important to call the procedures described here rather than
375 setting \fBerrorInfo\fR or \fBerrorCode\fR directly with
376 \fBTcl_ObjSetVar2\fR.
377 The reason for this is that the Tcl interpreter keeps information
378 about whether these procedures have been called.
379 For example, the first time \fBTcl_AddObjErrorInfo\fR is called
380 for an error, it clears the existing value of \fBerrorInfo\fR
381 and adds the error message in the interpreter's result to the variable
382 before appending \fImessage\fR;
383 in subsequent calls, it just appends the new \fImessage\fR.
384 When \fBTcl_SetErrorCode\fR is called, it sets a flag indicating
385 that \fBerrorCode\fR has been set;
386 this allows the Tcl interpreter to set \fBerrorCode\fR to \fBNONE\fR
387 if it receives an error return
388 when \fBTcl_SetErrorCode\fR hasn't been called.
389 .PP
390 If the procedure \fBTcl_ResetResult\fR is called,
391 it clears all of the state associated with
392 \fBerrorInfo\fR and \fBerrorCode\fR
393 (but it doesn't actually modify the variables).
394 If an error had occurred, this will clear the error state to
395 make it appear as if no error had occurred after all.
396
397 .SH "SEE ALSO"
398 Tcl_DecrRefCount, Tcl_IncrRefCount, Tcl_Interp, Tcl_ResetResult, Tcl_SetErrno
399
400 .SH KEYWORDS
401 error, object, object result, stack, trace, variable