2 '\" Copyright (c) 2005 Andreas Kupries <andreas_kupries@users.sourceforge.net>
4 '\" See the file "license.terms" for information on usage and redistribution
5 '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
7 .TH Tcl_SetChannelError 3 8.5 Tcl "Tcl Library Procedures"
8 .\" The -*- nroff -*- definitions below are for supplemental macros used
9 .\" in Tcl/Tk manual entries.
11 .\" .AP type name in/out ?indent?
12 .\" Start paragraph describing an argument to a library procedure.
13 .\" type is type of argument (int, etc.), in/out is either "in", "out",
14 .\" or "in/out" to describe whether procedure reads or modifies arg,
15 .\" and indent is equivalent to second arg of .IP (shouldn't ever be
16 .\" needed; use .AS below instead)
19 .\" Give maximum sizes of arguments for setting tab stops. Type and
20 .\" name are examples of largest possible arguments that will be passed
21 .\" to .AP later. If args are omitted, default tab stops are used.
24 .\" Start box enclosure. From here until next .BE, everything will be
25 .\" enclosed in one large box.
28 .\" End of box enclosure.
31 .\" Begin code excerpt.
36 .\" .VS ?version? ?br?
37 .\" Begin vertical sidebar, for use in marking newly-changed parts
38 .\" of man pages. The first argument is ignored and used for recording
39 .\" the version when the .VS was added, so that the sidebars can be
40 .\" found and removed when they reach a certain age. If another argument
41 .\" is present, then a line break is forced before starting the sidebar.
44 .\" End of vertical sidebar.
47 .\" Begin an indented unfilled display.
50 .\" End of indented unfilled display.
53 .\" Start of list of standard options for a Tk widget. The manpage
54 .\" argument defines where to look up the standard options; if
55 .\" omitted, defaults to "options". The options follow on successive
56 .\" lines, in three columns separated by tabs.
59 .\" End of list of standard options for a Tk widget.
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.
68 .\" Print arg1 underlined, then print arg2 normally.
71 .\" Print arg1 in quotes, then arg2 normally (for trailing punctuation).
74 .\" Print an open parenthesis, arg1 in quotes, then arg2 normally
75 .\" (for trailing punctuation) and then a closing parenthesis.
77 .\" # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
81 .\" # Start an argument description
85 . ie !"\\$2"" .TP \\n()Cu
90 \&\\$1 \\fI\\$2\\fP (\\$3)
103 .\" # define tabbing values for .AP
106 .if !"\\$1"" .nr )A \\w'\\$1'u+3n
109 .if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
110 .nr )C \\n()Bu+\\w'(in/out)'u+2n
112 .AS Tcl_Interp Tcl_CreateInterp in/out
113 .\" # BS - start boxed text
114 .\" # ^y = starting y location
122 .if n \l'\\n(.lu\(ul'
125 .\" # BE - end boxed text (draw box now)
130 .ie n \l'\\n(^lu\(ul'
132 .\" Draw four-sided box normally, but don't draw top of
133 .\" box if the box started on an earlier page.
135 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
138 \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
145 .\" # VS - start vertical sidebar
146 .\" # ^Y = starting y location
147 .\" # ^v = 1 (for troff; for nroff this doesn't matter)
151 .ie n 'mc \s12\(br\s0
154 .\" # VE - end of vertical sidebar
162 \h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
169 .\" # Special macro to handle page bottom: finish off current
170 .\" # box/sidebar if in box/sidebar mode, then invoked standard
171 .\" # page bottom macro.
178 .\" Draw three-sided box if this is the box's first page,
179 .\" draw two sides but no top otherwise.
180 .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
181 .el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
184 .nr ^x \\n(^tu+1v-\\n(^Yu
185 \kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
198 .\" # DS - begin display
204 .\" # DE - end display
210 .\" # SO - start of list of standard options
212 'ie '\\$1'' .ds So \\fBoptions\\fR
213 'el .ds So \\fB\\$1\\fR
214 .SH "STANDARD OPTIONS"
220 .\" # SE - end of list of standard options
225 See the \\*(So manual entry for details on the standard options.
227 .\" # OP - start of full description for a single option
232 Command-Line Name: \\fB\\$1\\fR
233 Database Name: \\fB\\$2\\fR
234 Database Class: \\fB\\$3\\fR
238 .\" # CS - begin code excerpt
244 .\" # CE - end code excerpt
249 .\" # UL - underline word
253 .\" # QW - apply quotation marks to word
255 .ie '\\*(lq'"' ``\\$1''\\$2
256 .\"" fix emacs highlighting
257 .el \\*(lq\\$1\\*(rq\\$2
259 .\" # PQ - apply parens and quotation marks to word
261 .ie '\\*(lq'"' (``\\$1''\\$2)\\$3
262 .\"" fix emacs highlighting
263 .el (\\*(lq\\$1\\*(rq\\$2)\\$3
265 .\" # QR - quoted range
267 .ie '\\*(lq'"' ``\\$1''\\-``\\$2''\\$3
268 .\"" fix emacs highlighting
269 .el \\*(lq\\$1\\*(rq\\-\\*(lq\\$2\\*(rq\\$3
271 .\" # MT - "empty" string
276 '\" Note: do not modify the .SH NAME line immediately below!
278 Tcl_SetChannelError, Tcl_SetChannelErrorInterp, Tcl_GetChannelError, Tcl_GetChannelErrorInterp \- functions to create/intercept Tcl errors by channel drivers.
281 \fB#include <tcl.h>\fR
284 \fBTcl_SetChannelError\fR(\fIchan, msg\fR)
287 \fBTcl_SetChannelErrorInterp\fR(\fIinterp, msg\fR)
290 \fBTcl_GetChannelError\fR(\fIchan, msgPtr\fR)
293 \fBTcl_GetChannelErrorInterp\fR(\fIinterp, msgPtr\fR)
297 .AP Tcl_Channel chan in
298 Refers to the Tcl channel whose bypass area is accessed.
299 .AP Tcl_Interp* interp in
300 Refers to the Tcl interpreter whose bypass area is accessed.
302 Error message put into a bypass area. A list of return options and values,
303 followed by a string message. Both message and the option/value information
305 .AP Tcl_Obj** msgPtr out
306 Reference to a place where the message stored in the accessed bypass area can
311 The current definition of a Tcl channel driver does not permit the direct
312 return of arbitrary error messages, except for the setting and retrieval of
313 channel options. All other functions are restricted to POSIX error codes.
315 The functions described here overcome this limitation. Channel drivers are
316 allowed to use \fBTcl_SetChannelError\fR and \fBTcl_SetChannelErrorInterp\fR
317 to place arbitrary error messages in \fBbypass areas\fR defined for channels
318 and interpreters. And the generic I/O layer uses \fBTcl_GetChannelError\fR and
319 \fBTcl_GetChannelErrorInterp\fR to look for messages in the bypass areas and
320 arrange for their return as errors. The POSIX error codes set by a driver are
321 used now if and only if no messages are present.
323 \fBTcl_SetChannelError\fR stores error information in the bypass area of the
324 specified channel. The number of references to the \fBmsg\fR value goes up by
325 one. Previously stored information will be discarded, by releasing the
326 reference held by the channel. The channel reference must not be NULL.
328 \fBTcl_SetChannelErrorInterp\fR stores error information in the bypass area of
329 the specified interpreter. The number of references to the \fBmsg\fR value
330 goes up by one. Previously stored information will be discarded, by releasing
331 the reference held by the interpreter. The interpreter reference must not be
334 \fBTcl_GetChannelError\fR places either the error message held in the bypass
335 area of the specified channel into \fImsgPtr\fR, or NULL; and resets the
336 bypass, that is, after an invocation all following invocations will return
337 NULL, until an intervening invocation of \fBTcl_SetChannelError\fR with a
338 non-NULL message. The \fImsgPtr\fR must not be NULL. The reference count of
339 the message is not touched. The reference previously held by the channel is
340 now held by the caller of the function and it is its responsibility to release
341 that reference when it is done with the value.
343 \fBTcl_GetChannelErrorInterp\fR places either the error message held in the
344 bypass area of the specified interpreter into \fImsgPtr\fR, or NULL; and
345 resets the bypass, that is, after an invocation all following invocations will
346 return NULL, until an intervening invocation of
347 \fBTcl_SetChannelErrorInterp\fR with a non-NULL message. The \fImsgPtr\fR must
348 not be NULL. The reference count of the message is not touched. The reference
349 previously held by the interpreter is now held by the caller of the function
350 and it is its responsibility to release that reference when it is done with
353 Which functions of a channel driver are allowed to use which bypass function
354 is listed below, as is which functions of the public channel API may leave a
355 messages in the bypass areas.
356 .IP \fBTcl_DriverCloseProc\fR
357 May use \fBTcl_SetChannelErrorInterp\fR, and only this function.
358 .IP \fBTcl_DriverInputProc\fR
359 May use \fBTcl_SetChannelError\fR, and only this function.
360 .IP \fBTcl_DriverOutputProc\fR
361 May use \fBTcl_SetChannelError\fR, and only this function.
362 .IP \fBTcl_DriverSeekProc\fR
363 May use \fBTcl_SetChannelError\fR, and only this function.
364 .IP \fBTcl_DriverWideSeekProc\fR
365 May use \fBTcl_SetChannelError\fR, and only this function.
366 .IP \fBTcl_DriverSetOptionProc\fR
367 Has already the ability to pass arbitrary error messages. Must \fInot\fR use
368 any of the new functions.
369 .IP \fBTcl_DriverGetOptionProc\fR
370 Has already the ability to pass arbitrary error messages. Must
371 \fInot\fR use any of the new functions.
372 .IP \fBTcl_DriverWatchProc\fR
373 Must \fInot\fR use any of the new functions. Is internally called and has no
374 ability to return any type of error whatsoever.
375 .IP \fBTcl_DriverBlockModeProc\fR
376 May use \fBTcl_SetChannelError\fR, and only this function.
377 .IP \fBTcl_DriverGetHandleProc\fR
378 Must \fInot\fR use any of the new functions. It is only a low-level function,
379 and not used by Tcl commands.
380 .IP \fBTcl_DriverHandlerProc\fR
381 Must \fInot\fR use any of the new functions. Is internally called and has no
382 ability to return any type of error whatsoever.
384 Given the information above the following public functions of the Tcl C API
385 are affected by these changes; when these functions are called, the channel
386 may now contain a stored arbitrary error message requiring processing by the
390 \fBTcl_Flush\fR \fBTcl_GetsObj\fR \fBTcl_Gets\fR
391 \fBTcl_ReadChars\fR \fBTcl_ReadRaw\fR \fBTcl_Read\fR
392 \fBTcl_Seek\fR \fBTcl_StackChannel\fR \fBTcl_Tell\fR
393 \fBTcl_WriteChars\fR \fBTcl_WriteObj\fR \fBTcl_WriteRaw\fR
397 All other API functions are unchanged. In particular, the functions below
398 leave all their error information in the interpreter result.
401 \fBTcl_Close\fR \fBTcl_UnstackChannel\fR \fBTcl_UnregisterChannel\fR
404 Tcl_Close(3), Tcl_OpenFileChannel(3), Tcl_SetErrno(3)
406 channel driver, error messages, channel type