home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 5 / FreshFish_July-August1994.bin / bbs / util / vim-2.0.lha / Vim-2.0 / src / mkcmdtab.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-15  |  2.0 KB  |  114 lines

  1. /* vi:ts=4:sw=4
  2.  *
  3.  * VIM - Vi IMproved
  4.  *
  5.  * Code Contributions By:    Bram Moolenaar            mool@oce.nl
  6.  *                            Tim Thompson            twitch!tjt
  7.  *                            Tony Andrews            onecom!wldrdg!tony 
  8.  *                            G. R. (Fred) Walter        watmath!watcgl!grwalter 
  9.  */
  10.  
  11. /*
  12.  * mkcmdtab.c: separate program that reads cmdtab.tab and produces cmdtab.h
  13.  *
  14.  *    call with: mkcmdtab cmdtab.tab cmdtab.h
  15.  */
  16.  
  17. #include "vim.h"
  18.  
  19. #if defined(UTS4)
  20.     int
  21. #else
  22.     void
  23. #endif
  24. main(argc, argv)
  25.     int        argc;
  26.     char    **argv;
  27. {
  28.     register int    c;
  29.     char            buffer[100];
  30.     int                count;
  31.     int                i;
  32.     FILE            *ifp, *ofp;
  33.  
  34.     if (argc != 3)
  35.     {
  36.         fprintf(stderr, "Usage: mkcmdtab cmdtab.tab cmdtab.h\n");
  37.         exit(10);
  38.     }
  39.     ifp = fopen(argv[1], "r");
  40.     if (ifp == NULL)
  41.     {
  42.         perror(argv[1]);
  43.         exit(10);
  44.     }
  45.     ofp = fopen(argv[2], "w");
  46.     if (ofp == NULL)
  47.     {
  48.         perror(argv[2]);
  49.         exit(10);
  50.     }
  51.  
  52.     while ((c = getc(ifp)) != '|' && c != EOF)
  53.         putc(c, ofp);
  54.     fprintf(ofp, "THIS FILE IS AUTOMATICALLY PRODUCED - DO NOT EDIT");
  55.     while ((c = getc(ifp)) != '|' && c != EOF)
  56.         ;
  57.     while ((c = getc(ifp)) != '|' && c != EOF)
  58.         putc(c, ofp);
  59.  
  60.     count = 0;
  61.     while ((c = getc(ifp)) != '|' && c != EOF)
  62.     {
  63.         putc(c, ofp);
  64.         while ((c = getc(ifp)) != '"' && c != EOF)
  65.             putc(c, ofp);
  66.         putc(c, ofp);
  67.  
  68.         i = 0;
  69.         while ((c = getc(ifp)) != '"' && c != EOF)
  70.         {
  71.             putc(c, ofp);
  72.             buffer[i++] = c;
  73.         }
  74.         putc(c, ofp);
  75.         buffer[i] = 0;
  76.  
  77.         while ((c = getc(ifp)) != '\n' && c != EOF)
  78.             putc(c, ofp);
  79.         putc(c, ofp);
  80.  
  81.         switch (buffer[0])
  82.         {
  83.             case '@':    strcpy(buffer, "at");
  84.                         break;
  85.             case '!':    strcpy(buffer, "bang");
  86.                         break;
  87.             case '<':    strcpy(buffer, "lshift");
  88.                         break;
  89.             case '>':    strcpy(buffer, "rshift");
  90.                         break;
  91.             case '=':    strcpy(buffer, "equal");
  92.                         break;
  93.             case '&':    strcpy(buffer, "and");
  94.                         break;
  95.             case '~':    strcpy(buffer, "tilde");
  96.                         break;
  97.         }
  98.                     
  99.         fprintf(ofp, "#define CMD_%s %d\n", buffer, count++);
  100.     }
  101.  
  102.     fprintf(ofp, "#define CMD_SIZE %d\n", count);
  103.  
  104.     while ((c = getc(ifp)) != '|' && c != EOF)
  105.         putc(c, ofp);
  106.  
  107.     if (c != '|')
  108.     {
  109.         fprintf(stderr, "not enough |'s\n");
  110.         exit(1);
  111.     }
  112.     exit(0);
  113. }
  114.