 1da177e4c3
			
		
	
	
	1da177e4c3
	
	
	
		
			
			Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip!
		
			
				
	
	
		
			107 lines
		
	
	
	
		
			2.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
	
		
			2.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  *	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 long\n", 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()\n\n", devf);
 | |
| 			manufs++;
 | |
| 			strcpy(manuf, line);
 | |
| 			manuf_len = strlen(c);
 | |
| 			if (manuf_len + 24 > MAX_NAME_SIZE) {
 | |
| 				fprintf(stderr, "Line %d: manufacturer name too long\n", 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: %s\n", lino, mode, line);
 | |
| 			return 1;
 | |
| 		}
 | |
| 	}
 | |
| 	fputs("ENDMANUF()\n\
 | |
| \n\
 | |
| #undef MANUF\n\
 | |
| #undef PRODUCT\n\
 | |
| #undef ENDMANUF\n", devf);
 | |
| 
 | |
| 	fclose(devf);
 | |
| 
 | |
| 	return 0;
 | |
| }
 |