OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [drivers/] [zorro/] [gen-devlist.c] - Blame information for rev 1774

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
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@ucw.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
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.