[comp.lang.postscript] Re^2: PostScript downloadable font formats

paul@frcs.UUCP (Paul Nash) (09/20/90)

A while back I wrote:
>says that as the fonts are for a Mac, they cannot be downloaded
>from an IBM PClone.

Robert Elliott replied:
>Macs:  all data is stored in POST resources of one file (in the System
>Folder usually), and the eexec portion of the font is stored as full
>8bit characters rather than hex.  The Mac OS converts all this to an
>ASCII file on the fly when it sends it to the printer.

I have managed to copy the resource fork off from MAC to PC-DOS
format, and am about to knock up some code to pull the resources
into a suitable PostScript file. This would be (sort of) a DOS
version of unAdobe.

If anyone would like a copy (assuming that it all works!), send
me mail and I will mail you, or, if there is enough interest,
post to the net.

>There is a Mac program called unAdobe which will convert the Mac
>format into a standard ASCII file, which you could then send from
>any computer (UNIX, PCs, etc.)

If anyone has source for this (or hints for writing one from
scratch) I would be grateful for it, to use as a starting point
for a PC version. A MAC executable would _still_ be useful,
if anyone has one floating around.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
 Paul Nash			 Flagship Wide Area Networks (Pty) Ltd
  paul@frcs.UUCP			  ...!ddsw1!proxima!frcs!paul

verket@venice.SEDD.TRW.COM (Paul Verket) (09/24/90)

From article <76@frcs.UUCP>, by paul@frcs.UUCP (Paul Nash):
> If anyone has source for this (or hints for writing one from
> scratch) I would be grateful for it, to use as a starting point
> for a PC version.
Check out the file mac-font2next on nova.cc.purdue.edu. It has
(from a very brief inspection) the source to read macbinary files
and produce ascii output. It doesn't appear to be too NeXT specific.
			Paul Verket

mark@orcas.ucsb.edu (Probert's Guest) (09/26/90)

The mac version of unadobe can be FTP'd from the SUMEX archive.  Below is a
program I have not tested but you might find useful.  Unfortunately I don't
remember where I got this.

Mark Probert
probert@aviary.gm.hac.com




Here is a program that "`unpacks` IBM PC-format Adobe PostScript fonts
into a downloadable form" on UNIX systems.

Input is *___.PFB files from Adobe distribution diskettes; output is
fonts that are ready to be downloaded.

Usage: unfont [ -v ] [ files ]

	-v	Prints execution information on the standard error.

Example usage (unpacks IBM PC version of Adobe's Palatino Roman):

	unfont POR_____.PFB > PalatinoR.down


-- 
Jim Ingram	          uunet!h-three!jimi | jimi%h-three@uunet.uu.net
h-three Systems Corporation   P.O. Box 12557 RTP NC 27709   919 549 8334

__________________________________CUT_HERE______________________________________
/*
 * NOTICE
 *
 * Copyright 1988, 1989 by h-three Systems Corporation.
 *
 * Permission is hereby granted for this software's free reproduction
 * and modification for non-commercial purposes, provided that this
 * notice is retained. Commercial enterprises may give away copies
 * as part of their products provided that they do so without charge,
 * that they retain this notice, and that they acknowledge the source
 * of the software.
 *
 *	PostScript is a registered trademark of Adobe Systems Incorporated.
 *	IBM is a registered trademark of International Business Machines
 *	  Corporation.
 *
 *	h-three Systems Corporation
 *	100 Park Drive Suite 204/ P.O. Box 12557
 *	Research Triangle Park, NC  27709
 */

#ifdef NOWHAT
static char *sccsid = "%W% - %E%";
#endif

/*
 * unfont.c
 *
 * usage: unfont [ -v ] [ files ]
 *	-v 	Prints execution information on the standard error.
 *
 * Unpacks IBM PC-format PostScript fonts into a downloadable form.
 *
 */

char *USAGE = "\
usage: unfont [ -? ] [ -v ]  [files ]\n\
	-?	Prints this message.\n\
	-v 	Prints execution information on the standard error.\n\
";

#include <stdio.h>
#include <fcntl.h>
#include <ctype.h>
#include <varargs.h>

#define OK	0
#define FAILURE (-1)
#define Failed(x)	((x) == FAILURE)
#define TRUE	1
#define FALSE	0
typedef char bool;
#define STREQ(a,b)	(strcmp(a,b) == 0)

FILE *fp;

/*
 * used to convert nibbles (n0 is least sig) to ascii-hex
 */

#define N0(c)	    hexbyt[((c) & 0x000f)]
#define N1(c)	    N0((c) >> 4)

char hexbyt[] = "0123456789ABCDEF";

/*
 * vars controlled by command line options
 */

bool verbose = FALSE;			/* be verbose */

extern char *optarg;			/* getopt(3) control vars */
extern int optind;
extern int errno;

char *infile;

char *progname;				/* for error() */

char *strchr(), *strrchr();
long stol(), getparm();

int mygetc();
void dounfont();
long getcount();
void bintohex();

main(argc, argv)
int argc;
char **argv;
{
    register int c;
    bool showusage = FALSE;			/* usage error? */

    /*
     * figure out invocation leaf-name
     */

    if ((progname = strrchr(argv[0], '/')) == (char *) NULL)
	progname = argv[0];
    else
	progname++;

    argv[0] = progname;				/* for getopt err reporting */

    /*
     *	Check options and arguments.
     */

    progname = argv[0];
    while ((c = getopt(argc, argv, "v")) != EOF)
	switch (c)
	{
	    case 'v':				/* toggle verbose */
		verbose = ! verbose;
		break;

	    case '?':
		showusage = TRUE;
	}

    if (showusage)
    {
	(void) fprintf(stderr, "%s", USAGE);
	exit(1);
    }

/* unfont stuff		*/

    if (argv[optind])
    {
        for ( ; argv[optind]; optind++)
	{
	    if (!(fp = fopen(argv[optind], "r"))) {
		error(0, "can't open input file '%s'", argv[optind]);	
		continue;
	    }

	    infile = argv[optind];
	    dounfont();
	    close(fp);
	}
    }
    else
    {
	infile = "<stdin>";
	fp = stdin;
        dounfont();
    }
    exit(0);
}

long getcount();

void 
dounfont()
{
    register int c; 
    register int ch;
             long count;
    register int i;

    for (;;)
    {
	if ((c = mygetc()) != 0x80) {
		error(0, "not a proper font data segment '%s'", infile);
		error(0, "foobar char is 0x%x", c);
		exit(1);
	}
	c = mygetc();
	switch (c) {
	case 1:		
		/* get count, output count bytes to stdout	*/
		count = getcount();
		if (verbose)
		    fprintf(stderr, "case1 count is %ld\n", count);
		for (i=0; i<count; i++)
    			putchar(mygetc());
		break;
	case 2:		
		/* get count, convert count bytes to hex, output	*/
		/* to stdout						*/
		count = getcount();
		if (verbose)
		    fprintf(stderr, "case2 count is %ld\n", count);
		bintohex(count);
		break;
	case 3:		
		/* reached EOF; next file, please 			*/
		if (verbose)
		    fprintf(stderr, "logical eof encountered\n");
		return;

	default:
		error(0, "not a valid segment type '%s'", infile);	
		return;
	}
    }
}

/* 
 * getc for error-checking	
 */

int
mygetc()
{
	int ch;
    	if ((ch = getc(fp)) == -1) {
	    error(-1, "unexpected eof on input in '%s'", infile);
	    exit(1);
	}
    	return(ch);
}

/*
 * get count of bytes from segment header
 */

long
getcount()
{
	int i;
	long count = 0;

    	for (i=0; i<4; i++)
       		count += ((long) mygetc()) << (i * 8);
	return(count);
}

/* 
 * convert binary to ASCII hex and write it to stdout
 */

void
bintohex(count)
long count;
{
	int ch;
	long i;

	for (i=0; i<count; i++) {
	        if ((i % 30) == 0)
		    putchar('\n');
   		ch = mygetc();
    		putchar(N1(ch));
    		putchar(N0(ch));
	}
}

/* end of unfont stuff

/*
 * error(errn, arglist)
 *	report an error to stderr using printf(3) conventions.
 *	Any output is preceded by '<progname>: '
 *	If 'errn' is non-zero, it is assumed to be an 'errno' and its
 *	associated error message is appended to the output.
 */

/*VARARGS*/
error(errn, va_alist)
int errn;
va_dcl
{
    va_list arglist;
    register char *format;
    extern char *sys_errlist[];
    extern int sys_nerr;
    extern int errno;

    if (errn == -1)			    /* use errno if -1 */
	errn = errno;

    va_start(arglist);
    format = va_arg(arglist, char *);
    (void) fprintf(stderr, "%s: ", progname);
    (void) vfprintf(stderr, format, arglist);
    va_end(arglist);

    if (errn)
	if ((errn > 0) && (errn <= sys_nerr))
	    (void) fprintf(stderr, " (%s)\n", sys_errlist[errn]);
	else
	    (void) fprintf(stderr, " (unknown errno=%d)\n", errn);
    else
	(void) fprintf(stderr, "\n");
}

------------------------------ End of File ----------------------------

paul@frcs.UUCP (Paul Nash) (09/26/90)

A while back (like last week) I wrote:
>A while back I wrote:

>>There is a Mac program called unAdobe which will convert the Mac
>>format into a standard ASCII file, which you could then send from
>>any computer (UNIX, PCs, etc.)

>Now I have but one problem -- I need to get hold of a copy of unAdobe
>and a Mac.

I have had many (well, at least one :-)) requests for unAdobe if I
managed to get hold of it. Well, I did! The thanks goes to Robert
Elliott (yet again!) for sending me a copy, which arrived as I sent 
the request :-). I have tried to mail it to everyone who asked for 
a copy, but just in case I missed someone, here goes:

  From: Robert C Elliott <olsa99!ddsw1!uunet!uiucuxc!uiucuxa!rce10845>

(This file must be converted with BinHex 4.0)
:$R9Z3@4[BQ8J+'C[ER3T!%&38%a+5e4&)3!!!!!!!!!GlQb9!!!!!!%!!!!G5!!
!(%J!!!#Q!!!!!$X$p`"3"%%%"N0KEQ0PE!!!!!!!(33Q!#d&")J(G@j"C'pLC3)
!!!""8&"-5NY845!!!!!!!!!!!!!&@`!!39"36%T,9%8J!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!#H8bp"!!!!!!!!(Hil"0!!633'5'PNC'9Z!!!!!!#M!3!!Y3&3"!C
$B@jMC@`!!!!!!#F!k!!l!9Z!!!!!!!!!4!%!!&B"8!3&4@TPBh3!!!!!!!"G!3!
!E`&3"!9%FQPfC3!!!!!!!#F!$!#j!1B!!!!!!!!!*`$P!,N!pJ!!!!!!!!"m!2`
!I3&8J!!!!!!CD!!)!!&19[rS6R&1F5"Z!!`3%'!!!64J!!&1)#i!#&@!,8$rl&9
22bhm3NKZrq`J,J!-9)![!%kk%PSlAra'B!!"*N*Yr9BJ,J!-9)!Y3!!-)#i!#&@
!,8!!#&P2,bi!#(!#,`"1ZJbB6VS9GLeIrqJ[,[rS6VS@[LmZrqK1ZKC#,bi!$#"
ZrqJ[%#mZ!!K1ZJJk,bi!#(!#,`"1ZJaL,9m!##"ZrqJY8!!-5Ui!#'m!!'"`8#e
!rqa`8,#Z!!K[!!!),@i!#2rX98mr,Ia#5'lrl#mZ!!a1ZK'k1erm4P922bhm3NK
Yr%T"lIa))!K5J#m!6VS4RMYIr%C`80#Z!!`Y3!!-F,$3VJ!),8!!#'#D,blrk%k
k&E3[,[rS6VS8cQ!!!%3EI!!"r%9J!!!k2bhm3NKYr&!r,Ia16VS'fKYm!!(m4@!
!!#")J!a!!!CN&Y"!-$X!"Nll!!,q[2l!rZMrb[r8rmT1AL"I8%p1d%j@rXj1F8j
a)'i!#%2Zr["`2b,B8FMrr$mZ!!bSLNKZ!!p)E[l32c`!!8kk$RiGE[l[rXj`!"!
ZrXir!+L)98p)E[l`U)``2!'3!*!!AdM!JI`!!Mm!2bi!%+L65'lqm+L%6PiJAdr
[!!T1d%j@rXj1F8ja)'i!#%2Zr["`2b,B8FMrr$mZ!!bSLNKZ!!p)E[l32c`!!8k
k$K3GE[l[rXj`!"!ZrXir!+L)2bi!%$mZ!"+SNdKZr[#SK%jH)&p2l`!-6Y"19[r
L6R&1F6em!%Erk$em!$,rkMem!5,rl$em!F,rlPP23UG)E[rS5(S$(Kmm!!%r2!!
$F2m[!%)R3UHT%beIrq3[,[rNU(-r2!!S(A`!!rrLF!!3,[rL2`!r2!!B5(S#h%k
krYSr2!"'(A`!!IrLF!!3,[rL2`!r2!!-5(S#NNkkrV`r2!"9(A`!!IrLF!!3,[r
L2`!r2!!+5(S#6NkkrTir2!"c3LlriR!!%#lriMm!2c`!$%Kk!JC1Z[k#2c`!JN)
Zrq*`!"!Zrq)r!$mm!!a)HJ(!6VVqCMmm!*XGI!!"rq*`!"!Zrq)r!$mm!!a)HJ'
D6VVq5$mm!+p#,[rLF!!3,[rL2`!r2!!*5(S"5%kkrL`r2!#j3LlriR!!%#lriMm
!2c`!#8Kk!0a1Z[i32c`!c6mm!%BGI!!"rq*`!"!Zrq)r!$mm!!P)HJ#X6VVq@$m
m!-dr2!#-3LlriR!!%#lriMm!2c`!#8Kk!)"1Z[ii2c`!c6mm!0)GI!!"rq*`!"!
Zrq)r!$mm!!P)HJ"16VVq&Mmm!-dr2!%L3LlriR!!%#lriMm!2c`!#8Kk!#*1Z[h
f98qTG"!I#J!!!8S!C`!!"'$Z,blrj+N86Pj1G3Y2GA4`GA3JCQPXC3j6C@0[EQ3
JC'PKE'pR1KB+5@j`GA3JCQPXC4B04QPbFh3JC'PKE'pR1Np8D'8J68P88N8J3fp
bF'pbBA4TEfiJBA0cG@eP)'j[)(*PFh"[ER0TBQPXDA4j)'C[FL"dD'8JGA0P)'p
Q)(4SDA-JBA"`E'PMBA4TEfiZ0&4SDA-JBA"`E'PMBA4TEfiJDA-JEQpd)'C[FL"
cB@aP,#"QC@9X)'CbC@8JG'mJBfp`H5i@"bSJ)#SJ)#SSBQPZBA*j)'C[FQeKG#"
TER4[)'&Z)%&63dP*)'C[FQeKG#"QD@aP,KBU9'KTFb"KF("XD@0KG'P[EL"eER"
KBfYc)'%JCQpZG#"TEL""BQpLC5Gc&L4AFQPdG'9Z)'*j)%TPFR*j)%YPEh9RD#"
KEQ3J9'9N)%9NC5i@+N0[F(PbD@GSG##T)$%j1$JJBRNJ9'KP)%e*9&*&)%0[FR"
[FQ&dD@pZ,KB+G@j"C'pLC5iZ,KB!%N)R6VS&bNj@rr"1ZJFq3Hhq)Lm)U'kSrUN
5U6#Tc%+RUAZS8(!"+d$m5MYm!!hm5%kkr)4)EIa35'hm6Nkk!f4+,Ia3C`!!Y&9
25'hm8$mYr%ir2!!"UF3lAra'$'hrrra'C`!!KNKYr&")EIa#6VS"'%)Yr%8lI!(
dr93`,Ie88N!l32e8@8m[2&"28e3r,Ie8UD!VAre35Uhp8'F!!$3[,Ie36VS4&#m
Yr9"1ZK#B)'hp8#m3@8m[,Ie36VS2[NkkqFJ[,Ie36VS3KLmYr9#TSdUYr9"A`%3
!J#hm48S!CjSr,Ia#6VS"FNKYr&")EIa16VS#VQ!!rdK1ANkk"KC19[kL6R&1F6e
m!&$rlMem!$Irl#mZrqa)HJ"X5'lqSL"Z!!`[#%Kk!&3r2!!#6VS+IPK25'lqSN+
R5'lrSNkk%T)3,[qL#J!!!8S!C`!!$#"Z!!a#%'!!!"`JEJ!-2c`!rdKZrk`[#%k
k#EBJEJ!)-+lrU%jH)&p36dl3##jeEN&NEf*P&J!56PEpl%ja6R%JEJ!-3qlqm(!
r)YK4b2rm2c`!rdKZr[")E[h`6VS*FNKZrI")E[hZ6VVr4NSZrI"Q!!!'B!!!M&9
25'lpm$mZrHiJEJ!),`K1ZJak29rpl%TZrHaQ!!!'B!!!D!aZrpApl'B!!#496dK
ZrI!r,[hZ,ca+5e4&,ca849K86VS-!MeIrHaJ!!!F$'lrcrhXCJ!!%P92)'i!#$m
36VS-p$eIrHa+E[hXCJ!!'P925'lpm$mZrHiJEJ!),`K1ZJ`)29rpl%jH)&p36dl
36PErkNja6R&96cmZ!!K)E[rX6VS-)$eIrqT96cmZ!!J[,[rX6VS-IMeIrqT96cm
Z!!K1ZJb529rrkNjH)&p86dl36PEqj%ja6R%JEJ!+3qlqm(!r)YK4b2rm98p)E[l
`2bi!#%KZrZa1ZJZ3!$eIrZj96cmZrZa)E[lS6VS-"$eIrZjC6bmZrZK1ZJf#,9r
qj#mZrZ41ZJl+,blqj%kk$Nj96cmZrZa)E[lS)'lqj#m36VS+#$eIrZj96cmZrZa
1ZJ`'29rqlP922bi!$NKZrZJJE[lN,a"1ZJRQ29rqlLmZrZ41ZJi5,blqj%kk$5a
1AL"I8%p1d%j@!!")ja!J)'i!%#*Z!!`J,J!)4IS!,")B0M`!!HNC&!%#3J!2%[)
J!&(,rr*6J'EQ60m%#%jH)&rIr!!!!!a1d$!a-M-d06Bh1$P"3N0%48C19[q56R&
1F6em!&$rlMem!$Irl#em6&G'6[q5,blrl%Kk!&"#Tcmm!!&)E[q53UG)E[qL6VS
3#K!Zrk)+!!!"5J"R!!!-)'i!$%)3B!!!(#"Z!!`r2!$r5'lrV#m)6VS((L"Z!!J
`V[qS6PiJAe"26Y!!%JC!q%#Tb5"251FB!#B1+!KK"NcI!"K1G5m,*#hrXQB%*Pp
1G5C#Ym0L",I%BJBN+`!!B1T1ZJ&)5LX!"QF33IS"F$#V!"*"qJ&J6VS""#3V!!"
1ZJ!F5S*Ja#m!)![!Z!-D*fhrXJ!!+d$rXL!I6R8[!5),`VJ$'N2Yrl)J%@F3X)&
R"#*!B23J3#+3!#)I6R8`223fUFPK#QF#6R8`223hUFP)jd#!)#hrXQF3)J[#Z!-
DX)&R$L"!)""QpNcI!3*`!%je60m"!R!"6R8[#%r[rmj#V`!-,dJ!%N*[!"C#E`!
D3HX!&Lp)!"`J6k!!0fm!'!!%6qm!-L"I5N"R'Ja!rp9Q"(!"6R8-32rTCJ$qmNS
V!"&R!2lUF!"1G5m)6qrrcN+[!!`[5!!53Qm!&N*[!"SJ6k!)6qm!-L"I5N"R$!a
!rp"Q!2kkF!&1GA!!6R8[#%r[rmj#V`!-,dJ!%N*[!"C#E`!D)%qJ#8r[!$)JAdT
!C`K+,IqUC`$qKNje5LX!%@BL6qrrcN+[!!`rD`!%!"JJ6k!"6qm!-NT!C`K+,Iq
UC`$qA%je#8a68&4PEA!!!!3a,M*"!&0Yrq!lI!!#rpj#EIrB3UhrXN*YrkSlI$!
`rkK1ZJ"!6VS!@%kk!+"1ZJ%16VS"%La0*Pp+(fFNGJ!f,3!Ji8Y)EIiLU'kSrUN
5U6#Tc%+RUAXJ6j($S#e1ZJ%L6Y0K4QF+Da!lI2rjrka1G6YmrrIrV%je3QhrV%j
eB5TR%'XF1hcrprqZ1hcrq2q`6R8lI2rjrkilI2rkrl"1G8*Yrkj#EIq`6R831!)
(CKB31!+4DJ4`!%je!J!!$e-!C[4`rdjeF!&1G8IYqL"#+`!(#1X!!3!(&h`!!J!
481X!$P(V!!C3k`!-8HX!$8+V!!JhI!!#!"3AI!!0!""1Z[fQ4qhhrN)V!!F)k`!
!!!FAI!!"!"&3k`!18HX!"P(V!!a4k`!03UX!#$Gm!!)!&"Gm!!d!%%kkr@j1G6(
m!!d+5Nje3UhrT%je81hrUL!Yrl*Q#N+Yrl*4lIqUUI3Q3%kkrQK++`!'Ca""q[k
3!$#V!"*"q[k!6VVq*#!V!!"JdNSi!SjU+L"i!6"$q!%8)!L3!*&d$,##C4BL85(
)!43LJ%)4)RJ#UL+))),4U3!-6R@JBdje"$%Z-N%!51I!`#![!"3L,`!B,fm!%!!
8B3j)l`!"!"K-h`-$@%p1G8MR-!!N!%K#aF%Q!8K$am$@3NK$3N2#`0D")!0-h`!
-6R9)jm$!)Lm!&'G#)#m!'#p[!"!!&'%k,d%!'%cI!`0B6dje51I!`#)[!"4R)#!
[!"KK(NU!DJ63V`!8,d!!'#p[!"!!&%cI!`0B6djeF!#"`%MR2J!U!'S#4)!X!@S
#4)%N!#B"3S"#JAJIij,MN!$MLE#$E353!)05J90%E1j+K@S#4)#lKQS#4)&-h`"
m6R8%-5ib33![##m!)'m!$(!!)-!J`#$!)-!J`#$!)-!J`#!I)&mZRdje51I!J#"
[!""`!#$!)-!J`#$!)-!J`#$!)-!JE`!3-#m!&()IjNL53$![!"3#3!!(!I!3!%c
I!3-[9`!'A%p1G8MRm)!JE`!BF!!J`#$!)-!J`#$!)-!J`#$!)'m!'(3I-#m!(1C
)P%"b(c![!"lQ5**!-!*J"P$`!!"53,""ErB`,`!H!N!!"hEri5[(-"!!F!Fb,`!
F!N%!"j!!3AEri#[(-#!!60m"$bpA!!K36dje51IJJ#"[!"4b(c![!"VQ5**!F!"
J#%S`!!"Q8&*!X%&Yp(!(0#m!'J*#!!H3!%*drq!U4J)3-"!!`!*Q-()I-#m!'1C
)NN!`!@!'5M!!!'BF8N!-3!!IEr)`,`!B!N!!"h6ri5T'!K!`%!$!!NcI!3G!jbp
[!!)!#N6I8%p1G8MR`)!JE`!3-#m!&()IjNL53$![!"3#3!!(,fm!$!!5!6!3!%c
I!30F6dje51I!`#"[!"3LE`!BFJFJ'B'B8FRrqNcI!`-[9`!)8%p1G8MR`-!JE`!
8)Qm!'()()"R"Q&(*rrT-h`-$,eF!#&"26R9)jm$!)'m!&#*[!"Kb"b!C4S$"Q&(
*rrK-h`-$,eF!#&"26R9)jq$!-#m!'#"[!"SLE`!H,fm!&!!Hd%!`1`!'6[X!!J!
-!!`!!!!!!"i!,R!(XiK@b2rm60m$"dr[!!T1GA!()KJN'B+#XS*@b2rfB1C`"b)
B*"Q%JE5"9XMrpQ$@51I!`$)[!"3JE`!@)NK`!#,!)X!L`#,!)X!L`#,!)X!LE`!
D8d&R(R!IN!""iNP"m!!!-0P4bIrm60m$!bpA!!T2l`!+6R84@3!IB1a)jq$!)Qm
!'#"[!"`[E`!8!"a`!"!B0!!5'E)!C!)8!90#E3Lc#&E+rraQ!V)!60m$"e#26R8
[#L*[!!JNE`!--#m!%$3!%KUb!Q3#&!%5`Q!#%YT4b[rmX!%NAb"I6qm!#Nl351I
!J#"[!")[E`!-!"*`!"!3-Lm!%&0"8d"P!T!!38cI!30FMdje,`SJE`!)F!!3'()
!)Qm!$(3!&"Q`3Qd@*%K5390#E4#c#PE+rraR#&*)8d"JhR)!*&mJAe"22S&1d$!
[!!4$l`!'-J$P5G,")&%LPdMR!1"b!&*)B"SNBA3!&"V5!Q3-P!&6!R!!F[pJ!K$
D8FVrr&()rq4-h`F!%)%Z59*")&G1d#3I-"pX!R!!-KpZ$%4"8N'3!%&X!R!!FJ%
JAb*A,`*d!"33d-&53T4"E!*d!,"#E`)`!K,!B!)5f&()rra1G8cI!3-L9dMR`%"
`!"!3%YK4b2rm*"m`(f`#F!!b(fi-4%&53C!!3@`#F!"b!5"I,`*d!"33P%&53Qm
BX%*[!M!#N4#830$"3r!!!'!#%0P4b[rm6R8J(c)I5%%b2!$r)PmJE`!%G!!8%4$
C8FVrr#*I)&GJ"%cI!`-[!%MR'$"i!(!!%"Pd!"330J$@3VC"E`3f!AMr%)0)38T
"EJ*b!90"XN*[!M)#8N&&m$!"4r!3!63,*NU@`*4,4%*Y"K8M8FVrr%A`%!#@39*
$YN"["MB!B!)8f9(,rra54%cI$"K1G9("B!*3`8j@rmj"l[r1)@i!#!!J-@i!%!!
B)Qi!$#&4!#4#D!!X3UJ!,NS"CJ5J!Q!#S!-p3!!5)Qi!$#+S!#K1AL*Ihr`!!!!
+6Y&19[r!3Hlr`#&Z!"!!%M&Z!"3!&N*S!"bJ"ce!!"BLEJ!--UJ!&L!S!$$JJ1+
!`1J!2Z1!iB!LEJ!))S"1AL*Ihr`!!!!16Y&19[r!3Hlr`#&Z!!`!%U!828!!%#*
Z!!JbU!!@6PiLAe#26Y&19[r!3Hlr`#&Z!!S!%M&Z!!J!&U!928!!$NjH)PpFMdl
46PEr`%(Zrm!aEJ!)!"BKEJ!+!"+J%ce!!!j1AL*IA)p1d8j@rl""l[q`)@i!%J!
5-@i!%!!@3LJ!'U!)5N"Q&N*S!"bJ$#!)3qJ!)#,Z!!JLVJ!-S!dp3!!@6PiLApr
m!!!!$Nl46PErcN(ZrmiKEJ!1!")aEJ!-!"C#+!!D3LJ!'d+S!"bJ!#*Z!!JbU!!
B28!!%NjH)&rIr!!!!!T1d%j@rmj"l[r1-@i!$!!BS"Jp3!!1)Qi!##+S!#j1AL*
IA)p1d8j@rmj"l[r1-@i!$J!B-@i!$!!X)@i!#!!ZS%3p3!!36PiLAe#26Y&19[r
13HlrcM&Z!!`!'+!428!!$L*Z!!JLU!!F6PiLAeb26Y&19[r13HlrcM&Z!!`!'#&
Z!!J!(+!528!!$NjH)PpFMdl46PErcN(ZrmiaEJ!)!"LJ!6e!!!T1AL"I9)p1d%j
@rl""l[q`)@i!$J!5-@i!$!!@3LJ!'N*S!"bJ$$e!!"*"k!!J)Qi!#$!m!"#J,Nj
H)PrIr!!!!!T1d8j@rl""l[q`)@i!$J!5-@i!$!!@3LJ!'N*S!"bJ$%2S!#!JEJ!
)-$`!%+!Z3HlrX+!028!!%NjH)PrIr!!!!!T1d8j@rmj"l[r1)@i!$J!5-@i!$!!
@3LJ!'L&Z!!J!(+!,28!!%NjH)PrIr!!!!!T1d8j@rmj"l[r1)@i!#J!5-@i!#!!
@3LJ!'U!*28!!$NjH)PpFMdl4S#a1qJ'F)PmJAk"A6[S"N!!LAb"2S"RHr!!16[S
"JL*I)&qJ,8lk!ALJ0Nlk!A5K'Lp)!!41qJ&U)PmJAk!E6[S"ALpi!UB!"%lk!9`
[H!+U!!41qJ&5)PmJ(k%L,SK1qJ%q)PmJAk!M6[S"0#*I)&qJ*5k!DJC#Pdlk!54
1qJ%H)PmJ(b"IS#41qJ%8)PmJAk%Q,SK1qJ%))PmJAk%S,SK1qJ$k)PmJ(b"IS#G
1qJ$`)PmJ(k%H,SK1qJ$N)PmJAk!I6[S!fL*I)&qJ)5k!DJC#Pdlk!-T1qJ$%)Pm
J(b"IS#"1qJ#k)PmJAk&),SK1qJ#ZS"`[3!!%6[S!V#*IS4dL##"I))%ZJ%lk!*)
LAb!IS%`ZJ%lk!)BLAb!IS%"1qJ"q)PmJ(k"06[S!G#*I)&qJ+dlk!'SLAb"IS#P
1qJ"J)PmJAk!U6[S!9L*I)&qJ58lk!%`LAb"IS%T1qJ"#)PmJAk",6[S!1#pi!bJ
!"%je)KmJ(b*I)&qJ,L*"6[S!)#pi!3J!"%lk!"irH!)J!!41G5pi!6!!"%lk!!a
`!#m*-F!#)%jeF!"JpNcI!`![#%MR(ciJ%F#i!aTQ"R#66[S"DLK*#"3!"fF'-$c
rLf$Z,(J"'#CZ!!!L%F+i!aSL39'*)LN!!-+i!aSZ!9'(F!$6`E2,C!!"0%ST!!"
R%'S!!5SLD3!%dmj+%@X!!4iL$b"i!UU5U!!!F2mN2!!!"!#bJQd!!3B%3J#!NS)
)J3!!Rm'Hr!!5+Nm[33!))&445#pS!!!!!#!8`,J$'Lp!!!`I9!!36VS!hNS5CL`
L+J!!)!&4J*!!Kf8JC`J-J!!!!!aP&L"8)NV6`5!(Nm#4VJ!-S#iJ6+!VB(Cm!%k
k!1C1ZJ%S6VS!S#)U!!!J,3!%3Hd!%L*+dm'6`0b!NDi!$+!Z5SGR!!"+)!Q3!)T
R'L)!8B'5Kf81C`J-J3!!!!aP"#"8B+BP3!!!60%!-#01!!3M4J!!%h`!3!!!,`P
1ZJ#'6VS!b%kk!%!LAdM4!$"JQ&'*8Di!$#!*N!#+C`3P3!!!*%NNl3!!)%b4cL6
)+)SBV`!3F!$Il`!)h[`!%NcII2Ja`!)J6R8J&'F+`,J$'L"!88KJ"%(Z!$3L+!!
!`VJ$'NSS!!"R$'S8)QJ!"0215K&V#L4)dF'abfAHB!Dal3!-Br"1G5!Y!!L`Kfd
#)!G$l3!5)&64aj(!RS!V3!!%)J#J,L"-)!GQ"+!V6R8J8&&)&#J!!&#!)8!!!"&
#!!$4`#&"!!$6VJ!-6R8J2!#!!!#J6%jeG!%JAcm#,`LYkR3$6[Vrp(3#6[VrlR3
%6[Vrk!!!!#!!!!!`!!!)!J!!!"!!!!!J!%"1l3!U6R%&GMmm!!'Tm!!!!3$rrri
!J!!$!)!!!S#2ri*!J!!#),rriK#!!!))JIrQ")!!#J+IrK2rJ!!J#B2q3!Q!!)!
*[q%!#B!#!JQ(p!B*J!J+#Em3%JQ!)#)*Rd"q#B#!!!QG!!!*JJ!!#E3(rJQ)#!)
*N!!4iJQJ)!)*`%2k#B#!!JRr!!2jJ!!!!Irrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrr`!!!3!!rri!!Irr!!1!!i!(!!(!$J1"i"`(`r!i$ZHiF"j
h(1!q1Jl!IK`(`2i1!m(q4`2$rQ1$arja`mrqB12(rN4c`ri1im(q(m2!rMq$`(j
r!m#qIJ2KhR`(Fmji$Mq'F"`I!q!i$J(!F!F!J1!$J!(!!IrrJ!$rr`!!!!!!!!!
!!!"`!!"rrrriIrrrq(rrrrKrrrriIrrrq(rrrrKrrrriIrrrq2rrrrMrrrrirrr
rq(rrrrKrrrriIrrrq(rrrrKrrrriIrrrq(rrrrKrrrriIrrrq(rrrrKrrrriIrr
rq(rrrrKrrrriIrrrq(rrrrKrrrri!!!!!!!!!!!!!!!!!!!!*%T,9%8!!!!"580
1)`!"!!!"!!!"!3&'8N9'!!%!!!%!!!%"!3!!!'jYG@j"C'pLC5`JBRNJ9'9N)%9
NC5!Q)%TPFR*j)%YPEh9RD#!S6@&TEQaj)%TPFR*j+5iJ3fp`HA*TCfKd)+NJBRN
J9'KP)%e*9&*&)%0[FR"[FQ&dD@pZ,L""E'`JFQPRD(4c)(*PFf9bGQ9N,J!!!!G
"8&"-!!!!!!!!"e4&@&3!!3!!!!%!!!!G5!!!(%J!!!#Q!!)#3!,b!!!!(!#Q!!4
$6d4&!!%!+NP$6L-!!3"#3Nj%6!!!!&T+5e4&!!!!CNC548B!!3"b!!(rrc3!!!!
!!MD'!!$rrb!!'@`!!!!!!3(rr`!!'C!!!!)fJJ%!rrm!!"U8!!!!!!%!rrm!!"Z
B!!)fIJ!!rrm!!"[!!!!!!!%!rrm!!"`b!!)fHJ%"rrm!!"`p!!!!!!8r:

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
 Paul Nash			 Flagship Wide Area Networks (Pty) Ltd
  paul@frcs.UUCP			  ...!ddsw1!proxima!frcs!paul

woody@chinacat.Unicom.COM (Woody Baker @ Eagle Signal) (09/26/90)

Now all we need, is a routine that will take MAC screen fonts, and
build Windows screen fonts out of them.  Does anyone know where such
a beastie may be found?

Cheers
Woody