| 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 |
|---|