home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 1 / 1169 / handler.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-28  |  964 b   |  53 lines

  1. /* handle standard commands with names for tcl */
  2. #include <stdio.h>
  3. #include <tcl.h>
  4. #include "handler.h"
  5.  
  6. cmdHandler(tab, interp, argc, argv)
  7. struct cmd_table *tab;
  8. Tcl_Interp *interp;
  9. int argc;
  10. char **argv;
  11. {
  12.     struct subcmd *cmdv = tab->cmdv;
  13.     int cmdc = tab->cmdc;
  14.  
  15.     char *action;
  16.  
  17.     char *err;
  18.     char *name;
  19.     char *args;
  20.  
  21.     err = "wrong # args in";
  22.     action = tab->name;
  23.     name = "command";
  24.     args = "args...";
  25.  
  26.     if(argc < 2)
  27.         goto error;
  28.  
  29.     argv++; --argc;
  30.     action = *argv++; --argc;
  31.  
  32.     while(cmdc > 0) {
  33.         if(strcmp(action, cmdv->name) == 0) {
  34.             int result;
  35.  
  36.             name = cmdv->name;
  37.             args = cmdv->args;
  38.             if(argc < cmdv->min
  39.                || (cmdv->max != -1 && argc > cmdv->max))
  40.                 goto error;
  41.             result = (*cmdv->func)(interp, tab->data, argc, argv);
  42.             return result;
  43.         }
  44.         cmdv++;
  45.         cmdc--;
  46.     }
  47.     err = "unknown subcommand";
  48. error:
  49.     sprintf(interp->result, "%.50s %.50s:  should be \"%.50s %.50s %.50s\"",
  50.         err, action, tab->name, name, args);
  51.     return TCL_ERROR;
  52. }
  53.