@@ -3,10 +3,52 @@
3 3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
4 4 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
5 5 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include "config.h"
6 6 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include "th.h"
7 7 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include "tcl.h"
8 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
9 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
10 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** These macros are designed to reduce the redundant code required to marshal
11 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** arguments from TH1 to Tcl.
12 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
13 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define USE_ARGV_TO_OBJV() \
14 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int objc; \
15 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Tcl_Obj **objv; \
16 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define COPY_ARGV_TO_OBJV() \
19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ objc = argc-1; \
20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ objv = (Tcl_Obj **)ckalloc((unsigned)(objc * sizeof(Tcl_Obj *))); \
21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=1; i<argc; i++){ \
22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ objv[i-1] = Tcl_NewStringObj(argv[i], argl[i]); \
23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Tcl_IncrRefCount(objv[i-1]); \
24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define FREE_ARGV_TO_OBJV() \
27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=1; i<argc; i++){ \
28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Tcl_DecrRefCount(objv[i-1]); \
29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } \
30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ckfree((char *)objv);
31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Returns the Tcl interpreter result as a string with the associated length.
34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the Tcl interpreter or the Tcl result are NULL, the length will be 0.
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the length pointer is NULL, the length will not be stored.
36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static char *getTclResult(Tcl_Interp *pInterp, int *pN){
38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Tcl_Obj *resultPtr;
39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pInterp ){ /* This should not happen. */
40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pN ) *pN = 0;
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ resultPtr = Tcl_GetObjResult(pInterp);
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !resultPtr ){ /* This should not happen either? */
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pN ) *pN = 0;
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return Tcl_GetStringFromObj(resultPtr, pN);
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
8 50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9 51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
10 52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Syntax:
11 53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
12 54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** tclEval arg ?arg ...?
@@ -26,39 +68,32 @@
26 68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27 69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( argc<2 ){
28 70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return Th_WrongNumArgs(interp, "tclEval arg ?arg ...?");
29 71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30 72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tclInterp = (Tcl_Interp *)ctx;
31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !tclInterp ){
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !tclInterp || Tcl_InterpDeleted(tclInterp) ){
32 74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Th_ErrorMessage(interp, "invalid Tcl interpreter", (const char *)"", 0);
33 75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return TH_ERROR;
34 76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Tcl_Preserve((ClientData)tclInterp);
35 78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( argc==2 ){
36 79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
objPtr = Tcl_NewStringObj(argv[1], argl[1]);
37 80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Tcl_IncrRefCount(objPtr);
38 81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = Tcl_EvalObjEx(tclInterp, objPtr, 0);
39 82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Tcl_DecrRefCount(objPtr);
40 83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int objc = argc-1;
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Tcl_Obj **objv = (Tcl_Obj **)ckalloc((unsigned)(objc * sizeof(Tcl_Obj *)));
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=1; i<argc; i++){
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- objv[i-1] = Tcl_NewStringObj(argv[i], argl[i]);
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Tcl_IncrRefCount(objv[i-1]);
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ USE_ARGV_TO_OBJV();
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ COPY_ARGV_TO_OBJV();
48 86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
objPtr = Tcl_ConcatObj(objc, objv);
49 87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Tcl_IncrRefCount(objPtr);
50 88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = Tcl_EvalObjEx(tclInterp, objPtr, 0);
51 89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Tcl_DecrRefCount(objPtr);
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=1; i<argc; i++){
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Tcl_DecrRefCount(objv[i-1]);
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ckfree((char *)objv);
90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FREE_ARGV_TO_OBJV();
56 91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- objPtr = Tcl_GetObjResult(tclInterp);
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zResult = Tcl_GetStringFromObj(objPtr, &nResult);
92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zResult = getTclResult(tclInterp, &nResult);
59 93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Th_SetResult(interp, zResult, nResult);
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Tcl_Release((ClientData)tclInterp);
60 95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
61 96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
62 97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
63 98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
64 99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Syntax:
@@ -81,39 +116,37 @@
81 116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
82 117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( argc<2 ){
83 118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return Th_WrongNumArgs(interp, "tclExpr arg ?arg ...?");
84 119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
85 120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tclInterp = (Tcl_Interp *)ctx;
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !tclInterp ){
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !tclInterp || Tcl_InterpDeleted(tclInterp) ){
87 122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Th_ErrorMessage(interp, "invalid Tcl interpreter", (const char *)"", 0);
88 123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return TH_ERROR;
89 124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Tcl_Preserve((ClientData)tclInterp);
90 126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( argc==2 ){
91 127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
objPtr = Tcl_NewStringObj(argv[1], argl[1]);
92 128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Tcl_IncrRefCount(objPtr);
93 129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = Tcl_ExprObj(tclInterp, objPtr, &resultObjPtr);
94 130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Tcl_DecrRefCount(objPtr);
95 131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int objc = argc-1;
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Tcl_Obj **objv = (Tcl_Obj **)ckalloc((unsigned)(objc * sizeof(Tcl_Obj *)));
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=1; i<argc; i++){
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- objv[i-1] = Tcl_NewStringObj(argv[i], argl[i]);
101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Tcl_IncrRefCount(objv[i-1]);
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ USE_ARGV_TO_OBJV();
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ COPY_ARGV_TO_OBJV();
103 134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
objPtr = Tcl_ConcatObj(objc, objv);
104 135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Tcl_IncrRefCount(objPtr);
105 136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = Tcl_ExprObj(tclInterp, objPtr, &resultObjPtr);
106 137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Tcl_DecrRefCount(objPtr);
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=1; i<argc; i++){
108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Tcl_DecrRefCount(objv[i-1]);
109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ckfree((char *)objv);
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FREE_ARGV_TO_OBJV();
111 139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zResult = Tcl_GetStringFromObj(resultObjPtr, &nResult);
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==TCL_OK ){
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zResult = Tcl_GetStringFromObj(resultObjPtr, &nResult);
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zResult = getTclResult(tclInterp, &nResult);
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
113 145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Th_SetResult(interp, zResult, nResult);
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Tcl_DecrRefCount(resultObjPtr);
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==TCL_OK ) Tcl_DecrRefCount(resultObjPtr);
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Tcl_Release((ClientData)tclInterp);
115 148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
116 149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117 150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118 151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
119 152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Syntax:
@@ -126,46 +159,42 @@
126 159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int argc,
127 160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char **argv,
128 161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *argl
129 162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
130 163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Tcl_Interp *tclInterp;
164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Tcl_Command command;
131 165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Tcl_CmdInfo cmdInfo;
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int objc;
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Tcl_Obj **objv;
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
135 166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
136 167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nResult;
137 168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zResult;
138 169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Tcl_Obj *objPtr;
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ USE_ARGV_TO_OBJV();
139 171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
140 172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( argc<2 ){
141 173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return Th_WrongNumArgs(interp, "tclInvoke command ?arg ...?");
142 174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143 175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tclInterp = (Tcl_Interp *)ctx;
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !tclInterp ){
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !tclInterp || Tcl_InterpDeleted(tclInterp) ){
145 177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Th_ErrorMessage(interp, "invalid Tcl interpreter", (const char *)"", 0);
146 178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return TH_ERROR;
147 179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if (Tcl_GetCommandInfo(tclInterp, argv[1], &cmdInfo) == 0){
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Tcl_Preserve((ClientData)tclInterp);
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ objPtr = Tcl_NewStringObj(argv[1], argl[1]);
182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Tcl_IncrRefCount(objPtr);
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ command = Tcl_GetCommandFromObj(tclInterp, objPtr);
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !command || Tcl_GetCommandInfoFromToken(command,&cmdInfo)==0 ){
149 185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Th_ErrorMessage(interp, "Tcl command not found:", argv[1], argl[1]);
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Tcl_DecrRefCount(objPtr);
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Tcl_Release((ClientData)tclInterp);
150 188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return TH_ERROR;
151 189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- objc = argc-1;
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- objv = (Tcl_Obj **)ckalloc((unsigned)(objc * sizeof(Tcl_Obj *)));
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=1; i<argc; i++){
155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- objv[i-1] = Tcl_NewStringObj(argv[i], argl[i]);
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Tcl_IncrRefCount(objv[i-1]);
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Tcl_Preserve((ClientData)tclInterp);
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Tcl_DecrRefCount(objPtr);
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ COPY_ARGV_TO_OBJV();
159 192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Tcl_ResetResult(tclInterp);
160 193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = cmdInfo.objProc(cmdInfo.objClientData, tclInterp, objc, objv);
161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=1; i<argc; i++){
162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Tcl_DecrRefCount(objv[i-1]);
163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ckfree((char *)objv);
165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- objPtr = Tcl_GetObjResult(tclInterp);
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zResult = Tcl_GetStringFromObj(objPtr, &nResult);
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FREE_ARGV_TO_OBJV();
195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zResult = getTclResult(tclInterp, &nResult);
167 196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Th_SetResult(interp, zResult, nResult);
168 197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Tcl_Release((ClientData)tclInterp);
169 198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
170 199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
171 200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -254,11 +283,11 @@
254 283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ClientData clientData,
255 284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Tcl_Interp *interp
256 285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
257 286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
258 287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Th_Interp *th1Interp = (Th_Interp *)clientData;
259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if ( !th1Interp ) return;
288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !th1Interp ) return;
260 289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Remove the Tcl integration commands. */
261 290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<(sizeof(aCommand)/sizeof(aCommand[0])); i++){
262 291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Th_RenameCommand(th1Interp, aCommand[i].zName, -1, NULL, 0);
263 292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
264 293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -269,11 +298,11 @@
269 298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
270 299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int th_register_tcl(Th_Interp *interp){
271 300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
272 301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Tcl_Interp *tclInterp = Tcl_CreateInterp();
273 302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !tclInterp ){
303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !tclInterp || Tcl_InterpDeleted(tclInterp) ){
275 304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Th_ErrorMessage(interp,
276 305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"Could not create Tcl interpreter", (const char *)"", 0);
277 306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return TH_ERROR;
278 307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
279 308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( Tcl_Init(tclInterp)!=TCL_OK ){
@@ -280,17 +309,18 @@
280 309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Th_ErrorMessage(interp,
281 310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"Tcl initialization error:", Tcl_GetStringResult(tclInterp), -1);
282 311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Tcl_DeleteInterp(tclInterp);
283 312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return TH_ERROR;
284 313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Add the TH1 integration commands to Tcl. */
285 315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Tcl_CallWhenDeleted(tclInterp, Th1DeleteProc, interp);
286 316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Tcl_CreateObjCommand(tclInterp, "th1Eval", Th1EvalObjCmd, interp, NULL);
287 317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Tcl_CreateObjCommand(tclInterp, "th1Expr", Th1ExprObjCmd, interp, NULL);
288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Add the Tcl integration commands. */
318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Add the Tcl integration commands to TH1. */
289 319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<(sizeof(aCommand)/sizeof(aCommand[0])); i++){
290 320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *ctx = aCommand[i].pContext;
291 321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Use Tcl interpreter for context? */
292 322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !ctx ) ctx = tclInterp;
293 323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Th_CreateCommand(interp, aCommand[i].zName, aCommand[i].xProc, ctx, 0);
294 324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
295 325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return TH_OK;
296 326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
297 327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
298 328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
A DDED test/th1-tcl.test
299 329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
A DDED test/th1-tcl1.txt
300 330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
A DDED test/th1-tcl2.txt
301 331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
A DDED test/th1-tcl3.txt
302 332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
A DDED test/th1-tcl4.txt
303 333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
A DDED test/th1-tcl5.txt
304 334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
A DDED test/th1-tcl6.txt
305 335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
A DDED test/th1-tcl7.txt