6 void scriptinv_init(ScriptToInvoke *si) {
10 void scriptinv_cancel(ScriptToInvoke *si) {
12 Tcl_DecrRefCount(si->obj);
17 int scriptinv_set(ScriptToInvoke *si, Tcl_Interp *ip,
18 Tcl_Obj *newscript, Tcl_Obj *xargs) {
23 rc= Tcl_ListObjLength(ip, newscript, &si->llength); if (rc) return rc;
24 Tcl_IncrRefCount(newscript);
27 rc= Tcl_ListObjLength(ip, xargs, &xlength); if (rc) return rc;
28 Tcl_IncrRefCount(xargs);
29 si->llength += xlength;
38 void scriptinv_invoke(ScriptToInvoke *si, int argc, Tcl_Obj **argv) {
44 for (i=0; i<argc; i++) Tcl_IncrRefCount(argv[i]);
46 invoke= Tcl_DuplicateObj(si->obj);
47 Tcl_IncrRefCount(invoke);
50 rc= Tcl_ListObjAppendList(si->ip, invoke, si->xargs);
54 rc= Tcl_ListObjReplace(si->ip, invoke,si->llength,0, argc,argv);
55 for (i=0; i<argc; i++) { Tcl_DecrRefCount(argv[i]); argv[i]= 0; }
58 rc= Tcl_EvalObjEx(si->ip,invoke,TCL_EVAL_GLOBAL|TCL_EVAL_DIRECT);
64 if (invoke) Tcl_DecrRefCount(invoke);
65 if (rc) Tcl_BackgroundError(si->ip);