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