| # | 
 | # Shell library - for building devutf tables. | 
 | # | 
 |  | 
 | RESOLUTION=720 | 
 | UNITWIDTH=10 | 
 |  | 
 | OCTALESCAPES=${OCTALESCAPES:-160}	# <= code means add \0ddd names | 
 | DOWNLOADVECTOR=FALSE			# TRUE can mean incomplete tables | 
 |  | 
 | # | 
 | # BuiltinTables returns command lines that generate PostScript programs | 
 | # for building a typesetter description file and font width tables for | 
 | # a relatively standard collection of fonts. Use awk to select a command | 
 | # line or modify an existing command to build a width table for a new | 
 | # font. | 
 | # | 
 |  | 
 | BuiltinTables() { | 
 | 	cat <<-'//End of BuiltinTables' | 
 | 		Proportional	R	Times-Roman | 
 | 		Proportional	I	Times-Italic | 
 | 		Proportional	B	Times-Bold | 
 | 		Proportional	BI	Times-BoldItalic | 
 | 		Proportional	AB	AvantGarde-Demi | 
 | 		Proportional	AI	AvantGarde-BookOblique | 
 | 		Proportional	AR	AvantGarde-Book | 
 | 		Proportional	AX	AvantGarde-DemiOblique | 
 | 		Proportional	H	Helvetica | 
 | 		Proportional	HB	Helvetica-Bold | 
 | 		Proportional	HI	Helvetica-Oblique | 
 | 		Proportional	HX	Helvetica-BoldOblique | 
 | 		Proportional	Hb	Helvetica-Narrow-Bold | 
 | 		Proportional	Hi	Helvetica-Narrow-Oblique | 
 | 		Proportional	Hr	Helvetica-Narrow | 
 | 		Proportional	Hx	Helvetica-Narrow-BoldOblique | 
 | 		Proportional	KB	Bookman-Demi | 
 | 		Proportional	KI	Bookman-LightItalic | 
 | 		Proportional	KR	Bookman-Light | 
 | 		Proportional	KX	Bookman-DemiItalic | 
 | 		Proportional	NB	NewCenturySchlbk-Bold | 
 | 		Proportional	NI	NewCenturySchlbk-Italic | 
 | 		Proportional	NR	NewCenturySchlbk-Roman | 
 | 		Proportional	NX	NewCenturySchlbk-BoldItalic | 
 | 		Proportional	PA	Palatino-Roman | 
 | 		Proportional	PB	Palatino-Bold | 
 | 		Proportional	PI	Palatino-Italic | 
 | 		Proportional	PX	Palatino-BoldItalic | 
 | 		Proportional	ZI	ZapfChancery-MediumItalic | 
 | 		FixedWidth	C	Courier | 
 | 		FixedWidth	CB	Courier-Bold | 
 | 		FixedWidth	CI	Courier-Oblique | 
 | 		FixedWidth	CO	Courier | 
 | 		FixedWidth	CW	Courier | 
 | 		FixedWidth	CX	Courier-BoldOblique | 
 | 		Dingbats	ZD	ZapfDingbats | 
 | 		Greek		GR	Symbol | 
 | 		Symbol		S	Symbol | 
 | 		Special		S1	Times-Roman | 
 | 		Description	DESC	--- | 
 | 	//End of BuiltinTables | 
 | } | 
 |  | 
 | # | 
 | # AllTables prints the complete list of builtin font names. | 
 | # | 
 |  | 
 | AllTables() { | 
 | 	BuiltinTables | awk '{print $2}' | 
 | } | 
 |  | 
 | # | 
 | # Charset functions generate keyword/value pairs (as PostScript objects) | 
 | # that describe the character set available in a font. The keyword is a | 
 | # PostScript string that represents troff's name for the character. The | 
 | # value is usually the literal name (i.e. begins with a /) assigned to | 
 | # the character in the PostScript font. The value can also be an integer | 
 | # or a PostScript string. An integer value is used as an index in the | 
 | # current font's Encoding array. A string value is returned to the host | 
 | # unchanged when the entry for the character is constructed. Entries that | 
 | # have (") as their value are synonyms for the preceeding character. | 
 | # | 
 | # The 18 characters missing from ROM resident fonts on older printers are | 
 | # flagged with the PostScript comment "% missing". | 
 | # | 
 |  | 
 | StandardCharset() { | 
 | 	cat <<-'//End of StandardCharset' | 
 | 		(!)	/exclam | 
 | 		(")	/quotedbl | 
 | 		(dq)	(")			% synonym | 
 | 		(#)	/numbersign | 
 | 		($)	/dollar | 
 | 		(%)	/percent | 
 | 		(&)	/ampersand | 
 | 		(')	/quoteright | 
 | 		(\()	/parenleft | 
 | 		(\))	/parenright | 
 | 		(*)	/asterisk | 
 | 		(+)	/plus | 
 | 		(,)	/comma | 
 | 		(-)	/hyphen			% changed from minus by request | 
 | 		(.)	/period | 
 | 		(/)	/slash | 
 | 		(0)	/zero | 
 | 		(1)	/one | 
 | 		(2)	/two | 
 | 		(3)	/three | 
 | 		(4)	/four | 
 | 		(5)	/five | 
 | 		(6)	/six | 
 | 		(7)	/seven | 
 | 		(8)	/eight | 
 | 		(9)	/nine | 
 | 		(:)	/colon | 
 | 		(;)	/semicolon | 
 | 		(<)	/less | 
 | 		(=)	/equal | 
 | 		(>)	/greater | 
 | 		(?)	/question | 
 | 		(@)	/at | 
 | 		(A)	/A | 
 | 		(B)	/B | 
 | 		(C)	/C | 
 | 		(D)	/D | 
 | 		(E)	/E | 
 | 		(F)	/F | 
 | 		(G)	/G | 
 | 		(H)	/H | 
 | 		(I)	/I | 
 | 		(J)	/J | 
 | 		(K)	/K | 
 | 		(L)	/L | 
 | 		(M)	/M | 
 | 		(N)	/N | 
 | 		(O)	/O | 
 | 		(P)	/P | 
 | 		(Q)	/Q | 
 | 		(R)	/R | 
 | 		(S)	/S | 
 | 		(T)	/T | 
 | 		(U)	/U | 
 | 		(V)	/V | 
 | 		(W)	/W | 
 | 		(X)	/X | 
 | 		(Y)	/Y | 
 | 		(Z)	/Z | 
 | 		([)	/bracketleft | 
 | 		(\\)	/backslash | 
 | 		(bs)	(")			% synonym | 
 | 		(])	/bracketright | 
 | 		(^)	/asciicircum | 
 | 		(_)	/underscore | 
 | 		(`)	/quoteleft | 
 | 		(a)	/a | 
 | 		(b)	/b | 
 | 		(c)	/c | 
 | 		(d)	/d | 
 | 		(e)	/e | 
 | 		(f)	/f | 
 | 		(g)	/g | 
 | 		(h)	/h | 
 | 		(i)	/i | 
 | 		(j)	/j | 
 | 		(k)	/k | 
 | 		(l)	/l | 
 | 		(m)	/m | 
 | 		(n)	/n | 
 | 		(o)	/o | 
 | 		(p)	/p | 
 | 		(q)	/q | 
 | 		(r)	/r | 
 | 		(s)	/s | 
 | 		(t)	/t | 
 | 		(u)	/u | 
 | 		(v)	/v | 
 | 		(w)	/w | 
 | 		(x)	/x | 
 | 		(y)	/y | 
 | 		(z)	/z | 
 | 		({)	/braceleft | 
 | 		(|)	/bar | 
 | 		(})	/braceright | 
 | 		(~)	/asciitilde | 
 | 		(\\`)	/grave			% devpost character | 
 | 		(ga)	(")			% synonym | 
 | 		(!!)	/exclamdown | 
 | 		(c|)	/cent | 
 | 		(ct)	(")			% devpost synonym | 
 | 		(L-)	/sterling | 
 | 		(ps)	(")			% devpost synonym | 
 | 		(xo)	/currency | 
 | 		(cr)	(")			% devpost synonym | 
 | 		(Y-)	/yen | 
 | 		(yn)	(")			% devpost synonym | 
 | 		(||)	/brokenbar		% missing | 
 | 		(so)	/section | 
 | 		(sc)	(")			% devpost synonym | 
 | 		("")	/dieresis | 
 | 		(:a)	(")			% devpost synonym | 
 | 		(co)	/copyright | 
 | 		(a_)	/ordfeminine | 
 | 		(<<)	/guillemotleft | 
 | 		(-,)	/logicalnot | 
 | 		(hy)	/hyphen | 
 | 		(--)	/minus | 
 | 		(ro)	/registered | 
 | 		(rg)	(")			% devpost synonym | 
 | 		(-^)	/macron | 
 | 		(-a)	(")			% devpost synonym | 
 | 		(0^)	/degree			% missing | 
 | 		(+-)	/plusminus		% missing | 
 | 		(2^)	/twosuperior		% missing | 
 | 		(3^)	/threesuperior		% missing | 
 | 		(\\')	/acute | 
 | 		(aa)	(")			% devpost synonym | 
 | 		(/u)	/mu			% missing | 
 | 		(P!)	/paragraph | 
 | 		(pg)	(")			% devpost synonym | 
 | 		(.^)	/periodcentered | 
 | 		(,,)	/cedilla | 
 | 		(,a)	(")			% devpost synonym | 
 | 		(1^)	/onesuperior		% missing | 
 | 		(o_)	/ordmasculine | 
 | 		(>>)	/guillemotright | 
 | 		(14)	/onequarter		% missing | 
 | 		(12)	/onehalf		% missing | 
 | 		(34)	/threequarters		% missing | 
 | 		(??)	/questiondown | 
 | 		(A`)	/Agrave | 
 | 		(A')	/Aacute | 
 | 		(A^)	/Acircumflex | 
 | 		(A~)	/Atilde | 
 | 		(A")	/Adieresis | 
 | 		(A*)	/Aring | 
 | 		(AE)	/AE | 
 | 		(C,)	/Ccedilla | 
 | 		(E`)	/Egrave | 
 | 		(E')	/Eacute | 
 | 		(E^)	/Ecircumflex | 
 | 		(E")	/Edieresis | 
 | 		(I`)	/Igrave | 
 | 		(I')	/Iacute | 
 | 		(I^)	/Icircumflex | 
 | 		(I")	/Idieresis | 
 | 		(D-)	/Eth			% missing | 
 | 		(N~)	/Ntilde | 
 | 		(O`)	/Ograve | 
 | 		(O')	/Oacute | 
 | 		(O^)	/Ocircumflex | 
 | 		(O~)	/Otilde | 
 | 		(O")	/Odieresis | 
 | 		(xx)	/multiply		% missing | 
 | 		(O/)	/Oslash | 
 | 		(U`)	/Ugrave | 
 | 		(U')	/Uacute | 
 | 		(U^)	/Ucircumflex | 
 | 		(U")	/Udieresis | 
 | 		(Y')	/Yacute			% missing | 
 | 		(TH)	/Thorn			% missing | 
 | 		(ss)	/germandbls | 
 | 		(a`)	/agrave | 
 | 		(a')	/aacute | 
 | 		(a^)	/acircumflex | 
 | 		(a~)	/atilde | 
 | 		(a")	/adieresis | 
 | 		(a*)	/aring | 
 | 		(ae)	/ae | 
 | 		(c,)	/ccedilla | 
 | 		(e`)	/egrave | 
 | 		(e')	/eacute | 
 | 		(e^)	/ecircumflex | 
 | 		(e")	/edieresis | 
 | 		(i`)	/igrave | 
 | 		(i')	/iacute | 
 | 		(i^)	/icircumflex | 
 | 		(i")	/idieresis | 
 | 		(d-)	/eth			% missing | 
 | 		(n~)	/ntilde | 
 | 		(o`)	/ograve | 
 | 		(o')	/oacute | 
 | 		(o^)	/ocircumflex | 
 | 		(o~)	/otilde | 
 | 		(o")	/odieresis | 
 | 		(-:)	/divide			% missing | 
 | 		(o/)	/oslash | 
 | 		(u`)	/ugrave | 
 | 		(u')	/uacute | 
 | 		(u^)	/ucircumflex | 
 | 		(u")	/udieresis | 
 | 		(y')	/yacute			% missing | 
 | 		(th)	/thorn			% missing | 
 | 		(y")	/ydieresis | 
 | 		(^a)	/circumflex		% devpost accent | 
 | 		(~a)	/tilde			% devpost accent | 
 | 		(Ua)	/breve			% devpost accent | 
 | 		(.a)	/dotaccent		% devpost accent | 
 | 		(oa)	/ring			% devpost accent | 
 | 		("a)	/hungarumlaut		% devpost accent | 
 | 		(Ca)	/ogonek			% devpost accent | 
 | 		(va)	/caron			% devpost accent | 
 | 	//End of StandardCharset | 
 | } | 
 |  | 
 | # | 
 | # DingbatsCharset guarantees changes in StandardCharset don't show up in ZD. | 
 | # | 
 |  | 
 | DingbatsCharset() { | 
 | 	cat <<-'//End of DingbatsCharset' | 
 | 		(!)	/exclam | 
 | 		(")	/quotedbl | 
 | 		(#)	/numbersign | 
 | 		($)	/dollar | 
 | 		(%)	/percent | 
 | 		(&)	/ampersand | 
 | 		(')	/quoteright | 
 | 		(\()	/parenleft | 
 | 		(\))	/parenright | 
 | 		(*)	/asterisk | 
 | 		(+)	/plus | 
 | 		(,)	/comma | 
 | 		(-)	/minus		% also hyphen in devpost | 
 | 		(.)	/period | 
 | 		(/)	/slash | 
 | 		(0)	/zero | 
 | 		(1)	/one | 
 | 		(2)	/two | 
 | 		(3)	/three | 
 | 		(4)	/four | 
 | 		(5)	/five | 
 | 		(6)	/six | 
 | 		(7)	/seven | 
 | 		(8)	/eight | 
 | 		(9)	/nine | 
 | 		(:)	/colon | 
 | 		(;)	/semicolon | 
 | 		(<)	/less | 
 | 		(=)	/equal | 
 | 		(>)	/greater | 
 | 		(?)	/question | 
 | 		(@)	/at | 
 | 		(A)	/A | 
 | 		(B)	/B | 
 | 		(C)	/C | 
 | 		(D)	/D | 
 | 		(E)	/E | 
 | 		(F)	/F | 
 | 		(G)	/G | 
 | 		(H)	/H | 
 | 		(I)	/I | 
 | 		(J)	/J | 
 | 		(K)	/K | 
 | 		(L)	/L | 
 | 		(M)	/M | 
 | 		(N)	/N | 
 | 		(O)	/O | 
 | 		(P)	/P | 
 | 		(Q)	/Q | 
 | 		(R)	/R | 
 | 		(S)	/S | 
 | 		(T)	/T | 
 | 		(U)	/U | 
 | 		(V)	/V | 
 | 		(W)	/W | 
 | 		(X)	/X | 
 | 		(Y)	/Y | 
 | 		(Z)	/Z | 
 | 		([)	/bracketleft | 
 | 		(\\)	/backslash | 
 | 		(])	/bracketright | 
 | 		(^)	/asciicircum | 
 | 		(_)	/underscore | 
 | 		(`)	/quoteleft | 
 | 		(a)	/a | 
 | 		(b)	/b | 
 | 		(c)	/c | 
 | 		(d)	/d | 
 | 		(e)	/e | 
 | 		(f)	/f | 
 | 		(g)	/g | 
 | 		(h)	/h | 
 | 		(i)	/i | 
 | 		(j)	/j | 
 | 		(k)	/k | 
 | 		(l)	/l | 
 | 		(m)	/m | 
 | 		(n)	/n | 
 | 		(o)	/o | 
 | 		(p)	/p | 
 | 		(q)	/q | 
 | 		(r)	/r | 
 | 		(s)	/s | 
 | 		(t)	/t | 
 | 		(u)	/u | 
 | 		(v)	/v | 
 | 		(w)	/w | 
 | 		(x)	/x | 
 | 		(y)	/y | 
 | 		(z)	/z | 
 | 		({)	/braceleft | 
 | 		(|)	/bar | 
 | 		(})	/braceright | 
 | 		(~)	/asciitilde | 
 | 		(\\`)	/grave			% devpost character | 
 | 		(!!)	/exclamdown | 
 | 		(c|)	/cent | 
 | 		(L-)	/sterling | 
 | 		(xo)	/currency | 
 | 		(Y-)	/yen | 
 | 		(||)	/brokenbar		% missing | 
 | 		(so)	/section | 
 | 		("")	/dieresis | 
 | 		(co)	/copyright | 
 | 		(a_)	/ordfeminine | 
 | 		(<<)	/guillemotleft | 
 | 		(-,)	/logicalnot | 
 | 		(hy)	/hyphen | 
 | 		(ro)	/registered | 
 | 		(-^)	/macron | 
 | 		(0^)	/degree			% missing | 
 | 		(+-)	/plusminus		% missing | 
 | 		(2^)	/twosuperior		% missing | 
 | 		(3^)	/threesuperior		% missing | 
 | 		(\\')	/acute | 
 | 		(/u)	/mu			% missing | 
 | 		(P!)	/paragraph | 
 | 		(.^)	/periodcentered | 
 | 		(,,)	/cedilla | 
 | 		(1^)	/onesuperior		% missing | 
 | 		(o_)	/ordmasculine | 
 | 		(>>)	/guillemotright | 
 | 		(14)	/onequarter		% missing | 
 | 		(12)	/onehalf		% missing | 
 | 		(34)	/threequarters		% missing | 
 | 		(??)	/questiondown | 
 | 		(A`)	/Agrave | 
 | 		(A')	/Aacute | 
 | 		(A^)	/Acircumflex | 
 | 		(A~)	/Atilde | 
 | 		(A")	/Adieresis | 
 | 		(A*)	/Aring | 
 | 		(AE)	/AE | 
 | 		(C,)	/Ccedilla | 
 | 		(E`)	/Egrave | 
 | 		(E')	/Eacute | 
 | 		(E^)	/Ecircumflex | 
 | 		(E")	/Edieresis | 
 | 		(I`)	/Igrave | 
 | 		(I')	/Iacute | 
 | 		(I^)	/Icircumflex | 
 | 		(I")	/Idieresis | 
 | 		(D-)	/Eth			% missing | 
 | 		(N~)	/Ntilde | 
 | 		(O`)	/Ograve | 
 | 		(O')	/Oacute | 
 | 		(O^)	/Ocircumflex | 
 | 		(O~)	/Otilde | 
 | 		(O")	/Odieresis | 
 | 		(xx)	/multiply		% missing | 
 | 		(O/)	/Oslash | 
 | 		(U`)	/Ugrave | 
 | 		(U')	/Uacute | 
 | 		(U^)	/Ucircumflex | 
 | 		(U")	/Udieresis | 
 | 		(Y')	/Yacute			% missing | 
 | 		(TH)	/Thorn			% missing | 
 | 		(ss)	/germandbls | 
 | 		(a`)	/agrave | 
 | 		(a')	/aacute | 
 | 		(a^)	/acircumflex | 
 | 		(a~)	/atilde | 
 | 		(a")	/adieresis | 
 | 		(a*)	/aring | 
 | 		(ae)	/ae | 
 | 		(c,)	/ccedilla | 
 | 		(e`)	/egrave | 
 | 		(e')	/eacute | 
 | 		(e^)	/ecircumflex | 
 | 		(e")	/edieresis | 
 | 		(i`)	/igrave | 
 | 		(i')	/iacute | 
 | 		(i^)	/icircumflex | 
 | 		(i")	/idieresis | 
 | 		(d-)	/eth			% missing | 
 | 		(n~)	/ntilde | 
 | 		(o`)	/ograve | 
 | 		(o')	/oacute | 
 | 		(o^)	/ocircumflex | 
 | 		(o~)	/otilde | 
 | 		(o")	/odieresis | 
 | 		(-:)	/divide			% missing | 
 | 		(o/)	/oslash | 
 | 		(u`)	/ugrave | 
 | 		(u')	/uacute | 
 | 		(u^)	/ucircumflex | 
 | 		(u")	/udieresis | 
 | 		(y')	/yacute			% missing | 
 | 		(th)	/thorn			% missing | 
 | 		(y")	/ydieresis | 
 | 	//End of DingbatsCharset | 
 | } | 
 |  | 
 | SymbolCharset() { | 
 | 	cat <<-'//End of SymbolCharset' | 
 | 		(---)		/exclam | 
 | 		(fa)		/universal | 
 | 		(---)		/numbersign | 
 | 		(te)		/existential | 
 | 		(---)		/percent | 
 | 		(---)		/ampersand | 
 | 		(st)		/suchthat | 
 | 		(---)		/parenleft | 
 | 		(---)		/parenright | 
 | 		(**)		/asteriskmath | 
 | 		(pl)		/plus | 
 | 		(---)		/comma | 
 | 		(mi)		/minus | 
 | 		(---)		/period | 
 | 		(sl)		/slash | 
 | 		(---)		/zero | 
 | 		(---)		/one | 
 | 		(---)		/two | 
 | 		(---)		/three | 
 | 		(---)		/four | 
 | 		(---)		/five | 
 | 		(---)		/six | 
 | 		(---)		/seven | 
 | 		(---)		/eight | 
 | 		(---)		/nine | 
 | 		(---)		/colon | 
 | 		(---)		/semicolon | 
 | 		(<)		/less | 
 | 		(eq)		/equal | 
 | 		(>)		/greater | 
 | 		(---)		/question | 
 | 		(cg)		/congruent | 
 | 		(*A)		/Alpha | 
 | 		(\244x)		(") | 
 | 		(*B)		/Beta | 
 | 		(\244y)		(") | 
 | 		(*X)		/Chi | 
 | 		(\244\257)	(") | 
 | 		(*D)		/Delta | 
 | 		(\244{)		(") | 
 | 		(*E)		/Epsilon | 
 | 		(\244|)		(") | 
 | 		(*F)		/Phi | 
 | 		(\244\256)	(") | 
 | 		(*G)		/Gamma | 
 | 		(\244z)		(") | 
 | 		(*Y)		/Eta | 
 | 		(\244~)		(") | 
 | 		(*I)		/Iota | 
 | 		(\244\241)	(") | 
 | 		(---)		/theta1 | 
 | 		(\244\331)	(") | 
 | 		(*K)		/Kappa | 
 | 		(\244\242)	(") | 
 | 		(*L)		/Lambda | 
 | 		(\244\243)	(") | 
 | 		(*M)		/Mu | 
 | 		(\244\244)	(") | 
 | 		(*N)		/Nu | 
 | 		(\244\245)	(") | 
 | 		(*O)		/Omicron | 
 | 		(\244\247)	(") | 
 | 		(*P)		/Pi | 
 | 		(\244\250)	(") | 
 | 		(*H)		/Theta | 
 | 		(\244\240)	(") | 
 | 		(*R)		/Rho | 
 | 		(\244\251)	(") | 
 | 		(*S)		/Sigma | 
 | 		(\244\253)	(") | 
 | 		(*T)		/Tau | 
 | 		(\244\254)	(") | 
 | 		(*U)		/Upsilon | 
 | 		(\244\255)	(") | 
 | 		(ts)		/sigma1 | 
 | 		(\244\312)	(") | 
 | 		(*W)		/Omega | 
 | 		(\244\261)	(") | 
 | 		(*C)		/Xi | 
 | 		(\244\246)	(") | 
 | 		(*Q)		/Psi | 
 | 		(\244\260)	(") | 
 | 		(*Z)		/Zeta | 
 | 		(\244})		(") | 
 | 		(---)		/bracketleft | 
 | 		(tf)		/therefore | 
 | 		(---)		/bracketright | 
 | 		(pp)		/perpendicular | 
 | 		(ul)		/underscore | 
 | 		(_)		(")			% synonym | 
 | 		(rn)		/radicalex | 
 | 		(*a)		/alpha | 
 | 		(\244\271)	(") | 
 | 		(*b)		/beta | 
 | 		(\244\272)	(") | 
 | 		(*x)		/chi | 
 | 		(\244\317)	(") | 
 | 		(*d)		/delta | 
 | 		(\244\274)	(") | 
 | 		(*e)		/epsilon | 
 | 		(\244\275)	(") | 
 | 		(*f)		/phi | 
 | 		(\244\316)	(") | 
 | 		(*g)		/gamma | 
 | 		(\244\273)	(") | 
 | 		(*y)		/eta | 
 | 		(\244\277)	(") | 
 | 		(*i)		/iota | 
 | 		(\244\301)	(") | 
 | 		(---)		/phi1 | 
 | 		(\244\335)	(") | 
 | 		(*k)		/kappa | 
 | 		(\244\302)	(") | 
 | 		(*l)		/lambda | 
 | 		(\244\303)	(") | 
 | 		(*m)		/mu | 
 | 		(\244\304)	(") | 
 | 		(*n)		/nu | 
 | 		(\244\305)	(") | 
 | 		(*o)		/omicron | 
 | 		(\244\307)	(") | 
 | 		(*p)		/pi | 
 | 		(\244\310)	(") | 
 | 		(*h)		/theta | 
 | 		(\244\300)	(") | 
 | 		(*r)		/rho | 
 | 		(\244\311)	(") | 
 | 		(*s)		/sigma | 
 | 		(\244\313)	(") | 
 | 		(*t)		/tau | 
 | 		(\244\314)	(") | 
 | 		(*u)		/upsilon | 
 | 		(\244\315)	(") | 
 | 		(---)		/omega1 | 
 | 		(\244\336)	(") | 
 | 		(*w)		/omega | 
 | 		(\244\321)	(") | 
 | 		(*c)		/xi | 
 | 		(\244\306)	(") | 
 | 		(*q)		/psi | 
 | 		(\244\320)	(") | 
 | 		(*z)		/zeta | 
 | 		(\244\276)	(") | 
 | 		(---)		/braceleft | 
 | 		(or)		/bar | 
 | 		(---)		/braceright | 
 | 		(ap)		/similar | 
 | 		(---)		/Upsilon1 | 
 | 		(fm)		/minute | 
 | 		(<=)		/lessequal | 
 | 		(fr)		/fraction		% devpost character | 
 | 		(if)		/infinity | 
 | 		(fn)		/florin			% devpost character | 
 | 		(---)		/club | 
 | 		(---)		/diamond | 
 | 		(---)		/heart | 
 | 		(---)		/spade | 
 | 		(ab)		/arrowboth | 
 | 		(<-)		/arrowleft | 
 | 		(ua)		/arrowup | 
 | 		(->)		/arrowright | 
 | 		(da)		/arrowdown | 
 | 		(de)		/degree | 
 | 		(+-)		/plusminus | 
 | 		(---)		/second | 
 | 		(>=)		/greaterequal | 
 | 		(mu)		/multiply | 
 | 		(pt)		/proportional | 
 | 		(pd)		/partialdiff | 
 | 		(bu)		/bullet | 
 | 		(di)		/divide | 
 | 		(!=)		/notequal | 
 | 		(==)		/equivalence | 
 | 		(~~)		/approxequal | 
 | 		(el)		/ellipsis | 
 | 		(av)		/arrowvertex | 
 | 		(ah)		/arrowhorizex | 
 | 		(CR)		/carriagereturn | 
 | 		(af)		/aleph | 
 | 		(If)		/Ifraktur | 
 | 		(Rf)		/Rfraktur | 
 | 		(ws)		/weierstrass | 
 | 		(Ox)		/circlemultiply | 
 | 		(O+)		/circleplus | 
 | 		(es)		/emptyset | 
 | 		(ca)		/intersection | 
 | 		(cu)		/union | 
 | 		(sp)		/propersuperset | 
 | 		(ip)		/reflexsuperset | 
 | 		(!b)		/notsubset | 
 | 		(sb)		/propersubset | 
 | 		(ib)		/reflexsubset | 
 | 		(mo)		/element | 
 | 		(!m)		/notelement | 
 | 		(an)		/angle | 
 | 		(gr)		/gradient | 
 | 		(rg)		/registerserif | 
 | 		(co)		/copyrightserif | 
 | 		(tm)		/trademarkserif | 
 | 		(---)		/product | 
 | 		(sr)		/radical | 
 | 		(c.)		/dotmath | 
 | 		(no)		/logicalnot | 
 | 		(l&)		/logicaland | 
 | 		(l|)		/logicalor | 
 | 		(---)		/arrowdblboth | 
 | 		(---)		/arrowdblleft | 
 | 		(---)		/arrowdblup | 
 | 		(---)		/arrowdblright | 
 | 		(---)		/arrowdbldown | 
 | 		(lz)		/lozenge | 
 | 		(b<)		/angleleft | 
 | 		(RG)		/registersans | 
 | 		(CO)		/copyrightsans | 
 | 		(TM)		/trademarksans | 
 | 		(---)		/summation | 
 | 		(LT)		/parenlefttp | 
 | 		(br)		/parenleftex | 
 | 		(LX)		(")			% synonym | 
 | 		(LB)		/parenleftbt | 
 | 		(lc)		/bracketlefttp | 
 | 		(lx)		/bracketleftex | 
 | 		(lf)		/bracketleftbt | 
 | 		(lt)		/bracelefttp | 
 | 		(lk)		/braceleftmid | 
 | 		(lb)		/braceleftbt | 
 | 		(bv)		/braceex | 
 | 		(|)		(")			% synonym | 
 | 		(b>)		/angleright | 
 | 		(is)		/integral | 
 | 		(---)		/integraltp | 
 | 		(---)		/integralex | 
 | 		(---)		/integralbt | 
 | 		(RT)		/parenrighttp | 
 | 		(RX)		/parenrightex | 
 | 		(RB)		/parenrightbt | 
 | 		(rc)		/bracketrighttp | 
 | 		(rx)		/bracketrightex | 
 | 		(rf)		/bracketrightbt | 
 | 		(rt)		/bracerighttp | 
 | 		(rk)		/bracerightmid | 
 | 		(rb)		/bracerightbt | 
 | 		(~=)		(55	0	1)	% charlib | 
 | 	//End of SymbolCharset | 
 | } | 
 |  | 
 | SpecialCharset() { | 
 | 	cat <<-'//End of SpecialCharset' | 
 | 		(ru)	/underscore | 
 | 		('')	/quotedblright		% devpost character | 
 | 		(``)	/quotedblleft		% devpost character | 
 | 		(dg)	/dagger			% devpost character | 
 | 		(dd)	/daggerdbl		% devpost character | 
 | 		(en)	/endash			% devpost character | 
 | 		(\\-)	(")			% synonym | 
 | 		(em)	/emdash | 
 | %		(ff)	(60	2	1)	% charlib | 
 | %		(Fi)	(84	2	1)	% charlib | 
 | %		(Fl)	(84	2	1)	% charlib | 
 | 		(14)	(75	2	1)	% charlib | 
 | 		(12)	(75	2	1)	% charlib | 
 | 		(34)	(75	2	1)	% charlib | 
 | 		(bx)	(50	2	1)	% charlib | 
 | 		(ob)	(38	2	1)	% charlib | 
 | 		(ci)	(75	0	1)	% charlib | 
 | 		(sq)	(50	2	1)	% charlib | 
 | 		(Sl)	(50	2	1)	% charlib | 
 | 		(L1)	(110	1	1)	% charlib | 
 | 		(LA)	(110	1	1)	% charlib | 
 | 		(LV)	(110	3	1)	% charlib | 
 | 		(LH)	(210	1	1)	% charlib | 
 | 		(lh)	(100	0	1)	% charlib | 
 | 		(rh)	(100	0	1)	% charlib | 
 | 		(lH)	(100	0	1)	% charlib | 
 | 		(rH)	(100	0	1)	% charlib | 
 | 		(PC)	(220	2	1)	% charlib | 
 | 		(DG)	(185	2	1)	% charlib | 
 | 	//End of SpecialCharset | 
 | } | 
 |  | 
 | # | 
 | # Latin1 ensures a font uses the ISOLatin1Encoding vector, although only | 
 | # text fonts should be re-encoded. Downloading the Encoding vector doesn't | 
 | # often make sense. No ISOLatin1Encoding array likely means ROM based fonts | 
 | # on your printer are incomplete. Type 1 fonts with a full Latin1 character | 
 | # set appeared sometime after Version 50.0. | 
 | # | 
 |  | 
 | Latin1() { | 
 | 	if [ "$DOWNLOADVECTOR" = TRUE ]; then | 
 | 		cat <<-'//End of ISOLatin1Encoding' | 
 | 			/ISOLatin1Encoding [ | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/space | 
 | 				/exclam | 
 | 				/quotedbl | 
 | 				/numbersign | 
 | 				/dollar | 
 | 				/percent | 
 | 				/ampersand | 
 | 				/quoteright | 
 | 				/parenleft | 
 | 				/parenright | 
 | 				/asterisk | 
 | 				/plus | 
 | 				/comma | 
 | 				/minus | 
 | 				/period | 
 | 				/slash | 
 | 				/zero | 
 | 				/one | 
 | 				/two | 
 | 				/three | 
 | 				/four | 
 | 				/five | 
 | 				/six | 
 | 				/seven | 
 | 				/eight | 
 | 				/nine | 
 | 				/colon | 
 | 				/semicolon | 
 | 				/less | 
 | 				/equal | 
 | 				/greater | 
 | 				/question | 
 | 				/at | 
 | 				/A | 
 | 				/B | 
 | 				/C | 
 | 				/D | 
 | 				/E | 
 | 				/F | 
 | 				/G | 
 | 				/H | 
 | 				/I | 
 | 				/J | 
 | 				/K | 
 | 				/L | 
 | 				/M | 
 | 				/N | 
 | 				/O | 
 | 				/P | 
 | 				/Q | 
 | 				/R | 
 | 				/S | 
 | 				/T | 
 | 				/U | 
 | 				/V | 
 | 				/W | 
 | 				/X | 
 | 				/Y | 
 | 				/Z | 
 | 				/bracketleft | 
 | 				/backslash | 
 | 				/bracketright | 
 | 				/asciicircum | 
 | 				/underscore | 
 | 				/quoteleft | 
 | 				/a | 
 | 				/b | 
 | 				/c | 
 | 				/d | 
 | 				/e | 
 | 				/f | 
 | 				/g | 
 | 				/h | 
 | 				/i | 
 | 				/j | 
 | 				/k | 
 | 				/l | 
 | 				/m | 
 | 				/n | 
 | 				/o | 
 | 				/p | 
 | 				/q | 
 | 				/r | 
 | 				/s | 
 | 				/t | 
 | 				/u | 
 | 				/v | 
 | 				/w | 
 | 				/x | 
 | 				/y | 
 | 				/z | 
 | 				/braceleft | 
 | 				/bar | 
 | 				/braceright | 
 | 				/asciitilde | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/.notdef | 
 | 				/dotlessi | 
 | 				/grave | 
 | 				/acute | 
 | 				/circumflex | 
 | 				/tilde | 
 | 				/macron | 
 | 				/breve | 
 | 				/dotaccent | 
 | 				/dieresis | 
 | 				/.notdef | 
 | 				/ring | 
 | 				/cedilla | 
 | 				/.notdef | 
 | 				/hungarumlaut | 
 | 				/ogonek | 
 | 				/caron | 
 | 				/space | 
 | 				/exclamdown | 
 | 				/cent | 
 | 				/sterling | 
 | 				/currency | 
 | 				/yen | 
 | 				/brokenbar | 
 | 				/section | 
 | 				/dieresis | 
 | 				/copyright | 
 | 				/ordfeminine | 
 | 				/guillemotleft | 
 | 				/logicalnot | 
 | 				/hyphen | 
 | 				/registered | 
 | 				/macron | 
 | 				/degree | 
 | 				/plusminus | 
 | 				/twosuperior | 
 | 				/threesuperior | 
 | 				/acute | 
 | 				/mu | 
 | 				/paragraph | 
 | 				/periodcentered | 
 | 				/cedilla | 
 | 				/onesuperior | 
 | 				/ordmasculine | 
 | 				/guillemotright | 
 | 				/onequarter | 
 | 				/onehalf | 
 | 				/threequarters | 
 | 				/questiondown | 
 | 				/Agrave | 
 | 				/Aacute | 
 | 				/Acircumflex | 
 | 				/Atilde | 
 | 				/Adieresis | 
 | 				/Aring | 
 | 				/AE | 
 | 				/Ccedilla | 
 | 				/Egrave | 
 | 				/Eacute | 
 | 				/Ecircumflex | 
 | 				/Edieresis | 
 | 				/Igrave | 
 | 				/Iacute | 
 | 				/Icircumflex | 
 | 				/Idieresis | 
 | 				/Eth | 
 | 				/Ntilde | 
 | 				/Ograve | 
 | 				/Oacute | 
 | 				/Ocircumflex | 
 | 				/Otilde | 
 | 				/Odieresis | 
 | 				/multiply | 
 | 				/Oslash | 
 | 				/Ugrave | 
 | 				/Uacute | 
 | 				/Ucircumflex | 
 | 				/Udieresis | 
 | 				/Yacute | 
 | 				/Thorn | 
 | 				/germandbls | 
 | 				/agrave | 
 | 				/aacute | 
 | 				/acircumflex | 
 | 				/atilde | 
 | 				/adieresis | 
 | 				/aring | 
 | 				/ae | 
 | 				/ccedilla | 
 | 				/egrave | 
 | 				/eacute | 
 | 				/ecircumflex | 
 | 				/edieresis | 
 | 				/igrave | 
 | 				/iacute | 
 | 				/icircumflex | 
 | 				/idieresis | 
 | 				/eth | 
 | 				/ntilde | 
 | 				/ograve | 
 | 				/oacute | 
 | 				/ocircumflex | 
 | 				/otilde | 
 | 				/odieresis | 
 | 				/divide | 
 | 				/oslash | 
 | 				/ugrave | 
 | 				/uacute | 
 | 				/ucircumflex | 
 | 				/udieresis | 
 | 				/yacute | 
 | 				/thorn | 
 | 				/ydieresis | 
 | 			] def | 
 | 		//End of ISOLatin1Encoding | 
 | 	fi | 
 |  | 
 | 	echo "ISOLatin1Encoding /$1 ReEncode" | 
 | } | 
 |  | 
 | # | 
 | # Generating functions output PostScript programs that build font width | 
 | # tables or a typesetter description file. Send the program to a printer | 
 | # and the complete table will come back on the serial port. All write on | 
 | # stdout and assume the prologue and other required PostScript files are | 
 | # all available. | 
 | # | 
 |  | 
 | Proportional() { | 
 | 	echo "/unitwidth $UNITWIDTH def" | 
 | 	echo "/resolution $RESOLUTION def" | 
 | 	echo "/octalescapes $OCTALESCAPES def" | 
 | 	echo "/charset [" | 
 | 		# Get <>_ and | from S. Use accents for ascii ^ and ~. | 
 | 		StandardCharset | awk ' | 
 | 			$1 == "(<)" && $2 == "/less" {$1 = "(---)"} | 
 | 			$1 == "(>)" && $2 == "/greater" {$1 = "(---)"} | 
 | 			$1 == "(_)" && $2 == "/underscore" {$1 = "(---)"} | 
 | 			$1 == "(|)" && $2 == "/bar" {$1 = "(---)"} | 
 | 			$1 == "(^)" && $2 == "/asciicircum" { | 
 | 				printf "(^)\t/circumflex\n" | 
 | 				$1 = "(---)" | 
 | 			} | 
 | 			$1 == "(~)" && $2 == "/asciitilde" { | 
 | 				printf "(~)\t/tilde\n" | 
 | 				$1 = "(---)" | 
 | 			} | 
 | 			{printf "%s\t%s\n", $1, $2} | 
 | 		' | 
 | 	echo "] def" | 
 |  | 
 | 	Latin1 $2 | 
 | 	echo "/$2 SelectFont" | 
 | 	echo "(opO) SetAscender" | 
 |  | 
 | 	echo "(name $1\\\\n) Print" | 
 | 	echo "(fontname $2\\\\n) Print" | 
 | 	echo "/$1 NamedInPrologue" | 
 | 	echo "(spacewidth ) Print 32 GetWidth Print (\n) Print" | 
 | 	echo "(charset\\\\n) Print" | 
 | 	echo "BuildFontCharset" | 
 | } | 
 |  | 
 | FixedWidth() { | 
 | 	echo "/unitwidth $UNITWIDTH def" | 
 | 	echo "/resolution $RESOLUTION def" | 
 | 	echo "/octalescapes $OCTALESCAPES def" | 
 | 	echo "/charset [" | 
 | 		StandardCharset | 
 | 	echo "] def" | 
 |  | 
 | 	Latin1 $2 | 
 | 	echo "/$2 SelectFont" | 
 | 	echo "(opO) SetAscender" | 
 |  | 
 | 	echo "(name $1\\\\n) Print" | 
 | 	echo "(fontname $2\\\\n) Print" | 
 | 	echo "/$1 NamedInPrologue" | 
 | 	echo "(spacewidth ) Print 32 GetWidth Print (\n) Print" | 
 | 	echo "(charset\\\\n) Print" | 
 | 	echo "BuildFontCharset" | 
 | } | 
 |  | 
 | Dingbats() { | 
 | 	echo "/unitwidth $UNITWIDTH def" | 
 | 	echo "/resolution $RESOLUTION def" | 
 | 	echo "/octalescapes $OCTALESCAPES def" | 
 | 	echo "/charset [" | 
 | 		DingbatsCharset | awk '$1 != "(---)" && $2 ~ /^\/[a-zA-Z]/ { | 
 | 			printf "%s\tISOLatin1Encoding %s GetCode\n", $1, $2 | 
 | 		}' | 
 | 	echo "] def" | 
 |  | 
 | 	echo "/$2 SelectFont" | 
 | 	echo "(   ) SetAscender" | 
 |  | 
 | 	echo "(name $1\\\\n) Print" | 
 | 	echo "(fontname $2\\\\n) Print" | 
 | 	echo "/$1 NamedInPrologue" | 
 | 	echo "(charset\\\\n) Print" | 
 | 	echo "BuildFontCharset" | 
 | } | 
 |  | 
 | Greek() { | 
 | 	echo "/unitwidth $UNITWIDTH def" | 
 | 	echo "/resolution $RESOLUTION def" | 
 | 	echo "/charset [" | 
 | 		SymbolCharset | awk ' | 
 | 			BEGIN {hit = -1} | 
 | 			$1 ~ /\(\*[a-zA-Z]\)/ {print; hit = NR} | 
 | 			$2 == "(\")" && hit == NR-1 {print; hit = NR} | 
 | 		' | 
 | 	echo "] def" | 
 |  | 
 | 	echo "/$2 SelectFont" | 
 | 	echo "(orO) SetAscender" | 
 |  | 
 | 	echo "(name $1\\\\n) Print" | 
 | 	echo "(fontname $2\\\\n) Print" | 
 | 	echo "/$1 NamedInPrologue" | 
 | 	echo "(spacewidth ) Print 32 GetWidth Print (\n) Print" | 
 | 	echo "(charset\\\\n) Print" | 
 | 	echo "BuildFontCharset" | 
 | } | 
 |  | 
 | Symbol() { | 
 | 	echo "/unitwidth $UNITWIDTH def" | 
 | 	echo "/resolution $RESOLUTION def" | 
 | 	echo "/charset [" | 
 | 		SymbolCharset | 
 | 	echo "] def" | 
 |  | 
 | 	echo "ChangeMetrics" | 
 | 	echo "/S SelectFont" | 
 | 	echo "(orO) SetAscender" | 
 |  | 
 | 	echo "(name $1\\\\n) Print" | 
 | 	echo "(fontname $2\\\\n) Print" | 
 | 	echo "/$1 NamedInPrologue" | 
 | 	echo "(special\\\\n) Print" | 
 | 	echo "(charset\\\\n) Print" | 
 | 	echo "BuildFontCharset" | 
 | } | 
 |  | 
 | Special() { | 
 | 	echo "/unitwidth $UNITWIDTH def" | 
 | 	echo "/resolution $RESOLUTION def" | 
 | 	echo "/charset [" | 
 | 		SpecialCharset | 
 | 	echo "] def" | 
 |  | 
 | 	echo "ChangeMetrics" | 
 | 	echo "/S1 SelectFont" | 
 |  | 
 | 	echo "(# Times-Roman special font\\\\n) Print" | 
 | 	echo "(name $1\\\\n) Print" | 
 | 	echo "(fontname $2\\\\n) Print" | 
 | 	echo "/$1 NamedInPrologue" | 
 | 	echo "(special\\\\n) Print" | 
 | 	echo "(charset\\\\n) Print" | 
 | 	echo "BuildFontCharset" | 
 | } | 
 |  | 
 | # | 
 | # The DESC file doesn't have to be built on a printer. It's only here for | 
 | # consistency. | 
 | # | 
 |  | 
 | Description() { | 
 | 	echo "/charset ["	# awk - so the stack doesn't overflow | 
 | 		StandardCharset | awk '$1 !~ /\(\\[0-9]/ {print $1}' | 
 | 		SymbolCharset | awk '$1 !~ /\(\\[0-9]/ {print $1}' | 
 | 		SpecialCharset | awk '$1 !~ /\(\\[0-9]/ {print $1}' | 
 | 	echo "] def" | 
 |  | 
 | 	cat <<-//DESC | 
 | 		(#Device Description - utf character set | 
 |  | 
 | 		PDL PostScript | 
 | 		Encoding Latin1 | 
 |  | 
 | 		fonts 10 R I B BI CW H HI HB S1 S | 
 | 		sizes 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 
 | 		23 24 25 26 27 28 29 30 31 32 33 34 35 36 38 40 42 44 46 | 
 | 		48 50 52 54 56 58 60 64 68 72 78 84 90 96 100 105 110 115 | 
 | 		120 125 130 135 140 145 150 155 160 0 | 
 | 		res $RESOLUTION | 
 | 		hor 1 | 
 | 		vert 1 | 
 | 		unitwidth $UNITWIDTH | 
 |  | 
 | 		) Print | 
 | 	//DESC | 
 | 	echo "(charset\\\\n) Print" | 
 | 	echo "BuildDescCharset" | 
 | 	echo "(\\\\n) Print" | 
 | } | 
 |  |