OXIESEC PANEL
- Current Dir:
/
/
usr
/
share
/
ghostscript
/
9.26
/
lib
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
01/31/2023 12:39:13 PM
rwxr-xr-x
📄
PDFA_def.ps
1.25 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
PDFX_def.ps
1.77 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
PM760p.upp
1.13 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
PM760pl.upp
1.1 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
PM820p.upp
1.12 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
PM820pl.upp
1.09 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
Stc670p.upp
1.13 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
Stc670pl.upp
1.1 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
Stc680p.upp
1.11 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
Stc680pl.upp
1.09 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
Stc740p.upp
1.01 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
Stc740pl.upp
1.09 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
Stc760p.upp
1.11 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
Stc760pl.upp
1.09 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
Stc777p.upp
1.11 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
Stc777pl.upp
1.09 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
Stp720p.upp
1.13 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
Stp720pl.upp
1.09 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
Stp870p.upp
1.11 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
Stp870pl.upp
1.09 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
acctest.ps
4.17 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
align.ps
2.11 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bj8.rpd
639 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
bj8gc12f.upp
1.5 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bj8hg12f.upp
1.5 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bj8oh06n.upp
1.48 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bj8pa06n.upp
1.49 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bj8pp12f.upp
1.51 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bj8ts06n.upp
1.49 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bjc6000a1.upp
1.62 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bjc6000b1.upp
1.62 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bjc610a0.upp
1.49 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bjc610a1.upp
1.48 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bjc610a2.upp
1.48 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bjc610a3.upp
1.49 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bjc610a4.upp
1.49 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bjc610a5.upp
1.48 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bjc610a6.upp
1.48 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bjc610a7.upp
1.48 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bjc610a8.upp
1.49 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bjc610b1.upp
1.48 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bjc610b2.upp
1.48 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bjc610b3.upp
1.49 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bjc610b4.upp
1.49 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bjc610b6.upp
1.48 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bjc610b7.upp
1.49 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
bjc610b8.upp
1.49 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
caption.ps
1.72 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
cbjc600.ppd
10.89 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
cbjc800.ppd
11.22 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
cdj550.upp
1.65 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
cdj690.upp
1.95 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
cdj690ec.upp
2.01 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
cid2code.ps
4.39 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
dmp_init.ps
7.08 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
dmp_site.ps
459 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
dnj750c.upp
2.74 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
dnj750m.upp
1.93 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
docie.ps
7.32 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
escp_24.src
350 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
font2pcl.ps
18.01 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
ghostpdf.ppd
25.04 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_ce_e.ps
2.17 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_il2_e.ps
2.57 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_kanji.ps
3.91 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_ksb_e.ps
3.07 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_l.xbm
1.9 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_l.xpm
2.69 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_l_m.xbm
1.91 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_lgo_e.ps
2.67 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_lgx_e.ps
1.72 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_m.xbm
945 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_m.xpm
1.4 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_m_m.xbm
955 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_s.xbm
594 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_s.xpm
957 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_s_m.xbm
604 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_t.xbm
345 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_t.xpm
605 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_t_m.xbm
355 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_wl1_e.ps
2.44 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_wl2_e.ps
2.44 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
gs_wl5_e.ps
2.45 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
gslp.ps
20.24 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
gsnup.ps
2.57 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
ht_ccsto.ps
222.8 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
image-qa.ps
71.34 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
jispaper.ps
784 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
landscap.ps
1.43 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
lines.ps
3.65 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
mkcidfm.ps
21.8 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
necp2x.upp
1.02 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
necp2x6.upp
1.04 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
pdf2dsc.ps
7.87 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
pf2afm.ps
14.94 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
pfbtopfa.ps
995 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
ppath.ps
1.78 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
pphs.ps
6.68 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
prfont.ps
7.04 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
printafm.ps
4.78 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
ps2ai.ps
21.78 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
ps2epsi.ps
8.34 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
ras1.upp
215 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
ras24.upp
219 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
ras3.upp
214 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
ras32.upp
196 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
ras4.upp
220 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
ras8m.upp
209 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
rollconv.ps
12.23 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
s400a1.upp
1.42 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
s400b1.upp
1.57 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
sharp.upp
1.89 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
sipixa6.upp
529 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
st640ih.upp
2.23 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
st640ihg.upp
1.47 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
st640p.upp
1.87 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
st640pg.upp
1.11 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
st640pl.upp
1.83 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
st640plg.upp
1.08 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc.upp
1.88 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc1520h.upp
2.1 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc2.upp
1.86 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc200_h.upp
1.8 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc2_h.upp
1.83 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc2s_h.upp
2.22 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc300.upp
2.09 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc300bl.upp
1.31 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc300bm.upp
1.4 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc500p.upp
1.86 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc500ph.upp
1.86 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc600ih.upp
2.23 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc600p.upp
1.12 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc600pl.upp
1.09 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc640p.upp
1.07 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc740ih.upp
2.07 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc800ih.upp
2.11 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc800p.upp
1.09 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc800pl.upp
1.07 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc_h.upp
1.87 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stc_l.upp
734 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
stcany.upp
673 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
stcany_h.upp
681 bytes
04/13/2023 01:09:22 PM
rw-r--r--
📄
stcinfo.ps
24.92 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stcolor.ps
4.95 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
stocht.ps
2.44 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
traceimg.ps
1.35 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
traceop.ps
2.51 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
uninfo.ps
5.85 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
viewcmyk.ps
1.94 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
viewgif.ps
5.27 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
viewjpeg.ps
5.56 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
viewmiff.ps
4.15 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
viewpbm.ps
10.04 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
viewpcx.ps
5.11 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
viewps2a.ps
1.11 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
winmaps.ps
3.52 KB
04/13/2023 01:09:22 PM
rw-r--r--
📄
zeroline.ps
2.26 KB
04/13/2023 01:09:22 PM
rw-r--r--
Editing: pf2afm.ps
Close
%! % This is a PostScript program for making an AFM file from % PFB / PFA and (optionally) PFM files. % % Written in BOP s.c., Gda\'nsk, Poland % e-mail contact: B.Jackowski@GUST.ORG.PL % version 0.5 (18 XII 1997) % version 0.55 (11 III 1998) -- unlimited number of chars in a font % version 1.00 (27 III 1998) -- scanning PFM subdirectory added, % code improved; version sent to LPD % version 1.01 (1 II 2000) -- message changed % Usage: % gs [-dNODISPLAY] -- pf2afm.ps disk_font_name % % The result is written to the file disk_font_name.afm, provided such % a file does not exist; otherwise program quits. % % The font can be either *.pfa or *.pfb; if no extension is supplied, % first disk_font_name.pfb is examined, then disk_font_name.pfa. % Moreover, if there is a *.pfm file in the same directory or in the % subdirectory PFM, i.e., disk_font_name.pfm or PFM/disk_font_name.pfm, % kern pairs from it are extracted, as well as additional font % parameters, usually absent from Type 1 fonts. % Tribute: % The program is based on James Clark's <jjc@jclark.uucp> printafm.ps % (with alterations by d.love@dl.ac.uk and L. Peter Deutsch) from % Ghostscript 5.10 distribution. /onechar 1 string def /edef {exch def} def /WinAnsiEncoding dup /Encoding findresource def % charnumber print-charname - % prints the name of the encoded character /print-charname { PFMCharSet 0 eq { WinAnsiEncoding } { PFBencoding } ifelse exch get =string cvs dup (.notdef) eq { /was.notdef true def } if print.to.ofi ( ) print.to.ofi } def /printquit {print flush quit} def % redirecting GS output to ``ofi'' file /eolch (\r\n) def /=only.to.ofi {ofi exch write=only} def % replaces GS's `=only' /print.to.ofi {ofi exch writestring} def % replaces `print' /=to.ofi { =only.to.ofi eolch print.to.ofi } def % replaces `=' % read and skip: byte, short, word, double and long /readb-p {currPFMfile read not {(Unexpected EOF\n) printquit} if} def /readw-p {readb-p readb-p 256 mul add} def /reads-p {readw-p dup 32768 ge {65536 sub} if} def /readd-p {readb-p readb-p readb-p readb-p 256 mul add 256 mul add 256 mul add} def /readl-p /readd-p load def % double word is, in fact, long integer in GS /skipb-p {readb-p pop} def /skipw-p {skipb-p skipb-p} def /skips-p /skipw-p load def /skipd-p {skipb-p skipb-p skipb-p skipb-p} def /skipl-p /skipd-p load def /skipa-p { {skipb-p} repeat} def % PFMfile readPFMheader - % defines currPFMfile, PFMExtMetricOffset, PFMPairKernTableOffset /readPFMheader { currPFMfile bytesavailable % --------------- % PFM MAIN HEADER % --------------- skipw-p % PFM: version readd-p % PFM: size (size is dword, not word as the documentation says) ne {(Wrong file size\n) printquit} if 60 skipa-p % PFM: copyright skipw-p % PFM: Type skipw-p % PFM: Points skipw-p % PFM: VertRes skipw-p % PFM: HorizRes skipw-p % PFM: Ascent skipw-p % PFM: InternalLeading skipw-p % PFM: ExternalLeading skipb-p % PFM: Italic skipb-p % PFM: Underline skipb-p % PFM: Stikeout skipw-p % PFM: Weight readb-p % PFM: CharSet /PFMCharSet edef skipw-p % PFM: PixWidth skipw-p % PFM: PixHeight skipb-p % PFM: PitchAndFamily skipw-p % PFM: AvgWidth skipw-p % PFM: MaxWidth skipb-p % PFM: FirstChar skipb-p % PFM: LastChar skipb-p % PFM: DefaultChar skipb-p % PFM: BreakChar skipw-p % PFM: WidthBytes skipd-p % PFM: Device skipd-p % PFM: Face skipd-p % PFM: BitsPointer skipd-p % PFM: BitsOffset % here we assume that it is a PostScript font, i.e., it always uses % the extended width table, therefore the normal width table is empty % ------------- % PFM EXTENSION % ------------- skipw-p % PFMEX: SizeFields readd-p % PFMEX: ExtMetricOffset /PFMExtMetricOffset edef skipd-p % PFMEX: ExtentTable skipd-p % PFMEX: OriginTable readd-p % PFMEX: PairKernTable /PFMPairKernTableOffset edef skipd-p % PFMEX: TrackKernTable skipd-p % PFMEX: DriverInfo skipd-p % PFMEX: Reserved } def % requires that currPFMfile, PFMExtMetricOffset are defined % readPFMExtMetric - % defines PFMNumberofKernPairs /readPFMExtMetric { currPFMfile PFMExtMetricOffset setfileposition skips-p % EXTT: Size skips-p % EXTT: PointSize skips-p % EXTT: Orientation skips-p % EXTT: MasterHeight skips-p % EXTT: MinScale skips-p % EXTT: MaxScale skips-p % EXTT: MasterUnit reads-p % EXTT: CapHeight /PFMCapHeight edef reads-p % EXTT: XHeight /PFMXHeight edef reads-p % EXTT: LowerCaseAscent /PFMLowerCaseAscent edef reads-p % EXTT: LowerCaseDescent neg /PFMLowerCaseDescent edef skips-p % EXTT: Slant skips-p % EXTT: SuperScript skips-p % EXTT: SubScript skips-p % EXTT: SuperScriptSize skips-p % EXTT: SubScriptSize skips-p % EXTT: UnderlineOffset skips-p % EXTT: UnderlineWidth skips-p % EXTT: DoubleUpperUnderlineOffset skips-p % EXTT: DoubleLowerUnderlineOffset skips-p % EXTT: DoubleUpperUnderlineWidth skips-p % EXTT: DoubleLowerUnderlineWidth skips-p % EXTT: StrikeOutOffset skips-p % EXTT: StrikeOutWidth readw-p % EXTT: KernPairs /PFMNumberofKernPairs edef skipw-p % EXTT: KernTracks } def % requires that currPFMfile, PFMPairKernTableOffset, PFMNumberofKernPairs are defined % readPFMExtMetric - % prints kern pairs table in the AFM format /readPFMKernPairs { currPFMfile () ne { PFMdict begin PFMPairKernTableOffset 0 ne { currPFMfile PFMPairKernTableOffset setfileposition readw-p % undocumented kern count (although all remaining structures are % explicitly preceded by their sizes); if it were a stable % feature, EXTTEXTMETRICS could be skipped PFMNumberofKernPairs % 2 copy = = ne { (Inconsistent number of kern pairs\n) printquit } if (StartKernData) =to.ofi (StartKernPairs ) print.to.ofi PFMNumberofKernPairs =to.ofi % --------- % MAIN LOOP % --------- /was.notdef false def PFMNumberofKernPairs { (KPX ) print.to.ofi readb-p % first char print-charname readb-p % second char print-charname reads-p % kern amount =to.ofi } repeat was.notdef { (.notdef character ocurred among kern pairs) = (you'd better check the resulting AFM file.) = } if (EndKernPairs) =to.ofi (EndKernData) =to.ofi } if end } if } def % alias (for ``compatibility'' with J. Clark): /printkernpairs /readPFMKernPairs load def % printcharmetrics - /printcharmetrics { (StartCharMetrics ) print.to.ofi /PFBencoding currfont /Encoding get dup length array copy def /PFBcharstrings currfont /CharStrings get def PFBcharstrings length PFBcharstrings /.notdef known { 1 sub } if =to.ofi currfont 1000 scalefont setfont % checking Encoding array and CharStrings dictionary for % the consistency of names /was.inconsitent false def 0 1 255 { dup PFBencoding exch get PFBcharstrings exch known { pop }{ % dup PFBencoding exch get = PFBencoding exch /.notdef put % fix Encoding array /was.inconsitent true def } ifelse } for was.inconsitent { (Encoding array contains name(s) absent from CharStrings dictionary) = } if % print metric data for each character in PFB encoding vector 0 1 255 { dup PFBencoding exch get dup /.notdef ne { exch dup printmetric }{ pop pop } ifelse } for % xPFBencoding contains an entry for each name in the original % encoding vector /xPFBencoding PFBcharstrings length dict def PFBencoding { xPFBencoding exch true put } forall /fontiter 0 def /TMPFontTemplate (TMP_FONT#000) def { % NewPFBencoding is the new encoding vector /NewPFBencoding 256 array def 0 1 255 { NewPFBencoding exch /.notdef put } for % fill up NewPFBencoding with names from CharStrings dictionary that % are not encoded so far /i 0 def PFBcharstrings { pop i 255 le { dup xPFBencoding exch known not { dup xPFBencoding exch true put NewPFBencoding i 3 -1 roll put /i i 1 add def }{ pop } ifelse }{ pop exit } ifelse } forall i 0 eq {exit} if % define a new font with NewPFBencoding as its encoding vector currfont maxlength dict /NewTMPfont edef currfont { exch dup dup /FID ne exch /Encoding ne and { exch NewTMPfont 3 1 roll put }{ pop pop } ifelse } forall % compute a unique name for a font to be registered /fontiter fontiter 1 add def TMPFontTemplate fontiter (000) cvs dup length TMPFontTemplate length exch sub exch putinterval /TMPFontName TMPFontTemplate cvn def NewTMPfont /FontName TMPFontName put NewTMPfont /Encoding NewPFBencoding put % make this new font the current font TMPFontName NewTMPfont definefont 1000 scalefont setfont % print metric data for each character in the newly created encoding vector 0 1 255 { dup NewPFBencoding exch get dup /.notdef ne { exch -1 printmetric }{ pop pop exit } ifelse } for i 255 lt {exit} if } loop (EndCharMetrics) =to.ofi } def % name actual_code normal_code printmetric - /printmetric { (C ) print.to.ofi =only.to.ofi ( ; WX ) print.to.ofi onechar 0 3 -1 roll put onechar stringwidth pop round cvi =only.to.ofi ( ; N ) print.to.ofi =only.to.ofi ( ; B ) print.to.ofi newpath 0 0 moveto onechar false charpath flattenpath pathbbox newpath round cvi /ury edef round cvi /urx edef round cvi /lly edef round cvi /llx edef ury lly eq {/ury 0 def /lly 0 def} if % normalize degenrated BB urx llx eq {/urx 0 def /llx 0 def} if % llx =only.to.ofi ( ) print.to.ofi lly =only.to.ofi ( ) print.to.ofi urx =only.to.ofi ( ) print.to.ofi ury =only.to.ofi ( ) print.to.ofi (;) =to.ofi } def /printinfoitem { 3 1 roll 2 copy known { get dup type /stringtype ne { =string cvs } if exch print.to.ofi ( ) print.to.ofi =to.ofi }{ pop pop pop } ifelse } def /printfontinfo { (Comment AFM Generated by Ghostscript/pf2afm) =to.ofi currfont /FontName (FontName) printinfoitem % currfont /FontInfo get dup /FullName (FullName) printinfoitem dup /FamilyName (FamilyName) printinfoitem dup /Weight (Weight) printinfoitem dup /Notice (Notice) printinfoitem dup /ItalicAngle (ItalicAngle) printinfoitem dup /isFixedPitch (IsFixedPitch) printinfoitem dup /UnderlinePosition (UnderlinePosition) printinfoitem dup /UnderlineThickness (UnderlineThickness) printinfoitem /version (Version) printinfoitem % (EncodingScheme FontSpecific) =to.ofi % (FontBBox) print.to.ofi currfont /FontBBox get { ( ) print.to.ofi round cvi =only.to.ofi } forall eolch print.to.ofi % currPFMfile () ne { PFMdict dup /PFMCapHeight (CapHeight) printinfoitem dup /PFMXHeight (XHeight) printinfoitem dup /PFMLowerCaseDescent (Descender) printinfoitem /PFMLowerCaseAscent (Ascender) printinfoitem } if } def /readPFBfile { % make a shot of the actual font directory: /oldFontDirectory FontDirectory dup length dict copy def isPFB {% defined in `makeafm' (r) file true /PFBDecode filter cvx % true is better (see gs_type1.ps) mark exch exec }{ (r) file mark exch run } ifelse cleartomark % make a shot of the updated font directory: /newFontDirectory FontDirectory dup length dict copy def % spot the added font: oldFontDirectory {pop newFontDirectory exch undef} forall newFontDirectory length 1 ne { newFontDirectory length = (Weird PFB file?\n) printquit } if newFontDirectory {pop} forall findfont /currfont edef } def /readPFMfile { dup () ne { (r) file /currPFMfile edef 10 dict dup /PFMdict edef begin readPFMheader readPFMExtMetric end }{ pop /currPFMfile () def } ifelse } def % pfmfilename pf[ba]filename filetype printafm - % where filetype=(a) or (b) /printafm { readPFBfile readPFMfile (StartFontMetrics 2.0) =to.ofi printfontinfo printcharmetrics printkernpairs (EndFontMetrics) =to.ofi } def /pfa_pfb_dict << /.pfb /pfbn /.pfB /pfbn /.pFb /pfbn /.pFB /pfbn /.Pfb /pfbn /.PfB /pfbn /.PFb /pfbn /.PFB /pfbn /.pfa /pfan /.pfA /pfan /.pFa /pfan /.pFA /pfan /.Pfa /pfan /.PfA /pfan /.PFa /pfan /.PFA /pfan >> readonly def % Check whether the file name has pfa or pfb extension. /pfa_or_pfb? { % s -> false | /name true dup length 4 lt { pop //false } { dup length 4 sub 4 getinterval //pfa_pfb_dict exch .knownget } ifelse } bind def % pf[ba]filename makeafm - /makeafm { count 0 eq {(Missing font file name\n) printquit} if /ifn edef ifn length 0 eq {(Empty font file name\n) printquit} if % the following piece of the code does, in fact, the job of a system shell, % i.e., it analyses the supplied names, appends extensions if needed, % and check files: /pfbn () def /pfan () def /pfmn () def % initialisation [ t1_glyph_equivalence { pop } forall ] { % disable glyph substitution t1_glyph_equivalence exch undef } forall ifn pfa_or_pfb? { ifn dup length string copy def ifn dup length 4 sub 0 exch getinterval /ifn edef } if pfbn () eq pfan () eq and dup {% no extension was supplied, try ".pfb" /pfbn ifn (.pfb) concatstrings def } if pfbn () ne {% check whether "filename.pfb" exists pfbn status {pop pop pop pop /isPFB true def}{/pfbn () def} ifelse } if pfbn () eq and {% checking "filename.pfb" unsuccessful, try ".pfa" /pfan ifn (.pfa) concatstrings def } if pfan () ne {% check whether "filename.pfa" exists pfan status {pop pop pop pop /isPFB false def}{/pfan () def} ifelse } if pfbn () eq pfan () eq and { (Neither pfa nor pfb found\n) printquit } if /ofn ifn (.afm) concatstrings def ofn status { pop pop pop pop (Resulting file exists\n) printquit } if /ofi ofn (w) file def /pfmn ifn (.pfm) concatstrings def pfmn status { pop pop pop pop }{ () pfmn { (/) search dup not { pop (\\) search } if { 4 -1 roll exch concatstrings exch concatstrings exch }{ exit } ifelse } loop (pfm/) exch concatstrings concatstrings dup status { pop pop pop pop /pfmn edef }{ pop /pfmn () def (pfm file not found -- ignored\n) print } ifelse } ifelse //systemdict /.setsafe known { << /PermitFileReading [ pfmn dup length 0 eq { pop } if isPFB {pfbn}{pfan} ifelse ] /PermitFileWriting [ ] /PermitFileControl [ ] >> setuserparams .locksafe } if pfmn isPFB {pfbn}{pfan} ifelse printafm } def % Check for command line arguments. [ shellarguments { ] dup length 1 eq { 0 get makeafm }{ (This is PF2AFM -- AFM generator \(ver. 1.00\)\n) print (Usage: gs [-dNODISPLAY] -- pf2afm.ps disk_font_name\n) printquit } ifelse } {pop} ifelse