использование существующих процедур tcl c в сценарии tcl - PullRequest
0 голосов
/ 28 апреля 2011

Как использовать Tcl_ParseCommand или список процедур Tcl C, уже доступных в "http://tmml.sourceforge.net/doc/tcl/". Нужно ли мне писать процедуру-обертку c и процедуру init для каждой из этих команд?

-Prasath

Ответы [ 2 ]

0 голосов
/ 29 апреля 2011

Да, вам нужно написать команду, реализованную на языке C, чтобы использовать их. Тем не менее, есть ряд полезных инструментов, чтобы сделать это проще. В частности, critcl - интересный выбор, который вы можете использовать следующим образом (очень странный пример):

package require critcl
critcl::cproc foo {Tcl_Interp* interp Tcl_Obj* argObj} ok {
    int nObjs;
    Tcl_Obj **objs;

    if (Tcl_ListObjGetElements(interp, argObj, &nObjs, &objs) != TCL_OK)
        return TCL_ERROR;
    if (nObjs != 2) {
        Tcl_AppendResult(interp, "need list of length 2", NULL);
        return TCL_ERROR;
    }
    Tcl_SetObjResult(interp, Tcl_NewBooleanObj(
            !strcmp(Tcl_GetString(objs[0]), Tcl_GetString(objs[1]))));
    return TCL_OK;
}
puts [foo {a a}]

Полезная документация на вики Tcler .

Обратите внимание, что для Tcl_ParseCommand, в частности, лучше использовать пакет tclparser, как упоминает schlenk. Это потому, что результат этой функции (как выходной параметр) существенно нетривиален; для превращения в нечто вроде значения Tcl требуется немало преобразований.

0 голосов
/ 28 апреля 2011

Самым простым способом доступа к командам синтаксического анализатора Tcl_ParseCommand и т. Д. Может быть расширение tclparser (например, (потерянный) пакет tclparser в Debian / Ubuntu или сборка самостоятельно из исходников http://wiki.tcl.tk/1660).

Если вам нужно обрабатывать и другие команды Ccl-библиотеки Tcl, вам следует взглянуть на то, как написать расширение Tcl в целом. Много примеров и советов для этого можно найти по адресу: http://wiki.tcl.tk/1191

...