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

📄 tclcmdil.c

📁 linux系统下的音频通信
💻 C
📖 第 1 页 / 共 5 页
字号:
    ClientData dummy;		/* Not used. */    Tcl_Interp *interp;		/* Current interpreter. */    int objc;			/* Number of arguments. */    Tcl_Obj *CONST objv[];	/* Argument objects. */{    CONST char *nameOfExecutable;    if (objc != 2) {        Tcl_WrongNumArgs(interp, 2, objv, NULL);        return TCL_ERROR;    }    nameOfExecutable = Tcl_GetNameOfExecutable();        if (nameOfExecutable != NULL) {	Tcl_SetStringObj(Tcl_GetObjResult(interp), (char *)nameOfExecutable, -1);    }    return TCL_OK;}/* *---------------------------------------------------------------------- * * InfoPatchLevelCmd -- * *      Called to implement the "info patchlevel" command that returns the *      default value for an argument to a procedure. Handles the following *      syntax: * *          info patchlevel * * 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 intInfoPatchLevelCmd(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 *patchlevel;    if (objc != 2) {        Tcl_WrongNumArgs(interp, 2, objv, NULL);        return TCL_ERROR;    }    patchlevel = Tcl_GetVar(interp, "tcl_patchLevel",            (TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG));    if (patchlevel != NULL) {        Tcl_SetStringObj(Tcl_GetObjResult(interp), patchlevel, -1);        return TCL_OK;    }    return TCL_ERROR;}/* *---------------------------------------------------------------------- * * InfoProcsCmd -- * *      Called to implement the "info procs" command that returns the *      procedures in the current namespace that match an optional pattern. *      Handles the following syntax: * *          info procs ?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 intInfoProcsCmd(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 *cmdName, *pattern;    Namespace *currNsPtr = (Namespace *) Tcl_GetCurrentNamespace(interp);    register Tcl_HashEntry *entryPtr;    Tcl_HashSearch search;    Command *cmdPtr;    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 current namespace's command table and return a list     * of all procs that match the pattern.     */        listPtr = Tcl_NewListObj(0, (Tcl_Obj **) NULL);    for (entryPtr = Tcl_FirstHashEntry(&currNsPtr->cmdTable, &search);            entryPtr != NULL;            entryPtr = Tcl_NextHashEntry(&search)) {        cmdName = Tcl_GetHashKey(&currNsPtr->cmdTable, entryPtr);        cmdPtr = (Command *) Tcl_GetHashValue(entryPtr);        if (TclIsProc(cmdPtr)) {            if ((pattern == NULL) || Tcl_StringMatch(cmdName, pattern)) {                Tcl_ListObjAppendElement(interp, listPtr,		        Tcl_NewStringObj(cmdName, -1));            }        }    }    Tcl_SetObjResult(interp, listPtr);    return TCL_OK;}/* *---------------------------------------------------------------------- * * InfoScriptCmd -- * *      Called to implement the "info script" command that returns the *      script file that is currently being evaluated. Handles the *      following syntax: * *          info script * * 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 intInfoScriptCmd(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;    if (objc != 2) {        Tcl_WrongNumArgs(interp, 2, objv, NULL);        return TCL_ERROR;    }    if (iPtr->scriptFile != NULL) {        Tcl_SetStringObj(Tcl_GetObjResult(interp), iPtr->scriptFile, -1);    }    return TCL_OK;}/* *---------------------------------------------------------------------- * * InfoSharedlibCmd -- * *      Called to implement the "info sharedlibextension" command that *      returns the file extension used for shared libraries. Handles the *      following syntax: * *          info sharedlibextension * * 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 intInfoSharedlibCmd(dummy, interp, objc, objv)    ClientData dummy;		/* Not used. */    Tcl_Interp *interp;		/* Current interpreter. */    int objc;			/* Number of arguments. */    Tcl_Obj *CONST objv[];	/* Argument objects. */{    if (objc != 2) {        Tcl_WrongNumArgs(interp, 2, objv, NULL);        return TCL_ERROR;    }    #ifdef TCL_SHLIB_EXT    Tcl_SetStringObj(Tcl_GetObjResult(interp), TCL_SHLIB_EXT, -1);#endif    return TCL_OK;}/* *---------------------------------------------------------------------- * * InfoTclVersionCmd -- * *      Called to implement the "info tclversion" command that returns the *      version number for this Tcl library. Handles the following syntax: * *          info tclversion * * 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 intInfoTclVersionCmd(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 *version;    if (objc != 2) {        Tcl_WrongNumArgs(interp, 2, objv, NULL);        return TCL_ERROR;    }    version = Tcl_GetVar(interp, "tcl_version",        (TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG));    if (version != NULL) {        Tcl_SetStringObj(Tcl_GetObjResult(interp), version, -1);        return TCL_OK;    }    return TCL_ERROR;}/* *---------------------------------------------------------------------- * * InfoVarsCmd -- * *	Called to implement the "info vars" command that returns the *	list of variables in the interpreter that match an optional pattern. *	The pattern, if any, consists of an optional sequence of namespace *	names separated by "::" qualifiers, which is followed by a *	glob-style pattern that restricts which variables are returned. *	Handles the following syntax: * *          info vars ?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 intInfoVarsCmd(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 *varName, *pattern, *simplePattern;    register Tcl_HashEntry *entryPtr;    Tcl_HashSearch search;    Var *varPtr;    Namespace *nsPtr;    Namespace *globalNsPtr = (Namespace *) Tcl_GetGlobalNamespace(interp);    Namespace *currNsPtr   = (Namespace *) Tcl_GetCurrentNamespace(interp);    Tcl_Obj *listPtr, *elemObjPtr;    int specificNsInPattern = 0;  /* Init. to avoid compiler warning. */    int result;    /*     * Get the pattern and find the "effective namespace" in which to     * list variables. We only use this effective namespace if there's     * no active Tcl procedure frame.     */    if (objc == 2) {        simplePattern = NULL;	nsPtr = currNsPtr;	specificNsInPattern = 0;    } else if (objc == 3) {	/*	 * From the pattern, get the effective namespace and the simple	 * pattern (no namespace qualifiers or ::'s) at the end. If an	 * error was found while parsing the pattern, return it. Otherwise,	 * if the namespace wasn't found, just leave nsPtr NULL: we will	 * return an empty list since no variables there can be found.	 */	Namespace *dummy1NsPtr, *dummy2NsPtr;        pattern = Tcl_GetStringFromObj(objv[2], (int *) NULL);	result = TclGetNamespaceForQualName(interp, pattern,		(Namespace *) NULL, /*flags*/ TCL_LEAVE_ERR_MSG,		&nsPtr, &dummy1NsPtr, &dummy2NsPtr, &simplePattern);	if (result != TCL_OK) {	    return TCL_ERROR;	}	if (nsPtr != NULL) {	/* we successfully found the pattern's ns */	    specificNsInPattern = (strcmp(simplePattern, pattern) != 0);	}    } else {        Tcl_WrongNumArgs(interp, 2, objv, "?pattern?");        return TCL_ERROR;    }    /*     * If the namespace specified in the pattern wasn't found, just return.     */    if (nsPtr == NULL) {	return TCL_OK;    }        listPtr = Tcl_NewListObj(0, (Tcl_Obj **) NULL);        if ((iPtr->varFramePtr == NULL)	    || !iPtr->varFramePtr->isProcCallFrame	    || specificNsInPattern) {	/*	 * There is no frame pointer, the frame pointer was pushed only	 * to activate a namespace, or we are in a procedure call frame	 * but a specific namespace was specified. Create a list containing	 * only the variables in the effective namespace's variable table.	 */		entryPtr = Tcl_FirstHashEntry(&nsPtr->varTable, &search);	while (entryPtr != NULL) {	    varPtr = (Var *) Tcl_GetHashValue(entryPtr);	    if (!TclIsVarUndefined(varPtr)		    || (varPtr->flags & VAR_NAMESPACE_VAR)) {		varName = Tcl_GetHashKey(&nsPtr->varTable, entryPtr);		if ((simplePattern == NULL)	                || Tcl_StringMatch(varName, simplePattern)) {		    if (specificNsInPattern) {			elemObjPtr = Tcl_NewObj();			Tcl_GetVariableFullName(interp, (Tcl_Var) varPtr,			        elemObjPtr);		    } else {			elemObjPtr = Tcl_NewStringObj(varName, -1);		    }		    Tcl_ListObjAppendElement(interp, listPtr, elemObjPtr);		}	    }	    entryPtr = Tcl_NextHashEntry(&search);	}	/*	 * If the effective namespace isn't the global :: namespace, and a	 * specific namespace wasn't requested in the pattern (i.e., the	 * pattern only specifies variable names), then add in all global ::	 * variables that match the simple pattern. Of course, add in only	 * those variables that aren't hidden by a variable in the effective	 * namespace.	 */	if ((nsPtr != globalNsPtr) && !specificNsInPattern) {	    entryPtr = Tcl_FirstHashEntry(&globalNsPtr->varTable, &search);	    while (entryPtr != NULL) {		varPtr = (Var *) Tcl_GetHashValue(entryPtr);		if (!TclIsVarUndefined(varPtr)		        || (varPtr->flags & VAR_NAMESPACE_VAR)) {		    varName = Tcl_GetHashKey(&globalNsPtr->varTable,			    entryPtr);		    if ((simplePattern == NULL)	                    || Tcl_StringMatch(varName, simplePattern)) {			if (Tcl_FindHashEntry(&nsPtr->varTable, varName) == NULL) {			    Tcl_ListObjAppendElement(interp, listPtr,			            Tcl_NewStringObj(varName, -1));			}		    }		}		entryPtr = Tcl_NextHashEntry(&search);	    }	}    } else {	AppendLocals(interp, listPtr, simplePattern, 1);    }        Tcl_SetObjResult(interp, listPtr);    return TCL_OK;}/* *---------------------------------------------------------------------- * * Tcl_JoinObjCmd -- * *	This procedure is invoked to process the "join" Tcl command. *	See the user documentation for details on what it does. * * Results: *	A standard Tcl object result. * * Side effects: *	See the user documentation. * *---------------------------------------------------------------------- */	/* ARGSUSED */intTcl_JoinObjCmd(dummy, interp, objc, objv)    ClientData dummy;		/* Not used. */    Tcl_Interp *interp;		/* Current interpreter. */    int objc;			/* Number of arguments. */    Tcl_Obj *CONST objv[];	/* The argument objects. */{    char *joinString, *bytes;    int joinLength, listLen, length, i, result;    Tcl_Obj **elemPtrs;    Tcl_Obj *resObjPtr;    if (objc == 2) {	joinString = " ";	joinLength = 1;    } else if (objc == 3) {	joinString = Tcl_GetStringFromObj(objv[2], &joinLength);    } else {	Tcl_WrongNumArgs(interp, 1, objv, "list ?joinString?");	return TCL_ERROR;

⌨️ 快捷键说明

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