1 | '\" |
---|
2 | '\" Copyright (c) 1999-2000 Ajuba Solutions. |
---|
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 | '\" RCS: @(#) $Id: ChnlStack.3,v 1.8 2006/11/15 09:23:01 dkf Exp $ |
---|
8 | .so man.macros |
---|
9 | .TH Tcl_StackChannel 3 8.3 Tcl "Tcl Library Procedures" |
---|
10 | .BS |
---|
11 | '\" Note: do not modify the .SH NAME line immediately below! |
---|
12 | .SH NAME |
---|
13 | Tcl_StackChannel, Tcl_UnstackChannel, Tcl_GetStackedChannel, Tcl_GetTopChannel \- manipulate stacked I/O channels |
---|
14 | .SH SYNOPSIS |
---|
15 | .nf |
---|
16 | .nf |
---|
17 | \fB#include <tcl.h>\fR |
---|
18 | .sp |
---|
19 | Tcl_Channel |
---|
20 | \fBTcl_StackChannel\fR(\fIinterp, typePtr, clientData, mask, channel\fR) |
---|
21 | .sp |
---|
22 | int |
---|
23 | \fBTcl_UnstackChannel\fR(\fIinterp, channel\fR) |
---|
24 | .sp |
---|
25 | Tcl_Channel |
---|
26 | \fBTcl_GetStackedChannel\fR(\fIchannel\fR) |
---|
27 | .sp |
---|
28 | Tcl_Channel |
---|
29 | \fBTcl_GetTopChannel\fR(\fIchannel\fR) |
---|
30 | .sp |
---|
31 | .SH ARGUMENTS |
---|
32 | .AS Tcl_ChannelType clientData |
---|
33 | .AP Tcl_Interp *interp in |
---|
34 | Interpreter for error reporting. |
---|
35 | .AP Tcl_ChannelType *typePtr in |
---|
36 | The new channel I/O procedures to use for \fIchannel\fR. |
---|
37 | .AP ClientData clientData in |
---|
38 | Arbitrary one-word value to pass to channel I/O procedures. |
---|
39 | .AP int mask in |
---|
40 | Conditions under which \fIchannel\fR will be used: OR-ed combination of |
---|
41 | \fBTCL_READABLE\fR, \fBTCL_WRITABLE\fR and \fBTCL_EXCEPTION\fR. |
---|
42 | This can be a subset of the operations currently allowed on \fIchannel\fR. |
---|
43 | .AP Tcl_Channel channel in |
---|
44 | An existing Tcl channel such as returned by \fBTcl_CreateChannel\fR. |
---|
45 | .BE |
---|
46 | |
---|
47 | .SH DESCRIPTION |
---|
48 | .PP |
---|
49 | These functions are for use by extensions that add processing layers to Tcl |
---|
50 | I/O channels. Examples include compression and encryption modules. These |
---|
51 | functions transparently stack and unstack a new channel on top of an |
---|
52 | existing one. Any number of channels can be stacked together. |
---|
53 | .PP |
---|
54 | The implementation of the Tcl channel code was rewritten in 8.3.2 to |
---|
55 | correct some problems with the previous implementation with regard to |
---|
56 | stacked channels. Anyone using stacked channels or creating stacked |
---|
57 | channel drivers should update to the new \fBTCL_CHANNEL_VERSION_2\fR |
---|
58 | \fBTcl_ChannelType\fR structure. See \fBTcl_CreateChannel\fR for details. |
---|
59 | .PP |
---|
60 | \fBTcl_StackChannel\fR stacks a new \fIchannel\fR on an existing channel |
---|
61 | with the same name that was registered for \fIchannel\fR by |
---|
62 | \fBTcl_RegisterChannel\fR. |
---|
63 | .PP |
---|
64 | \fBTcl_StackChannel\fR works by creating a new channel structure and |
---|
65 | placing itself on top of the channel stack. EOL translation, encoding and |
---|
66 | buffering options are shared between all channels in the stack. The hidden |
---|
67 | channel does no buffering, newline translations, or character set encoding. |
---|
68 | Instead, the buffering, newline translations, and encoding functions all |
---|
69 | remain at the top of the channel stack. A pointer to the new top channel |
---|
70 | structure is returned. If an error occurs when stacking the channel, NULL |
---|
71 | is returned instead. |
---|
72 | .PP |
---|
73 | The \fImask\fR parameter specifies the operations that are allowed on the |
---|
74 | new channel. These can be a subset of the operations allowed on the |
---|
75 | original channel. For example, a read-write channel may become read-only |
---|
76 | after the \fBTcl_StackChannel\fR call. |
---|
77 | .PP |
---|
78 | Closing a channel closes the channels stacked below it. The close of |
---|
79 | stacked channels is executed in a way that allows buffered data to be |
---|
80 | properly flushed. |
---|
81 | .PP |
---|
82 | \fBTcl_UnstackChannel\fR reverses the process. The old channel is |
---|
83 | associated with the channel name, and the processing module added by |
---|
84 | \fBTcl_StackChannel\fR is destroyed. If there is no old channel, then |
---|
85 | \fBTcl_UnstackChannel\fR is equivalent to \fBTcl_Close\fR. If an error |
---|
86 | occurs unstacking the channel, \fBTCL_ERROR\fR is returned, otherwise |
---|
87 | \fBTCL_OK\fR is returned. |
---|
88 | .PP |
---|
89 | \fBTcl_GetTopChannel\fR returns the top channel in the stack of |
---|
90 | channels the supplied channel is part of. |
---|
91 | .PP |
---|
92 | \fBTcl_GetStackedChannel\fR returns the channel in the stack of |
---|
93 | channels which is just below the supplied channel. |
---|
94 | |
---|
95 | .SH "SEE ALSO" |
---|
96 | Notifier(3), Tcl_CreateChannel(3), Tcl_OpenFileChannel(3), vwait(n). |
---|
97 | |
---|
98 | .SH KEYWORDS |
---|
99 | channel, compression |
---|