cnwietho@immd4.informatik.uni-erlangen.de (Carsten Wiethoff) (10/03/89)
Hi!
For all who have missed my description of the eexec-algorithm some
time ago (or who were not able to make a program from it ;-) I post
two little C-programs that convert postscript to eexec format and
vice versa.
ps2eexec.c is especially useful to convert machine code using the cexec
operator to eexec format.
BTW it might be interesting to know that this algorithm (using different
initial values) is used in the Adobe font format as well. So if these rumours
about Adobe publishing their font format are true, we should see a similar thing
from Adobe soon.
This is ps2eexec.c:
----------------------------------- cut here ----------------------------
/* Quickie to convert postscript from stdin to eexec format on stdout */
#include <stdio.h>
static unsigned short buffer = 0xd971;
static unsigned long startup = 0x00000000; /* or whatever you want */
main()
{
unsigned char input;
unsigned char output;
int init = 4;
int i;
int result;
printf("%08x",startup);
for (i=0;i<4;++i)
{
input = (startup >> ((3-i)*8));
buffer = (input + buffer) * 0xce6d + 0x58bf;
}
for(;;)
{
for (i=0;i<(32-init);++i)
{
result = getchar();
if (result == EOF)
break;
output = (input ^ (buffer>>8));
buffer = (output + buffer) * 0xce6d + 0x58bf;
printf("%02x",output);
}
init = 0;
printf("\n");
if (input == EOF)
break;
}
}
----------------------------- cut here ----------------------------------
This is eexec2ps.c:
------------------------------ cut here ----------------------------------
/* Quickie to convert eexec format from stdin to postscript on stdout */
#include <stdio.h>
/* Written by Carsten Wiethoff 1989 */
/* You may do what you want with this code,
as long as this notice stays in it */
static unsigned short buffer = 0xd971;
main()
{
unsigned int input;
char output;
int ignore = 4;
int result;
do
{
result = scanf(" %2x",&input);
if ( (result == EOF) || (result == 0) )
break;
output = input ^ (buffer>>8);
buffer = (input + buffer) * 0xce6d + 0x58bf;
if ( ignore > 0 )
{
ignore--;
}
else
{
printf("%c",output);
}
} while (1);
}
-------------------------------- cut here --------------------------------
Carsten Wiethoff
c/o Frank Kardel
Friedrich-Alexander Universitaet
Erlangen-Nuernberg
CS Department IMMD IV
Martensstrasse 1
D-8520 Erlangen
---------------
West Germany
Voice: +49/(0)9131/85-7908
E-mail: cnwietho@immd4.informatik.uni-erlangen.de
Private: Carsten Wiethoff
Untere Karlstr.7
D-8520 Erlangen
West Germany
Tel.: +49/(0)9131/29136