gen-devlist.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
- /*
- * Generate devlist.h from the Zorro ID file.
- *
- * (c) 2000 Geert Uytterhoeven <geert@linux-m68k.org>
- *
- * Based on the PCI version:
- *
- * (c) 1999--2000 Martin Mares <mj@ucw.cz>
- */
- #include <stdio.h>
- #include <string.h>
- #define MAX_NAME_SIZE 63
- static void
- pq(FILE *f, const char *c)
- {
- while (*c) {
- if (*c == '"')
- fprintf(f, "\"");
- else
- fputc(*c, f);
- c++;
- }
- }
- int
- main(void)
- {
- char line[1024], *c, *bra, manuf[8];
- int manufs = 0;
- int mode = 0;
- int lino = 0;
- int manuf_len = 0;
- FILE *devf;
- devf = fopen("devlist.h", "w");
- if (!devf) {
- fprintf(stderr, "Cannot create output file!n");
- return 1;
- }
- while (fgets(line, sizeof(line)-1, stdin)) {
- lino++;
- if ((c = strchr(line, 'n')))
- *c = 0;
- if (!line[0] || line[0] == '#')
- continue;
- if (line[0] == 't') {
- switch (mode) {
- case 1:
- if (strlen(line) > 5 && line[5] == ' ') {
- c = line + 5;
- while (*c == ' ')
- *c++ = 0;
- if (manuf_len + strlen(c) + 1 > MAX_NAME_SIZE) {
- /* Too long, try cutting off long description */
- bra = strchr(c, '[');
- if (bra && bra > c && bra[-1] == ' ')
- bra[-1] = 0;
- if (manuf_len + strlen(c) + 1 > MAX_NAME_SIZE) {
- fprintf(stderr, "Line %d: Product name too longn", lino);
- return 1;
- }
- }
- fprintf(devf, "tPRODUCT(%s,%s,"", manuf, line+1);
- pq(devf, c);
- fputs("")n", devf);
- } else goto err;
- break;
- default:
- goto err;
- }
- } else if (strlen(line) > 4 && line[4] == ' ') {
- c = line + 4;
- while (*c == ' ')
- *c++ = 0;
- if (manufs)
- fputs("ENDMANUF()nn", devf);
- manufs++;
- strcpy(manuf, line);
- manuf_len = strlen(c);
- if (manuf_len + 24 > MAX_NAME_SIZE) {
- fprintf(stderr, "Line %d: manufacturer name too longn", lino);
- return 1;
- }
- fprintf(devf, "MANUF(%s,"", manuf);
- pq(devf, c);
- fputs("")n", devf);
- mode = 1;
- } else {
- err:
- fprintf(stderr, "Line %d: Syntax error in mode %d: %sn", lino, mode, line);
- return 1;
- }
- }
- fputs("ENDMANUF()n
- n
- #undef MANUFn
- #undef PRODUCTn
- #undef ENDMANUFn", devf);
- fclose(devf);
- return 0;
- }