home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / x / volume17 / tcl-editor / part02 / tcl.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-03-18  |  1.5 KB  |  83 lines

  1. /* $Header: /nfs/unmvax/faculty/crowley/x/pt/RCS/tcl.c,v 1.1 1991/10/10 23:46:27 crowley Exp $ */
  2.  
  3. #include <stdio.h>
  4. #include "pt.h"
  5.  
  6. Tcl_Interp * interp = NULL;
  7.  
  8. char *
  9. ExecTclCommand( command )
  10.     char * command;
  11. {
  12.     extern Tcl_Interp * interp;
  13.  
  14.     int result = Tcl_Eval( interp, command, 0, (char **)NULL );
  15.  
  16.     if( *interp->result != 0 && result != TCL_OK )
  17.             printf("%s\n", interp->result);
  18.     return interp->result;
  19. }
  20.  
  21. /*ARGSUSED*/
  22. int
  23. doPtCommand( clientData, interp, argc, argv )
  24.     ClientData clientData;
  25.     Tcl_Interp * interp;
  26.     int argc;
  27.     char *argv[];
  28. {
  29.     extern struct window *activeWindow;
  30.     extern int debug;
  31.     
  32.     int i;
  33.     char *args[6];
  34.  
  35.     for( i = 1; i < argc; ++i )
  36.         args[i-1] = argv[i];
  37.     for( ; i <= 6; ++i )
  38.         args[i-1] = "";
  39.     (void)command( (int)clientData, args[0], args[1], args[2], args[3],
  40.                             args[4], args[5] );
  41.     return TCL_OK;
  42. }
  43.  
  44. /*ARGSUSED*/
  45. void
  46. ptTcl(w, event, args, nargs)
  47.     int w;
  48.     XButtonEvent *event;
  49.     String *args;
  50.     Cardinal *nargs;
  51. {
  52.     extern char msgBuffer[];
  53.     extern Tcl_Interp * interp;
  54.  
  55.     int i;
  56.     char ch, *to, *from, *limit;
  57.  
  58.     to = msgBuffer;
  59.     limit = msgBuffer + MSGBUFFERSIZE - 1;
  60.     *to = '\0';    /* make it empty to begin with */
  61.     for( i = 0; i < *nargs; ++i ) {
  62.         *to++ = ' ';
  63.         from = args[i];
  64.         while( 1 ) {
  65.             if( to >= limit ) {
  66.                 sprintf( msgBuffer,
  67.                   "Tcl command over %d bytes was ignored.",
  68.                   MSGBUFFERSIZE );
  69.                 msg( msgBuffer, 1 );
  70.                 to = limit - 1;
  71.                 break;
  72.             }
  73.             ch = *to++ = *from++;
  74.             if( ch == '\0' ) {
  75.                 --to;    /* back up over '\0' */
  76.                 break;
  77.             }
  78.         }
  79.     }
  80.     (void)ExecTclCommand( msgBuffer );
  81. }
  82.  
  83.