C から Tcl の変数を設定する
SetVar の最後の引数はフラグで種々のものがあるようですが,ひとまず.TCL_GLOBAL_ONLY にしててもいいみたいです??でも関数中から呼ばれたときとかには問題ですね.
値の取得には Tcl_GetVar() などを使います.
See. Tcl_SetVar(3)
#include <tcl.h>
/*
* gcc -fPIC -I/usr/local/include -c foo.c
* ld -Bshareable -x foo.o -o libfoo.so -L/usr/local/lib -ltcl80jp -lm
*/
int foo(ClientData clientData, Tcl_Interp *interp,
int argc, char *argv[])
{
Tcl_SetVar(interp, "foo", "12349", TCL_GLOBAL_ONLY);
Tcl_SetVar2(interp, "bar", "test", "5678", TCL_GLOBAL_ONLY);
return TCL_OK;
}
int Foo_Init(Tcl_Interp* interp)
{
Tcl_CreateCommand(interp, "foo", foo, NULL, NULL);
return TCL_OK;
}
|
下記の例では i を 0 から 99 まで変化させ,i*i の値をリストにして返します.
int foo(ClientData clientData, Tcl_Interp *interp,
int argc, char *argv[])
{
Tcl_DString dstr;
char str[512];
int i;
Tcl_DStringInit(&dstr);
for (i=0; i<100; i++) {
sprintf(str, "%d ", i*i);
Tcl_DStringAppend(&dstr, str, -1);
}
Tcl_DStringResult(interp, &dstr);
Tcl_DStringFree(&dstr);
return TCL_OK;
}
|