home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright (c) 1991 J.T. Conklin (jtc@motcad.PORTAL.COM)
- * All Rights Reserved.
- *
- * You may copy, distribute, and use this software as long as this
- * copyright statement is not removed.
- *
- * $Id: pfb2pf.c,v 1.1 1991/05/10 22:58:10 jtc Exp $
- */
-
- #include <stdio.h>
- #include <stdlib.h>
-
- enum
- {
- FIND_KEY,
- FIND_TYPE,
- PROC_ASCII,
- PROC_BINARY
- } state;
-
- char hex[] =
- {
- '0', '1', '2', '3', '4', '5', '6', '7',
- '8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
- };
-
- main()
- {
- int c;
- unsigned int i;
- unsigned long length;
- state = FIND_KEY;
-
- for (;;)
- {
- switch (state)
- {
- case FIND_KEY:
- if ((c = getchar ()) == EOF)
- {
- fprintf (stderr, "Unexpected end of file\n");
- exit (1);
- }
- else if (c != 0x80)
- {
- fprintf (stderr, "Expecting key, found 0x%.2x\n", c);
- exit (1);
- }
- else
- {
- state = FIND_TYPE;
- }
- break;
-
- case FIND_TYPE:
- if ((c = getchar ()) == EOF)
- {
- fprintf (stderr, "Unexpected end of file\n");
- exit (1);
- }
- else if (c == '\001')
- {
- state = PROC_ASCII;
- }
- else if (c == '\002')
- {
- state = PROC_BINARY;
- }
- else if (c == '\003')
- {
- exit (0);
- }
- else
- {
- fprintf (stderr, "Unknown section type\n");
- exit (1);
- }
- break;
-
- case PROC_ASCII:
- length = 0;
- for (i = 0; i < 4; i++)
- {
- if ((c = getchar ()) == EOF)
- {
- fprintf (stderr, "Unexpected end of file\n");
- exit (1);
- }
- length |= (c << (8*i));
- }
-
- for (i = 0; i < length; i++)
- {
- if ((c = getchar ()) == EOF)
- {
- fprintf (stderr, "Unexpected end of file in TEXT section\n");
- exit (1);
- }
- else if (c == '\r')
- {
- putchar ('\n');
- }
- else
- {
- putchar (c);
- }
- }
- state = FIND_KEY;
- break;
-
- case PROC_BINARY:
- length = 0;
- for (i = 0; i < 4; i++)
- {
- if ((c = getchar ()) == EOF)
- {
- fprintf (stderr, "Unexpected end of file\n");
- exit (1);
- }
- length |= (c << (8*i));
- }
-
- for (i = 0; i < length; i++)
- {
- if ((c = getchar ()) == EOF)
- {
- fprintf (stderr, "Unexpected end of file in BINARY section\n");
- exit (1);
- }
- else
- {
- putchar (hex[(c & 0xf0) >> 4]);
- putchar (hex[(c & 0x0f)]);
-
- if (i % 32 == 31)
- {
- putchar ('\n');
- }
- }
- }
-
- putchar ('\n');
- state = FIND_KEY;
- break;
- }
- }
- }
-