#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int
main(int argc, char *argv[])
{
void lower(char *);
char buffer[BUFSIZ], *p;
FILE *in, *out;
int first=0x7fffffff, last=0, n;
if (argc != 3) {
fprintf(stderr, "Usage: make_table input.h output.h\n");
exit(1);
}
if ((in = fopen(argv[1], "r")) == NULL) {
perror("fopen");
exit(1);
}
if ((out = fopen(argv[2], "w")) == NULL) {
perror("fopen");
exit(1);
}
fprintf(out, "static void (*efun_table[])(int) = {\n");
while (fgets(buffer, sizeof(buffer), in)) {
if (buffer[0] != '#')
continue;
p = strtok(buffer+1, " \t\n");
if (strcmp(p, "define"))
continue;
if ((p = strtok(NULL, " \t\n")) == NULL)
continue;
lower(p);
fprintf(out, "\t%s,\n", p);
if ((p = strtok(NULL, " \t\n")) == NULL)
continue;
n = atoi(p);
if (n < first)
first = n;
if (n > last)
last = n;
}
fprintf(out, "};\n\n");
fprintf(out, "#define EFUN_FIRST %4d\n", first);
fprintf(out, "#define EFUN_LAST %4d\n", last);
fclose(out);
fclose(in);
exit(0);
}
void
lower(char *string)
{
while (*string) {
if (isupper(*string))
*string = tolower(*string);
string++;
}
}