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

📄 tcltest.c

📁 tcl是工具命令语言
💻 C
📖 第 1 页 / 共 5 页
字号:
    for (i = 0;  i < argc;  i++) {	Tcl_DStringAppendElement(bufPtr, argv[i]);    }    Tcl_DStringEndSublist(bufPtr);}static voidCmdTraceDeleteProc(clientData, interp, level, command, cmdProc,	cmdClientData, argc, argv)    ClientData clientData;	/* Unused. */    Tcl_Interp *interp;		/* Current interpreter. */    int level;			/* Current trace level. */    char *command;		/* The command being traced (after				 * substitutions). */    Tcl_CmdProc *cmdProc;	/* Points to command's command procedure. */    ClientData cmdClientData;	/* Client data associated with command				 * procedure. */    int argc;			/* Number of arguments. */    char **argv;		/* Argument strings. */{    /*     * Remove ourselves to test whether calling Tcl_DeleteTrace within     * a trace callback causes the for loop in TclExecuteByteCode that     * calls traces to reference freed memory.     */        Tcl_DeleteTrace(interp, cmdTrace);}static intObjTraceProc( clientData, interp, level, command, token, objc, objv )    ClientData clientData;	/* unused */    Tcl_Interp* interp;		/* Tcl interpreter */    int level;			/* Execution level */    CONST char* command;	/* Command being executed */    Tcl_Command token;		/* Command information */    int objc;			/* Parameter count */    Tcl_Obj *CONST objv[];	/* Parameter list */{    CONST char* word = Tcl_GetString( objv[ 0 ] );    if ( !strcmp( word, "Error" ) ) {	Tcl_SetObjResult( interp, Tcl_NewStringObj( command, -1 ) );	return TCL_ERROR;    } else if ( !strcmp( word, "Break" ) ) {	return TCL_BREAK;    } else if ( !strcmp( word, "Continue" ) ) {	return TCL_CONTINUE;    } else if ( !strcmp( word, "Return" ) ) {	return TCL_RETURN;    } else if ( !strcmp( word, "OtherStatus" ) ) {	return 6;    } else {	return TCL_OK;    }}static voidObjTraceDeleteProc( clientData )    ClientData clientData;{    int * intPtr = (int *) clientData;    *intPtr = 1;		/* Record that the trace was deleted */}/* *---------------------------------------------------------------------- * * TestcreatecommandCmd -- * *	This procedure implements the "testcreatecommand" command. It is *	used to test that the Tcl_CreateCommand creates a new command in *	the namespace specified as part of its name, if any. It also *	checks that the namespace code ignore single ":"s in the middle *	or end of a command name. * * Results: *	A standard Tcl result. * * Side effects: *	Creates and deletes two commands ("test_ns_basic::createdcommand" *	and "value:at:"). * *---------------------------------------------------------------------- */static intTestcreatecommandCmd(dummy, interp, argc, argv)    ClientData dummy;			/* Not used. */    Tcl_Interp *interp;			/* Current interpreter. */    int argc;				/* Number of arguments. */    CONST char **argv;			/* Argument strings. */{    if (argc != 2) {	Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],		" option\"", (char *) NULL);	return TCL_ERROR;    }    if (strcmp(argv[1], "create") == 0) {	Tcl_CreateCommand(interp, "test_ns_basic::createdcommand",		CreatedCommandProc, (ClientData) NULL,		(Tcl_CmdDeleteProc *) NULL);    } else if (strcmp(argv[1], "delete") == 0) {	Tcl_DeleteCommand(interp, "test_ns_basic::createdcommand");    } else if (strcmp(argv[1], "create2") == 0) {	Tcl_CreateCommand(interp, "value:at:",		CreatedCommandProc2, (ClientData) NULL,		(Tcl_CmdDeleteProc *) NULL);    } else if (strcmp(argv[1], "delete2") == 0) {	Tcl_DeleteCommand(interp, "value:at:");    } else {	Tcl_AppendResult(interp, "bad option \"", argv[1],		"\": must be create, delete, create2, or delete2",		(char *) NULL);	return TCL_ERROR;    }    return TCL_OK;}static intCreatedCommandProc(clientData, interp, argc, argv)    ClientData clientData;		/* String to return. */    Tcl_Interp *interp;			/* Current interpreter. */    int argc;				/* Number of arguments. */    CONST char **argv;			/* Argument strings. */{    Tcl_CmdInfo info;    int found;    found = Tcl_GetCommandInfo(interp, "test_ns_basic::createdcommand",	    &info);    if (!found) {	Tcl_AppendResult(interp, "CreatedCommandProc could not get command info for test_ns_basic::createdcommand",	        (char *) NULL);	return TCL_ERROR;    }    Tcl_AppendResult(interp, "CreatedCommandProc in ",	    info.namespacePtr->fullName, (char *) NULL);    return TCL_OK;}static intCreatedCommandProc2(clientData, interp, argc, argv)    ClientData clientData;		/* String to return. */    Tcl_Interp *interp;			/* Current interpreter. */    int argc;				/* Number of arguments. */    CONST char **argv;			/* Argument strings. */{    Tcl_CmdInfo info;    int found;    found = Tcl_GetCommandInfo(interp, "value:at:", &info);    if (!found) {	Tcl_AppendResult(interp, "CreatedCommandProc2 could not get command info for test_ns_basic::createdcommand",	        (char *) NULL);	return TCL_ERROR;    }    Tcl_AppendResult(interp, "CreatedCommandProc2 in ",	    info.namespacePtr->fullName, (char *) NULL);    return TCL_OK;}/* *---------------------------------------------------------------------- * * TestdcallCmd -- * *	This procedure implements the "testdcall" command.  It is used *	to test Tcl_CallWhenDeleted. * * Results: *	A standard Tcl result. * * Side effects: *	Creates and deletes interpreters. * *---------------------------------------------------------------------- */	/* ARGSUSED */static intTestdcallCmd(dummy, interp, argc, argv)    ClientData dummy;			/* Not used. */    Tcl_Interp *interp;			/* Current interpreter. */    int argc;				/* Number of arguments. */    CONST char **argv;			/* Argument strings. */{    int i, id;    delInterp = Tcl_CreateInterp();    Tcl_DStringInit(&delString);    for (i = 1; i < argc; i++) {	if (Tcl_GetInt(interp, argv[i], &id) != TCL_OK) {	    return TCL_ERROR;	}	if (id < 0) {	    Tcl_DontCallWhenDeleted(delInterp, DelCallbackProc,		    (ClientData) (-id));	} else {	    Tcl_CallWhenDeleted(delInterp, DelCallbackProc,		    (ClientData) id);	}    }    Tcl_DeleteInterp(delInterp);    Tcl_DStringResult(interp, &delString);    return TCL_OK;}/* * The deletion callback used by TestdcallCmd: */static voidDelCallbackProc(clientData, interp)    ClientData clientData;		/* Numerical value to append to					 * delString. */    Tcl_Interp *interp;			/* Interpreter being deleted. */{    int id = (int) clientData;    char buffer[TCL_INTEGER_SPACE];    TclFormatInt(buffer, id);    Tcl_DStringAppendElement(&delString, buffer);    if (interp != delInterp) {	Tcl_DStringAppendElement(&delString, "bogus interpreter argument!");    }}/* *---------------------------------------------------------------------- * * TestdelCmd -- * *	This procedure implements the "testdcall" command.  It is used *	to test Tcl_CallWhenDeleted. * * Results: *	A standard Tcl result. * * Side effects: *	Creates and deletes interpreters. * *---------------------------------------------------------------------- */	/* ARGSUSED */static intTestdelCmd(dummy, interp, argc, argv)    ClientData dummy;			/* Not used. */    Tcl_Interp *interp;			/* Current interpreter. */    int argc;				/* Number of arguments. */    CONST char **argv;			/* Argument strings. */{    DelCmd *dPtr;    Tcl_Interp *slave;    if (argc != 4) {	Tcl_SetResult(interp, "wrong # args", TCL_STATIC);	return TCL_ERROR;    }    slave = Tcl_GetSlave(interp, argv[1]);    if (slave == NULL) {	return TCL_ERROR;    }    dPtr = (DelCmd *) ckalloc(sizeof(DelCmd));    dPtr->interp = interp;    dPtr->deleteCmd = (char *) ckalloc((unsigned) (strlen(argv[3]) + 1));    strcpy(dPtr->deleteCmd, argv[3]);    Tcl_CreateCommand(slave, argv[2], DelCmdProc, (ClientData) dPtr,	    DelDeleteProc);    return TCL_OK;}static intDelCmdProc(clientData, interp, argc, argv)    ClientData clientData;		/* String result to return. */    Tcl_Interp *interp;			/* Current interpreter. */    int argc;				/* Number of arguments. */    CONST char **argv;			/* Argument strings. */{    DelCmd *dPtr = (DelCmd *) clientData;    Tcl_AppendResult(interp, dPtr->deleteCmd, (char *) NULL);    ckfree(dPtr->deleteCmd);    ckfree((char *) dPtr);    return TCL_OK;}static voidDelDeleteProc(clientData)    ClientData clientData;		/* String command to evaluate. */{    DelCmd *dPtr = (DelCmd *) clientData;    Tcl_Eval(dPtr->interp, dPtr->deleteCmd);    Tcl_ResetResult(dPtr->interp);    ckfree(dPtr->deleteCmd);    ckfree((char *) dPtr);}/* *---------------------------------------------------------------------- * * TestdelassocdataCmd -- * *	This procedure implements the "testdelassocdata" command. It is used *	to test Tcl_DeleteAssocData. * * Results: *	A standard Tcl result. * * Side effects: *	Deletes an association between a key and associated data from an *	interpreter. * *---------------------------------------------------------------------- */static intTestdelassocdataCmd(clientData, interp, argc, argv)    ClientData clientData;		/* Not used. */    Tcl_Interp *interp;			/* Current interpreter. */    int argc;				/* Number of arguments. */    CONST char **argv;			/* Argument strings. */{    if (argc != 2) {        Tcl_AppendResult(interp, "wrong # arguments: should be \"", argv[0],                " data_key\"", (char *) NULL);        return TCL_ERROR;    }    Tcl_DeleteAssocData(interp, argv[1]);    return TCL_OK;}/* *---------------------------------------------------------------------- * * TestdstringCmd -- * *	This procedure implements the "testdstring" command.  It is used *	to test the dynamic string facilities of Tcl. * * Results: *	A standard Tcl result. * * Side effects: *	Creates, deletes, and invokes handlers. * *---------------------------------------------------------------------- */	/* ARGSUSED */static intTestdstringCmd(dummy, interp, argc, argv)    ClientData dummy;			/* Not used. */    Tcl_Interp *interp;			/* Current interpreter. */    int argc;				/* Number of arguments. */    CONST char **argv;			/* Argument strings. */{    int count;    if (argc < 2) {	wrongNumArgs:	Tcl_SetResult(interp, "wrong # args", TCL_STATIC);	return TCL_ERROR;    }    if (strcmp(argv[1], "append") == 0) {	if (argc != 4) {	    goto wrongNumArgs;	}	if (Tcl_GetInt(interp, argv[3], &count) != TCL_OK) {	    return TCL_ERROR;	}	Tcl_DStringAppend(&dstring, argv[2], count);    } else if (strcmp(argv[1], "element") == 0) {	if (argc != 3) {	    goto wrongNumArgs;	}	Tcl_DStringAppendElement(&dstring, argv[2]);    } else if (strcmp(argv[1], "end") == 0) {	if (argc != 2) {	    goto wrongNumArgs;	}	Tcl_DStringEndSublist(&dstring);    } else if (strcmp(argv[1], "free") == 0) {	if (argc != 2) {	    goto wrongNumArgs;	}	Tcl_DStringFree(&dstring);    } else if (strcmp(argv[1], "get") == 0) {

⌨️ 快捷键说明

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