|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T m
Length: 2419 (0x973) Types: TextFile Names: »mkfile.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Battlestar/mkfile.c«
#ifndef lint static char sccsid[] = "@(#)mkfile.c 1.2 11/28/84"; #endif #include <stdio.h> FILE *from, *to; int line = 1; int c; char *unctrl(); main(argc, argv) int argc; char **argv; { register room; char bol; register i, j; char temp[100]; if (argc != 2) { printf("Usage: %s filename\n", argv[0]); exit(); } sprintf(temp, "%.*s.c", sizeof temp - 3, argv[1]); if ((from = fopen(argv[1], "r")) == 0) { perror(argv[1]); exit(1); } if ((to = fopen(temp, "w")) == 0) { perror(temp); exit(1); } fprintf(to, "#include \"externs.h\"\n\n"); fprintf(to, "struct room %s[] = {\n", argv[1]); fprintf(to, "\t{ 0 },\n"); while ((c = getc(from)) != '\n' && c != EOF) ; for (room = 1; (i = getnum()) >= 0; room++) { if (c != ':') error("Format error (character '%s').", unctrl(c)); if (room != i) error("Room number mismatch (%d should be %d).", i, room); while ((c = getc(from)) == ' ' || c == '\t') ; fprintf(to, "\t{ \""); for (; c != '\n' && c != EOF; c = getc(from)) { if (c == '"') putc('\\', to); putc(c, to); } fprintf(to, "\",\n"); if (c == EOF) error("Format error (character '%s').", unctrl(c)); for (i = 0; i < 8 && (j = getnum()) >= 0; i++) fprintf(to, "%s%d", i ? ", " : "\t", j); fprintf(to, ",\n"); if (j < 0) error("Format error (character '%s').", unctrl(c)); for (; c == ' ' || c == '\t'; c = getc(from)) ; if (c != '\n') error("Format error (character '%s').", unctrl(c)); bol = 0; putc('"', to); while ((c = getc(from)) != EOF && (c != '\n' || !bol)) { if (bol) fprintf(to, "\\n\\\n"), bol = 0; if (c == '\n') { line++; bol = 1; } else { if (c == '"') putc('\\', to); putc(c, to); } } fprintf(to, "\\n\" },\n"); } fprintf(to, "};\n"); fclose(from); fclose(to); exit(0); } getnum() { register i = 0; for (; c == '\n' || c == '\t' || c == ' '; c = getc(from)) if (c == '\n') line++; for (; c >= '0' && c <= '9'; c = getc(from)) i = i * 10 + c - '0'; return c == EOF ? -1 : i; } error(fmt, a, b, c, d) { printf("line %d: ", line); printf(fmt, a, b, c, d); exit(1); } char * unctrl(c) register c; { char buf[5]; if (c == EOF) return "EOF"; c = (unsigned char) c; if (c < ' ') return sprintf(buf, "^%c", c + '@'); if (c < 0x7f) return sprintf(buf, "%c", c); if (c == 0x7f) return "^?"; return sprintf(buf, "\\%03o", c); }