[BACK]Return to mkcmdtab.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / vim

Annotation of src/usr.bin/vim/mkcmdtab.c, Revision 1.1.1.1

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