~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/drivers/zorro/gen-devlist.c

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  *      Generate devlist.h from the Zorro ID file.
  3  *
  4  *      (c) 2000 Geert Uytterhoeven <geert@linux-m68k.org>
  5  *
  6  *      Based on the PCI version:
  7  *
  8  *      (c) 1999--2000 Martin Mares <mj@suse.cz>
  9  */
 10 
 11 #include <stdio.h>
 12 #include <string.h>
 13 
 14 #define MAX_NAME_SIZE 63
 15 
 16 static void
 17 pq(FILE *f, const char *c)
 18 {
 19         while (*c) {
 20                 if (*c == '"')
 21                         fprintf(f, "\\\"");
 22                 else
 23                         fputc(*c, f);
 24                 c++;
 25         }
 26 }
 27 
 28 int
 29 main(void)
 30 {
 31         char line[1024], *c, *bra, manuf[8];
 32         int manufs = 0;
 33         int mode = 0;
 34         int lino = 0;
 35         int manuf_len = 0;
 36         FILE *devf;
 37 
 38         devf = fopen("devlist.h", "w");
 39         if (!devf) {
 40                 fprintf(stderr, "Cannot create output file!\n");
 41                 return 1;
 42         }
 43 
 44         while (fgets(line, sizeof(line)-1, stdin)) {
 45                 lino++;
 46                 if ((c = strchr(line, '\n')))
 47                         *c = 0;
 48                 if (!line[0] || line[0] == '#')
 49                         continue;
 50                 if (line[0] == '\t') {
 51                         switch (mode) {
 52                         case 1:
 53                                 if (strlen(line) > 5 && line[5] == ' ') {
 54                                         c = line + 5;
 55                                         while (*c == ' ')
 56                                                 *c++ = 0;
 57                                         if (manuf_len + strlen(c) + 1 > MAX_NAME_SIZE) {
 58                                                 /* Too long, try cutting off long description */
 59                                                 bra = strchr(c, '[');
 60                                                 if (bra && bra > c && bra[-1] == ' ')
 61                                                         bra[-1] = 0;
 62                                                 if (manuf_len + strlen(c) + 1 > MAX_NAME_SIZE) {
 63                                                         fprintf(stderr, "Line %d: Product name too long\n", lino);
 64                                                         return 1;
 65                                                 }
 66                                         }
 67                                         fprintf(devf, "\tPRODUCT(%s,%s,\"", manuf, line+1);
 68                                         pq(devf, c);
 69                                         fputs("\")\n", devf);
 70                                 } else goto err;
 71                                 break;
 72                         default:
 73                                 goto err;
 74                         }
 75                 } else if (strlen(line) > 4 && line[4] == ' ') {
 76                         c = line + 4;
 77                         while (*c == ' ')
 78                                 *c++ = 0;
 79                         if (manufs)
 80                                 fputs("ENDMANUF()\n\n", devf);
 81                         manufs++;
 82                         strcpy(manuf, line);
 83                         manuf_len = strlen(c);
 84                         if (manuf_len + 24 > MAX_NAME_SIZE) {
 85                                 fprintf(stderr, "Line %d: manufacturer name too long\n", lino);
 86                                 return 1;
 87                         }
 88                         fprintf(devf, "MANUF(%s,\"", manuf);
 89                         pq(devf, c);
 90                         fputs("\")\n", devf);
 91                         mode = 1;
 92                 } else {
 93                 err:
 94                         fprintf(stderr, "Line %d: Syntax error in mode %d: %s\n", lino, mode, line);
 95                         return 1;
 96                 }
 97         }
 98         fputs("ENDMANUF()\n\
 99 \n\
100 #undef MANUF\n\
101 #undef PRODUCT\n\
102 #undef ENDMANUF\n", devf);
103 
104         fclose(devf);
105 
106         return 0;
107 }
108 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.