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