⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tclio.h

📁 tcl是工具命令语言
💻 H
📖 第 1 页 / 共 2 页
字号:
/*  * tclIO.h -- * *	This file provides the generic portions (those that are the same on *	all platforms and for all channel types) of Tcl's IO facilities. * * Copyright (c) 1998-2000 Ajuba Solutions * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclIO.h,v 1.5 2002/01/15 17:55:30 dgp Exp $ *//* * Make sure that both EAGAIN and EWOULDBLOCK are defined. This does not * compile on systems where neither is defined. We want both defined so * that we can test safely for both. In the code we still have to test for * both because there may be systems on which both are defined and have * different values. */#if ((!defined(EWOULDBLOCK)) && (defined(EAGAIN)))#   define EWOULDBLOCK EAGAIN#endif#if ((!defined(EAGAIN)) && (defined(EWOULDBLOCK)))#   define EAGAIN EWOULDBLOCK#endif#if ((!defined(EAGAIN)) && (!defined(EWOULDBLOCK)))error one of EWOULDBLOCK or EAGAIN must be defined#endif/* * The following structure encapsulates the state for a background channel * copy.  Note that the data buffer for the copy will be appended to this * structure. */typedef struct CopyState {    struct Channel *readPtr;	/* Pointer to input channel. */    struct Channel *writePtr;	/* Pointer to output channel. */    int readFlags;		/* Original read channel flags. */    int writeFlags;		/* Original write channel flags. */    int toRead;			/* Number of bytes to copy, or -1. */    int total;			/* Total bytes transferred (written). */    Tcl_Interp *interp;		/* Interp that started the copy. */    Tcl_Obj *cmdPtr;		/* Command to be invoked at completion. */    int bufSize;		/* Size of appended buffer. */    char buffer[1];		/* Copy buffer, this must be the last				 * field. */} CopyState;/* * struct ChannelBuffer: * * Buffers data being sent to or from a channel. */typedef struct ChannelBuffer {    int nextAdded;		/* The next position into which a character                                 * will be put in the buffer. */    int nextRemoved;		/* Position of next byte to be removed                                 * from the buffer. */    int bufLength;		/* How big is the buffer? */    struct ChannelBuffer *nextPtr;    				/* Next buffer in chain. */    char buf[4];		/* Placeholder for real buffer. The real                                 * buffer occuppies this space + bufSize-4                                 * bytes. This must be the last field in                                 * the structure. */} ChannelBuffer;#define CHANNELBUFFER_HEADER_SIZE	(sizeof(ChannelBuffer) - 4)/* * How much extra space to allocate in buffer to hold bytes from previous * buffer (when converting to UTF-8) or to hold bytes that will go to * next buffer (when converting from UTF-8). */ #define BUFFER_PADDING	    16 /* * The following defines the *default* buffer size for channels. */#define CHANNELBUFFER_DEFAULT_SIZE	(1024 * 4)/* * Structure to record a close callback. One such record exists for * each close callback registered for a channel. */typedef struct CloseCallback {    Tcl_CloseProc *proc;		/* The procedure to call. */    ClientData clientData;		/* Arbitrary one-word data to pass					 * to the callback. */    struct CloseCallback *nextPtr;	/* For chaining close callbacks. */} CloseCallback;/* * The following structure describes the information saved from a call to * "fileevent". This is used later when the event being waited for to * invoke the saved script in the interpreter designed in this record. */typedef struct EventScriptRecord {    struct Channel *chanPtr;	/* The channel for which this script is				 * registered. This is used only when an				 * error occurs during evaluation of the				 * script, to delete the handler. */    Tcl_Obj *scriptPtr;		/* Script to invoke. */    Tcl_Interp *interp;		/* In what interpreter to invoke script? */    int mask;			/* Events must overlap current mask for the				 * stored script to be invoked. */    struct EventScriptRecord *nextPtr;				/* Next in chain of records. */} EventScriptRecord;/* * struct Channel: * * One of these structures is allocated for each open channel. It contains data * specific to the channel but which belongs to the generic part of the Tcl * channel mechanism, and it points at an instance specific (and type * specific) * instance data, and at a channel type structure. */typedef struct Channel {    struct ChannelState *state; /* Split out state information */    ClientData instanceData;	/* Instance-specific data provided by				 * creator of channel. */    Tcl_ChannelType *typePtr;	/* Pointer to channel type structure. */    struct Channel *downChanPtr;/* Refers to channel this one was stacked				 * upon.  This reference is NULL for normal				 * channels.  See Tcl_StackChannel. */    struct Channel *upChanPtr;	/* Refers to the channel above stacked this				 * one. NULL for the top most channel. */    /*     * Intermediate buffers to hold pre-read data for consumption by a     * newly stacked transformation. See 'Tcl_StackChannel'.     */    ChannelBuffer *inQueueHead;	/* Points at first buffer in input queue. */    ChannelBuffer *inQueueTail;	/* Points at last buffer in input queue. */} Channel;/* * struct ChannelState: * * One of these structures is allocated for each open channel. It contains data * specific to the channel but which belongs to the generic part of the Tcl * channel mechanism, and it points at an instance specific (and type * specific) * instance data, and at a channel type structure. */typedef struct ChannelState {    CONST char *channelName;	/* The name of the channel instance in Tcl				 * commands. Storage is owned by the generic IO				 * code, is dynamically allocated. */    int	flags;			/* ORed combination of the flags defined				 * below. */    Tcl_Encoding encoding;	/* Encoding to apply when reading or writing				 * data on this channel.  NULL means no				 * encoding is applied to data. */    Tcl_EncodingState inputEncodingState;				/* Current encoding state, used when converting				 * input data bytes to UTF-8. */    int inputEncodingFlags;	/* Encoding flags to pass to conversion				 * routine when converting input data bytes to				 * UTF-8.  May be TCL_ENCODING_START before				 * converting first byte and TCL_ENCODING_END				 * when EOF is seen. */    Tcl_EncodingState outputEncodingState;				/* Current encoding state, used when converting				 * UTF-8 to output data bytes. */    int outputEncodingFlags;	/* Encoding flags to pass to conversion				 * routine when converting UTF-8 to output				 * data bytes.  May be TCL_ENCODING_START				 * before converting first byte and				 * TCL_ENCODING_END when EOF is seen. */    TclEolTranslation inputTranslation;				/* What translation to apply for end of line				 * sequences on input? */        TclEolTranslation outputTranslation;				/* What translation to use for generating				 * end of line sequences in output? */    int inEofChar;		/* If nonzero, use this as a signal of EOF				 * on input. */    int outEofChar;             /* If nonzero, append this to the channel				 * when it is closed if it is open for				 * writing. */    int unreportedError;	/* Non-zero if an error report was deferred				 * because it happened in the background. The

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -