[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     ! 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: }