#include <tcl.h>
void
EvalString(Tcl_Interp *interp) {
Tcl_Obj *result;
char
script[] =
"set a [expr {20 * 30}]"
;
if
(Tcl_Eval(interp, script) != TCL_OK) {
fprintf
(stderr,
"Error was: %s\n"
, Tcl_GetStringResult(interp));
return
;
}
result = Tcl_GetObjResult(interp);
printf
(
"%s\n"
, Tcl_GetStringFromObj(result, NULL));
}
void
EvalStringObj(Tcl_Interp *interp) {
Tcl_Obj *script;
Tcl_Obj *result;
script = Tcl_NewStringObj(
"set a [expr {30 * 30}]"
, -1);
Tcl_IncrRefCount(script);
Tcl_EvalObjEx(interp, script, 0);
result = Tcl_GetObjResult(interp);
printf
(
"%s\n"
, Tcl_GetStringFromObj(result, NULL));
}
void
EvalListObj(Tcl_Interp *interp) {
Tcl_Obj *cmd;
cmd = Tcl_NewObj();
Tcl_ListObjAppendElement(interp, cmd, Tcl_NewStringObj(
"puts"
, -1));
Tcl_ListObjAppendElement(interp, cmd, Tcl_NewStringObj(
"hello world"
, -1));
Tcl_IncrRefCount(cmd);
Tcl_EvalObjEx(interp, cmd, 0);
Tcl_DecrRefCount(cmd);
}
void
Eval(Tcl_Interp *interp) {
int
i;
Tcl_Obj *scriptArr[3];
Tcl_Obj *resultObj;
int
result;
scriptArr[0] = Tcl_NewStringObj(
"set"
, 3);
scriptArr[1] = Tcl_NewStringObj(
"a"
, 1);
scriptArr[2] = Tcl_NewIntObj(32);
for
(i = 0; i < 3; ++i) {
Tcl_IncrRefCount(scriptArr[i]);
}
Tcl_EvalObjv(interp, 3, scriptArr, 0);
for
(i = 0; i < 3; ++i) {
Tcl_DecrRefCount(scriptArr[i]);
}
resultObj = Tcl_GetObjResult(interp);
Tcl_IncrRefCount(resultObj);
Tcl_GetIntFromObj(interp, resultObj, &result);
Tcl_DecrRefCount(resultObj);
printf
(
"%d\n"
, result);
}
int
main(
int
argc,
char
*argv[]) {
Tcl_Interp *interp;
interp = Tcl_CreateInterp();
EvalString(interp);
EvalStringObj(interp);
EvalListObj(interp);
Eval(interp);
Tcl_DeleteInterp(interp);
return
0;
}