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(&ltime);
  return ctime(&ltime);
}

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);
}