|
|
1.1 ! root 1: /* ! 2: * tclTest.c -- ! 3: * ! 4: * Test driver for TCL. ! 5: * ! 6: * Copyright 1987-1991 Regents of the University of California ! 7: * All rights reserved. ! 8: * ! 9: * Permission to use, copy, modify, and distribute this ! 10: * software and its documentation for any purpose and without ! 11: * fee is hereby granted, provided that the above copyright ! 12: * notice appears in all copies. The University of California ! 13: * makes no representations about the suitability of this ! 14: * software for any purpose. It is provided "as is" without ! 15: * express or implied warranty. ! 16: */ ! 17: ! 18: #ifndef lint ! 19: static char rcsid[] = "$Header: /user6/ouster/tcl/tclTest/RCS/tclTest.c,v 1.21 92/01/19 14:15:27 ouster Exp $ SPRITE (Berkeley)"; ! 20: #endif ! 21: ! 22: #include <stdio.h> ! 23: #include <errno.h> ! 24: #include <string.h> ! 25: #include "tcl.h" ! 26: ! 27: extern int exit(); ! 28: extern int Tcl_DumpActiveMemory(); ! 29: ! 30: Tcl_Interp *interp; ! 31: Tcl_CmdBuf buffer; ! 32: char dumpFile[100]; ! 33: int quitFlag = 0; ! 34: ! 35: char *initCmd = ! 36: "if [file exists [info library]/init.tcl] {source [info library]/init.tcl}"; ! 37: ! 38: /* ARGSUSED */ ! 39: int ! 40: cmdCheckmem(clientData, interp, argc, argv) ! 41: ClientData clientData; ! 42: Tcl_Interp *interp; ! 43: int argc; ! 44: char *argv[]; ! 45: { ! 46: if (argc != 2) { ! 47: Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], ! 48: " fileName\"", (char *) NULL); ! 49: return TCL_ERROR; ! 50: } ! 51: strcpy(dumpFile, argv[1]); ! 52: quitFlag = 1; ! 53: return TCL_OK; ! 54: } ! 55: ! 56: /* ARGSUSED */ ! 57: int ! 58: cmdEcho(clientData, interp, argc, argv) ! 59: ClientData clientData; ! 60: Tcl_Interp *interp; ! 61: int argc; ! 62: char *argv[]; ! 63: { ! 64: int i; ! 65: ! 66: for (i = 1; ; i++) { ! 67: if (argv[i] == NULL) { ! 68: if (i != argc) { ! 69: echoError: ! 70: sprintf(interp->result, ! 71: "argument list wasn't properly NULL-terminated in \"%s\" command", ! 72: argv[0]); ! 73: } ! 74: break; ! 75: } ! 76: if (i >= argc) { ! 77: goto echoError; ! 78: } ! 79: fputs(argv[i], stdout); ! 80: if (i < (argc-1)) { ! 81: printf(" "); ! 82: } ! 83: } ! 84: printf("\n"); ! 85: return TCL_OK; ! 86: } ! 87: ! 88: int ! 89: main() ! 90: { ! 91: char line[1000], *cmd; ! 92: int result, gotPartial; ! 93: ! 94: interp = Tcl_CreateInterp(); ! 95: #ifdef TCL_MEM_DEBUG ! 96: Tcl_InitMemory(interp); ! 97: #endif ! 98: Tcl_CreateCommand(interp, "echo", cmdEcho, (ClientData) "echo", ! 99: (Tcl_CmdDeleteProc *) NULL); ! 100: Tcl_CreateCommand(interp, "checkmem", cmdCheckmem, (ClientData) 0, ! 101: (Tcl_CmdDeleteProc *) NULL); ! 102: buffer = Tcl_CreateCmdBuf(); ! 103: #ifndef TCL_GENERIC_ONLY ! 104: result = Tcl_Eval(interp, initCmd, 0, (char **) NULL); ! 105: if (result != TCL_OK) { ! 106: printf("%s\n", interp->result); ! 107: exit(1); ! 108: } ! 109: #endif ! 110: ! 111: gotPartial = 0; ! 112: while (1) { ! 113: clearerr(stdin); ! 114: if (!gotPartial) { ! 115: fputs("% ", stdout); ! 116: fflush(stdout); ! 117: } ! 118: if (fgets(line, 1000, stdin) == NULL) { ! 119: if (!gotPartial) { ! 120: exit(0); ! 121: } ! 122: line[0] = 0; ! 123: } ! 124: cmd = Tcl_AssembleCmd(buffer, line); ! 125: if (cmd == NULL) { ! 126: gotPartial = 1; ! 127: continue; ! 128: } ! 129: ! 130: gotPartial = 0; ! 131: result = Tcl_RecordAndEval(interp, cmd, 0); ! 132: if (result == TCL_OK) { ! 133: if (*interp->result != 0) { ! 134: printf("%s\n", interp->result); ! 135: } ! 136: if (quitFlag) { ! 137: Tcl_DeleteInterp(interp); ! 138: Tcl_DeleteCmdBuf(buffer); ! 139: #ifdef TCL_MEM_DEBUG ! 140: Tcl_DumpActiveMemory(dumpFile); ! 141: #endif ! 142: exit(0); ! 143: } ! 144: } else { ! 145: if (result == TCL_ERROR) { ! 146: printf("Error"); ! 147: } else { ! 148: printf("Error %d", result); ! 149: } ! 150: if (*interp->result != 0) { ! 151: printf(": %s\n", interp->result); ! 152: } else { ! 153: printf("\n"); ! 154: } ! 155: } ! 156: } ! 157: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.