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

  1. #include <string.h>
  2. #include <tcl.h>
  3. #include <tk.h>
  4.  
  5. int
  6. Write(ClientData cd, Tcl_Interp *interp, int argc, const char **argv)
  7. {
  8. Tcl_Channel channel;
  9. int mode;
  10.  
  11. if (argc != 2) {
  12. Tcl_SetObjResult(interp, Tcl_NewStringObj("syntax!", -1));
  13. return TCL_ERROR;
  14. }
  15. if ((channel = Tcl_GetChannel(interp, "stdout", &mode)) == NULL) {
  16. return TCL_ERROR;
  17. }
  18. if (!(mode & TCL_WRITABLE)) {
  19. Tcl_SetObjResult(interp, Tcl_NewStringObj("not writable", -1));
  20. return TCL_ERROR;
  21. }
  22. Tcl_Write(channel, argv[1], strlen(argv[1]));
  23. return TCL_OK;
  24. }
  25.  
  26. int Tcl_AppInit(Tcl_Interp *interp)
  27. {
  28. if (Tcl_Init(interp) != TCL_OK) {
  29. return TCL_ERROR;
  30. }
  31. Tcl_CreateCommand(interp, "write", Write, NULL, NULL);
  32. if (Tcl_Eval(interp, "write [info patchlevel]") != TCL_OK) {
  33. return TCL_ERROR;
  34. }
  35. return TCL_OK;
  36. }
  37.  
  38. int main(int argc, char **argv)
  39. {
  40. Tcl_FindExecutable(argv[0]);
  41. Tk_Main(argc, argv, Tcl_AppInit);
  42. }
  43.