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

📄 tclutil.c

📁 linux系统下的音频通信
💻 C
📖 第 1 页 / 共 5 页
字号:
 * Results: *	The variables at *startPtr and *endPtr are modified to hold the *	addresses of the endpoints of the range given by index.  If the *	specified range doesn't exist then NULLs are returned. * * Side effects: *	None. * *---------------------------------------------------------------------- */voidTcl_RegExpRange(re, index, startPtr, endPtr)    Tcl_RegExp re;		/* Compiled regular expression that has				 * been passed to Tcl_RegExpExec. */    int index;			/* 0 means give the range of the entire				 * match, > 0 means give the range of				 * a matching subrange.  Must be no greater				 * than NSUBEXP. */    char **startPtr;		/* Store address of first character in				 * (sub-) range here. */    char **endPtr;		/* Store address of character just after last				 * in (sub-) range here. */{    regexp *regexpPtr = (regexp *) re;    if (index >= NSUBEXP) {	*startPtr = *endPtr = NULL;    } else {	*startPtr = regexpPtr->startp[index];	*endPtr = regexpPtr->endp[index];    }}/* *---------------------------------------------------------------------- * * Tcl_RegExpMatch -- * *	See if a string matches a regular expression. * * Results: *	If an error occurs during the matching operation then -1 *	is returned and interp->result contains an error message. *	Otherwise the return value is 1 if "string" matches "pattern" *	and 0 otherwise. * * Side effects: *	None. * *---------------------------------------------------------------------- */intTcl_RegExpMatch(interp, string, pattern)    Tcl_Interp *interp;		/* Used for error reporting. */    char *string;		/* String. */    char *pattern;		/* Regular expression to match against				 * string. */{    Tcl_RegExp re;    re = Tcl_RegExpCompile(interp, pattern);    if (re == NULL) {	return -1;    }    return Tcl_RegExpExec(interp, re, string, string);}/* *---------------------------------------------------------------------- * * Tcl_DStringInit -- * *	Initializes a dynamic string, discarding any previous contents *	of the string (Tcl_DStringFree should have been called already *	if the dynamic string was previously in use). * * Results: *	None. * * Side effects: *	The dynamic string is initialized to be empty. * *---------------------------------------------------------------------- */voidTcl_DStringInit(dsPtr)    Tcl_DString *dsPtr;		/* Pointer to structure for dynamic string. */{    dsPtr->string = dsPtr->staticSpace;    dsPtr->length = 0;    dsPtr->spaceAvl = TCL_DSTRING_STATIC_SIZE;    dsPtr->staticSpace[0] = 0;}/* *---------------------------------------------------------------------- * * Tcl_DStringAppend -- * *	Append more characters to the current value of a dynamic string. * * Results: *	The return value is a pointer to the dynamic string's new value. * * Side effects: *	Length bytes from string (or all of string if length is less *	than zero) are added to the current value of the string. Memory *	gets reallocated if needed to accomodate the string's new size. * *---------------------------------------------------------------------- */char *Tcl_DStringAppend(dsPtr, string, length)    Tcl_DString *dsPtr;		/* Structure describing dynamic string. */    CONST char *string;		/* String to append.  If length is -1 then				 * this must be null-terminated. */    int length;			/* Number of characters from string to				 * append.  If < 0, then append all of string,				 * up to null at end. */{    int newSize;    char *newString, *dst;    CONST char *end;    if (length < 0) {	length = strlen(string);    }    newSize = length + dsPtr->length;    /*     * Allocate a larger buffer for the string if the current one isn't     * large enough. Allocate extra space in the new buffer so that there     * will be room to grow before we have to allocate again.     */    if (newSize >= dsPtr->spaceAvl) {	dsPtr->spaceAvl = newSize*2;	newString = (char *) ckalloc((unsigned) dsPtr->spaceAvl);	memcpy((VOID *) newString, (VOID *) dsPtr->string,		(size_t) dsPtr->length);	if (dsPtr->string != dsPtr->staticSpace) {	    ckfree(dsPtr->string);	}	dsPtr->string = newString;    }    /*     * Copy the new string into the buffer at the end of the old     * one.     */    for (dst = dsPtr->string + dsPtr->length, end = string+length;	    string < end; string++, dst++) {	*dst = *string;    }    *dst = '\0';    dsPtr->length += length;    return dsPtr->string;}/* *---------------------------------------------------------------------- * * Tcl_DStringAppendElement -- * *	Append a list element to the current value of a dynamic string. * * Results: *	The return value is a pointer to the dynamic string's new value. * * Side effects: *	String is reformatted as a list element and added to the current *	value of the string.  Memory gets reallocated if needed to *	accomodate the string's new size. * *---------------------------------------------------------------------- */char *Tcl_DStringAppendElement(dsPtr, string)    Tcl_DString *dsPtr;		/* Structure describing dynamic string. */    CONST char *string;		/* String to append.  Must be				 * null-terminated. */{    int newSize, flags;    char *dst, *newString;    newSize = Tcl_ScanElement(string, &flags) + dsPtr->length + 1;    /*     * Allocate a larger buffer for the string if the current one isn't     * large enough.  Allocate extra space in the new buffer so that there     * will be room to grow before we have to allocate again.     * SPECIAL NOTE: must use memcpy, not strcpy, to copy the string     * to a larger buffer, since there may be embedded NULLs in the     * string in some cases.     */    if (newSize >= dsPtr->spaceAvl) {	dsPtr->spaceAvl = newSize*2;	newString = (char *) ckalloc((unsigned) dsPtr->spaceAvl);	memcpy((VOID *) newString, (VOID *) dsPtr->string,		(size_t) dsPtr->length);	if (dsPtr->string != dsPtr->staticSpace) {	    ckfree(dsPtr->string);	}	dsPtr->string = newString;    }    /*     * Convert the new string to a list element and copy it into the     * buffer at the end, with a space, if needed.     */    dst = dsPtr->string + dsPtr->length;    if (TclNeedSpace(dsPtr->string, dst)) {	*dst = ' ';	dst++;	dsPtr->length++;    }    dsPtr->length += Tcl_ConvertElement(string, dst, flags);    return dsPtr->string;}/* *---------------------------------------------------------------------- * * Tcl_DStringSetLength -- * *	Change the length of a dynamic string.  This can cause the *	string to either grow or shrink, depending on the value of *	length. * * Results: *	None. * * Side effects: *	The length of dsPtr is changed to length and a null byte is *	stored at that position in the string.  If length is larger *	than the space allocated for dsPtr, then a panic occurs. * *---------------------------------------------------------------------- */voidTcl_DStringSetLength(dsPtr, length)    Tcl_DString *dsPtr;		/* Structure describing dynamic string. */    int length;			/* New length for dynamic string. */{    if (length < 0) {	length = 0;    }    if (length >= dsPtr->spaceAvl) {	char *newString;	dsPtr->spaceAvl = length+1;	newString = (char *) ckalloc((unsigned) dsPtr->spaceAvl);	/*	 * SPECIAL NOTE: must use memcpy, not strcpy, to copy the string	 * to a larger buffer, since there may be embedded NULLs in the	 * string in some cases.	 */	memcpy((VOID *) newString, (VOID *) dsPtr->string,		(size_t) dsPtr->length);	if (dsPtr->string != dsPtr->staticSpace) {	    ckfree(dsPtr->string);	}	dsPtr->string = newString;    }    dsPtr->length = length;    dsPtr->string[length] = 0;}/* *---------------------------------------------------------------------- * * Tcl_DStringFree -- * *	Frees up any memory allocated for the dynamic string and *	reinitializes the string to an empty state. * * Results: *	None. * * Side effects: *	The previous contents of the dynamic string are lost, and *	the new value is an empty string. * *---------------------------------------------------------------------- */voidTcl_DStringFree(dsPtr)    Tcl_DString *dsPtr;		/* Structure describing dynamic string. */{    if (dsPtr->string != dsPtr->staticSpace) {	ckfree(dsPtr->string);    }    dsPtr->string = dsPtr->staticSpace;    dsPtr->length = 0;    dsPtr->spaceAvl = TCL_DSTRING_STATIC_SIZE;    dsPtr->staticSpace[0] = 0;}/* *---------------------------------------------------------------------- * * Tcl_DStringResult -- * *	This procedure moves the value of a dynamic string into an *	interpreter as its string result. Afterwards, the dynamic string *	is reset to an empty string. * * Results: *	None. * * Side effects: *	The string is "moved" to interp's result, and any existing *	string result for interp is freed. dsPtr is reinitialized to *	an empty string. * *---------------------------------------------------------------------- */voidTcl_DStringResult(interp, dsPtr)    Tcl_Interp *interp;		/* Interpreter whose result is to be reset. */    Tcl_DString *dsPtr;		/* Dynamic string that is to become the				 * result of interp. */{    Tcl_ResetResult(interp);        if (dsPtr->string != dsPtr->staticSpace) {	interp->result = dsPtr->string;	interp->freeProc = TCL_DYNAMIC;    } else if (dsPtr->length < TCL_RESULT_SIZE) {	interp->result = ((Interp *) interp)->resultSpace;	strcpy(interp->result, dsPtr->string);    } else {	Tcl_SetResult(interp, dsPtr->string, TCL_VOLATILE);    }        dsPtr->string = dsPtr->staticSpace;    dsPtr->length = 0;    dsPtr->spaceAvl = TCL_DSTRING_STATIC_SIZE;    dsPtr->staticSpace[0] = 0;}/* *---------------------------------------------------------------------- * * Tcl_DStringGetResult -- * *	This procedure moves an interpreter's result into a dynamic string. * * Results: *	None. * * Side effects: *	The interpreter's string result is cleared, and the previous *	contents of dsPtr are freed. * *	If the string result is empty, the object result is moved to the *	string result, then the object result is reset. * *---------------------------------------------------------------------- */voidTcl_DStringGetResult(interp, dsPtr)    Tcl_Interp *interp;		/* Interpreter whose result is to be reset. */    Tcl_DString *dsPtr;		/* Dynamic string that is to become the				 * result of interp. */{    Interp *iPtr = (Interp *) interp;        if (dsPtr->string != dsPtr->staticSpace) {	ckfree(dsPtr->string);    }    /*     * If the string result is empty, move the object result to the     * string result, then reset the object result.     * FAILS IF OBJECT RESULT'S STRING REPRESENTATION CONTAINS NULLS.     */    if (*(iPtr->result) == 0) {	Tcl_SetResult(interp,	        TclGetStringFromObj(Tcl_GetObjResult(interp), (int *) NULL),	        TCL_VOLATILE);    }    dsPtr->length = strlen(iPtr->result);    if (iPtr->freeProc != NULL) {	if ((iPtr->freeProc == TCL_DYNAMIC)		|| (iPtr->freeProc == (Tcl_FreeProc *) free)) {	    dsPtr->string = iPtr->result;	    dsPtr->spaceAvl = dsPtr->length+1;	} else {	    dsPtr->string = (char *) ckalloc((unsigned) (dsPtr->length+1));	    strcpy(dsPtr->string, iPtr->result);	    (*iPtr->freeProc)(iPtr->result);	}	dsPtr->spaceAvl = dsPtr->length+1;	iPtr->freeProc = NULL;    } else {	if (dsPtr->length < TCL_DSTRING_STATIC_SIZE) {	    dsPtr->string = dsPtr->staticSpace;	    dsPtr->spaceAvl = TCL_DSTRING_STATIC_SIZE;	} else {	    dsPtr->string = (char *) ckalloc((unsigned) (dsPtr->length + 1));	    dsPtr->spaceAvl = dsPtr->length + 1;	}	strcpy(dsPtr->string, iPtr->result);    }        iPtr->result = iPtr->resultSpace;    iPtr->resultSpace[0] = 0;}/* *---------------------------------------------------------------------- * * Tcl_DStringStartSublist -- * *	This procedure adds the necessary information to a dynamic *	string (e.g. " {" to start a sublist.  Future element *	appends will be in the sublist rather than the main list. * * Results: *	None. * * Side effects: *	Characters get added to the dynamic string. * *---------------------------------------------------------------------- */voidTcl_DStringStartSublist(dsPtr)    Tcl_DString *dsPtr;			/* Dynamic string. */{    if (TclNeedSpace(dsPtr->string, dsPtr->string + dsPtr->length)) {	Tcl_DStringAppend(dsPtr, " {", -1);    } else {	Tcl_DStringAppend(dsPtr, "{", -1);    }}/* *---------------------------------------------------------------------- * * Tcl_DStringEndSublist -- * *	This procedure adds the necessary characters to a dynamic *	string to end a sublist (e.g. "}").  Future element appends *	will be in the enclosing (sub)list rather than the current *	sublist. * * Results: *	None. * * Side effects: *	None. * *---------------------------------------------------------------------- */voidTcl_DStringEndSublist(dsPtr)    Tcl_DString *dsPtr;			/* Dynamic string. */{    Tcl_DStringAppend(dsPtr, "}", -1);}/* *---------------------------------------------------------------------- * * Tcl_PrintDouble -- * *	Given a floating-point value, this procedu

⌨️ 快捷键说明

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