summaryrefslogtreecommitdiff
path: root/dviware/dvitops/pfbtops.c
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /dviware/dvitops/pfbtops.c
Initial commit
Diffstat (limited to 'dviware/dvitops/pfbtops.c')
-rw-r--r--dviware/dvitops/pfbtops.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/dviware/dvitops/pfbtops.c b/dviware/dvitops/pfbtops.c
new file mode 100644
index 0000000000..dd76b81abc
--- /dev/null
+++ b/dviware/dvitops/pfbtops.c
@@ -0,0 +1,91 @@
+/* this translates Adobe fonts in IBM PC format (.pfb) to plain PostScript */
+
+static char rcsid[] = "$Header: /usr/jjc/dvitops/RCS/pfbtops.c,v 1.2 90/08/14 13:04:24 jjc Rel $";
+
+#include "util.h"
+
+char *program_name = "pfbtops";
+
+int main(argc, argv)
+int argc;
+char **argv;
+{
+ int c;
+ int err;
+ FILE *fp, *outfp;
+ char filename[FILENAME_MAX];
+ if (argc < 2 || argc > 3)
+ message(FATAL_ERROR, "usage: pfbtops pfbfile [psfile]");
+ if (strlen(filename) > FILENAME_MAX - 5)
+ message(FATAL_ERROR, "file name too long");
+ strcpy(filename, argv[1]);
+ if (strchr(filename, '.') == NULL)
+ strcat(filename, ".pfb");
+ if ((fp = FOPEN_RB(filename)) == NULL)
+ message(FATAL_ERROR, "can't open %s", filename);
+ if (argc == 3) {
+ if (strlen(filename) > FILENAME_MAX - 5)
+ message(FATAL_ERROR, "filename too long");
+ strcpy(filename, argv[2]);
+ if (strchr(filename, '.') == NULL)
+ strcat(filename, ".ps");
+ }
+ else
+ strcpy(strchr(filename, '.'), ".ps");
+ if ((outfp = fopen(filename, "w")) == NULL)
+ message(FATAL_ERROR, "can't open %s", filename);
+ for (;;) {
+ long n;
+ c = getc(fp);
+ if (c != 128)
+ goto bad;
+ c = getc(fp);
+ if (c == 3) {
+ (void)getc(fp);
+ if (!feof(fp) || ferror(fp))
+ goto bad;
+ fclose(fp);
+ break;
+ }
+ n = (unsigned long)getc(fp);
+ n |= (unsigned long)getc(fp) << 8;
+ n |= (unsigned long)getc(fp) << 16;
+ n |= (unsigned long)getc(fp) << 24;
+ if (n < 0)
+ { err =1; goto bad;}
+ if (c == 1) {
+ while (n--) {
+ c = getc(fp);
+ if (c == '\r')
+ putc('\n', outfp);
+ else
+ putc(c, outfp);
+ }
+ if (ferror(fp) || feof(fp))
+ { err = 2; goto bad;}
+ }
+ else if (c == 2) {
+ int cols = 0;
+ putc('\n', outfp);
+ while (n--) {
+ static char hexdigits[] = "0123456789ABCDEF";
+ c = getc(fp);
+ if ((cols += 2) > 70) {
+ putc('\n', outfp);
+ cols = 0;
+ }
+ putc(hexdigits[(unsigned)c >> 4], outfp);
+ putc(hexdigits[c & 15], outfp);
+ }
+ putc('\n', outfp);
+ if (ferror(fp) || feof(fp))
+ {err = 3 ; goto bad;}
+ }
+ else
+ {err = 4 ; goto bad;}
+ }
+ exit(history);
+bad:
+ fprintf(stderr,"Error: %d\n",err);
+ message(FATAL_ERROR, "bad font file");
+}