Linux Audio

Check our new training course

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