diff options
Diffstat (limited to 'dviware/quicspool/src/dumpdesc.c')
-rw-r--r-- | dviware/quicspool/src/dumpdesc.c | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/dviware/quicspool/src/dumpdesc.c b/dviware/quicspool/src/dumpdesc.c new file mode 100644 index 0000000000..4b249de919 --- /dev/null +++ b/dviware/quicspool/src/dumpdesc.c @@ -0,0 +1,177 @@ +#ifndef lint +static char *rcs = "$Header: dumpdesc.c,v 1.1 88/01/15 13:03:43 simpson Rel $"; +#endif +/* +$Log: dumpdesc.c,v $ + * Revision 1.1 88/01/15 13:03:43 simpson + * initial release + * + * Revision 0.1 87/12/11 18:30:50 simpson + * beta test + * +*/ +#include <stdio.h> +#include <local/standard.h> +#include "dev.h" + +char EOFName[81]; +char *WhoAmI; +char *Usage = "Usage: %s DESCfile\n"; + +main(argc, argv) +int argc; +char *argv[]; +{ + extern int optind; + extern char *optarg; + int c; + FILE *f; + void dumpdescfile(), desceofsoexit(), seteoffunction(); + char *strcpy(); + + WhoAmI = argv[0]; + while ((c = getopt(argc, argv, "")) != EOF) + switch (c) { + case '?': +badusage: fprintf(stderr, Usage, WhoAmI); + exit(FAIL); + } + if (optind != argc - 1) + goto badusage; + if (!(f = fopen(argv[optind], "r"))) { + perror(argv[optind]); + exit(FAIL); + } + seteoffunction(desceofsoexit); + (void)strcpy(EOFName, argv[optind]); + dumpdescfile(f); + (void)fclose(f); + exit(SUCCEED); +} + +/* Symbolically dumps a DESC.out file. The parameter should be an open + * DESC.out file. + */ +void dumpdescfile(f) +FILE *f; +{ + unsigned char spacewidth, widthindex; + struct dev devheader; + struct font fontheader; + int count, c; + short size, index; + long funnycharoffset; /* Static file offset - Before */ + /* funnycharindextable. */ + long fontstructoffset; /* Floating offset - Beginning of each */ + /* font structure. */ + + rewind(f); + (void)cfread((char *)&devheader, sizeof(struct dev), 1, f); + printf("filesize: (%d+%d)=%d\n", sizeof(struct dev), devheader.filesize, + sizeof(struct dev) + devheader.filesize); + printf("res: %d\tmotion (hor,ver): (%d,%d)\n", devheader.res, + devheader.hor, devheader.vert); + printf("unitwidth: %d\tsizescale: %d\n", devheader.unitwidth, + devheader.sizescale); + printf("nfonts: %d\tnsizes: %d\n", devheader.nfonts, devheader.nsizes); + printf("paper (width,length): (%d,%d)\n", devheader.paperwidth, + devheader.paperlength); + /* Read the sizes table */ + printf("point sizes available:\n"); + (void)cfread((char *)&size, sizeof(short), 1, f); + for (count = 0; size; count++) { + if ((count + 1) % 20 == 0) + putchar('\n'); + printf("%d, ", size); + (void)cfread((char *)&size, sizeof(short), 1, f); + } + if (count > 0) + putchar('\n'); + /* Read the funnycharstrings */ + printf("special character names:\n"); + funnycharoffset = ftell(f); + for (count = 0; count < devheader.nchtab; count++) { + if ((count + 1) % 20 == 0) + putchar('\n'); + (void)fseek(f, funnycharoffset + count * sizeof(short), 0); + (void)cfread((char *)&index, sizeof(short), 1, f); + (void)fseek(f, funnycharoffset + devheader.nchtab * sizeof(short) + + index, 0); + while ((c = cgetc(f)) != '\0') + putchar(c); + putchar(','); + } + if (count > 0) + putchar('\n'); + (void)fseek(f, funnycharoffset + devheader.nchtab * sizeof(short) + + devheader.lchname, 0); + /* Read each individual font information */ + fontstructoffset = ftell(f); + while (fread((char *)&fontheader, sizeof(struct font), 1, f) == 1) { + printf("\n%s font %s (internal %s)\n", + fontheader.specfont == 1 ? "Special" : "Regular", + fontheader.namefont, fontheader.intname); + if (fontheader.ligfont > 0) { + printf("ligatures: "); + if (fontheader.ligfont & LFI) + printf("fi, "); + if (fontheader.ligfont & LFL) + printf("fl, "); + if (fontheader.ligfont & LFF) + printf("ff, "); + if (fontheader.ligfont & LFFI) + printf("ffi, "); + if (fontheader.ligfont & LFFL) + printf("ffl, "); + printf("\n"); + } + spacewidth = cgetc(f); + if (spacewidth > (unsigned)0) + printf("spacewidth: %u\n", spacewidth); + for (count = 0; count < 96 + devheader.nchtab; count++) { + /* Seek to fontindextable */ + (void)fseek(f, fontstructoffset + sizeof(struct font) + 3 * + fontheader.nwfont + count, 0); + widthindex = cgetc(f); + if (widthindex == 0) + continue; + if (count < 96) + if (count + 32 == 0177) /* Delete */ + printf("0177\t"); + else + printf("%c\t", count + 32); + else { + /* Print out special character sequence. */ + (void)fseek(f, funnycharoffset + (count - 96) * sizeof(short), + 0); + (void)cfread((char *)&index, sizeof(short), 1, f); + (void)fseek(f, funnycharoffset + devheader.nchtab * + sizeof(short) + index, 0); + while ((c = cgetc(f)) != '\0') + putchar(c); + putchar('\t'); + } + /* Print out width, kerning and code info */ + (void)fseek(f, fontstructoffset + sizeof(struct font) + widthindex, + 0); + printf("width %d\t", cgetc(f)); + (void)fseek(f, fontstructoffset + sizeof(struct font) + + fontheader.nwfont + widthindex, 0); + printf("kerning %d\t", cgetc(f)); + (void)fseek(f, fontstructoffset + sizeof(struct font) + + fontheader.nwfont * 2 + widthindex, 0); + printf("code %d\n", cgetc(f)); + } + /* Go to next font structure */ + (void)fseek(f, fontstructoffset + sizeof(struct font) + 3 * + fontheader.nwfont + 96 + devheader.nchtab, 0); + fontstructoffset = ftell(f); + } +} + +void desceofsoexit() +{ + fprintf(stderr, "%s: unexpected eof in DESC.out file %s\n", WhoAmI, + EOFName); + exit(FAIL); +} |