Linux Audio

Check our new training course

Loading...
v3.1
  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@ucw.cz>
  9 */
 10
 11#include <stdio.h>
 12#include <string.h>
 13
 14#define MAX_NAME_SIZE 63
 15
 16static void
 17pq(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
 28int
 29main(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}
v3.5.6
  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@ucw.cz>
  9 */
 10
 11#include <stdio.h>
 12#include <string.h>
 13
 14#define MAX_NAME_SIZE 63
 15
 16static void
 17pq(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
 28int
 29main(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}