Posted to tcl by hypnotoad at Fri Jan 26 15:18:33 GMT 2018view pretty
/* File : example.tcl */ my include <time.h> my code header { double My_variable = 3.0; } my c_function {int fact(int n)} { if (n <= 1) return 1; else return n*fact(n-1); } my c_function {int my_mod(int x, int y)} { return (x%y); } my c_function {char *get_time()} { time_t ltime; time(<ime); return ctime(<ime); } my c_tclcmd ::fact { int _result; int _arg0; if (objv != 2) { Tcl_SetResult(interp, "Wrong # args int : fact n ",TCL_STATIC); return TCL_ERROR; } if(Tcl_GetIntFromObj(interp,objv[1],&_arg0)) { return TCL_ERROR; } _result = fact(_arg0); Tcl_SetObjResult(interp,Tcl_NewIntObj(_result)); return TCL_OK; } my c_tclcmd ::fact mod { int _result; int _arg0; int _arg1; if (objv != 3) { Tcl_SetResult(interp, "Wrong # args int : mod x y ",TCL_STATIC); return TCL_ERROR; } if(Tcl_GetIntFromObj(interp,objv[1],&_arg0)) return TCL_ERROR; if(Tcl_GetIntFromObj(interp,objv[2],&_arg1)) { _result = mod(_arg0,_arg1); Tcl_SetObjResult(interp,Tcl_NewIntObj(_result)); return TCL_OK; } my c_tclcmd ::get_time { char * _result; if (objv != 1) { Tcl_WrongNumArgs(interp, 1, objv, ""); return TCL_ERROR; } } _result = get_time(); Tcl_SetObjResult(interp,Tcl_NewStringObj(_result,-1)); return TCL_OK; } my code cinit { Tcl_LinkVar(interp, "My_variable", (char *) &My_variable, TCL_LINK_DOUBLE); }