Article View: comp.lang.postscript
Article #2608Was: Binary printer fonts, now pfbtopfa.c
From: P.Garbha
Date: Tue, 24 Jul 1990 19:12
Date: Tue, 24 Jul 1990 19:12
154 lines
3518 bytes
3518 bytes
In article <929@ssc.UUCP> fyl@ssc.UUCP (Phil Hughes) writes:
> The printer font is in a binary format (PFB
>extension). if I download it as is to the printer (along with a program
>to print out the bounding box info, etc) it pukes. My guess is that I
>need to translate it to a "PFA" format.
>
Here follows a small program to convert from PFB to PFA format. Note that
it is a fast hack, so it carries no guarantees.
#include <stdio.h>
#include <strings.h>
/*
* Program pfbtopfa.c
*
* Convert an adobe .PFB file to a .PFA file
*/
main(argc, argv)
int argc;
char **argv;
{
int c;
extern int optind;
extern char *optarg;
int errflg = 0;
while ((c = getopt (argc, argv, "")) != EOF)
switch (c) {
case '?':
errflg++;
break;
}
if (errflg) {
fprintf (stderr, "usage: . . . ");
exit (1);
}
for( ; optind < argc; optind++) {
convert(argv[optind]);
}
}
convert(font)
char *font;
{
char pfaname[20];
char *cp;
FILE *ifp, *ofp;
int len, ft;
register c, i;
int j, k;
strcpy(pfaname, font);
cp = strrchr(pfaname, '.');
if (cp == NULL)
cp = pfaname + strlen(pfaname);
if (strcmp(cp, ".PFB") != 0 && strcmp(cp, ".pfb") != 0) {
*cp = '\0';
fprintf(stderr, "Font '%s' has to have name '%s.PFB'\n",
font, pfaname);
return;
}
strcpy(cp, strcmp(cp, ".PFB") == 0 ? ".PFA" : ".pfa");
if ((ifp = fopen(font, "r")) == NULL) {
perror(font);
return;
}
if ((ofp = fopen(pfaname, "w")) == NULL) {
perror(pfaname);
return;
}
ft = 0;
while (ft != 3) {
c = getc(ifp);
if (c == -1) {
fprintf(stderr, "Premature eof on file %s\n", font);
break;
}
if (c != 128) {
fprintf(stderr, "Illegal format on font %s\n", font);
break;
}
c = getc(ifp);
if (c == -1) {
fprintf(stderr, "Premature eof on file %s\n", font);
break;
}
if (c < 1 || c > 3) {
fprintf(stderr, "Illegal format on font %s\n", font);
break;
}
ft = c;
len = 0;
if (ft != 3) {
for (i = 0; i < 4; i++) {
c = getc(ifp);
if (c == -1) {
fprintf(stderr, "Premature eof on file %s\n", font);
goto fin;
}
len |= (c << (i*8));
}
}
/* printf("Segment type %d, len %d\n", ft, len); */
switch (ft) {
case 1:
for (k = 0; k < len; k++) {
c = getc(ifp);
if (c == -1) {
fprintf(stderr, "Premature eof on file %s\n", font);
goto fin;
}
if (c == '\r')
c = '\n';
putc(c, ofp);
}
break;
case 2:
j = 0;
for (k = 0; k < len; k++) {
c = getc(ifp);
if (c == -1) {
fprintf(stderr, "Premature eof on file %s\n", font);
goto fin;
}
i = c & 0xf;
c >>= 4;
if (c > 9)
putc(c - 10 + 'A', ofp);
else
putc(c + '0', ofp);
if (i > 9)
putc(i - 10 + 'A', ofp);
else
putc(i + '0', ofp);
j++;
if (j == 80) {
putc('\n', ofp);
j = 0;
}
}
break;
case 3:
goto fin;
}
}
fin:
fclose(ifp);
fclose(ofp);
}
Technical Details
Message-ID:
<1990Jul24.191238.1185@bbt.se>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!usc!zaphod.mps.ohio-state.edu!rpi!uupsi!sunic!compuram!pgdReferences:
<929@ssc.UUCP>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!usc!zaphod.mps.ohio-state.edu!rpi!uupsi!sunic!compuram!pgd From: pgd@bbt.se (P.Garbha) Newsgroups: comp.lang.postscript Subject: Was: Binary printer fonts, now pfbtopfa.c Keywords: Adobe binary ? Message-ID: <1990Jul24.191238.1185@bbt.se> Date: 24 Jul 90 19:12:38 GMT References: <929@ssc.UUCP> Organization: The Bhaktivedanta Book Trust Lines: 154