Posted to tcl by dgp at Thu Jan 16 19:58:29 GMT 2014view pretty

#include <string.h>
#include <tcl.h>
#include <tk.h>

int
Write(ClientData cd, Tcl_Interp *interp, int argc, const char **argv)
{
    Tcl_Channel channel;
    int mode;

    if (argc != 2) {
        Tcl_SetObjResult(interp, Tcl_NewStringObj("syntax!", -1));
        return TCL_ERROR;
    }
    if ((channel = Tcl_GetChannel(interp, "stdout", &mode)) == NULL) {
        return TCL_ERROR;
    }
    if (!(mode & TCL_WRITABLE)) {
        Tcl_SetObjResult(interp, Tcl_NewStringObj("not writable", -1));
        return TCL_ERROR;
    }
    Tcl_Write(channel, argv[1], strlen(argv[1]));
    return TCL_OK;
}

int Tcl_AppInit(Tcl_Interp *interp)
{
    if (Tcl_Init(interp) != TCL_OK) {
        return TCL_ERROR;
    }
    Tcl_CreateCommand(interp, "write", Write, NULL, NULL);
    if (Tcl_Eval(interp, "write [info patchlevel]") != TCL_OK) {
        return TCL_ERROR;
    }
    return TCL_OK;
}

int main(int argc, char **argv)
{
    Tcl_FindExecutable(argv[0]);
    Tk_Main(argc, argv, Tcl_AppInit);
}