/* pfb2pfa.c === modified version of: */ /* pfb2ps.c - Copyright 1991-05-12 Erik Wallin, d87-ewa@nada.kth.se. This program may be distributed freely, modified or included in other free programs long as this copyright notice is still included. */ #define VERSION "1.0 (beta)" #include #ifndef AIX # include #endif #include #include "defines.h" #include "myopen.h" #include "mymalloc.h" #include "pfb2pfa.h" #define getb() (getc (pfb_file)) #define getlen() (getb () | getb () << 8 | getb () << 16 | getb () << 24) void give_usage () { fprintf (stderr, "Usage: pfb2pfa [.pfb]"); fprintf (stderr, " [[.pfa]|-]\n"); exit (UNSUCCESSFUL); } #ifdef __STDC__ void preamble (int argc, char ** argv) #else void preamble (argc, argv) int argc; char ** argv; #endif { if (argc == 1) give_usage (); pfb_file = my_open (argv [1], ".pfb", "rb"); if (argc == 3) { if (strequ (argv [2], "-")) pfa_file = stdout; else pfa_file = my_open (argv [2], ".pfa", "w"); } else pfa_file = my_open (argv [1], ".pfa", "w"); } void postamble () { fclose (pfb_file); fclose (pfa_file); exit (SUCCESSFUL); } #ifdef __STDC__ void main (int argc, char ** argv) # else void main (argc, argv) int argc; char ** argv; # endif { int t; unsigned int l, i; unsigned char * buf; fprintf (stderr, "This is pfb2pfa, version %s\n", VERSION); preamble (argc, argv); while (! feof (pfb_file)) { if (getb () != 128) { fprintf (stderr, "Magic number (128) not found "); fprintf (stderr, "or no input on input.\n"); exit (UNSUCCESSFUL); } t = getb (); fprintf (stderr, "Type: %d, ", t); switch (t) { case 1: { l = (unsigned int) getlen (); fprintf (stderr, " plain text, length %ld\n", (long) l); buf = (unsigned char *) my_malloc (l); if (fread (buf, sizeof (unsigned char), l, pfb_file) != l) { fprintf (stderr, "Wrong length of "); fprintf (stderr, "ascii field: %ld ", (long) l); fprintf (stderr, "or could not read "); fprintf (stderr, "file.\n"); exit (UNSUCCESSFUL); } # ifdef unix for (i = 0; i < l; i ++) if (buf [i] == (unsigned char) '\r') buf [i] = (unsigned char) '\n'; # endif if (fwrite (buf, sizeof (unsigned char), l, pfa_file) != l) { fprintf (stderr, "Could not write "); fprintf (stderr, "output.\n"); exit (UNSUCCESSFUL); } free (buf); } break; case 2: { l = (unsigned int) getlen (); fprintf (stderr, " binary data, length %ld\n", (long) l); buf = (unsigned char *) my_malloc (l); if (fread (buf, sizeof (unsigned char), l, pfb_file) != l) { fprintf (stderr, "Wrong length of "); fprintf (stderr, "binary field: %ld ", (long) l); fprintf (stderr, "or could not read "); fprintf (stderr, "file.\n"); exit (UNSUCCESSFUL); } for (i = 0; i < l ; i ++) { fprintf (pfa_file, "%2.2X", buf [i]); if (! ((i + 1) % HEX_PER_LINE)) fprintf (pfa_file, "\n"); } fprintf (pfa_file, "\n"); free (buf); } break; case 3: { fprintf (stderr, "End of file\n"); postamble (); } break; default: { fprintf (stderr, "Unknown field type: %d\n", t); exit (UNSUCCESSFUL); } } } postamble (); }