Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Tcl_StackChannel(3)	     Tcl Library Procedures	     Tcl_StackChannel(3)

________________________________________________________________________________

NAME
     Tcl_StackChannel,	 Tcl_UnstackChannel,   Tcl_GetStackedChannel,	Tcl_Get-
     TopChannel - manipulate stacked I/O channels

SYNOPSIS
     #include <tcl.h>

     Tcl_Channel
     Tcl_StackChannel(interp, typePtr, clientData, mask, channel)

     int
     Tcl_UnstackChannel(interp, channel)

     Tcl_Channel
     Tcl_GetStackedChannel(channel)

     Tcl_Channel
     Tcl_GetTopChannel(channel)

ARGUMENTS
     Tcl_Interp *interp (in)		      Interpreter for error reporting.

     const Tcl_ChannelType *typePtr (in)      The new channel I/O procedures  to
					      use for channel.

     ClientData clientData (in) 	      Arbitrary  one-word  value to pass
					      to channel I/O procedures.

     int mask (in)			      Conditions  under  which	 channel
					      will be used: OR-ed combination of
					      TCL_READABLE,   TCL_WRITABLE   and
					      TCL_EXCEPTION.  This can be a sub-
					      set of  the  operations  currently
					      allowed on channel.

     Tcl_Channel channel (in)		      An  existing  Tcl  channel such as
					      returned by Tcl_CreateChannel.
________________________________________________________________________________

DESCRIPTION
     These functions are for use by extensions that add processing layers to Tcl
     I/O channels.  Examples include compression and encryption modules.   These
     functions transparently stack and unstack a new channel on top of an exist-
     ing one.  Any number of channels can be stacked together.

     The  implementation  of the Tcl channel code was rewritten in 8.3.2 to cor-
     rect some problems with the previous implementation with regard to  stacked
     channels.	 Anyone  using stacked channels or creating stacked channel dri-
     vers should update to the new TCL_CHANNEL_VERSION_2 Tcl_ChannelType  struc-
     ture.  See Tcl_CreateChannel for details.

     Tcl_StackChannel  stacks a new channel on an existing channel with the same
     name that was registered for channel by Tcl_RegisterChannel.

     Tcl_StackChannel works by creating a new channel structure and placing  it-
     self  on top of the channel stack.  EOL translation, encoding and buffering
     options are shared between all channels in the stack.  The  hidden  channel
     does  no  buffering,  newline translations, or character set encoding.  In-
     stead, the buffering, newline translations, and encoding functions all  re-
     main  at  the  top  of the channel stack.	A pointer to the new top channel
     structure is returned.  If an error occurs when stacking the channel,  NULL
     is returned instead.

     The  mask	parameter  specifies  the operations that are allowed on the new
     channel.  These can be a subset of the operations allowed on  the	original
     channel.	For example, a read-write channel may become read-only after the
     Tcl_StackChannel call.

     Closing a channel closes the channels  stacked  below  it.   The  close  of
     stacked channels is executed in a way that allows buffered data to be prop-
     erly flushed.

     Tcl_UnstackChannel  reverses  the	process.   The old channel is associated
     with the channel name, and the processing module added by	Tcl_StackChannel
     is  destroyed.   If  there  is  no  old channel, then Tcl_UnstackChannel is
     equivalent to Tcl_Close.	If  an	error  occurs  unstacking  the	channel,
     TCL_ERROR is returned, otherwise TCL_OK is returned.

     Tcl_GetTopChannel returns the top channel in the stack of channels the sup-
     plied channel is part of.

     Tcl_GetStackedChannel returns the channel in the stack of channels which is
     just below the supplied channel.

SEE ALSO
     Notifier(3), Tcl_CreateChannel(3), Tcl_OpenFileChannel(3), vwait(n)

KEYWORDS
     channel, compression

Tcl				       8.3		     Tcl_StackChannel(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=Tcl_GetStackedChannel.tcl86&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help