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

📄 tclcmdil.c

📁 linux系统下的音频通信
💻 C
📖 第 1 页 / 共 5 页
字号:
    char *varName;    Var *varPtr, *arrayPtr;    if (objc != 3) {        Tcl_WrongNumArgs(interp, 2, objv, "varName");        return TCL_ERROR;    }    varName = Tcl_GetStringFromObj(objv[2], (int *) NULL);    varPtr = TclLookupVar(interp, varName, (char *) NULL,            TCL_PARSE_PART1, "access",            /*createPart1*/ 0, /*createPart2*/ 0, &arrayPtr);    if ((varPtr != NULL) && !TclIsVarUndefined(varPtr)) {        Tcl_SetIntObj(Tcl_GetObjResult(interp), 1);    } else {        Tcl_SetIntObj(Tcl_GetObjResult(interp), 0);    }    return TCL_OK;}/* *---------------------------------------------------------------------- * * InfoGlobalsCmd -- * *      Called to implement the "info globals" command that returns the list *      of global variables matching an optional pattern. Handles the *      following syntax: * *          info globals ?pattern? * * Results: *      Returns TCL_OK is successful and TCL_ERROR is there is an error. * * Side effects: *      Returns a result in the interpreter's result object. If there is *	an error, the result is an error message. * *---------------------------------------------------------------------- */static intInfoGlobalsCmd(dummy, interp, objc, objv)    ClientData dummy;		/* Not used. */    Tcl_Interp *interp;		/* Current interpreter. */    int objc;			/* Number of arguments. */    Tcl_Obj *CONST objv[];	/* Argument objects. */{    char *varName, *pattern;    Namespace *globalNsPtr = (Namespace *) Tcl_GetGlobalNamespace(interp);    register Tcl_HashEntry *entryPtr;    Tcl_HashSearch search;    Var *varPtr;    Tcl_Obj *listPtr;    if (objc == 2) {        pattern = NULL;    } else if (objc == 3) {        pattern = Tcl_GetStringFromObj(objv[2], (int *) NULL);    } else {        Tcl_WrongNumArgs(interp, 2, objv, "?pattern?");        return TCL_ERROR;    }    /*     * Scan through the global :: namespace's variable table and create a     * list of all global variables that match the pattern.     */        listPtr = Tcl_NewListObj(0, (Tcl_Obj **) NULL);    for (entryPtr = Tcl_FirstHashEntry(&globalNsPtr->varTable, &search);            entryPtr != NULL;            entryPtr = Tcl_NextHashEntry(&search)) {        varPtr = (Var *) Tcl_GetHashValue(entryPtr);        if (TclIsVarUndefined(varPtr)) {            continue;        }        varName = Tcl_GetHashKey(&globalNsPtr->varTable, entryPtr);        if ((pattern == NULL) || Tcl_StringMatch(varName, pattern)) {            Tcl_ListObjAppendElement(interp, listPtr,		    Tcl_NewStringObj(varName, -1));        }    }    Tcl_SetObjResult(interp, listPtr);    return TCL_OK;}/* *---------------------------------------------------------------------- * * InfoHostnameCmd -- * *      Called to implement the "info hostname" command that returns the *      host name. Handles the following syntax: * *          info hostname * * Results: *      Returns TCL_OK is successful and TCL_ERROR is there is an error. * * Side effects: *      Returns a result in the interpreter's result object. If there is *	an error, the result is an error message. * *---------------------------------------------------------------------- */static intInfoHostnameCmd(dummy, interp, objc, objv)    ClientData dummy;		/* Not used. */    Tcl_Interp *interp;		/* Current interpreter. */    int objc;			/* Number of arguments. */    Tcl_Obj *CONST objv[];	/* Argument objects. */{    char *name;    if (objc != 2) {        Tcl_WrongNumArgs(interp, 2, objv, NULL);        return TCL_ERROR;    }    name = Tcl_GetHostName();    if (name) {	Tcl_SetStringObj(Tcl_GetObjResult(interp), name, -1);	return TCL_OK;    } else {	Tcl_SetStringObj(Tcl_GetObjResult(interp),		"unable to determine name of host", -1);	return TCL_ERROR;    }}/* *---------------------------------------------------------------------- * * InfoLevelCmd -- * *      Called to implement the "info level" command that returns *      information about the call stack. Handles the following syntax: * *          info level ?number? * * Results: *      Returns TCL_OK is successful and TCL_ERROR is there is an error. * * Side effects: *      Returns a result in the interpreter's result object. If there is *	an error, the result is an error message. * *---------------------------------------------------------------------- */static intInfoLevelCmd(dummy, interp, objc, objv)    ClientData dummy;		/* Not used. */    Tcl_Interp *interp;		/* Current interpreter. */    int objc;			/* Number of arguments. */    Tcl_Obj *CONST objv[];	/* Argument objects. */{    Interp *iPtr = (Interp *) interp;    int level;    CallFrame *framePtr;    Tcl_Obj *listPtr;    if (objc == 2) {		/* just "info level" */        if (iPtr->varFramePtr == NULL) {            Tcl_SetIntObj(Tcl_GetObjResult(interp), 0);        } else {            Tcl_SetIntObj(Tcl_GetObjResult(interp), iPtr->varFramePtr->level);        }        return TCL_OK;    } else if (objc == 3) {        if (Tcl_GetIntFromObj(interp, objv[2], &level) != TCL_OK) {            return TCL_ERROR;        }        if (level <= 0) {            if (iPtr->varFramePtr == NULL) {                levelError:		Tcl_AppendStringsToObj(Tcl_GetObjResult(interp),			"bad level \"",			Tcl_GetStringFromObj(objv[2], (int *) NULL),			"\"", (char *) NULL);                return TCL_ERROR;            }            level += iPtr->varFramePtr->level;        }        for (framePtr = iPtr->varFramePtr;  framePtr != NULL;                framePtr = framePtr->callerVarPtr) {            if (framePtr->level == level) {                break;            }        }        if (framePtr == NULL) {            goto levelError;        }        listPtr = Tcl_NewListObj(framePtr->objc, framePtr->objv);        Tcl_SetObjResult(interp, listPtr);        return TCL_OK;    }    Tcl_WrongNumArgs(interp, 2, objv, "?number?");    return TCL_ERROR;}/* *---------------------------------------------------------------------- * * InfoLibraryCmd -- * *      Called to implement the "info library" command that returns the *      library directory for the Tcl installation. Handles the following *      syntax: * *          info library * * Results: *      Returns TCL_OK is successful and TCL_ERROR is there is an error. * * Side effects: *      Returns a result in the interpreter's result object. If there is *	an error, the result is an error message. * *---------------------------------------------------------------------- */static intInfoLibraryCmd(dummy, interp, objc, objv)    ClientData dummy;		/* Not used. */    Tcl_Interp *interp;		/* Current interpreter. */    int objc;			/* Number of arguments. */    Tcl_Obj *CONST objv[];	/* Argument objects. */{    char *libDirName;    if (objc != 2) {        Tcl_WrongNumArgs(interp, 2, objv, NULL);        return TCL_ERROR;    }    libDirName = Tcl_GetVar(interp, "tcl_library", TCL_GLOBAL_ONLY);    if (libDirName != NULL) {        Tcl_SetStringObj(Tcl_GetObjResult(interp), libDirName, -1);        return TCL_OK;    }    Tcl_SetStringObj(Tcl_GetObjResult(interp),             "no library has been specified for Tcl", -1);    return TCL_ERROR;}/* *---------------------------------------------------------------------- * * InfoLoadedCmd -- * *      Called to implement the "info loaded" command that returns the *      packages that have been loaded into an interpreter. Handles the *      following syntax: * *          info loaded ?interp? * * Results: *      Returns TCL_OK is successful and TCL_ERROR is there is an error. * * Side effects: *      Returns a result in the interpreter's result object. If there is *	an error, the result is an error message. * *---------------------------------------------------------------------- */static intInfoLoadedCmd(dummy, interp, objc, objv)    ClientData dummy;		/* Not used. */    Tcl_Interp *interp;		/* Current interpreter. */    int objc;			/* Number of arguments. */    Tcl_Obj *CONST objv[];	/* Argument objects. */{    char *interpName;    int result;    if ((objc != 2) && (objc != 3)) {        Tcl_WrongNumArgs(interp, 2, objv, "?interp?");        return TCL_ERROR;    }    if (objc == 2) {		/* get loaded pkgs in all interpreters */	interpName = NULL;    } else {			/* get pkgs just in specified interp */	interpName = Tcl_GetStringFromObj(objv[2], (int *) NULL);    }    result = TclGetLoadedPackages(interp, interpName);    return result;}/* *---------------------------------------------------------------------- * * InfoLocalsCmd -- * *      Called to implement the "info locals" command to return a list of *      local variables that match an optional pattern. Handles the *      following syntax: * *          info locals ?pattern? * * Results: *      Returns TCL_OK is successful and TCL_ERROR is there is an error. * * Side effects: *      Returns a result in the interpreter's result object. If there is *	an error, the result is an error message. * *---------------------------------------------------------------------- */static intInfoLocalsCmd(dummy, interp, objc, objv)    ClientData dummy;		/* Not used. */    Tcl_Interp *interp;		/* Current interpreter. */    int objc;			/* Number of arguments. */    Tcl_Obj *CONST objv[];	/* Argument objects. */{    Interp *iPtr = (Interp *) interp;    char *pattern;    Tcl_Obj *listPtr;    if (objc == 2) {        pattern = NULL;    } else if (objc == 3) {        pattern = Tcl_GetStringFromObj(objv[2], (int *) NULL);    } else {        Tcl_WrongNumArgs(interp, 2, objv, "?pattern?");        return TCL_ERROR;    }        if (iPtr->varFramePtr == NULL || !iPtr->varFramePtr->isProcCallFrame) {        return TCL_OK;    }    /*     * Return a list containing names of first the compiled locals (i.e. the     * ones stored in the call frame), then the variables in the local hash     * table (if one exists).     */        listPtr = Tcl_NewListObj(0, (Tcl_Obj **) NULL);    AppendLocals(interp, listPtr, pattern, 0);    Tcl_SetObjResult(interp, listPtr);    return TCL_OK;}/* *---------------------------------------------------------------------- * * AppendLocals -- * *	Append the local variables for the current frame to the *	specified list object. * * Results: *	None. * * Side effects: *	None. * *---------------------------------------------------------------------- */static voidAppendLocals(interp, listPtr, pattern, includeLinks)    Tcl_Interp *interp;		/* Current interpreter. */    Tcl_Obj *listPtr;		/* List object to append names to. */    char *pattern;		/* Pattern to match against. */    int includeLinks;		/* 1 if upvars should be included, else 0. */{    Interp *iPtr = (Interp *) interp;    CompiledLocal *localPtr;    Var *varPtr;    int i, localVarCt;    char *varName;    Tcl_HashTable *localVarTablePtr;    register Tcl_HashEntry *entryPtr;    Tcl_HashSearch search;    localPtr = iPtr->varFramePtr->procPtr->firstLocalPtr;    localVarCt = iPtr->varFramePtr->numCompiledLocals;    varPtr = iPtr->varFramePtr->compiledLocals;    localVarTablePtr = iPtr->varFramePtr->varTablePtr;    for (i = 0; i < localVarCt; i++) {	/*	 * Skip nameless (temporary) variables and undefined variables	 */	if (!TclIsVarTemporary(localPtr) && !TclIsVarUndefined(varPtr)) {	    varName = varPtr->name;	    if ((pattern == NULL) || Tcl_StringMatch(varName, pattern)) {		Tcl_ListObjAppendElement(interp, listPtr,		        Tcl_NewStringObj(varName, -1));	    }        }	varPtr++;	localPtr = localPtr->nextPtr;    }        if (localVarTablePtr != NULL) {	for (entryPtr = Tcl_FirstHashEntry(localVarTablePtr, &search);	        entryPtr != NULL;                entryPtr = Tcl_NextHashEntry(&search)) {	    varPtr = (Var *) Tcl_GetHashValue(entryPtr);	    if (!TclIsVarUndefined(varPtr)		    && (includeLinks || !TclIsVarLink(varPtr))) {		varName = Tcl_GetHashKey(localVarTablePtr, entryPtr);		if ((pattern == NULL)		        || Tcl_StringMatch(varName, pattern)) {		    Tcl_ListObjAppendElement(interp, listPtr,			    Tcl_NewStringObj(varName, -1));		}	    }	}    }}/* *---------------------------------------------------------------------- * * InfoNameOfExecutableCmd -- * *      Called to implement the "info nameofexecutable" command that returns *      the name of the binary file running this application. Handles the *      following syntax: * *          info nameofexecutable * * Results: *      Returns TCL_OK is successful and TCL_ERROR is there is an error. * * Side effects: *      Returns a result in the interpreter's result object. If there is *	an error, the result is an error message. * *---------------------------------------------------------------------- */static intInfoNameOfExecutableCmd(dummy, interp, objc, objv)

⌨️ 快捷键说明

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